在決定推進項技術升級以前,我習慣先問問本身爲何要作,譬如收益和付出是什麼,若是沒有想清楚,寧願不作。安全
微服務也不例外,咱們不能盲目跟風,必定要結合本身的實際,慎重地決定是否須要微服務化。架構
網上關於微服務好處的介紹有不少,這裏我想特別強調的是,從「人」的角度講,微服務帶來的優點和挑戰。分佈式
微服務架構下,每一個服務的複雜度大幅降低,從而維護成本也大幅下降。對於團隊來講,新人也能夠更快地上手項目,貢獻代碼。交接項目也變得更加容易。微服務
單一服務架構下,隨着時間的推移,項目的複雜度必然愈來愈高,相關人員也會愈來愈多,從而代碼的合併頻率會逐漸降低,權限愈來愈難以分配,須要愈來愈重的測試,部署也愈來愈複雜,頻率愈來愈低。工具
然而微服務也會帶來不少問題,例如若是設計不合理,總體的複雜度會提升。寫代碼的時候須要考慮調用失敗的狀況,須要考慮分佈式的事務(固然不少時候是設計不合理致使的),從而對人提出了更高的要求。性能
總之,微服務帶來了不少優點,同時也帶來了不少挑戰,咱們須要認真的審視本身,這些優點對當下的咱們是不是優點,這些挑戰對當下的咱們是否能hold住。測試
這裏有幾點心得:設計
微服務除了是個技術活,更是個管理活。咱們得有和微服務相融的團隊組織方式和工做流程。日誌
在扇貝,咱們就對微服務根據其業務特性,技術特性作了一些分組,每組微服務對應 2-3 人的 DevOps 團隊,每一個團隊實現本身的 DevOps 流程(架構團隊提供流程模板)。事務
每一個團隊使用 GitLab CI 來實現 CI/CD:提交PR開始跑測試,測試經過進入代碼Review,Review經過合併進主分支,開始自動構建 Docker Image,而後依次部署到 集成測試,預發佈,生產環境。
每一個團隊均可以在監控報警系統中看到本身負責的項目的運行數據,甚至自定義監控數據和報警指標,當數據發生異常,本身會收到報警,而後去處理。
不一樣的微服務團隊相互獨立,經過gRPC 和 Celery 實現數據交換。
最後給你們推薦下微服務全家桶,做爲一個Check List,上微服務的同窗能夠勾一勾
歡迎關注咱們的知乎專欄