微服務的真相: 服務拆的太小,後面迭代忍不了

通常情況下組織業務發展的萌芽初期,在快速發展階段,都面臨着軟件開發週期的挑戰,這個階段活下去最重要,一切只有一個標準 “快”,這個階段組織裏誕生的往往是一些 “巨石應用”。

一開始爲了活下去:快,最重要

過去的巨石應用

這 “強大又厚實” 的巨石應用是他們應用架構上的一個早期策略:

巨石應用

但隨着業務的持續發展,巨石應用的痛點也非常明確。像是:

這些痛點也正給他們公司帶來各種各樣的組織問題,而當代微服務的橫空出世,對軟件工程師很有吸引力,他們也就轉型了。

現代的微服務架構

正式邁向了微服務轉型之路,一切先從拆分開始:

圖片

在以往的大單體中,我們會將其 Cache、DB 等混合在一起。但在做微服務後,我們會選用拆成多個服務的方式,最終演變成:

Proxy Pattern

微服務拆分有以下幾種粗的基準:

絞殺者模式

在完成微服務改造的基準的定義後,絕大部分公司都是採取業界中比較著名的 “絞殺者” 模式。

如下圖:

絞殺模式

由於會考慮微服務的組織,大多都是有成熟業務的盈利組織了,業務發展太迅猛,才發現技術架構跟不上業務要求的迭代速度和週期,不大可能停下業務硬重構。

因此業內基本採取邊遷移,邊改造爲微服務的漸進式重構的方式,實現 “絞殺者”,把技術債務給償還了。

服務太小

在微服務逐步的演進過程中,我們就會發現一個新的問題。雖然在微服務做規劃時,都會很認真的對服務的拆分進行深入研討,但還是出現了服務拆的很爽,但後面實戰的時候發現服務太小了

N 人維護數倍服務

出現了 “10 名工程師組成了維護 60 項服務的小組。一人負責一個服務還不夠用” 的情況。

正當以爲這不是常見問題時,最近看到我的好朋友 HHF(@HHFCodeRv)提到有人向他諮詢架構相關的問題。

下面是諮詢他的公司的 Java 架構師落地的方案。如下圖:

落地方案

亮點是這 2 個後端開發,其中一個還是架構師。結合實際情況,可能只有 1 個後端在幹活。這堪稱 1:17 的人和服務的配比量,每天光切 IDE 找服務可能就得好幾東...

當然,應用還沒上線,就拆成數倍的服務。形成 N 個人維護其自身數量的數倍服務,不大合理。這也是業內很多互聯網公司需要思考和解決的問題。

新功能歸屬誰

在實際的業務場景中,出現了 “有人要求我把一個新功能同時部署到兩個不同服務之中” 的訴求。

因爲這個新功能同時是 ServiceA 和 ServiceB 這兩個服務的職責劃分的所有者或者部分所有者,所以新功能理應同時在這兩個服務都要有所提供。

這時候需要考慮以下問題:

在真實的項目場景中,我們會按照事前定的 “契約” 進行設計和開發。也就是在設計時,就要針對服務的上下文邊界確立好,做好約束和規範。

出現上面這些問題,我們要想想:是不是服務的職責不清晰還是拆分有偏差,又或是業務領域改變了?

我們要儘快對整體的服務做一個再規劃,界定新的上下文。否則,以後會越來越亂,有好受的。

總結

在今天的文章中,我們介紹了巨石應用和微服務架構的一些基本特性。同時也給大家展示了,最常見的切換方式:絞殺者模式。

隨後和大家探討了所有微服務演講中,都必然會碰到的一個大問題:服務太小。

服務太小又分爲兩種情況:

這種情況下,我們需要分清楚,這是人,還是設計上的問題(這很重要)。及時重新界定新的領域,面向服務做好新的上下文界定,能夠適當的解決部分問題。

業務是在持續發展的,若要做好,要長期的階段性覆盤。但若是人的問題,那就需要好好思考了,畢竟康威定律。

感謝煎魚本次帶來的分享

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/V_BOx-cSyfQqRDLxG_Eu7Q