一,工作上的事情#
在這裡補充一下昨天提到的李清晨先生的文章。他的文字簡單但是充滿力量,讓人讀了之後會有一種明知前路黑暗也要奮勇向前的勇氣,推薦給大家。
今天其實學習了一點網路協議相關的知識,本來的部落格的名字想叫:泥瓦匠學網路 ——ifconfig 到底是個啥?但是,因為今天在工作中碰到對於我這種菜鳥來說非常無解並且非常扯淡的問題,所以就改為了工作日誌 ——Apollo 配置中心為啥時靈時不靈。
我是一名 Java 開發,在公司裡目前負責了一個定時任務的專案,專案中用到了 Java 中的延遲佇列執行緒池ScheduledThreadPoolExecutor
來實現任務的調度 (可能會有大佬告訴我說,有那麼多現成的框架,你為啥用這個?) 好吧,其實我知道,但是沒辦法我只會這個😂。下面簡單列一下他的方法:
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit);
上面這個就是他的方法,可能會有小夥伴看不懂,不過沒關係。我現在要把括號裡的第二個參數取出來,做成一個可以隨時改的數字。所以就用到了 Apollo 這個配置中心,這個配置中心顧名思義就是可以把專案中常用的並且可能隨時變動的參數放在 Apollo 上,當我們的專案在伺服器運行的時候可以隨時的修改這些參數而不用去頻繁的啟停專案。
我按照公司提供的對接文件以及官方文件成功的接入了 Apollo,也成功的讀取到了配置。下面問題就來了:
我將所有的配置都發布完畢之後,專案啟動可以正常讀取到配置中心的所有配置,也能正常運行並且執行任務。我 **第一次** 嘗試將配置中心的某些參數修改然後再次發布的,專案也能實時的獲取到修改後的值。此時我只測試了一次,也就是只修改了配置中心一次,參數不限,可以是兩也可以是三,這時候專案是正常的。
但是,當我再一次進行修改配置的時候,日誌顯示 Apollo 已經獲取到了修改之後的值,但是專案中所獲取的參數值還是原來的。比如:time 的初始值是 10s,我第一次修改為了 15s,此時專案正常運行,但是當我第二次修改為 10s 的時候,專案獲取到的值還是 15s,再次進行修改,這個值還是 15s。也就是說,我只能修改一次配置。很奇怪
我在本地程式碼中添加了一個監聽,相當於監視器,用來監視遠程配置中心的變化,此時獲取到的值是正確的,也就是說,我每次修改配置監視器都獲取到了最新的值。但是傳遞到專案中的變數上時又變回了舊值。我今天沒有跟 debug 一步步的調試,明天準備嘗試一下。此外,我還檢查了本地的 Apollo 配置的快取檔案,裡面的值也是新的。這就讓我僅有的一點耐心徹底喪失。自我批評一下。
這個問題我估計做 Java 開發的小夥伴可能會比我想到更多的排查方法,如果你們遇到類似的問題或者說有思路歡迎給我留言,幫助我解決這個問題。
二,ifconfig 到底是個啥?#
看到這個題目估計很多人都會笑話我,這玩意你都不知道你還幹什麼開發啊?
說真的,對於 ifconfig
這個命令我只知道是查看電腦 IP 地址的,至少截止到今天之前是這樣的。
ifconfig
是一個在 Linux/Unix 系統中用於配置與控制網路介面的命令行工具。它允許我們啟用 / 禁用網路介面,配置 IP 地址、子網遮罩、廣播地址等
在今天之前,我只用來查看 IP 地址,其餘的四個功能從來沒有用過。
簡單記錄一下
我們常說的網路介面通常是以 eth0,eth1 等命名的網卡介面,常用的選項有:
- up/down: 啟用 / 禁用網路介面。例如
ifconfig eth0 up
。 - ip: 配置介面的 IP 地址。例如
ifconfig eth0 192.168.1.10
- netmask: 配置子網遮罩。例如
ifconfig eth0 netmask 255.255.255.0
。 - broadcast: 設置廣播地址。例如
ifconfig eth0 broadcast 192.168.1.255
。 - mtu: 設置 MTU 值,最大傳輸單元。例如
ifconfig eth0 mtu 1500
。
上面涉及到了很多名詞的縮寫,我也查了一下它們的含義
-
eth0,eth1:eth0,eth1 是 Linux 系統中網卡介面的命名方式。eth 是 Ethernet 的縮寫,0,1 是介面編號。所以 eth0 和 eth1 均代表一塊以太網網卡,只是編號不同以作區分。
-
IP :(Internet Protocol)翻譯過來就是互聯網協議,它就是用來描述在互聯網上的數據應該按照什麼規則傳輸。IP 地址則是用來定位設備在網路中的位置,讓數據包可以正確的發送到目標設備上。
-
IP 協議中定義了兩種類型的地址:
-
IPv4:32 位地址,通常寫成 4 個 0 到 255 之間的數字,以點分隔,例如 192.168.1.1。
-
IPv6:128 位地址,通常寫成 8 組 16 進制數字,以冒號分隔,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。
-
-
netmask:子網遮罩。是用來與 IP 地址配合用以劃分 IP 地址中的網路位置和主機位置的。是由 32 位的四段數字組成,與 IP 地址一起用於確定主機是否在同一網路中。子網遮罩通過將 IP 地址進行與運算,可以提取出網路地址。例如 (網上找的栗子🌰):
1.IP 地址:192.168.1.1
2. 子網遮罩:255.255.255.0192.168.1.1 與 255.255.255.0 進行與運算:
192.168.1.1
255.255.255.0
---------------------
192.168.1.0從運算結果可以看出,這兩個地址的網路地址部分相同,都是 192.168.1.0。所以 192.168.1.1 和子網遮罩 255.255.255.0 在同一個子網中。
-
broadcast:(Broadcast Address)廣播地址,是網路中所有主機都可以接收到的數據報文的目標地址。它允許發送端將信息一次性發送給網路中的所有主機。我在網上查了資料,這個廣播地址是怎麼算出來的,還沒有看明白。暫時不寫了。他的作用是:
-
允許網路中的所有主機接收同一數據報文,實現廣播通訊。
-
用於 ARP 協議,將 IP 地址解析為 MAC 地址。當一台主機要發送 ARP 請求時,會將請求的目標地址設為廣播地址,這樣網路中所有機器都可以接收到該 ARP 請求。
- ARP 協議:ARP (Address Resolution Protocol) 即地址解析協議。它的作用是將 IP 地址解析為 MAC 地址,用於網路通訊。
- MAC 地址:(Media Access Control Address) 是一個網卡的物理地址,就相當於我們人類的身份證。
- ARP 協議:ARP (Address Resolution Protocol) 即地址解析協議。它的作用是將 IP 地址解析為 MAC 地址,用於網路通訊。
-
DHCP 協議使用廣播地址向所有客戶端分配 IP 地址等網路參數。
-
可以用於網路的診斷與故障排除。通過發送 ICMP 廣播 Ping 報文,檢查子網中的所有主機。
-
-
mtu:(Maximum Transmission Unit) 最大傳輸單元,它指定了網路介面可以接受的最大資料包大小 (以位元組為單位)。
-
MTU 的值取決於介面類型和網路 medium, 常見的值有:
- 以太網介面常用 1500 位元組。
- DSL 網路介面常用 1492 位元組。
- PPP 鏈路常用 1472 位元組。
- IPSEC VPN 通道 MTU 常用 1436 位元組。
關於 MTU 還有一個知識:無論資料的接收方的 MTU 有多大,發送方都不能發出超出自己 MTU 的資料包。也就是說發送資料包的大小時有 MTU 較小的一方決定的。
- 以太網介面常用 1500 位元組。
-
上述內容是我昨天和今天學習到的對於我來說的新知識,記錄一下。
三,關於最近的新聞#
我這兩天看了很多新聞也好像沒看什麼新聞。我想深入了解的看不到,只有冷冰冰的藍底白字的通告。我不想深入了解的隨便造,打不打開手機都在哪兒到處飄。
今天湖人輸球了,竟然沒有打過缺兵少將的灰熊,有朋友說這是菠菜和聯盟的套路,就是要多打幾場要不怎麼賺錢呢?
我不這麼認為,從今天的整場比賽看,湖人輸在三方面,第一沒有對上灰熊的強度,內心的輕敵讓自己散漫鬆懈,第二,哈姆教練的臨場應變能力確實值得商榷,第一場用范德彪對莫蘭特起到了效果,但是第二場沒有莫蘭特再用范德彪就暴露范德彪攻擊能力不足,身材瘦弱的缺點,被迪爾曼和小傑倫傑克遜追著打,第三,濃眉也不知道是咋回事,這麼低迷。
今天話真是多。