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