微服務的出現,標志了又一個新的里程碑,似乎你不知道微服務就代表你好像out了一樣。微服務是業務服務化,將SOA更好的延續了下去。配合restful也能夠更好的提供api接口。
簡單來說就是微服務把各種各樣的小的服務區分開來當做一個當度的應用跑在服務器上,並且他的通信機制也是十分簡單的,使用rest或者rpc都行。他們可以各自對自己的業務進行處理。各個服務直接可以用不同的語言開發,這樣提高了不同技術團隊之間的職能。
微服務的特點:
1、微服務的組件是以服務的形式存在的。
2、由各個不同的業務來切分整個大服務。
3、微服務是產品,不是項目。微服務在整個開發生命周期十分長久,並且需要后期團隊的維護,就是因為微服務的特性,才使得維護更加的方便。
4、簡單的通信機制,不論是rpc還是restful,都簡化了系統服務之間的訪問,並不像曾經的wsdl那么復雜。
5、分散治理,這個就是跟傳統巨石應用區別開來了。不同的服務都是一個很小的組件,那么在組裝的時候不同的服務可以組裝成不同的微服務,十分靈活。
6、數據庫分散管理,在做巨石應用的時候,一個項目就是訪問一個數據庫。那么微服務不是,每個不同的業務訪問並且管理的都是自己的數據庫,與各個不同的服務之間的數據庫是不同的,這樣也做到了數據的隔離。
7、容錯性,每個服務宕掉不可訪問的時候,微服務可以為每個服務進行監控與恢復。
其實我們平時接觸的最多的還是SOA,SOA是偏向系統的解決方案,而微服務面向服務,微服務的顆粒度要小很多,SOA比較大,哪怕是一個小更新其實也是要重啟對應的系統,而微服務卻不是。考慮一下玩王者榮耀的時候,可以不停機更新,是不是一個道理?
SOA的缺點:
隨着時間的推移,代碼庫會越來越大,如果團隊來了一個新人是十分恐懼的。
開發工具也會隨着代碼量的增多變得緩慢,這樣導致的就算是開發效率的降低。
服務器啟動變慢,代碼變多,容器在加載的時候讀取的代碼文件也越多,這樣導致容器每次啟動都會比較慢。
持續部署相對復雜,不利於運維更新。每次更新整個系統必須關閉,用戶無法訪問。
可擴展性降低。
微服務的特點:
各服務之間通過json或者xml的數據形式通信。把一組類似的功能或者業務作為一個單獨的微服務來做。比如訂單服務讓訂單核心團隊來維護。cms由cms團隊來維護。
服務之間通過rest或者rpc來通信,甚至使用消息隊列。
服務獨立開發和部署,相互不影響,技術只能部門也相互不影響。
服務之間相互解耦,每個服務都有自己對應的數據庫。注意,這需要做好數據一致性,比如tcc。
每個服務獨立部署,對於頻繁更新版本的項目由很好的效率。
便於擴展團隊和組織架構。
整個微服務相對技術難度比SOA加大,需要開發人員對技術有一定的持續投入。
分布式事務比單體應用難處理。
生產環境部署復雜度提升,需要運維人員有一定的功底。
微服務的難點:
很多初創型公司對於開發進度是十分有要求的,起初並不會使用微服務架構,而是單體應用或者SOA,為的是更好更快速的發展自身的業務。然而發展到一定規模后,整個技術架構發生變化,要重構為微服務,這個時候的技術選型以及如何重構,和整個團隊技術人員的參與就相對來說是個難點了。