被拉過去參與一個陌生系統(tǒng)的迭代開發(fā)或者系統(tǒng)維護(bugfix),如何快速上手?
同事離職或轉(zhuǎn)崗,需要把系統(tǒng)交接給你,怎么去接? 內(nèi)心 os:這是一口鍋嗎?
這樣的場景多了,就需要去梳理常見問題以及應對方法,方便后續(xù)遇到類似場景可以快速應對。本文總結(jié)熟悉系統(tǒng)主要分三部分:業(yè)務學習、技術學習、實戰(zhàn)。每部分會梳理一些在學習過程中需要解答的問題,這些問題隨著經(jīng)驗的積累需要逐步補充完善。
業(yè)務學習
業(yè)務學習就是從業(yè)務角度去學習系統(tǒng),我們需要了解系統(tǒng)的客戶是誰、使用人是誰、帶來了什么價值,系統(tǒng)提供了哪些功能等。不清楚業(yè)務,就等于不知道系統(tǒng)在干什么。技術是為業(yè)務落地而服務,清楚了業(yè)務才知道怎樣用技術更好地服務業(yè)務,所以業(yè)務學習是熟悉一個系統(tǒng)的首要任務。這塊主要的學習方式有跟產(chǎn)品、運營、開發(fā)溝通,學習產(chǎn)品設計文檔文檔、PRD、自己使用系統(tǒng),還有一些常見圖,如產(chǎn)品功能架構(gòu)圖、業(yè)務流程圖、功能樹,用例圖等。
常見問題:
系統(tǒng)所在行業(yè)的情況是怎樣?
系統(tǒng)的目標用戶是誰?比如是給公司高層做決策用?給運營或客服用?還是互聯(lián)網(wǎng)用戶用?
平均有多少人在使用?高峰期有多少人在用?
系統(tǒng)有什么業(yè)務價值?有哪些指標可以衡量系統(tǒng)業(yè)務價值?
系統(tǒng)有哪些功能模塊?
系統(tǒng)有哪些領域概念?梳理下系統(tǒng)的領域模型;
系統(tǒng)的關鍵業(yè)務流程有哪些?關鍵業(yè)務流程是怎樣?
系統(tǒng)的非功能性需求有哪些?如性能、質(zhì)量、擴展性、安全性等;
系統(tǒng)未來的發(fā)展規(guī)劃是怎樣?
技術學習
技術學習主要學習系統(tǒng)的架構(gòu)、如何實現(xiàn)、系統(tǒng)的運維等。描述一個系統(tǒng)的架構(gòu)有五視圖方法論。
五視圖分別是:
邏輯架構(gòu)
開發(fā)架構(gòu)
運行架構(gòu)
物理架構(gòu)
數(shù)據(jù)架構(gòu)
邏輯架構(gòu)
邏輯架構(gòu)著重考慮功能需求,系統(tǒng)應當向用戶提供什么樣的服務,關注點主要是行為或職責的劃分。常用表達圖形,靜態(tài)圖有包圖、類圖、對象圖;動態(tài)圖有序列圖、協(xié)作圖、狀態(tài)圖、活動圖。邏輯架構(gòu)的核心設計任務是模塊劃分、接口定義、領域模型細化。
常見問題:
有哪些子系統(tǒng)或模塊?系統(tǒng)之間是什么樣的關系?
對外上下游接口有哪些?對接人是誰?
關鍵業(yè)務流程怎么實現(xiàn)的?用類圖、序列圖等方式表達出來。
開發(fā)架構(gòu)
開發(fā)架構(gòu)關主要關注系統(tǒng)源代碼、第三方 SDK、使用的框架、中間件、工具包。
常見問題:
代碼在哪?
包怎么劃分的?怎么分層?如 mvc、controller-service-dao;
用了什么框架,如 ssh、dubbo;
用了哪些工具包?如 apache commons、guava;
用了哪些中間件?如 metaq、tair、schedulerX、Diamond;
依賴哪些平臺?如權(quán)限平臺、流程引擎等。
運行架構(gòu)
運行架構(gòu)的著重考慮運行期質(zhì)量屬性,關注點是系統(tǒng)的并發(fā)、同步、通信等問題,這勢必涉及到進程、線程、對象等運行時概念,以及相關的并發(fā)、同步、通信等。
常見問題:
系統(tǒng)能支撐多少 qps?峰值 qps 多少?
與上下游系統(tǒng)怎么交互的?rpc?http?同步還是異步?
物理架構(gòu)
物理架構(gòu)的設計著重考慮安裝和部署需求,關注點是目標程序及其依賴的運行庫和系統(tǒng)軟件最終如何安裝或部署到物理機器,以及如何部署機器和網(wǎng)絡來配合軟件系統(tǒng)的可靠性、可伸縮性、持續(xù)可用性、性能和安全性等要求。
常見問題:
系統(tǒng)如何發(fā)布部署?有哪些部署環(huán)境?
系統(tǒng)有多少臺機器?
系統(tǒng)部署怎么部署的?關注接入層,部署方式,如集群部署、分布式部署等
有沒有容器化?
有沒有多機房部署?
數(shù)據(jù)架構(gòu)
數(shù)據(jù)架構(gòu)的設計著重考慮數(shù)據(jù)需求,關注點是持久化數(shù)據(jù)的存儲方案,不僅包括實體及實體關系數(shù)據(jù)存儲格式,還可能包括數(shù)據(jù)傳遞、數(shù)據(jù)復制、數(shù)據(jù)同步等策略。
常見問題:
數(shù)據(jù)存儲在哪?用了什么數(shù)據(jù)庫,如 oracle、mysql;
梳理 E-R 圖;
數(shù)據(jù)量有多少?是否有分庫分表?
用了哪些 NoSQL 庫?
有哪些數(shù)據(jù)同步任務?
大數(shù)據(jù)框架的使用情況如何?
系統(tǒng)運維
系統(tǒng)運維重點關注什么時候會出問題,出了問題怎么解決。
常見問題:
什么時間容易出問題?比如電商 雙11,對系統(tǒng)的壓力很大,這時候很容易出問題;
對關鍵功能是否有監(jiān)控?需要看系統(tǒng)有配置了哪些報警項,監(jiān)控了哪些方面;
出了問題怎么解決?日志在哪?是否有全鏈路跟蹤?是否有一些緊急操作,比如開關配置、降級、限流配置;
系統(tǒng)有哪些坑?找開發(fā)同學回顧歷史問題,以免踩坑。通過同事總結(jié)的 case,或者與負責的產(chǎn)品、運營、技術與了解。系統(tǒng)總會有一些坑,需要把這些坑填上。歷史代碼經(jīng)過多次迭代總會導致復雜度高(分支、嵌套、循環(huán)很多),存在設計漏洞,性能隱患等,很難維護,這些就需要我們?nèi)ブ貥?gòu)了。記住有一句話:填的坑越大,能力越大;
運營、客服反饋的常見問題有哪些?
實踐
熟悉了系統(tǒng)的業(yè)務和技術后,就要實戰(zhàn)了,通過實戰(zhàn)進一步加深對系統(tǒng)的熟悉程度。實踐可以通過做需求、修 bug、重構(gòu)等方式,親自動手編碼、調(diào)試、測試、上線。
總結(jié)
已有系統(tǒng)通常經(jīng)歷了從 0 到 N 的建設過程,熟悉系統(tǒng)其實是一個逆向推導過程,也是一個學習架構(gòu)、閱讀源碼的過程。在學習的過程中最好能帶上思考,比如為什么要這么設計?為什么要用這個中間件?是否有更好的編碼方式?哪些地方可以優(yōu)化等,以此達到一個深入熟悉的過程。
附:總結(jié)圖
云原生實踐峰會即將開幕
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的技術圈。”
更多關于云服務器,域名注冊,虛擬主機的問題,請訪問三五互聯(lián)官網(wǎng):m.shinetop.cn