叢集、分散式、SOA、微服務、webService等思想的整理

天下!行發表於2020-05-16

引子:前幾天甲方博士問我,他用wpf弄個介面,能不能通過其他語言給他傳輸資料,我由此想到了webservice(此時此刻,我也沒有用過webService),作日翻閱了一些資料,對這塊技術有了個大概的瞭解。

看了webservice、就看到了soap協議、也看到了SOA思想,然後又引出微服務、微服務都引出來了,叢集與分散式兩兄弟都隨風而至。(說來慚愧,以上的技術以及思想,本人回顧之前的開發經歷,貌似都沒有實實在在的用過),不過沒有用過,我也想總結一下,混個臉熟,留個印象,貌似接下來要搞的專案這些都得用到。

先說說webService:

  WebService是一種跨程式語言和跨作業系統平臺的遠端呼叫技術.

  就好比你客戶端用c#開發了一套桌面介面,放在windows系統上執行,稱為A,我服務端用java寫了一個方法返回資料(xml、json),,我把java這個方法打包放到linux上,成為B。然後A從B獲取資料,A  B一起幹活,不亦樂乎!網路上比較典型的例證就是。在騰訊qq介面上的天氣預告就是呼叫氣象局的webservice,獲取資料,然後展示在自己的介面上(我也在想,之前做的專案前後端不分離,但是我前端也是通過ajax呼叫後端controller的方法,獲取到想要的json,這跟webservice多少有些像吧,只是沒有像webservice分的這麼明顯,看官大神請指正,嘿嘿)

webService三要素

SOAP(Simple Object Access Protoclol)、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用來描述傳遞資訊的格式, WSDL 用來描述如何訪問具體的介面, uddi用來管理,分發,查詢webService
 
再聊聊SOA
SOA(Service-Oriented Architecture)的定義是  面向服務的架構,不要看它與soap像,它們兩不是一個概念,前者是一種巨集觀的設計思想,後者是一個規定的協議!
 
下面是百度百科給的定義
面向服務的架構(SOA)是一個元件模型,它將應用程式的不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的介面和協議聯絡起來。介面是採用中立的方式進行定義的,它應該獨立於實現服務的硬體平臺、作業系統和程式語言。這使得構件在各種各樣的系統中的服務可以以一種統一和通用的方式進行互動。
 
應用場景:
當一個系統過大時,我們會將系統拆分為多個子系統,各個子系統互相呼叫,來完成大系統的任務這裡就用到了SOA,如下圖,下圖是我盜來的,來自 該大神
 
 小小插入:前段時間在阿里雲租了幾臺伺服器,研究部署 kafka storm 等,它們都是通過zookeeper統一排程分發節點、分割槽的,zookeeper所用到的思想與這SOA也差不多吧
 
最後再談談 叢集、分散式、微服務這三個
 
叢集、分散式
概念:
叢集是個物理形態,分散式是個工作方式。
1.分散式:一個業務分拆多個子業務,部署在不同的伺服器上
2.叢集:同一個業務,部署在多個伺服器上
分散式是指將不同的業務分佈在不同的地方。而叢集指的是將幾臺伺服器集中在一起,實現同一業務。
分散式中的每一個節點,都可以做叢集。而叢集並不一定就是分散式的。
舉例:就比如新浪網,訪問的人多了,他可以做一個叢集,前面放一個響應伺服器,後面幾臺伺服器完成同一業務,如果有業務訪問的時候,響應伺服器看哪臺伺服器的負載不是很重,就將給哪一臺去完成。
而分散式,從窄意上理解,也跟叢集差不多,但是它的組織比較鬆散,不像叢集,有一個組織性,一臺伺服器垮了,其它的伺服器可以頂上來。
分散式的每一個節點,都完成不同的業務,一個節點垮了,那這個業務就不可訪問了。
簡單說,分散式是以縮短單個任務的執行時間來提升效率的,而叢集則是通過提高單位時間內執行的任務數來提升效率。

微服務

1. 微服務的誕生

微服務是基於分而治之的思想演化出來的。過去傳統的一個大型而又全面的系統,隨著網際網路的發展已經很難滿足市場對技術的需求,於是我們從單獨架構發展到分散式架構,又從分散式架構發展到 SOA 架構,服務不斷的被拆分和分解,粒度也越來越小,直到微服務架構的誕生。

微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為使用者提供最終價值。

每個服務執行在其獨立的程式中,服務和服務間採用輕量級的通訊機制互相溝通(通常是基於 HTTP 的 RESTful API)。每個服務都圍繞著具體業務進行構建,並且能夠被獨立地部署到生產環境、類生產環境等。另外,應儘量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。

2. 微服務架構與SOA架構的區別

微服務是真正的分散式的、去中心化的。把所有的“思考”邏輯包括路由、訊息解析等放在服務內部,去掉一個大一統的 ESB,服務間輕通訊,是比 SOA 更徹底的拆分。

微服務架構強調的重點是業務系統需要徹底的元件化和服務化,原有的單個業務系統會拆分為多個可以獨立開發,設計,執行和運維的小應用,這些小應用之間通過服務完成互動和整合。

 

總結一下,其實我自己感覺 分散式、SOA、微服務 三者的思想是一致的,都是將一個系統分而治之,互相解耦,只是三者的分治力度大小不一樣,分散式<SOA<微服務(個人見解啊,若有不當,望大家糾正)

 

說在最後:其實不管啥技術,基本都是業務催生的,要做好一個專案其實並不是你用的技術多牛就行,而是你要把這個專案做的讓客戶滿意才行。另外我們在工作中、生活中、不斷得提高自己,望每個程式設計師都有一個好的環境提高自己,賺足錢,娶老婆!另外發個牢騷:今年上班兩個多月了,才領了一個多月工資,然而租房也兩個多月了,卻要交半年的房租,不容易啊!,加油

 

 

相關文章