一、背景
軟件架構,總是在不斷的演進中...
把時間退回到二十年之前,當時企業級領域研發主要推崇的還是C/S模式,PB、Delphi這樣的開發軟件是企業應用開發的主流。隨著時間的推移,基于瀏覽器的B/S架構開始漸漸流行了起來。初期,Web開發ASP還占據了不少優勢,但JSP的預編譯模式讓性能有了很大提升,隨后基于JAVA語言的J2EE架構變得越來越流行。
早期軟件架構基本都是單體架構,系統之間往往不需要進行交互,這也導致數據孤島和ETL工具的發展。隨著企業應用越來越多,相互的關系也越來密切,應用之間也迫切需要進行實時交互訪問,隨后基于XML的異構系統集成和數據交互技術開始被很多公司采用,SOA的概念被提了出來,web service逐漸流行。
互聯網時代,很多公司為了適應更加靈活的業務需求,基于HTTP協議和Restful的架構風格及簡潔和結構清晰的JSON語言成為企業開發的最佳實踐,在SOA架構中,企業服務總線技術ESB所暴露的集中式架構的劣勢讓開發者明白基于注冊和發現的分布式架構才是解決問題的關鍵辦法。由此,微服務架構開始盛行。
在《微服務設計》中如何界定一個微服務,就是使用松耦合&高內聚原則,把因相同因素變化的事情聚集在一起,把因不同因素變化的事情區隔開來。
二、微服務架構特性
微服務,其實是一種架構風格...
2.1 異構
服務不同最適合的技術方案不同,微服務可以幫助我們輕松采用不同的技術,并且理解這些新技術的好處。嘗試新技術通常伴隨著風險,但對于微服務系統而言,總會存在一些地方讓你可以選擇一個風險最小的服務采用新技術,并降低風險。
2.2 隔離
微服務架構將系統分解為獨立運行單元,給系統帶來更好的隔離性,獨立的微服務在發生異常時更容易定位和隔離問題,隔離性也是服務擴展性的基礎。
2.3 擴展
龐大的單體服務只能作為一個整體進行擴展,即使系統中只有一小部分模塊存在性能問題,也需要對整個系統進行擴展。而微服務架構可以根據性能需要對不同的模塊進行水平擴展,微服務的彈性也可以很好地處理服務不可用和功能降級問題。
2.4 部署簡單
在微服務架構中,各個服務的部署是獨立的,這樣就可以更快地對特定部分的代碼進行部署。服務出現問題也更容易快速回滾,同時敏捷的交付和部署帶來了更好的業務需求響應體驗。
2.5 靈活
在微服務架構中,系統會開放很多接口供外部使用,當情況發生改變時,可以使用不同的方式構建應用。而整體化的應用程序只能提供一個非常粗粒度的接口供外部使用。把單體應用分解成多個微服務,可以達到可復用、可組合的目的。
三、微服務與網關技術
下圖是一個典型的微服務架構,僅供參考。
3.1 什么是微服務網關
微服務網關是微服務架構中的一個關鍵的角色,用來保護、增強和控制對于微服務的訪問,微服務網關是一個處于應用程序或服務之前的系統,用來管理授權、訪問控制和流量限制等,這樣微服務就會被微服務網關保護起來,對所有的調用者透明。因此,隱藏在微服務網關后面的業務系統就可以更加專注于業務本身。
3.2 微服務網關的分類
常見的微服務網關根據使用特性大致被分成流量網關和業務網關。兩種網關分別有不同關注點,下圖總結了兩種網關類型特性:
3.3 微服務網關的作用
微服務網關作為連接服務的消費方和服務提供方的中間件系統,將各自的業務系統的演進和發展做了天然的隔離,使業務系統更加專注于業務服務本身,同時微服務網關還可以為服務提供和沉淀更多附加功能,微服務網關主要作用如下:
節選自:https://my.oschina.net/u/4007037/blog/3089017