1. 程式人生 > 程式設計 >微服務設計筆記(2)——從架構師角度來看待微服務

微服務設計筆記(2)——從架構師角度來看待微服務

架構師職責確保我們的團隊有共同的技術願景,並向我們的客戶交付他們想要的系統。需要協調多個團隊,甚至整個組織內的工作。

1 城市規劃師

其實架構師更像是城市規劃師,需要做出一個允許變化的計劃。

系統的使用者除了客戶,還有開發人員與運維人員。所以,架構師要確保系統適合開發人員在其上進行開發工作。

架構師應該專注大方向,只在有限情況下,才參與到具體的實現細節中。保證這套系統,會讓開發人員和客戶一樣開心。

2 服務邊界

作為架構師,應該多關注服務邊界之間發生的事。比如,不同的服務之間互動方式、監控整個系統的健康狀況等等。

每個服務內部,允許團隊選擇不同的技術棧或資料儲存技術。

3 規則

為了和目標保持一致,我們需要制定出一些規則。規則最好不要超過 10 個,這樣大家才容易記得住。

通過規則來指定系統如何演化。還需要指導這些規則如何實踐。

除了檔案,還可以提供示例程式碼供人閱讀、研究與執行。甚至可以創造出一些工具來確保這些規則能夠被正確執行。

4 特性

4.1 監控

必須能夠在系統級別,清晰地描繪出跨系統服務的健康狀態。建議:讓所有的服務都使用同樣的方式來報告健康狀態。

可以使用推送方式,讓每個服務把狀態資料推送到某個節點;也可以使用輪詢方式,從各個服務節點,收集狀態資料。無論哪一種方式,都應該保持一致。並且,每個服務內的技術細節,對外應該是不影響、不透明的。

4.2 介面協議

選擇少數幾種明確的介面協議,有利於使用者開發對接程式。還需要多多考慮,比如如何處理不同版本的 API?

4.3 安全性

確保每個服務都能夠處理呼叫方所返回的錯誤資訊。

5 程式碼管理

5.1 示例程式碼

因為開發人員更喜歡閱讀與允許程式碼,所以提供示例程式碼以供模仿,是個好主意。

5.2 程式碼模板

依據優秀的開發實踐,匯出一些程式碼模板,不但可以提高開發效率,而且還可以保證服務質量。

如果組織內使用了不同的技術棧,那麼每一種技術棧,都需要提供相應的程式碼模板。

可以通過合作的方式定義好這些模板,並根據需要及時更新。

6 破例

有時候,因為特殊情況,違背了初定的規則。首先,先記下來。如果發生了很多次,那麼我們可以修改規則,來適應變化。

如果團隊高度自治,那麼這些規則只要把握好大方向即可。

7 管理

通過排優先順序和做決策來設定目標,然後監督定好目標是否朝著良性方向發展。

架構師要確保有可以指導開發的規則,並且這些規則與組織的戰略目標相一致。需要了解新技術,並知道如何在這些技術之間做取捨。還要讓大家也理解這些取捨決定,並執行下去。還需要花時間與團隊一同工作,甚至是程式設計。

組織討論會,可以是與一個比較小的團隊進行非正式溝通;也可以是與大團隊進行正式溝通。討論會必須要由技術專家領導,並要有一線員工參與。討論的內容可以是之前說過的規則,以及跟蹤和管理技術風險。架構師必須確保這些討論會可以順暢運轉。

注意:即使架構師很清楚這樣做是對的,然後為了避免團隊偏離方向,不得不控制他們的行為。這有可能會破壞和團隊的關係,讓他們感覺沒什麼話語權。關鍵是知道什麼時候可以這樣做,什麼時候不能這樣做。

8 團隊建設

架構師必須幫助團隊成長,讓他們理解團隊目標,並積極地參與到這個目標實踐中來。

機會成熟時,就可以給團隊成員更多的責任,幫忙他們實現自己的職業目標。


架構師的職責總結如下:

  • 在系統級別,輸出經過充分溝通的技術願景,通過它可以幫助我們滿足客戶和組織的需求。
  • 瞭解所做出的決定,對客戶和團隊所帶來的影響。
  • 和儘可能多的人溝通交流,修訂技術願景。
  • 根據客戶以及組織需要,及時調整技術願景。
  • 在自治和約束之間,尋找出一個平衡點。
  • 管理並監督系統朝著願景的方向,穩步前行。