作為一名IT從業者,懈怠是一件奢侈的事情,因為在IT圈,原地踏步就等於退步。
“微服務”這個名詞已經廣為流傳,但是我覺得大部分的人也許同我一樣,僅僅只是處於對這個概念的認知上;是的!今天我希望跟大家一起揭開它的神秘面紗:)
本次系列文章主要是記錄自己一點一點學習微服務的過程,希望大家能和我一起探討或者指正不足[抱拳]。
-
我們為什么要使用微服務架構
在我從事架構師的這幾年,我帶領團隊做過很多項目,以小中型為主,很少涉及大型項目,因此我設計的架構往往都是單體式應用,以下架構拓撲圖是我最常用的:
對於不同項目性能需求,通過橫向擴展服務器數量基本上可以達到。
其實上圖的架構就是一個通用典型單體架構,應用核心是業務邏輯,有API網關和Service業務模塊構成,前端通過Nginx負載均衡對外提供Web服務或者REST API服務。
盡管也是模塊化邏輯,但是最終它還是會被打包成War並部署為單體式應用。通過多個tomcat來橫向擴展訪問瓶頸,非常簡單易用,也基本上解決了我工作中的多數項目問題~
那么問題來了,這種架構到底有什么問題?
- 從開發角度來講:假如我要修改某一點業務(比如工資結算的一個算法優化),那么我修改完這個class后,需要把這個web工程重新編譯並打包;
- 從部署角度來講:一句代碼的修改,需要講所有的服務器重新替換war后部署一遍;
- 從測試角度來講:我們不但需要做變更業務的測試,我們還需要做各種回歸測試,我們不確定這個方法的改動或者這個變量的改動,會不會對其他方法或者class產生影響,所以我們需要做全面的測試,即使只修改了一句代碼。
我相信大多數人可能遇到過這樣的問題:我們要接手修改離職的同事寫的代碼,復雜的業務邏輯,混亂的命名規則看的腦袋疼,有時候為了修改一個bug,我們花了幾天的時間才捋順了邏輯,到了最后可能就修改了一兩句代碼,這個工作很耗時,情緒也很不好,代碼變得越來越難以維護。
另外,在如今互聯網的時代,敏捷開發,快速迭代,持續發開已經成為一種常態,然而這些新特性在單體式應用上很難實現;所以如果你要處理相對大型的,復雜的業務,那么從現在開始學習微服務架構吧!
-
什么是微服務架構?
Martin Folwer對微服務架構的定義是:

-
本章總結
- 圖1的所有服務出口單一,圖2服務出口有多個,根據設備的不同,需求的不同,可以分離維多個出口;
- 圖1的業務是集合的,只能通過復制備份的方式橫向擴展,圖2業務是非耦合的,盡可能在單一服務中處理單一集中性業務,不摻雜其他無關業務;
- 圖1代碼修改后,需要把所有服務器重新部署一遍;圖2只需要針對性的部署修改的具體服務,其他無關服務不需要變化。