單塊的挑戰
維護成本增長
持續交付週期長
新人培養週期長
技術選型成本高
可擴展性差
2.1 什麼是微服務架構
1 觀點:
- 絕大多數微服務的成功案例,都是從總體架構(Monolith)開始的。而且因爲總體架構過於龐大,致使架構沒法繼續支撐。
- 絕大多數我所據說的系統,若是從一開始就使用微服務架構,最終都遇到了很嚴重的問題。
建議:
並不該該從項目一開始就使用微服務架構,即使你可以保證你的應用足夠大,以致於使用微服務架構是值得的。
直接上微服務,鮮有成功之例子。
2 微服務的描述
微服務架構是一種架構模式,提倡將單一應用程序劃分紅一組小的服務,服務之間互相協調、配合,爲用戶提供最終價值。每一個服務運行在其獨立的進程中,服務與服務見採用輕量級的通訊機制互相溝通。每一個服務都圍繞着具體業務進行構建,而且可以被獨立的部署到生產環境、類生產環境等。另外,應儘可能避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據上下文,選擇合適的語言、工具對其進行構建。
3 多微纔好?
原則:業務獨立性;團隊自主性(10人一下團隊)
單一職責。
4 輕量級的通訊機制
5 獨立性
6 進程隔離
2.2 誕生背景
1 互聯網行業的快速發展
2 敏捷、精益、持續交付等方法論深刻人心
3 單塊架構的挑戰
4 容器虛擬化技術的成熟 Docker
2.4 微服務本質
服務做爲組件。服務之間定義清晰、語言無關、平臺無關的接口。
圍繞業務組織團隊。
關注產品而非項目。
技術多樣性。
業務數據獨立。
基礎設施自動化。DevOps
演進式架構
2.5 不是銀彈!
這裏列出缺點:
分佈式系統的複雜度。性能、可靠性、異步、數據一致性、工具
運維成本。配置、部署、監控與告警、日誌收集
部署自動化。必須自動化
DevOps與組織架構
依賴測試
依賴管理
3.1 任務拆分
構建第一個hello world API
代碼測試與靜態檢查
Docker映像構建
Docker映像部署
持續集成與交付
監控與告警
日誌聚合
3.2 構建服務
提早將開發、測試、部署、運維、監控的流水線打通。
本書選擇了ruby做爲開發語言。
單元測試框架。JUnit。不是全部的單元都要測試
測試API。
代碼靜態檢查。ide的check,或者firebug
3.3 Docker
已是一項成熟且值得應用的技術。推薦。
構建映像。構建、運行容器、發佈映像。注意自動化。
部署映像。基礎設施自動化:分析配置文件、建立基礎設施、get Docker映像、運行
3.4 持續交付流水線
本書代碼託管在github上,採用了snap-CI做爲持續交付工具。
實際須要考慮代碼的託管方式,和局域網本的持續交付工具。
備選:thoughworks GO、Jenkins
任務:
1 提交。代碼編譯、靜態檢查、單元測試
2 驗證。集成測試、用戶行爲測試、組件測試、性能測試。
3 構建。
4 發佈。 測試環境、 類生產環境、 生產環境
觸發 自動 手動 手動
數據來源 模擬 真實 真實
目的 驗證功能 演示 真實的服務啊
3.5 日誌聚合
Splunk
LogStash
初始的日誌方式。
日誌種類:標準、文件、syslog等
3.6 監控與告警
nagios系統監控。 it基礎設施監控系統。
3.7 功能迭代
1 服務描述文件
服務描述
維護者
可用期
運行環境。生產、測試
開發。如何搭建、運行、調試
測試
構建。持續集成、描述、發佈
部署
運維。日誌、監控地址
4、進階篇
4.1 持續交付
1 開發:獨立的代碼庫;服務說明文件;代碼全部權歸團隊;有效的版本管理;靜態檢查工具;易於本地運行
2 測試。mock和stub;接口測試。有效性
3 持續集成。
4 構建
5 部署。手動、腳本、基礎設施自動化(chef、puppet、ansible)、應用部署自動化(映像部署、容器部署)
4.2 輕量級通訊
1 同步和異步
2 RPC
3 REST
資源、表述、狀態轉移、統一接口
4 HAL。
5 消息隊列ActiveMQ、rabbitMQ
6後臺任務處理系統
4.3 測試