2018技術大揭底—讓你認知自己技術上的缺陷

一、分佈式架構體系
分佈式怎麼來的。傳統的電信、銀行業,當業務量大了之後,普通服務器CPU/IO/網絡到了100%,請求太慢怎麼辦?最直接的做法,升級硬件,反正也不缺錢,IBM小型機,大型機,採購了堆硬件。

但是互聯網不能這麼幹,互聯網沒有那麼財大氣粗,還有很多初創,能不能賺錢還不知道。所以就有了軟件方面的解決方案:分佈式系統,簡單說,就是一臺服務器不行,我用兩臺、10臺、100臺…這就要軟件系統需要支持。

那麼多臺機器,我如何讓他們協同工作,這就需要一個調度中心(或註冊中心);肯定涉及到機器間通信,那麼需要一個高效的RPC框架;一個請求過來了,如何分發,需要一個請求分發系統(負載均衡);然後還要考慮每個角色都不能成爲性能瓶頸;還有要能方便的進行橫向擴展,還有考慮單節點故障。

需要分佈式系統,併發量肯定不低,

那麼有了上面的還是不夠的,還需要考慮cache、mq、job、db等方面的問題。cache,現在第三方緩存也比較成熟,redis/memcache等;mq,rabbitmq,kafka等等也不錯;job,現在第三方任務框架有elasticjob和tbschedule,或者你用quartz也支持分佈式環境下的任務,不過quartz就沒有運維工具了。DB,數據庫最好在項目前期就考慮好業務拆分,系統拆分後DB對應的垂直拆分,後期可做讀寫分離,一主多從,甚至多主多從,業界也有了相應的解決方案。

總結一下,首先要了解分佈式原理,然後對應着每個功能區找業界內成熟的產品來實時。互聯網行業,基本都有開源的產品供你選擇。

下圖是總結的分佈式的技術攻克點:
這裏寫圖片描述
Java開發技術大揭底——讓你認知自己技術上的缺陷,成爲架構師

二、微服務架構
微服務(Microservice)這個概念是2012年出現的,作爲加快Web和移動應用程序開發進程的一種方法,2014年開始受到各方的關注,而2015年,可以說是微服務的元年;

越來越多的論壇、社區、blog以及互聯網行業巨頭開始對微服務進行討論、實踐,可以說這樣更近一步推動了微服務的發展和創新。

微服務架構(Microservice Architecture)是一種架構概念,旨在通過將功能分解到各個離散的服務中以實現對解決方案的解耦。你可以將其看作是在架構層次而非獲取服務的

類上應用很多SOLID原則。微服務架構是個很有趣的概念,它的主要作用是將功能分解到離散的各個服務當中,從而降低系統的耦合性,並提供更加靈活的服務支持。

概念:把一個大型的單個應用程序和服務拆分爲數個甚至數十個的支持微服務,它可擴展單個組件而不是整個的應用程序堆棧,從而滿足服務等級協議。

定義:圍繞業務領域組件來創建應用,這些應用可獨立地進行開發、管理和迭代。在分散的組件中使用雲架構和平臺式部署、管理和服務功能,使產品交付變得更加簡單。

本質:用一些功能比較明確、業務比較精練的服務去解決更大、更實際的問題。

下圖是總結的微服務的技術要點:
這裏寫圖片描述
Java開發技術大揭底——讓你認知自己技術上的缺陷,成爲架構師

三、閱讀源碼、分析源碼
程序員每天都和代碼打交道。經過數年的基礎教育和職業培訓,大部分程序員都會「寫」代碼,或者至少會抄代碼和改代碼。但是,會讀代碼的並不在多數,會讀代碼又真正讀懂一些大項目的源碼的,少之又少。這種怪狀,真要追究起來,怪不得程序員這個羣體本身 —— 它是兩個原因造成的。

我們所有的教育和培訓都在強調怎麼寫代碼,並沒有教大家如何讀代碼

大多數工作場景都是一個蘿蔔一個坑,我們只需要瞭解一個系統的局部便能開展工作,讀不相干的代碼,似乎沒用

我常常把寫代碼和寫作進行類比 —— 二者有很多相通之處;但從培養寫代碼和寫作的過程來看,二者又有很多不同。我們的寫作能力,是建立在大量基礎閱讀的基礎上的,是除了學習語法和文法知識外,從小學開始,經年累月,通過閱讀各種不同層次的名家的作品,再加上各種各樣的寫作訓練,累積出來的;而我們的寫代碼的能力,在瞭解和掌握了語法/文法之後(學習和抄寫 example 代碼也算語法/文法學習的一部分),跳過了大量閱讀名家作品的過程,直接 biu 地一下就自動養成了:學會基礎的語法和試驗了若干 example 後,我們就火箭般躥到了自己寫代碼打怪贊經驗的階段。這樣略過大量閱讀代碼的階段有三個害處:

寫代碼的基礎是不牢靠的,打怪升級的過程也是最慢的。道理很簡單 —— 前輩們踩過的坑,總結的經驗教訓,你都不得不親自用最慢的法子一點點試着踩一遍。

很容易養成 stackoverflow driven 的寫代碼習慣 —— 遇到不知如何寫的代碼,從網上找現成的答案,找個高票的複製粘貼改吧改吧,湊活着完成功能再說。寫代碼的過程中遇到問題,開啓調試模式,要麼設置無數斷點一步步跟蹤,要麼到處打印信息試圖爲滿是窟窿的代碼打上補丁,導致整個寫代碼的過程是一部調代碼的血淚史。

你周圍最強的那個工程師的開發水平的上限就是你的上限。

下圖是作爲程序員最需要了解的源碼體系:
在這裏插入圖片描述

四、工具的使用
工欲善其事必先利其器,工具對Java程序員的重要性不言而喻現在有很多庫、實用工具和程序任Java開發人員選擇。下圖列出的工具都是程序員必不可少的工具
在這裏插入圖片描述
五、性能優化
性能優化,簡而言之,就是在不影響系統運行正確性的前提下,使之運行地更快,完成特定功能所需的時間更短。性能問題永遠是永恆的主題之一,而優化則更需要技巧。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章