程序员进阶架构师路线
作者簡(jiǎn)介:曾任職于阿里巴巴,每日優(yōu)鮮等互聯(lián)網(wǎng)公司,任技術(shù)總監(jiān),15年電商互聯(lián)網(wǎng)經(jīng)歷。
下面是作者根據(jù)自己15年的互聯(lián)網(wǎng)電商經(jīng)驗(yàn)總結(jié)的,Java程序員進(jìn)階架構(gòu)師的路線圖,希望對(duì)初入職場(chǎng)的同學(xué)和對(duì)自己技術(shù)發(fā)展路線不太明確的同學(xué)有所幫助!
Java程序員進(jìn)階架構(gòu)師學(xué)習(xí)路線圖(雙擊查看清晰大圖):
詳細(xì)介紹如下:
JVM
基本參數(shù)調(diào)優(yōu)(Xmx,Xms,Xss,-XX:NewRatio,-XX:SurvivorRatio等)
GC收集器選擇(根據(jù)系統(tǒng)特點(diǎn),比如是吞吐量?jī)?yōu)先還是響應(yīng)時(shí)間優(yōu)先,老年代和新生代選擇什么收集器,選擇Serial,Parallel,CMS還是G1等)
常見JVM問題(OOM,內(nèi)存泄漏,頻繁Full GC,線程阻塞等)
關(guān)鍵命令應(yīng)用(Jmap,Jstack,Jstat,jps,jinfo等)
內(nèi)存模型
Java基礎(chǔ)
集合類
鎖(自旋鎖,可重入鎖,偏向鎖,樂觀鎖,悲觀鎖等等概念的理解)
并發(fā)編程
并發(fā)包(java.util.concurrent)
原子包?java.util.concurrent.atomic
? ? 4. 設(shè)計(jì)模式
數(shù)據(jù)遷移?
數(shù)據(jù)結(jié)構(gòu)不變(加從庫)
數(shù)據(jù)結(jié)構(gòu)改變(雙寫雙讀)
????詳見作者原創(chuàng)文章《服務(wù)化帶來的問題---之?dāng)?shù)據(jù)遷移經(jīng)歷》
數(shù)據(jù)一致性
強(qiáng)一致(XA,兩階段提交)
最終一致,補(bǔ)償機(jī)制(Tcc,Saga,Seata,事務(wù)型消息等,詳見作者原創(chuàng)文章《服務(wù)化帶來的數(shù)據(jù)一致問題---分布式事務(wù),事務(wù)型消息》)
冪等性(一個(gè)操作訪問多次,結(jié)果都一樣。比如支付接口要保證冪等,由于網(wǎng)絡(luò)等原因接口重試后,不能多次扣款)
服務(wù)網(wǎng)關(guān)(Zuul,Gateway等)
流控,限流(整體限流,避免突發(fā)流量給系統(tǒng)帶來過大壓力;對(duì)用戶限流,防腳本、機(jī)器人刷單)
熔斷(下游服務(wù)出問題,上游服務(wù)不再繼續(xù)發(fā)送請(qǐng)求到下游服務(wù),直接快速返回默認(rèn)數(shù)據(jù),避免線程長(zhǎng)時(shí)間阻塞造成線程池線程耗盡;下游服務(wù)壓力得到緩解,恢復(fù)幾率也會(huì)變大)
鑒權(quán)(比如token驗(yàn)證,可以在網(wǎng)關(guān)層處理)
路由(根據(jù)請(qǐng)求路徑等信息,將請(qǐng)求路由到相應(yīng)的服務(wù)上)
黑白名單
接口聚合(將同一個(gè)頁面多個(gè)接口的返回結(jié)果聚合成一個(gè)返回給前端,減少網(wǎng)絡(luò)訪問頻次)
服務(wù)治理
服務(wù)發(fā)現(xiàn)(在服務(wù)節(jié)點(diǎn)上下線過程中,自動(dòng)發(fā)現(xiàn)服務(wù)節(jié)點(diǎn),無需人工介入)
負(fù)載均衡
限流(網(wǎng)關(guān)層整體限流,避免突發(fā)流量給系統(tǒng)帶來過大壓力;對(duì)用戶限流,防腳本、機(jī)器人刷單)
熔斷(開源熔斷組件hystrix、resilience4j等。下游服務(wù)出問題,上游服務(wù)不再繼續(xù)發(fā)送請(qǐng)求到下游服務(wù),直接快速返回默認(rèn)數(shù)據(jù),避免線程長(zhǎng)時(shí)間阻塞造成線程池線程耗盡;下游服務(wù)壓力得到緩解,恢復(fù)幾率也會(huì)變大)
資源隔離(分組部署,jvm內(nèi)部線程隔離)
配置中心(配置和代碼分離,靈活支持生產(chǎn),測(cè)試和開發(fā)環(huán)境;提高安全性,提高修改配置效率)
服務(wù)降級(jí)(除了,限流、熔斷等;還可以對(duì)部分性能差的接口和功能設(shè)置開關(guān),比如我們會(huì)在大促期間關(guān)閉物流查詢接口,來保證系統(tǒng)性能;降級(jí)方案內(nèi)容太多了,這里不做過多描述)
應(yīng)用緩存
緩存分類
本地緩存(應(yīng)用內(nèi)部的緩存,比如guava cache等,特點(diǎn):本地內(nèi)存直接讀取,速度快;存儲(chǔ)量小,適合少量且相對(duì)穩(wěn)定的數(shù)據(jù);分布式多節(jié)點(diǎn)部署,可能會(huì)出現(xiàn)多個(gè)節(jié)點(diǎn)本地緩存數(shù)據(jù)不一致的情況)
緩存中間件(如Redis等,單獨(dú)部署的中間件,存儲(chǔ)量大;遇到瓶頸時(shí)可以做集群分片)
????2. 常見問題
緩存穿透(對(duì)于數(shù)據(jù)庫中根本不存在的值,請(qǐng)求緩存時(shí)要在緩存記錄一個(gè)空值,避免每次請(qǐng)求都打到數(shù)據(jù)庫)
緩存熱點(diǎn)(有些熱點(diǎn)數(shù)據(jù)訪問量會(huì)特別大,單個(gè)緩存中間件節(jié)點(diǎn)(例如Redis)無法支撐這么大的訪問量。如果是讀請(qǐng)求訪問量大,可以考慮讀寫分離,一主多從的方案,用從節(jié)點(diǎn)分?jǐn)傋x流量;如果是寫請(qǐng)求訪問量大,可以采用集群分片方案,用分片分?jǐn)倢懥髁?#xff09;
緩存雪崩(在某一時(shí)間段緩存數(shù)據(jù)集中失效,導(dǎo)致大量請(qǐng)求穿透到數(shù)據(jù)庫。可以在初始化數(shù)據(jù)時(shí),差異化各個(gè)key的緩存失效時(shí)間,失效時(shí)間 = 一個(gè)較大的固定值 + 較小的隨機(jī)值)
異步消息
應(yīng)用場(chǎng)景(異步處理,流量消峰,一對(duì)多通信,日志處理,系統(tǒng)解耦等)
帶來的問題(過多的異步消息使用和濫用,會(huì)讓代碼閱讀者感覺混亂,使系統(tǒng)的調(diào)用關(guān)系變復(fù)雜 ,系統(tǒng)可維護(hù)性會(huì)變差)
數(shù)據(jù)庫
關(guān)系型數(shù)據(jù)庫
數(shù)據(jù)庫性能優(yōu)化(數(shù)據(jù)庫服務(wù)端參數(shù)調(diào)優(yōu),比如調(diào)整查詢緩存大小等)
應(yīng)用優(yōu)化
A. 引擎選擇(例如Mysql的InnoDB,MyIsam,Memory等)
B. 索引優(yōu)化(數(shù)據(jù)存儲(chǔ)和索引原理,聯(lián)合索引,覆蓋索引,索引下推等都要了解)
高并發(fā)場(chǎng)景海量數(shù)據(jù)解決方案
分庫分表(對(duì)于數(shù)據(jù)量特別大,而且訪問量大的數(shù)據(jù)庫表,可以分表分庫來解決數(shù)據(jù)庫寫入和讀取瓶頸)
批量異步寫入(采用異步批量寫表的方式,減少表寫入頻次,進(jìn)而減少表的寫入壓力)
冷熱分離(冷熱數(shù)據(jù)分開存儲(chǔ),減少單表數(shù)據(jù)量,從而提高寫入和查詢性能)
讀寫分離(寫主庫,讀從庫,用從庫分?jǐn)傋x流量,從庫可以是一個(gè)或多個(gè),減少了主庫壓力)
? ? 2.非關(guān)系數(shù)據(jù)庫(NOSQL。像MongoDB等。不太重要的數(shù)據(jù)、評(píng)論評(píng)價(jià)、業(yè)務(wù)操作日志等可以用非關(guān)系數(shù)據(jù)庫存儲(chǔ)。使用過程要注意坑,篇幅原因不做詳細(xì)介紹)
高并發(fā)場(chǎng)景解決方案
CDN (頁面靜態(tài)化,用CDN扛流量(扛訪問量,扛帶寬))
應(yīng)用緩存(緩存中間件(Redis等),本地緩存(Guava cache等))
異步通信(消息隊(duì)列,解耦、消峰、減少線程阻塞)
分庫分表(對(duì)于數(shù)據(jù)量特別大,而且訪問量大的數(shù)據(jù)庫表,可以分表分庫來解決數(shù)據(jù)庫寫入和讀取瓶頸)
JVM優(yōu)化(基本參數(shù)優(yōu)化,選擇合適的垃圾回收器)
帶寬考慮(避免帶寬稱為瓶頸,促銷和秒殺開始前提前申請(qǐng)帶寬。不光要考慮外網(wǎng)帶寬,還要考慮內(nèi)網(wǎng)帶寬,有些舊服務(wù)器網(wǎng)口是千兆網(wǎng)口,訪問量高時(shí)很可能會(huì)打滿)
秒殺場(chǎng)景設(shè)計(jì)
? ? 關(guān)鍵點(diǎn):頁面靜態(tài)化,頁面攔截請(qǐng)求,網(wǎng)關(guān)攔截請(qǐng)求,批量異步寫數(shù)據(jù)庫。詳情參考作者原創(chuàng)
《秒殺系統(tǒng)設(shè)計(jì)~億級(jí)用戶》
關(guān)于快速迭代
高可維護(hù)性
API封裝(對(duì)組件API進(jìn)行封裝,如果更換組件,比如jedis換成spring-data-redis,可以直接修改API層,避免所有引用API的地方都需要變化)
高可讀性(可讀性高的設(shè)計(jì)和代碼,可維護(hù)性也會(huì)很好)
高可復(fù)用性(可復(fù)用性高的設(shè)計(jì)和代碼,可維護(hù)性也會(huì)很好)
合理的服務(wù)拆分(服務(wù)拆分合理,不同的服務(wù)由不同的組或個(gè)人維護(hù),可維護(hù)性會(huì)大大提高)
????2. 水平擴(kuò)展能力
性能瓶頸(避免數(shù)據(jù)庫,緩存中間件,消息隊(duì)列,網(wǎng)絡(luò)等稱為系統(tǒng)瓶頸,保證系統(tǒng)水平擴(kuò)展能力)
服務(wù)注冊(cè)發(fā)現(xiàn)(在服務(wù)節(jié)點(diǎn)上下線過程中,自動(dòng)發(fā)現(xiàn)服務(wù)節(jié)點(diǎn),無需人工介入)
? ? 3.?中臺(tái)思想
共享服務(wù)(中臺(tái)思想的前奏,以電商為例,將訂單、商品、交易等等穩(wěn)定業(yè)務(wù)抽出做成共享服務(wù),避免一個(gè)企業(yè)內(nèi)部不同團(tuán)隊(duì)的重復(fù)開發(fā)和重復(fù)維護(hù)工作,能夠快速應(yīng)對(duì)業(yè)務(wù)變化)
中臺(tái)思想(大中臺(tái),小前臺(tái)。以電商為例,將訂單、商品、交易等等穩(wěn)定業(yè)務(wù)逐漸沉淀到中臺(tái),有新增業(yè)務(wù)或者業(yè)務(wù)發(fā)生變化時(shí),前臺(tái)業(yè)務(wù)可以基于中臺(tái)服務(wù)快速完成系統(tǒng)迭代)
關(guān)于高可用(避免單點(diǎn)問題,保證持續(xù)提供服務(wù))
發(fā)布部署
灰度發(fā)布設(shè)計(jì)(為避免線上全盤錯(cuò)誤或系統(tǒng)崩潰,C端功能需要灰度上線,再逐步增大流量)
流量摘除(在節(jié)點(diǎn)重啟之前要提前摘除該節(jié)點(diǎn)上的訪問流量,避免重啟過程訪問錯(cuò)誤,進(jìn)而影響用戶體驗(yàn))
隔離部署/分組部署(為了避免相互影響,后端運(yùn)營(yíng)系統(tǒng)和C端服務(wù)所依賴的共同服務(wù)需要隔離部署。秒殺和日常交易所依賴的訂單服務(wù)和庫存等服務(wù)也要隔離部署)
CI(持續(xù)集成)
CD(持續(xù)部署)
監(jiān)控
運(yùn)維監(jiān)控(CPU,內(nèi)存,網(wǎng)絡(luò)等監(jiān)控)
全鏈路監(jiān)控(APM)(Pinpoint、Skywalking等全鏈路監(jiān)控工具,可以監(jiān)控跨系統(tǒng)跨服務(wù)的整個(gè)調(diào)用鏈路。對(duì)發(fā)現(xiàn)問題、排查問題和及時(shí)預(yù)警有很大幫助,還支持服務(wù)調(diào)用關(guān)系網(wǎng)絡(luò)拓?fù)鋱D)
業(yè)務(wù)監(jiān)控(對(duì)業(yè)務(wù)異常進(jìn)行監(jiān)控,比如優(yōu)惠券使用異常、刷單問題等)
容器技術(shù)
Docker(開源應(yīng)用容器引擎)
Kubernetes(Google開源的一個(gè)容器編排引擎,讓部署容器化的應(yīng)用簡(jiǎn)單并且高效)
DEVOPS
(用工具系統(tǒng)的方式,將研發(fā),測(cè)試和運(yùn)維過程串聯(lián)起來,減少彼此間溝通成本,降低由于溝通問題出錯(cuò)的幾率)
QA
性能測(cè)試(對(duì)to C的互聯(lián)網(wǎng)系統(tǒng),穩(wěn)定性非常重要,性能測(cè)試是必須的,除了做測(cè)試環(huán)境壓測(cè)外,還可以定期做線上全鏈路壓測(cè))
自動(dòng)化測(cè)試(快速迭代過程,很多代碼可能會(huì)影響到全局,需要做回歸測(cè)試,測(cè)試人員很難覆蓋到所有用例。很多公司在自動(dòng)化測(cè)試投入大量人力,保證上線質(zhì)量的同時(shí),還能節(jié)省人力)
CI測(cè)試(持續(xù)集成測(cè)試,每次有代碼變動(dòng)構(gòu)建(編譯)工程時(shí)自動(dòng)執(zhí)行一遍測(cè)試用例,保證代碼的新增和改動(dòng)不影響原有功能,適用于測(cè)試用例不需要經(jīng)常變化的成熟穩(wěn)定業(yè)務(wù))
功能測(cè)試
CDN
頁面靜態(tài)化(商品詳情頁等靜態(tài)化,存儲(chǔ)于CDN,CDN扛流量,減少后 端服務(wù)和數(shù)據(jù)庫的訪問頻次和壓力,同時(shí)節(jié)省了網(wǎng)站帶寬流量)
CDN回源(圖片,視頻,靜態(tài)文件等靜態(tài)資源存放在CDN,采取回源策略,CDN取不到,回源站獲取后拉到CDN)
預(yù)熱(提前將靜態(tài)資源推到CDN預(yù)熱,減少回源壓力)
搜索推薦
ES,solr
安全
機(jī)器人,腳本,防刷(網(wǎng)關(guān)層按用戶ID限流,整體限流)
風(fēng)控系統(tǒng)(控制薅羊毛,欺詐交易等)
防火墻(防DDos等網(wǎng)絡(luò)攻擊)
高防服務(wù)(防DDos,CC網(wǎng)絡(luò)攻擊)
好啦,就分享到這里。如果感覺本文對(duì)您有幫助,有勞動(dòng)動(dòng)手指轉(zhuǎn)發(fā)一下,分享是美德哦????
你可能感興趣的文章:
《秒殺系統(tǒng)設(shè)計(jì)~億級(jí)用戶》
《服務(wù)化帶來的問題,我們是如何解決的》
《服務(wù)化帶來的問題---之?dāng)?shù)據(jù)遷移經(jīng)歷》
《服務(wù)化帶來的數(shù)據(jù)一致問題---分布式事務(wù),事務(wù)型消息》
《記一次摩拜單車JVM線程阻塞排查過程》
《JVM 頻繁GC快速排查捷徑》
IT技術(shù)分享社區(qū)
個(gè)人博客網(wǎng)站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠(yuǎn)程辦公:常用的遠(yuǎn)程協(xié)助軟件,你都知道嗎?51單片機(jī)程序下載、ISP及串口基礎(chǔ)知識(shí)硬件:斷路器、接觸器、繼電器基礎(chǔ)知識(shí)
總結(jié)
以上是生活随笔為你收集整理的程序员进阶架构师路线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3.8 了解的差不多了吧,P
- 下一篇: 南邮 计算机网络,南邮计算机网络_期末复