微服務設計筆記(2)——從架構師角度來看待微服務
架構師職責確保我們的團隊有共同的技術願景,並向我們的客戶交付他們想要的系統。需要協調多個團隊,甚至整個組織內的工作。
1 城市規劃師
其實架構師更像是城市規劃師,需要做出一個允許變化的計劃。
系統的使用者除了客戶,還有開發人員與運維人員。所以,架構師要確保系統適合開發人員在其上進行開發工作。
架構師應該專注大方向,只在有限情況下,才參與到具體的實現細節中。保證這套系統,會讓開發人員和客戶一樣開心。
2 服務邊界
作為架構師,應該多關注服務邊界之間發生的事。比如,不同的服務之間互動方式、監控整個系統的健康狀況等等。
每個服務內部,允許團隊選擇不同的技術棧或資料儲存技術。
3 規則
為了和目標保持一致,我們需要制定出一些規則。規則最好不要超過 10 個,這樣大家才容易記得住。
通過規則來指定系統如何演化。還需要指導這些規則如何實踐。
除了檔案,還可以提供示例程式碼供人閱讀、研究與執行。甚至可以創造出一些工具來確保這些規則能夠被正確執行。
4 特性
4.1 監控
必須能夠在系統級別,清晰地描繪出跨系統服務的健康狀態。建議:讓所有的服務都使用同樣的方式來報告健康狀態。
可以使用推送方式,讓每個服務把狀態資料推送到某個節點;也可以使用輪詢方式,從各個服務節點,收集狀態資料。無論哪一種方式,都應該保持一致。並且,每個服務內的技術細節,對外應該是不影響、不透明的。
4.2 介面協議
選擇少數幾種明確的介面協議,有利於使用者開發對接程式。還需要多多考慮,比如如何處理不同版本的 API?
4.3 安全性
確保每個服務都能夠處理呼叫方所返回的錯誤資訊。
5 程式碼管理
5.1 示例程式碼
因為開發人員更喜歡閱讀與允許程式碼,所以提供示例程式碼以供模仿,是個好主意。
5.2 程式碼模板
依據優秀的開發實踐,匯出一些程式碼模板,不但可以提高開發效率,而且還可以保證服務質量。
如果組織內使用了不同的技術棧,那麼每一種技術棧,都需要提供相應的程式碼模板。
可以通過合作的方式定義好這些模板,並根據需要及時更新。
6 破例
有時候,因為特殊情況,違背了初定的規則。首先,先記下來。如果發生了很多次,那麼我們可以修改規則,來適應變化。
如果團隊高度自治,那麼這些規則只要把握好大方向即可。
7 管理
通過排優先順序和做決策來設定目標,然後監督定好目標是否朝著良性方向發展。
架構師要確保有可以指導開發的規則,並且這些規則與組織的戰略目標相一致。需要了解新技術,並知道如何在這些技術之間做取捨。還要讓大家也理解這些取捨決定,並執行下去。還需要花時間與團隊一同工作,甚至是程式設計。
組織討論會,可以是與一個比較小的團隊進行非正式溝通;也可以是與大團隊進行正式溝通。討論會必須要由技術專家領導,並要有一線員工參與。討論的內容可以是之前說過的規則,以及跟蹤和管理技術風險。架構師必須確保這些討論會可以順暢運轉。
注意:即使架構師很清楚這樣做是對的,然後為了避免團隊偏離方向,不得不控制他們的行為。這有可能會破壞和團隊的關係,讓他們感覺沒什麼話語權。關鍵是知道什麼時候可以這樣做,什麼時候不能這樣做。
8 團隊建設
架構師必須幫助團隊成長,讓他們理解團隊目標,並積極地參與到這個目標實踐中來。
機會成熟時,就可以給團隊成員更多的責任,幫忙他們實現自己的職業目標。
架構師的職責總結如下:
- 在系統級別,輸出經過充分溝通的技術願景,通過它可以幫助我們滿足客戶和組織的需求。
- 瞭解所做出的決定,對客戶和團隊所帶來的影響。
- 和儘可能多的人溝通交流,修訂技術願景。
- 根據客戶以及組織需要,及時調整技術願景。
- 在自治和約束之間,尋找出一個平衡點。
- 管理並監督系統朝著願景的方向,穩步前行。