架構師之路--談架構師的基本素養和[乾貨]日誌處理

  因爲前兩篇文章的關係,最近收到不少朋友的反饋和私信,談如何成長爲一個架構師的問題。在這以前我不多有時間去考慮這個問題,由於我總有作不完的事兒:看不完的書,解決不完的問題,幹不完的活兒……  不是我幹活兒慢,實際狀況偏偏相反。可是我老是能給本身找不少的事情。個人桌面上有好幾個txt,裏面記錄着各個方面要作的事情,看書過程當中發現的問題等等。去年有一段時間很閒,我天天干着公司裏的活兒,本身創着業,一天還要寫一兩篇專利,仍是感受很閒。其實就是想的少,作的不夠細。而一我的能給本身找到多少要作的事情纔是一我的真正的潛力。下面談一談對架構師基本素養的我的理解:php

素養一:知識面html

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

  發現不少名副其實的架構師都有我說的特質。<Thinking In java>裏做者花了一頁的篇幅說書友吐槽說此書篇幅太大,而做者很努力的在壓縮篇幅了,仍是有1k多頁。而後緊接着下面有近一頁介紹了本身的封面設計[汗]。感謝部分卻是每本書都有,可是這個做者連咖啡和貓都要感謝一下[汗]。java

素養二:靠譜python

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

素養三:廣交朋友程序員

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

素養四:不斷學習redis

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

素養五:堅持

  來樂視以後遇到不少以前人人網的同事,跟他們打招呼,很久他們才反應過來。由於在人人網的時候,我家寶寶還小,爲了寶寶的養分,我把本身喂到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。換成falcon的緣由,運維組男神是這麼回覆的:「是由於zabbix的性能瓶頸問題,falcon可橫向擴展,可支持上萬臺服務器的監控,目前公司的服務器早已經超出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信息。

  昨晚跟一個美團點評的哥哥聊天,瞭解到美團喜歡用數聽說話,這個CAT的數據是這樣的:號稱單臺機器QPS 15w。而後:咱們沒有那麼大併發,因此沒試過是否是真的[擦汗]

差點忘了大事:問問你們最近有想動一動的麼?在北京的童鞋有想去阿里,螞蟻金服,美團點評,美團金融,貓眼電影,京東,樂視網咱們部門也在招人,還有東直門的創業公司,燕郊的創業公司。總之,均可以找我,簡歷發我郵箱 xiexiaojing@le.com。

 

歡迎你們多留言,說出本身的建議或者關心的內容。我儘可能每條都回。這些都是督促我思考的寶貴資源~~謝謝你們的閱讀,固然更感謝默默推薦的朋友😊

=============================== 華麗的終止符 ================================

相關文章
相關標籤/搜索