一份Go微服務(wù)生產(chǎn)指南清單給你

生產(chǎn)就緒檢查列表
一個(gè)生產(chǎn)就緒的微服務(wù)是穩(wěn)定且可靠的
它有一個(gè)標(biāo)準(zhǔn)化的開(kāi)發(fā)周期。
它的代碼需要經(jīng)過(guò)初步檢查、單元測(cè)試、集成測(cè)試以及端到端的測(cè)試。
它的測(cè)試、打包、構(gòu)建和發(fā)布流程是自動(dòng)化的。
它有標(biāo)準(zhǔn)化的部署管道,包括staging階段、canary階段和生產(chǎn)階段。
它的客戶端是已知的。
它的依賴項(xiàng)是已知的,而且是有備份的,還有可選的回退方案以及緩存,以防出 現(xiàn)依賴項(xiàng)失效。
它有穩(wěn)定可靠的路由和服務(wù)發(fā)現(xiàn)機(jī)制。


一個(gè)生產(chǎn)就緒的微服務(wù)是可伸縮且高性能的
明確的質(zhì)的增長(zhǎng)規(guī)模和量的增長(zhǎng)規(guī)模。 高效地使用硬件資源。 已識(shí)別出資源的瓶頸和需求。 容量規(guī)劃自動(dòng)化,并通過(guò)調(diào)度作業(yè)來(lái)執(zhí)行。 依賴項(xiàng)也會(huì)隨之伸縮。 可以隨著客戶端的伸縮而伸縮。 業(yè)務(wù)流量模式有章可循。 在發(fā)生故障時(shí),業(yè)務(wù)流量可以被重新路由。 使用支持伸縮性和高性能的編程語(yǔ)言來(lái)實(shí)現(xiàn)。 以高性能的方式處理任務(wù)。 以可伸縮和高性能的方式處理和存儲(chǔ)數(shù)據(jù) 。
一個(gè)具備容錯(cuò)和災(zāi)備能力的生產(chǎn)就緒的微服務(wù)
沒(méi)有故障點(diǎn)。 所有可能的故障場(chǎng)景都已被識(shí)別出來(lái) 。 已經(jīng)通過(guò)代碼測(cè)試、負(fù)載測(cè)試和混沌測(cè)試,保證了微服務(wù)的彈性 。 自動(dòng)化的故障檢測(cè)和挽救措施 。 微服務(wù)開(kāi)發(fā)團(tuán)隊(duì)和整個(gè)組織具有標(biāo)準(zhǔn)化的事故和中斷處理流程 。


一個(gè)得到恰當(dāng)監(jiān)控的生產(chǎn)就緒的微服務(wù)
它的關(guān)鍵性度量指標(biāo)在主機(jī)級(jí)別、基礎(chǔ)設(shè)施級(jí)別和微服務(wù)級(jí)別得到識(shí)別和監(jiān)控 。 它有能夠反映微服務(wù)過(guò)去狀態(tài)的日志。
它的儀表盤(pán)包含了所有的關(guān)鍵性度量指標(biāo),而且很容易讀懂 。 它的告警具有可操作性,并且定義了閾值 。 有一個(gè)專門(mén)的輪班待命機(jī)制負(fù)責(zé)監(jiān)控微服務(wù),并對(duì)事故和中斷做出響應(yīng) 。 有一個(gè)清晰的、良好定義的標(biāo)準(zhǔn)待命流程,用于處理事故和中斷 。
一個(gè)生產(chǎn)就緒的微服務(wù)具有良好的文檔并且為人 所理解
它有詳盡的文檔 。 它的文檔會(huì)定期更新。 它的文檔包含了如下內(nèi)容: 微服務(wù)描述 架構(gòu)圖 待命人員的信息 重要信息的鏈接 開(kāi)發(fā)上手指南 服務(wù)請(qǐng)求消息流 端點(diǎn)的信息 依賴項(xiàng)的信息 運(yùn)行手冊(cè),以及常見(jiàn)問(wèn)題答疑 。 它為開(kāi)發(fā)人員、團(tuán)隊(duì)和組織所理解 。 它符合生產(chǎn)就緒標(biāo)準(zhǔn)并且滿足相關(guān)要求 。 它的架構(gòu)經(jīng)過(guò)了反復(fù)的評(píng)審 。
評(píng)估你的微服務(wù)
穩(wěn)定性和可靠性
開(kāi)發(fā)周期
是否有一個(gè)可以存放所有代碼的中心代碼倉(cāng)庫(kù)? 開(kāi)發(fā)人員所在的開(kāi)發(fā)環(huán)境是否準(zhǔn)確反映了產(chǎn)品狀態(tài)(例如,是否準(zhǔn)確反映了實(shí)際情況)? 是否有代碼檢查、單元測(cè)試、集成測(cè)試和端到端的測(cè)試?是否有代碼審查流程和策略? 是否具有自動(dòng)化的測(cè)試、打包、構(gòu)建和發(fā)布流程?
部署管道
微服務(wù)生態(tài)系統(tǒng)是否有一個(gè)標(biāo)準(zhǔn)化的部署管道? 部署管道里是否有 full staging 或 partial staging 階段? staging 環(huán)境對(duì)生產(chǎn)環(huán)境有怎樣的訪問(wèn)權(quán)限? 部署管道里是否有 canary 階段?
canary 階段是否有足夠的時(shí)間來(lái)捕捉所有的缺陷? canary 階段是否準(zhǔn)確地模擬了生產(chǎn)環(huán)境的業(yè)務(wù)流量? canary和生產(chǎn)環(huán)境的服務(wù)端口是一樣的嗎? 生產(chǎn)環(huán)境的部署是一步到位還是循序漸進(jìn)的? 對(duì)于緊急情況,是否存在直接跳過(guò) staging 和 canary 階段的情況?
服務(wù)依賴
微服務(wù)的依賴項(xiàng)都有哪些? 微服務(wù)的客戶端都有哪些? 微服務(wù)如何緩解依賴失效所帶來(lái)的影響? 對(duì)于每個(gè)依賴項(xiàng),是否都有備份、替代服務(wù)、回退方案或防御性緩存?
路由和服務(wù)發(fā)現(xiàn)
微服務(wù)的健康檢測(cè)可靠嗎? 健康檢測(cè)是否準(zhǔn)確地反映微服務(wù)的健康狀態(tài)? 健康檢測(cè)是否運(yùn)行在獨(dú)立的通道上? 是否使用了回路斷路器來(lái)防止不健康的微服務(wù)發(fā)出請(qǐng)求? 是否使用了回路斷路器來(lái)防止生產(chǎn)環(huán)境的業(yè)務(wù)流量被發(fā)送到不健康的 主機(jī)或服務(wù)上?
服務(wù)和端點(diǎn)的解除
是否有解除微服務(wù)的相關(guān)流程? 是否有解除微服務(wù) API 端點(diǎn)的相關(guān)流程?
伸縮性和高性能
增長(zhǎng)規(guī)模
微服務(wù)的質(zhì)的增長(zhǎng)規(guī)模是怎樣的? 微服務(wù)的量的增長(zhǎng)規(guī)模是怎樣的?
資源的有效利用
微服務(wù)是運(yùn)行在專門(mén)的硬件上還是共享的硬件上? 是否使用了資源隔離技術(shù)?
資源感知
微服務(wù)的資源需求是怎樣的( CPU、內(nèi)存,等)? 每個(gè)微服務(wù)實(shí)例能夠處理多少流量? 每個(gè)微服務(wù)實(shí)例需要多少 CPU? 每個(gè)微服務(wù)實(shí)例需要多少內(nèi)存? 微服務(wù)還需要其他的資源嗎? 微服務(wù)的資源瓶頸在哪里? 微服務(wù)是否需要被橫向或縱向擴(kuò)展,或者兩者兼顧?
容量規(guī)劃
容量規(guī)劃是否基于調(diào)度進(jìn)行? 新硬件多久能夠到位? 申請(qǐng)硬件的頻率是怎么樣的? 是否根據(jù)優(yōu)先級(jí)為微服務(wù)分配硬件? 容量規(guī)劃是自動(dòng)化還是手工操作的?
依賴項(xiàng)的伸縮
微服務(wù)的依賴項(xiàng)有哪些? 這些依賴項(xiàng)是否具備了伸縮性和高性能? 依賴項(xiàng)能否隨著微服務(wù)進(jìn)行伸縮? 依賴項(xiàng)的所有者是否做好隨微服務(wù)進(jìn)行伸縮的準(zhǔn)備?
流量管理
是否很好地了解了微服務(wù)的流量模式? 是否根據(jù)流量模式來(lái)安排服務(wù)的變更? 流量模式的急劇變化(特別是流量爆發(fā))是否被小心地處理了? 在服務(wù)失效以后,流量是否能夠被恰當(dāng)?shù)?strong style="line-height: 1.75em;color: rgb(74, 74, 74);">重新路由到其他數(shù)據(jù)中心?
任務(wù)處理
微服務(wù)所使用的編程語(yǔ)言是否具備伸縮性和高性能? 微服務(wù)在處理請(qǐng)求時(shí)是否存在伸縮性和性能方面的限制? 微服務(wù)在處理任務(wù)時(shí)是否存在伸縮性和性能方面的限制? 微服務(wù)團(tuán)隊(duì)的開(kāi)發(fā)人員是否了解他們的服務(wù)是如何處理任務(wù)的,處理任務(wù)的效率是怎樣的,以及當(dāng)任務(wù)和請(qǐng)求數(shù)量增加時(shí)他們的服務(wù)將會(huì)如何應(yīng)對(duì)?
可伸縮的數(shù)據(jù)存儲(chǔ)
微服務(wù)是否以可伸縮和高性能的方式處理數(shù)據(jù)? 微服務(wù)需要存儲(chǔ)什么類型的數(shù)據(jù)? 微服務(wù)的數(shù)據(jù)需要怎樣的 schema? 每秒需要處理多少個(gè)事務(wù)?
微服務(wù)需要更高的讀寫(xiě)性能嗎? 微服務(wù)是讀密集、寫(xiě)密集還是兩者兼顧? 微服務(wù)的數(shù)據(jù)庫(kù)可以橫向或縱向擴(kuò)展嗎?它是可復(fù)制或者可分區(qū)的嗎? 微服務(wù)使用的是專門(mén)的還是共 享 的數(shù)據(jù)庫(kù)? 微服務(wù)是如何存儲(chǔ)和處理測(cè)試數(shù)據(jù)的?
容錯(cuò)和災(zāi)備
避免故障點(diǎn)
是否存在單點(diǎn)故障? 是否存在多點(diǎn)故障? 故障點(diǎn)是否能夠被移除,或者需要對(duì)它們進(jìn)行緩解嗎?
故障場(chǎng)景
是否所有可能的故障場(chǎng)景都已被識(shí)別出來(lái)? 有哪些橫跨整個(gè)生態(tài)系統(tǒng)的常見(jiàn)故障? 硬件層有哪些故障會(huì)影響到這個(gè)微服務(wù)? 通信層和應(yīng)用平臺(tái)層有哪些故障會(huì)影響到這個(gè)微服務(wù)? 哪些依賴項(xiàng)故障會(huì)影響到這個(gè)微服務(wù)? 哪些內(nèi)部故障會(huì)拖垮這個(gè)微服務(wù)?
彈性測(cè)試
這個(gè)微服務(wù)是否通過(guò)了適當(dāng)?shù)?lint 測(cè)試、單元測(cè)試、集成測(cè)試和端到端的測(cè)試? 這個(gè)微服務(wù)是否經(jīng)過(guò)合格的負(fù)載測(cè)試? 是否通過(guò)混沌測(cè)試對(duì)所有可能的故障場(chǎng)景進(jìn)行了測(cè)試?
故障檢測(cè)和修復(fù)
在組織里是否有標(biāo)準(zhǔn)化的事故處理流程? 這個(gè)微服務(wù)的故障是如何影響業(yè)務(wù)的? 是否對(duì)故障進(jìn)行了清晰的分級(jí)? 是否有清晰的緩解策略? 當(dāng)發(fā)生事故時(shí),團(tuán)隊(duì)是否遵循事故處理的五個(gè)步驟?

監(jiān)控
關(guān)鍵性的度量指標(biāo)
這個(gè)微服務(wù)有哪些關(guān)鍵性的度量指標(biāo)? 有哪些主機(jī)級(jí)別和基礎(chǔ)設(shè)施級(jí)別的度量指標(biāo)? 有哪些微服務(wù)級(jí)別的度量指標(biāo)? 這些關(guān)鍵性度量指標(biāo)都被監(jiān)控起來(lái)了嗎?
日志
這個(gè)微服務(wù)需要把哪些信息記錄到日志里? 這個(gè)微服務(wù)是否記錄了重要的請(qǐng)求消息? 日志是否準(zhǔn)確地反映了微服務(wù)在各個(gè)時(shí)間點(diǎn)的狀態(tài)? 這個(gè)日志方案是否具有伸縮性和高性價(jià)比?
儀表盤(pán)
這個(gè)微服務(wù)是否有儀表盤(pán)? 儀表盤(pán)是否簡(jiǎn)單易懂?是否所有的關(guān)鍵性度量指標(biāo)都展示在了儀表盤(pán)上? 是否能夠從儀表盤(pán)上看出這個(gè)微服務(wù)是否運(yùn)行正常?
告警
是否每個(gè)度量指標(biāo)都設(shè)有告警? 是否所有告警都設(shè)置了合適的閾值? 告警閾值設(shè)置是否恰當(dāng),以便在發(fā)生中斷之前觸發(fā)告警? 告警是否具有可操作性? 運(yùn)行手冊(cè)里是否包含了用于診斷、緩解和解決問(wèn)題的排查步驟?
輪班待命
是否有 一個(gè)專門(mén)的輪班待命機(jī)制用于微服務(wù)的監(jiān)控? 每次待命排班是否有至少兩個(gè)開(kāi)發(fā)人員參與? 這個(gè)待命流程是否在整個(gè)工程組織內(nèi)進(jìn)行標(biāo)準(zhǔn)化?
文檔化和理解
微服務(wù)文檔
微服務(wù)的文檔是否被集中存放在一個(gè)公開(kāi)的、人們?nèi)菀自L問(wèn)到的地方? 文檔是否方便搜索? 微服務(wù)發(fā)生重要變更時(shí),文檔是否也得到了相應(yīng)的更新? 文檔是否包含了微服務(wù)的描述? 文檔是否包含了架構(gòu)圖? 文檔是否包含了待命信息? 文檔是否包含了重要信息的鏈接? 文檔是否包含了開(kāi)發(fā)上手指南? 文檔是否包含了微服務(wù)請(qǐng)求消息流、端點(diǎn)和依賴項(xiàng)的信息? 文檔是否包含了運(yùn)行手冊(cè)? 文檔是否包含了問(wèn)答章節(jié)?
微服務(wù)理解
團(tuán)隊(duì)里的每個(gè)開(kāi)發(fā)人員是否都能回答與他們的微服務(wù)的生產(chǎn)就緒相關(guān)的問(wèn)題? 微服務(wù)是否遵循了 一 系列原則和標(biāo)準(zhǔn)? 對(duì)于新的微服務(wù),是否有RFC 流程? 已有的微服務(wù)是否經(jīng)常得到評(píng)審和審計(jì)? 是否每個(gè)微服務(wù)團(tuán)隊(duì)都舉行架構(gòu)評(píng)審? 是否有生產(chǎn)就緒的審計(jì)流程? 是否有生產(chǎn)就緒路線圖用于把微服務(wù)帶向生產(chǎn)就緒的狀態(tài)? 生產(chǎn)就緒標(biāo)準(zhǔn)是否推動(dòng)了組織的 OKR? 生產(chǎn)就緒流程是自動(dòng)化的嗎?
我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語(yǔ)言并創(chuàng)建了 Go 語(yǔ)言中文網(wǎng)!著有《Go語(yǔ)言編程之旅》、開(kāi)源圖書(shū)《Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)》等。
堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場(chǎng)心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長(zhǎng)!也歡迎加我微信好友交流:gopherstudio
評(píng)論
圖片
表情
