1. 程式人生 > >《分散式服務架構》讀後感

《分散式服務架構》讀後感

最近乘著專案的空檔期,大略的讀了一下《分散式服務架構》一書。這本書首先介紹了分散式微服務與SOA服務的對比。從而衍生出對應的相關微服務相關的知識點。 它主要講的不是技術,而是一種習慣。程式碼,架構,風格以及後期運維的習慣。

其實現在自己寫的專案雖然用到了微服務的很多特點,但是自我感覺和書中的微服務理念有些矛盾。比如現在專案將所有向外部的RPC介面都集中於另一個專案之中,造成後期更新的時候需要兩個專案都做對應調整。

下面總結了一下本書我覺得最有用處的章節,以供自己回憶複習:

1.整個服務搭建的流程集團已經很標準化。Pandora Boot已經是主流的框架。它相當於一個升級版的Spring boot。繼承了Spring的所有優點:例如通過MAVEN的定製化標籤,快速建立spring boot應用等等。 全程沒有XML配置,也不需要程式碼生成。

2.目前公司大部分使用的是HSF服務取代了Dubbo。 原因是HSF在處理註冊中心十萬級別應用比dubbo更有優勢,更輕。還有服務降級,服務熔斷,鏈路跟蹤等優勢。

3.大資料的log日誌管理:現在使用的是Slf4j框架來做日誌管理。它的優勢就是應用程式可以只依賴於Slf4j來實現日誌列印,具體的日誌實現是由配置來決定使用log4j還是logback等。這樣就可以在不改變應用程式碼的前提下切換底層的日誌實現。

Tips:專案在打日誌的時候也會對應用的效能造成影響(因為在某些併發的時候,日誌可能會加鎖)。對於這個解決方式:根據不同的環境:生產環境,日常環境,預發環境來精煉自己的log。比如在像生產環境中比較穩定的環境中就可以適當的去掉一些DEBUG級別的log。第二可以在logback-spring.xml配置使用非同步的appender。as shown below:

4.本書最大的收穫就是給出了很多Java運維時候需要用到的相關命令(inculde linux),還給出了作者相對應的排查過程:下面是我總結的比較有用的一些命令:

Linux 操作:

Linux log 日誌檢視:

1.根據兩個時間點檢視日誌:sed -n '/2017-06-04 14:06:27/,/2017-06-04 14:06:34/p'  test.log (可以檢視時間點之間的日誌)

 

2.輸出最後一次匹配grep條件的資料行的前後各10行:(藉助tail命令取最後幾行)

grep  -n  -C10  'R0619'  caps-biz.txt | tail -n 21 | less(藉助less命令的/pattern可以高亮搜尋詞)

grep  -n  -C10  '條件'  檔名 | tail -n 21 | less(藉助less命令的/pattern可以高亮搜尋詞)

 

2018-11-26 10:37 -2018-11-26 11:04

3.Grep 命令 用法大全

 引數: 

-I :忽略大小寫 
-c :列印匹配的行數 
-l :從多個檔案中查詢包含匹配項 
-v :查詢不包含匹配項的行 
-n:列印包含匹配項的行和行標 

 

4.檢視Java程序,排除eclipse上的程序

ps -ef | grep java | grep -v eclipse

 

5.jmap 對Java記憶體使用情況進行統計:

a.jmap -histo:live processId  

按照佔用空間的大小列印程式中類的列表,從這個列表中可以分析哪些類佔用了比較多的記憶體,再結合程式碼找到問題的所在

b.jmap processId 

按照佔用空間的大小列印程式中載入的動態連結庫的列表。

c.jmap -heap processId

檢視堆的概要資訊

 

都不能解決的時候,最終方案:匯出Java堆的快照,然後通JMAAT等工具詳細分析。

jmap -dump:format=b,file=./heap.hprof processId

 

 

6.如果想用在阿里生產機器上使用java命令,需要cd /opt/java 然後找到對應的bin 就可以使用java語句了。(./java -version)

 

7.jstat 是JDK自帶的監控工具,在JDK的根目錄裡可以找到。使用示範:(可以看到JVM內部更個區域的使用佔比和GC消耗的時間):S0,S1,E,O,M 

jstat -gcutil processId 5000 10

 

8.jstack processId:

jstack 命令用於列印給定的Java程序ID的執行緒堆疊快照資訊,從而可以看到java程序內執行緒的執行狀態,正在執行的任務等,可以據此分析執行緒等待,死鎖等問題

 

9.uptime:檢視機器的啟動時間,登陸使用者數,平均負載情況。可以用於線上應急或者技術公關中確定作業系統重啟的時間。平均負載數量是CPU核心中執行的平均數。通常情況一個CPU的程序數量不超過3個的話就說明服務比較健康。

 

10.使用curl可以在Restful的測試中起到作用。

 

11.pidstat -urd -p processID

用於監控全部或指定的程序佔用系統資源的情況,包括CPU,記憶體,磁碟I/O,執行緒切換,執行緒數等資料。

 

12.pmap -d 2862

此命令用來顯示比較底層的程序模組佔用記憶體的資訊,並且可以列印記憶體的起止地址等,用於定位深層次JVM或者作業系統的記憶體問題

 

13.netstat -nap | grep processID

根據程序ID查詢程序開啟的埠。

 

14.netstat -nap |grep 埠

根據埠查詢程序