SOA && REST

soa, https://baike.baidu.com/item/SOA/2140650web

概念理解:https://www.zhihu.com/question/42061683,裏面的回答:算法

  【 SOA粗暴理解:把系統按照實際業務,拆分紅剛恰好大小的、合適的、獨立部署的模塊,每一個模塊之間相互獨立。數據庫

好比現我有一個數據庫,一個JavaWeb(或者PHP等)的網站客戶端,一個安卓app客戶端,一個IOS客戶端。json

如今我要從這個數據庫中獲取註冊用戶列表,若是不用SOA的設計思想,那麼就會這樣:JavaWeb裏面寫一個查詢方法從數據庫裏面查數據而後在網頁顯示,安卓app裏面寫一個查詢方法查詢後在app上顯示,IOS一樣如此。這裏就會出現查詢方法重疊了,這樣的壞處很明顯了,三個地方都有相同的業務代碼,要改三個地方都要改,並且要改的如出一轍。固然問題不止這一個。設計模式

因而乎出現了這樣的設計思想,好比用Java(或者是其餘語言皆可)單首創建一個工程部署在一臺服務器上,而且寫一個方法(或稱函數)執行上述查詢操做,而後使其餘人能夠經過某種途徑(能夠是http連接,或者是基於socket的RPC調用)訪問這個方法獲得返回數據,返回的數據類型是通用的json或者xml數據,就是說把這個操做封裝到一個工程中去,而後暴露訪問的方式,造成「服務」。好比這裏就是註冊用戶服務,而關於註冊用戶的全部相關增刪改查操做這個服務都會提供方法。緩存

這樣一來,JavaWeb這邊能夠訪問這個服務而後獲得數據使用,安卓和IOS這裏也能夠經過這個服務獲得數據。並且最重要的是,要修改關於註冊用戶的業務方法只要改這個服務就行了,很好的解耦。同理,其餘業務好比商品、廣告等業務均可以單獨造成服務部署在單獨服務器上。安全

還有就是一旦哪天忽然有一堆人要註冊,假設這堆人僅僅只是註冊而不作其餘事情,其餘業務好比商品、廣告服務等都不忙,惟獨註冊這個功能壓力很大,而原有的一臺部署了註冊服務的服務器已經承受不了這麼高的併發,這時候就能夠單獨集羣部署這個註冊服務,提供多幾臺服務器提供註冊服務,而其餘服務還不忙,那就維持原樣。服務器

固然,還有不少其餘好處。網絡

以上我所描述的都還不能徹底稱爲SOA,還不夠完整,由於它少了服務治理這一環節。架構

什麼是服務治理,就是當服務愈來愈多,調用方也愈來愈多的時候,它們之間的關係就變得很是混亂,須要對這些關係進行管理。舉例,仍是上面的例子,假如我有一個用戶服務,一開始有調用方1和調用方2來使用這個服務,後來愈來愈多,將近上百個調用方,這個時候做爲服務方,它只知道提供服務,殊不知道具體爲誰提供了服務。而對於開發者來講,知道這N多調用方和N多服務方之間的關係是很是重要的。

因此這個時候就須要能進行服務治理的框架,好比dubbo+zookeeper,好比SpringCloud,有了服務治理功能,咱們就能清晰地看到服務被誰誰誰調用,誰誰誰調用了哪些服務,哪些服務是熱點服務須要配置服務器集羣,而對這個服務集羣的負載均衡也是服務治理能夠完成的重要功能之一。

這個時候就是徹底形態的SOA了。

實際上SOA只是一種架構設計模式,而SOAP、REST、RPC就是根據這種設計模式構建出來的規範,其中SOAP通俗理解就是http+xml的形式,REST就是http+json的形式,RPC是基於socket的形式。上文提到的CXF就是典型的SOAP/REST框架,dubbo就是典型的RPC框架,而SpringCloud就是遵照REST規範的生態系統。

      】 

 

組件模型待補充

https://blog.csdn.net/wdeng2011/article/details/78274683

REST(英文:Representational State Transfer,簡稱REST)描述了一個架構樣式的網絡系統,好比 web 應用程序。

原則條件

    REST 指的是一組架構約束條件和原則。知足這些約束條件和原則的應用程序或設計就是 RESTful。

 

     Web 應用程序最重要的 REST 原則是,客戶端和服務器之間的交互在請求之間是無狀態的。從客戶端到服務器的每一個請求都必須包含理解請求所必需的信息。若是服務器在請求之間的任什麼時候間點重啓,客戶端不會獲得通知。此外,無狀態請求能夠由任何可用服務器回答,這十分適合雲計算之類的環境。客戶端能夠緩存數據以改進性能。

 

  在服務器端,應用程序狀態和功能能夠分爲各類資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、數據庫記錄、算法等等。每一個資源都使用 URI (Universal Resource Identifier)獲得一個惟一的地址。全部資源都共享統一的接口,以便在客戶端和服務器之間傳輸狀態。使用的是標準的HTTP方法,好比GET、PUT、POST 和DELETE

 

分層系統

    另外一個重要的 REST原則是分層系統,這表示組件沒法瞭解它與之交互的中間層之外的組件。經過將系統知識限制在單個層,能夠限制整個系統的複雜性,促進了底層的獨立性。

    當 REST架構的約束條件做爲一個總體應用時,將生成一個能夠擴展到大量客戶端的應用程序。它還下降了客戶端和服務器之間的交互延遲。統一界面簡化了整個系統架構,改進了子系統之間交互的可見性。REST簡化了客戶端和服務器的實現。

 

    REST 描述了一個架構樣式的互聯繫統(如Web應用程序)。REST約束條件做爲一個總體應用時,將生成一個簡單、可擴展、有效、安全、可靠的架構。因爲它簡便、輕量級以及經過HTTP直接傳輸數據的特性,RESTful Web服務成爲基於SOAP服務的一個最有前途的替代方案。用於web服務和動態Web應用程序的多層架構能夠實現可重用性、簡單性、可擴展性和組件可響應性的清晰分離。開發人員能夠輕鬆使用Ajax和RESTful Web服務一塊兒建立豐富的界面。

相關文章
相關標籤/搜索