當前位置:
首頁 > 知識 > 談架構師的基本素養和乾貨日誌處理

談架構師的基本素養和乾貨日誌處理

最近收到很多朋友的反饋和私信,談如何成長為一個架構師的問題。在這之前我很少有時間去考慮這個問題,因為我總有做不完的事兒:看不完的書,解決不完的問題,干不完的活兒…… 不是我幹活兒慢,實際情況恰恰相反。但是我總是能給自己找很多的事情。我的桌面上有好幾個txt,裡面記錄著各個方面要做的事情,看書過程中發現的問題等等。去年有一段時間很閑,我每天干著公司里的活兒,自己創著業,一天還要寫一兩篇專利,還是感覺很閑。其實就是想的少,做的不夠細。而一個人能給自己找到多少要做的事情才是一個人真正的潛力。下面談一談對架構師基本素養的個人理解:

素養一:知識面

知識面寬不一定是需要做的有多好,可以僅僅是愛好。醫學,心理學,生物,畫畫,外語等等。看過我前面博文的朋友可能還會記得我文章里有自己隨手的塗鴉,還有不著調的舞蹈和唱歌視頻,歌詞都是自己編的。博客頁首的橫幅是我本人的PS作品,裡面那個女孩子是P的自己[擦汗]。網頁三劍客我是用的很熟的。被大家吐槽的醜醜的博客頁面也是自己的前端作品[再次擦汗]。知識面決定一名架構師的能力和靈感。一名成功的架構師對知識儲備要廣。特別是對自己專註領域的最新技術和成熟技術方案要了如指掌。需要對相關領域的最新技術保持敏感。

發現很多名副其實的架構師都有我說的特質。里作者花了一頁的篇幅說書友吐槽說此書篇幅太大,而作者很努力的在壓縮篇幅了,還是有1k多頁。然後緊接著下面有近一頁介紹了自己的封面設計[汗]。感謝部分倒是每本書都有,但是這個作者連咖啡和貓都要感謝一下[汗]。

素養二:靠譜

這半年來,經常有來這邊挖人的。有之前的領導,之前幫過我的人,只要我說過有合適的我就推薦給他的人, 都真的收到了我給的推薦簡歷。雖然距離之前領導來挖人已經過去半年了。但是,只要我答應過的我都記得。所以值此樂視風口浪尖之際,我很少敢在圈子裡說話,不然……,你懂的[汗]。 之前做私活兒,請朋友幫忙調過一個前端bug。這裡我要由衷的感謝一下上帝,給了我一群靠譜的朋友。後來我拿到了項目款,先給朋友發了個百元大紅包。朋友說感謝紅包但是以後別再給了,又不是啥大事兒。但是我覺得做人要厚道,決不能肥了自己虧了別人。

素養三:廣交朋友

我的技術在朋友圈裡是個小嘍啰。幾個月前給了兩萬塊錢給一個朋友讓他幫我炒股。簽的半年合同,現在怎麼樣了我也沒問。用人不疑,疑人不用。這個朋友我是怎麼認識的呢?我之前就見過他一面,去58面試,他是面試官。我認識一個大牛是58的一個部門領導。之前是同事,我什麼水平其實都清楚。所以面試的時候,面試官說咱們隨便嘮嘮,然後真的是基本啥都沒問,就是嘮嗑,主要是聽他講技術和他的經歷。然後他讓我先等一下,找了另一個上級說我啥都會,然後回來繼續嘮嗑。然後我留了他的QQ,沒事交流一下技術。多和技術牛人聊天能夠拓展思維,還能了解技術前沿。還有,這些技術牛人基本不會叫我姐[汗],聽到誰叫我姐,我基本上就不想再說話了[擦汗]。我家小鮮肉深譪其道,有次下幼兒園對奶奶說:「奶奶,麻麻是女神。」 奶奶沒明白,就說:「啥,女神?你媽還女總統,女皇帝呢!」[狂汗],什麼叫18個代溝!

素養四:不斷學習

我們大領導,大部門總架構師。我們大領導手下的領導都已經不編碼了。但是我們領導自己手頭還有一個自己開發維護的項目。有次有個同事有問題和那個項目有關,要找那個項目的開發。聽說是我們大領導大吃一驚,另一個人回答說:「大領導對編碼有特殊的情節。」 大領導精通php,python,perl,熟悉C。前段時間來找我讓我給幾個php同事講java。我以為大領導只是個組織者。後來才發現,大領導自己有很強烈的學java的願望,不服不行。

素養五:堅持

來樂視之後遇到很多之前人人網的同事,跟他們打招呼,好久他們才反應過來。因為在人人網的時候,我家寶寶還小,為了寶寶的營養,我把自己喂到170多斤。一頓飯,吃幾個菜,飯後再來一隻烤鴨。好幾年都很胖,坐地鐵不用排隊,公共交通都有好心人給讓座[捂臉][崩潰]。樓下大媽看到我家娃都那麼大了,我還那麼胖,就喳喳嘴說:回不來嘍。所以我可以理解原同事們認不出現在90多斤的我。兩年多基本沒吃過晚飯。記得那時候有次下班車回家,路上是各種小吃,聞到那香味都想哭,還是堅持下來了。在我減肥成功後,身邊的女孩子都變得很瘦了。就像之前在東軟,我用一年過了日語一級之後,和我走的近的女孩子們都在之後很短的時間過了二級。堅持是很容易感染人的。

堅持對工作的作用,一件小事可以體現:我每個工作日晚上9點多回家。不管是周五,還是放假前最後一天,天天這個點。剛開始的時候,小鮮肉不習慣,我就跟她說媽媽回來的晚,但是每天會給你帶一個玩具,第二天早晨你起床就看到了。第一個星期每天他都有玩具很開心,我11點多到家,他睡得很香。到第二個星期,我跟他說:媽媽剛在網上買的,明天能到。於是第二個星期,隔一天他得到一個玩具,我11點多到家,他睡得很香。過了幾個星期,放三天假,他發現了我藏起來的很多新買的玩具。我說那你現在都拆了這些玩具,下星期就不能管我要玩具了。結果,他真的沒要,而且以後都忘記了玩具這回事兒。而我每天固定的點下班,工作日天天如此。

素養六:專業

咱們常用的中文分詞器有:IK分詞器,中科院分詞器,庖丁分詞器。我覺得這個庖丁分詞器名字起得特別好,庖丁分詞器全名叫「庖丁解牛」,形象的說明了此分詞器的作用。而庖丁是個名詞,一看作者就是很懂面向對象的。統一建模語言畫圖的時候,類用一個方框表示,體現的是其封裝性,類型在最上面,中間是數據成員,下面是方法,很好的展現了類的結構和本質。之前有個同事,他學物理出身。當時也是剛轉程序員哈,寫代碼的類名和方法名都起得很長。類是一個對象,這個對象的分類,顯然是一個事物,怎麼可能有那麼長的名字。方法名裡面包含了那麼多and,很明顯的違背了面向對象的單一職責原則。他寫的類基本不用介面,顯然是還不知道隱藏實現是幹什麼用的,也更沒想到里氏替換了。活兒,好像是人人都能幹,素養,細節處還是可能看出來的。

下面是一如既往的乾貨時間,今天來聊聊日誌處理。

JAVA的日誌大家基本都在用slf4j。SLF4j(Simple Logging Facade for Java)是一個通用的日誌框架。裡面只定義了介面,是門面模式的典型代表。提起門面模式又想起來一個典型代表:spring mvc里的上下文,不管用的具體實現是哪一個,都走統一的介面:ApplicationContext。實現門面模式的技術叫動態綁定,是Java多態的一個體現。

slf4j剛開始使用的時候遇到了很多問題,因為大家都在使用自己的日誌系統和通用介面。比如:common-logging(jakarta common logging 簡稱jcl)是apache提供的一個通用的日誌介面。用戶可以自由選擇第三方日誌組件作為具體實現。具體實現比較常用的有java.util.logging,log4j,logback。由於logback在性能上的改進。所以實現上大家普遍選用logback。但是像java基本類庫和apache一些類庫里本來已經使用了其他的,這時候就需要用到橋接模式。slf4j用於橋接的jar包郵log4j-over-slf4j.jar(橋接log4j),jcl-over-slf4j.jar(橋接common-logging),jul-to-slf4j.jar(橋接java.util.logging)。工作原理就是包含了大部分使用的類的代替類,重新把所有的工作指向相關的slf4j類。其實每一種橋接都對應了一種驅動,將slf4j強制交給某個實現來執行的,對應一種實現的橋接和驅動不能同時存在,否則,想想都知道,根本啟動不了。logback的驅動類是logback-classic.jar。下面借用之前給組內人員做技術分享時的一頁PPT:

談架構師的基本素養和乾貨日誌處理

一般做業務,開發的時候sql錯誤是大家很關心的。使用經典的springmvc+servlet容器+ibatis架構,SQL的輸出需要額外的包裝。比如號稱是最好用的資料庫連接池的druid或者直接將資料庫驅動改用log4jdbc。用法自行百度,本姑娘只講原理。

SLF4j的優勢在於上面介紹的與客戶端解耦和採用佔位符減少字元串拼接節省內存。原理就是slf4j中提供了ILogger和ILoggerFactory介面。其實現Logger類用來列印日誌,LoggerFactory類用來獲取Logger。而類實例是通過StaticLoggerBinder類來定義。這個類是實現slf4j的驅動自行定義的統一入口。SLF4j沒有實現StaticLoggerBinder,只是負責使用類載入機制載入它。

談架構師的基本素養和乾貨日誌處理

雖然主流的日誌實現都是採用這種方式實現的。但是slf4j還提供了SPI的介面支持。因為沒有主流對應的實現,介紹SPI還是用我所擅長的搜索引擎來講。先介紹概念:

SPI(Service Provider Interface):這是jdk1.5的一個內置標準,允許不同的開發者去實現某個特定的服務,是一種服務提供發現機制。實現時需要聲明一個service provider,它在jar包的META-INF目錄下創建一個service子目錄,並且為每一個service provider提供一個以service全名命名的文件。下面是lucene源碼中的截圖。大家要是對SPI感興趣,可以研究一下java.util.ServiceLoader的源碼。類載入機制的原因,service provider的聲明和實現類必須要在一個jar包里,來保證安全。lucene的自己的測試框架中必須要聲明其編解碼器,就是用的SPI。

談架構師的基本素養和乾貨日誌處理

我們現在用的Dubbo框架也是基於SPI機制提供擴展功能。可以支持不同的傳輸協議。

下面來談談我們業務中對日誌處理的運用。每個項目都有自己的業務日誌。那麼我們部門總架構師,我家微微一笑很傾城的男神老大想要查看自己下面的子業務的健康狀況怎麼辦呢?

一般來說每個公司都會基本的監控,最常用的三大開源運維監控工具zabbix,nagios和open-falcon。在之前的公司,運維用的是nagios。來樂視之後,剛開始用的是zabbix,後來換成了falcon。但是這些都是基於腳本的,只能進行一些基礎監控。這類監控屬於故障快速發現類。美團點評研發了一款分布式實時監控系統叫CAT(Central Application Tracking), 是基於純Java開發的分布式實時監控系統。可以基於日誌埋點做更細粒度的監控。它屬於系統問題分析類。

大公司的架構除了平時的業務架構,技術架構,軟體架構之外,還有一塊是團隊能力建設。打造團隊核心競爭力。考慮這方面,設計構建自己的中間件就極為重要。這一塊,在我們部門,除了我在做的搜索引擎中間件,還有阿里來的陽哥設計了一款異常統一處理平台。這個就是用spring mvc創建一個java bean。這個bean攔截了所有error級別的日誌,將它非同步發送的統一的redis集群。有統一的日誌服務端再進行更詳細的處理:包含給相關人員發報警郵件,有統一的日誌分析平台,便於對各個模塊的性能,代碼質量做量化。logback本身也是可以發送報警郵件的。但是這個有性能問題,報警郵件過於頻繁會影響正常服務的。

下面說一下CAT。我們目前線上也在用這個東西。CAT的一個重點是埋點,它決定了實際上能做的事情。

  • Transaction埋點,主要記錄一些跨項目,跨模塊一些調用。最主要有遠程服務,資料庫以及緩存。

  • Event埋點,主要記錄事件以及異常。最常見的場景就是當埋Transaction時候,需要event作為補充,比如記錄當時訪問參數,特殊詭異路徑的分析,還有異常信息記錄。

  • Metric埋點,主要用於記錄一些實際的業務指標,用於運維監控。Metric本身就是一個針對周期性時間序列的實時的Metric監控系統。

  • Heartbeat埋點,表示程序內定期產生的統計信息,如CPU百分比,內存百分比,連接池狀態,系統負載等。

  • Trace埋點用於記錄基本的trace信息,類似於log4j的info信息,這些信息僅用於查看一些相關信息。

CAT監控系統將每次URL,Service的請求內部執行情況都封裝為一個完整的消息樹,消息樹可能包括Transaction,Event,Heartbeat,Metric和Trace信息。


學習Java的同學注意了!!!

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java團長 的精彩文章:

Java編程之反射中的註解詳解
Java內存模型與線程安全
Java中線程總結
全面掌握Java內部類

TAG:Java團長 |

您可能感興趣

通向架構師的道路(第二十六天)漫談架構與設計文檔的寫作技巧
架構只能用在後端嗎?談談架構在APP和前端里的應用和演進
架構師之路:mikechen詳談架構師成長之3大步驟
以「前浪微博」場景為例,談談架構設計流程四步曲