什么是SOA
SOA(Service-Oriented Architecture)面向服務架構,它可以根據需求通過網絡對松散耦合的粗粒度應用組件進行分布式部署、組合和使用。服務層是SOA的基礎,可以直接被應用調用,從而有效控制系統中與軟件代理交互的人為依賴性。
SOA是一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義接口進行通訊,不涉及底層編程接口和通訊模型。SOA可以看作是B/S模型、
XML(
標准通用標記語言的子集)/Web Service技術之后的自然延伸。
SOA將能夠幫助軟件工程師們站在一個新的高度理解企業級架構中的各種組件的開發、部署形式,它將幫助企業系統架構者以更迅速、更可靠、更具重用性架構整個業務系統。較之以往,以SOA架構的系統能夠更加從容地面對業務的急劇變化。
區別
SOA
SOA的提出是在企業計算領域,就是要將緊耦合的系統,划分為面向業務的,粗粒度,松耦合,無狀態的服務。服務發布出來供其他服務調用,一組互相依賴的服務就構成了SOA架構下的系統。
基於這些基礎的服務,可以將業務過程用類似BPEL流程的方式編排起來,而BPEL反映的是業務處理的過程,這些過程對於業務人員更為直觀,調整也比hardcode的代碼更容易。
當然企業還需要對服務治理,比如服務注冊庫,監控管理等。
我們知道企業計算領域,如果不是交易系統的話,並發量都不是很大的,所以大多數情況下,一台服務器就容納將許許多多的服務,這些服務采用統一的基礎設施,可能都運行在一個應用服務器的進程中。雖然說是面向服務了,但還是單一的系統。
微服務
而微服務架構大體是從互聯網企業興起的,由於大規模用戶,對分布式系統的要求很高,如果像企業計算那樣的系統,伸縮就需要多個容納續續多多的服務的系統實例,前面通過負載均衡使得多個系統成為一個集群。
但這是很不方便的,互聯網企業迭代的周期很短,一周可能發布一個版本,甚至可能每天一個版本,而不同的子系統的發布周期是不一樣的。
而且,不同的子系統也不像原來企業計算那樣采用集中式的存儲,使用昂貴的Oracle存儲整個系統的數據,二是使用MongoDB,HBase,Cassandra等NOSQL數據庫和Redis,memcache等分布式緩存。
那么就傾向采用以子系統為分割,不同的子系統采用自己的架構,那么各個服務運行自己的Web容器中,當需要增加計算能力的時候,只需要增加這個子系統或服務的實例就好了,當升級的時候,可以不影響別的子系統。這種組織方式大體上就被稱作微服務架構。
微服務與SOA相比,更強調分布式系統的特性,比如橫向伸縮性,服務發現,負載均衡,故障轉移,高可用。互聯網開發對服務治理提出了更多的要求,比如多版本,比如灰度升級,比如服務降級,比如分布式跟蹤,這些都是在SOA實踐中重視不夠的。
Docker容器技術的出現,為微服務提供了更便利的條件,比如更小的部署單元,每個服務可以通過類似Node.js或Spring Boot的技術跑在自己的進程中。可能在幾十台計算機中運行成千上萬個Docker容器,每個容器都運行着服務的一個實例。隨時可以增加某個服務的實例數,或者某個實例崩潰后,在其他的計算機上再創建該服務的新的實例。
SOA的提出是在企業計算領域,就是要將緊耦合的系統,划分為面向業務的,粗粒度,松耦合,無狀態的服務。服務發布出來供其他服務調用,一組互相依賴的服務就構成了SOA架構下的系統。
基於這些基礎的服務,可以將業務過程用類似BPEL流程的方式編排起來,而BPEL反映的是業務處理的過程,這些過程對於業務人員更為直觀,調整也比hardcode的代碼更容易。
當然企業還需要對服務治理,比如服務注冊庫,監控管理等。
我們知道企業計算領域,如果不是交易系統的話,並發量都不是很大的,所以大多數情況下,一台服務器就容納將許許多多的服務,這些服務采用統一的基礎設施,可能都運行在一個應用服務器的進程中。雖然說是面向服務了,但還是單一的系統。
微服務
而微服務架構大體是從互聯網企業興起的,由於大規模用戶,對分布式系統的要求很高,如果像企業計算那樣的系統,伸縮就需要多個容納續續多多的服務的系統實例,前面通過負載均衡使得多個系統成為一個集群。
但這是很不方便的,互聯網企業迭代的周期很短,一周可能發布一個版本,甚至可能每天一個版本,而不同的子系統的發布周期是不一樣的。
而且,不同的子系統也不像原來企業計算那樣采用集中式的存儲,使用昂貴的Oracle存儲整個系統的數據,二是使用MongoDB,HBase,Cassandra等NOSQL數據庫和Redis,memcache等分布式緩存。
那么就傾向采用以子系統為分割,不同的子系統采用自己的架構,那么各個服務運行自己的Web容器中,當需要增加計算能力的時候,只需要增加這個子系統或服務的實例就好了,當升級的時候,可以不影響別的子系統。這種組織方式大體上就被稱作微服務架構。
微服務與SOA相比,更強調分布式系統的特性,比如橫向伸縮性,服務發現,負載均衡,故障轉移,高可用。互聯網開發對服務治理提出了更多的要求,比如多版本,比如灰度升級,比如服務降級,比如分布式跟蹤,這些都是在SOA實踐中重視不夠的。
Docker容器技術的出現,為微服務提供了更便利的條件,比如更小的部署單元,每個服務可以通過類似Node.js或Spring Boot的技術跑在自己的進程中。可能在幾十台計算機中運行成千上萬個Docker容器,每個容器都運行着服務的一個實例。隨時可以增加某個服務的實例數,或者某個實例崩潰后,在其他的計算機上再創建該服務的新的實例。
