傳統服務
傳統的企業(yè)級應用是單體應用挨摸,一般是分層結構镇饮,如表現層/應用層/領域層/數據層广鳍,這主要是水平切分的思想逆趣。一般的架構圖如下:
orgservice.png
上述的好處是有條件的:應用不那么復雜蝶溶。對于大規(guī)模的復雜應用,巨石型應用會顯得特別笨重:要修改一個地方就要將整個應用全部部署(PS:在不同的場景下優(yōu)勢也變成了劣勢)宣渗;編譯時間過長抖所;回歸測試周期過長;開發(fā)效率降低等痕囱。另外田轧,巨石應用不利于更新技術框架,除非你愿意將系統全部重寫
微服務架構
微服務是為適應當前互聯網快速發(fā)展鞍恢,互聯網應用快速迭代傻粘、快速部署而產生的技術架構,微服務強調的是在共享硬件資源的基礎上隔離帮掉,缺乏軟件共享弦悉;相當于敏捷的建立了很多小煙囪系統,降低耦合.
微服務所設計的每個微服務都要非常容易被拋棄蟆炊、被替換稽莉。擁抱不斷變化的業(yè)務,快讀迭代開發(fā)盅称。微服務設計目標是降低系統復雜度肩祥,提高開發(fā)生產力后室,是適合敏捷方法快速建立持續(xù)改進的系統缩膝,例如互聯網應用.
微服務架構圖:
server2.png
微服務網關
微服務在每個子服務的上層封裝了一層網關服務層。
微服務網關存在的意義與價值:
- 微服務每個服務可以獨立部署并且互相隔離岸霹,對外提供不同服務疾层,這樣會造成客戶端從原來傳統服務的"1對1”變成了微服務體系下的"1對N",微服務體系下解決"1對N"問題方案就是在所有微服務的上層在抽象封裝一層贡避,微服務網關層痛黎。用于對外統一提供服務,屏蔽內部獨立服務的訪問刮吧,同時子服務的添加湖饱,移除對外無感知,增加了系統的擴展性杀捻。
- 與傳統單一服務對比井厌,微服務由于分割成無數個單獨的子服務,那么在,鑒權仅仆、流控器赞、校驗等預處理的邏輯,每個單獨子服務都需要編寫墓拜,造成代碼多處冗余港柜,同時業(yè)務變動也需要所有的子服務變更。那么將這些預處理邏輯抽象統一到上層網關層做就變得很有意義了咳榜,子服務只需關注自身業(yè)務邏輯的處理夏醉。
開源微服務網關:
- zuul :netflix開源的一個API Gateway 服務器, 本質上是一個web servlet應用,同時與springcloud無縫的集成
- springcloud-gateway:是spring團隊開發(fā)非阻塞的IO 的API網關。