微服務·理論篇(二)

子路發表於2018-02-02

傳送門:微服務·理論篇(一)


一、熱烈的會議

"世界網際網路大會·微服務分會場"正在如火如荼的進行著,技術主編王小五在現場聽的津津有味,時而點頭表示贊同,時而鼓掌表示興奮。

一天很快結束了,作為會場嘉賓的C哥也結束了一天的活動。王小五趕緊跑到C哥跟前,準備開始今天的採訪活動。

二、採訪開始

小五:C哥,我們又見面了,感謝您百忙之中接受採訪啊!

C哥:哈哈,沒事,我們不是已經定好今天繼續了嘛,那就開始吧。

小五:好的。上次說到你們後續進行了微服務的改造,很多網友沒有聽夠,想讓您再多講講微服務改造適用的場景。

C哥:好,那我就係統的講一下微服務所針對的問題吧。

三、為何需要微服務

1、越來越龐大的單體應用

C哥:小五,你知不知道什麼是單體應用?

小五:是說所有的服務都放在一臺機器中嗎?

C哥:對,差不多這個意思。單體應用是相對於微服務來說的。單體應用,即所有的服務都會在一個程式空間內執行,不會跨程式呼叫。對於絕大多數公司來說,前期的技術架構應該都是單體應用。

小五:是的。就像您昨天說的,單體LNMP能夠滿足絕大部分創業公司的需求了。

C哥:對,但是隨著系統的功能越來越多,這個單體應用就會越來越大,有時候甚至牽一髮動全身。

小五:那C哥您能舉個例子說明下這個問題嗎?

C哥:就拿呱呱樂公司來說吧。呱呱樂發展到第5年的時候,系統還是單體應用,架構可以用一張圖表示。

image_1c5apk9re14e1jfhp6d1n9bb539.png-32.8kB

C哥:如你所見,每臺機器都部署了一個Application。但每個Application內包含了公司所有的服務。我們還是畫張圖簡單表示下每個Application的構成。

image_1c5aqbco71g4mjeg112s77gcsam.png-42.3kB

小五:哇塞,好龐大的系統啊!

C哥:是的,隨著業務越來越複雜,這個單體應用也會越來越大。

2、牽一髮而動全身

小五:C哥,我好像聞到了"壞味道",這樣的架構是不是經常出問題啊?

C哥:你說的沒錯,因為所有的服務都在一個應用內,一個服務出錯,整個應用都會掛掉。

小五:也就是這個應用耦合性太高了。

C哥:是,同樣的,一個服務升級,整個Application也必須全部跟著一起升級釋出。可以說牽一髮而動全身。

3、無法小步快跑

C哥:我們都知道,網際網路產品的一個特點就是"快",快速試水,快速改進,也就是所說的小步快跑。但是,系統太龐大了,很多服務耦合在一起,共用DB、共用Cache、到處Copy-Paste的程式碼。我們每改一個功能,好多團隊都需要作出改動,並且需要大量的測試才可以。

小五:是,那這樣小步快跑的原則根本無法實現了啊。

C哥:說出來你可能不信,有一次我們要加一個使用者提醒的小功能,竟然一個月才搞定上線。

小五:哈哈,那這樣的架構,的確急需改變,要不然產品太沒競爭力了。

4、單個服務的水平擴充套件

C哥:服務的水平擴充套件也是一個問題。比如我們的訂單服務,每天需要處理大量的資料,也就是訂單服務需要更多的計算資源。但我們無法針對訂單服務進行水平擴充套件。如果訂單服務支撐不過來了,我們只能水平的擴充套件整個Application。

小五:是啊,那這樣就浪費了很多的計算資源,同時也不能很好的解決訂單服務的效能瓶頸。

5、團隊分工的混亂

C哥:我們可以看出來,系統很耦合混亂。與之相對的,系統的混亂導致了團隊分工的混亂。因為系統的各個服務沒有很好的邊界,所以團隊中的人做的事情很雜,造成有的人很閒,有的人很忙。

小五:嗯嗯,這個很多人應該都有體會,沒有專人做專事,分工不明確。

6、程式碼不敢重構

C哥:看到爛程式碼,你是否敢去重構呢?

小五:我反正不敢重構,哈哈,牽一髮而動全身。

C哥:是啊,我也不敢去重構,在一個龐大的單體應用中,重構後說不定就把哪個服務搞掛了。

1.gif-364.3kB

2.gif-558.5kB

3.gif-846.1kB

7、服務的複用

C哥:我昨天還提到一個問題,就是服務的複用。比如訂單服務、賬單服務,我們很多業務(理財、分期、現金貸)都會用到,如果沒有做服務的拆分的話,各個系統間只能是copy-paste相同服務的程式碼。

小五:是啊,那這樣的話,我們就需要維護n套相同的程式碼,稍有不慎就會翻車。

C哥:對,但我們將服務拆封出來後,這個問題就不復存在了。

image_1c5av5gog4q8cf8bbc6h31mc92r.png-55.9kB

四、微服務的好處

小五:C哥,聽你這麼一說,龐大的單體應用確實帶來了很多問題。

C哥:是的,剛才我說的所有問題,都是呱呱樂實際經歷過的。而這些問題,使用微服務都能夠解決。微服務是鬆耦合的,同時,人員架構的合理調整也會帶來效率的提升。

五、躍躍欲試

小五:C哥,聽你這麼一講,微服務簡直太好了!我恨不得想馬上嘗試一下了,哈哈。

C哥:哈哈,先別激動。很多事情都是一把雙刃劍,微服務也會帶來很多問題。

小五:哦?會帶來哪些問題呢?

C哥:其實帶來的問題還是很多的,如果這些問題解決不了,上來就搞微服務其實就是耍流氓。

小五:對對,得尋找適合自己的方案。

C哥:好了,至於缺點,我們明天再講吧,今天就到這吧。

小五:好的C哥,明天見!


後記:任何事物的產生,都是為了針對某些場景解決某些問題。所以,脫離業務,或者脫離場景的技術,都是耍流氓。

微服務要解決的問題還是很多的:其中,資料一致性是一個大問題,還有涉及到的RPC、Docker、服務發現等,都需要考慮。

此係列文章旨在讓大家對微服務有一個全貌的瞭解,改天我們再聊聊微服務的問題以及微服務的實現,週末快樂^_^。


image_1c5582vev1mql1lrpbm3198i1pkop.png-127.1kB

相關文章