微服務·理論篇(二)

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


1、熱烈的會議

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

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

2、採訪開始

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

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

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

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

3、爲什麼須要微服務

一、愈來愈龐大的單體應用

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

小五:是說全部的服務都放在一臺機器中嗎?資源

C哥:對,差很少這個意思。單體應用是相對於微服務來講的。單體應用,即全部的服務都會在一個進程空間內執行,不會跨進程調用。對於絕大多數公司來講,前期的技術架構應該都是單體應用。部署

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

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

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

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

image_1c5apk9re14e1jfhp6d1n9bb539.png-32.8kB

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

image_1c5aqbco71g4mjeg112s77gcsam.png-42.3kB

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

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

二、牽一髮而動全身

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

C哥:你說的沒錯,由於全部的服務都在一個應用內,一個服務出錯,整個應用都會掛掉。

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

C哥:是,一樣的,一個服務升級,整個Application也必須所有跟着一塊兒升級發佈。能夠說牽一髮而動全身。

三、沒法小步快跑

C哥:咱們都知道,互聯網產品的一個特色就是"快",快速試水,快速改進,也就是所說的小步快跑。可是,系統太龐大了,不少服務耦合在一塊兒,共用DB、共用Cache、處處Copy-Paste的代碼。咱們每改一個功能,好多團隊都須要做出改動,而且須要大量的測試才能夠。

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

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

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

四、單個服務的水平擴展

C哥:服務的水平擴展也是一個問題。好比咱們的訂單服務,天天須要處理大量的數據,也就是訂單服務須要更多的計算資源。但咱們沒法針對訂單服務進行水平擴展。若是訂單服務支撐不過來了,咱們只能水平的擴展整個Application。

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

五、團隊分工的混亂

C哥:咱們能夠看出來,系統很耦合混亂。與之相對的,系統的混亂致使了團隊分工的混亂。由於系統的各個服務沒有很好的邊界,因此團隊中的人作的事情很雜,形成有的人很閒,有的人很忙。

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

六、代碼不敢重構

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

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

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

1.gif-364.3kB

2.gif-558.5kB

3.gif-846.1kB

七、服務的複用

C哥:我昨天還提到一個問題,就是服務的複用。好比訂單服務、帳單服務,咱們不少業務(理財、分期、現金貸)都會用到,若是沒有作服務的拆分的話,各個系統間只能是copy-paste相同服務的代碼。

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

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

image_1c5av5gog4q8cf8bbc6h31mc92r.png-55.9kB

4、微服務的好處

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

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

5、躍躍欲試

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

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

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

C哥:其實帶來的問題仍是不少的,若是這些問題解決不了,上來就搞微服務其實就是耍流氓。

小五:對對,得尋找適合本身的方案。

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

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


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

微服務要解決的問題仍是不少的:其中,數據一致性是一個大問題,還有涉及到的RPC、Docker、服務發現等,都須要考慮。

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


image_1c5582vev1mql1lrpbm3198i1pkop.png-127.1kB
相關文章
相關標籤/搜索