1. 程式人生 > >mvc 、RPC、SOA框架 的適用範圍和區別

mvc 、RPC、SOA框架 的適用範圍和區別

1、背景

 隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有

條不紊的演進。

  • 單一應用架構
    • 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
    • 此時,用於簡化增刪改查工作量的 資料訪問框架(ORM) 是關鍵。
  • 垂直應用架構
    • 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
    • 此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
  • 分散式服務架構
    • 當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
    • 此時,用於提高業務複用及整合的 分散式服務框架(RPC) 是關鍵。
  • 流動計算架構
    • 當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。
    • 此時,用於提高機器利用率的 資源排程和治理中心(SOA) 是關鍵。

2、框架分類

2.1   RPC框架

             首先了解什麼是RPC為什麼要用RPC,RPC(Remote Procedure Call Protocol)是B指遠端過程呼叫,也就是說兩臺伺服器A,B,一個應用部署在A上想要呼叫B伺服器應用提供的函式方法,由於不在一個記憶體空間,不能直接進行呼叫,,需要通過網路來表達呼叫的語義和傳達呼叫的資料。

Girl  callMMGirlByName( String name)

  • 那麼,首先要解決通訊的問題,主要是通過在客戶端和伺服器之間建立Tcp連線,遠端過程呼叫的所有交換的資料都在這個連線裡傳輸。

  • 第二,要解決定址的問題,也就是說A伺服器上的應用怎麼告訴底層的RPC框架,如何連線到B伺服器(如主機或IP地址)以及特定的埠,方法的名稱是什麼,這樣才能完成呼叫。比如基於Web服務協議的RPC,就要提供一個endpoint  URI,或者是從UDDI服務上查詢(web service  中具體用用了rpc框架)

  • 第三,解決引數傳遞的問題,當 A伺服器上的應用遠端過程呼叫時,方法的引數需要通過底層的網路協議如TCP傳遞到B伺服器 ,由於網路協議是基於二進位制的,記憶體中的引數的值要序列化成二進位制的形式,通過定址和傳輸將序列化的二進位制傳送給B伺服器。

  • 第四、B伺服器收到請求後,需要對引數進行反序列化,恢復成記憶體中的傳遞方式,然後找到對應的方法進行本地回撥,然後得到返回值

  • 第五,返回值還要傳送回伺服器A上的應用,也要經過序列化的方式傳送,伺服器A接到後,再反序列化,恢復為記憶體中的表示式

2.2  SOA框架

  以一個公司為例:

有基層員工 有管理層 有老闆,最初大家都聽老闆指揮,誰幹什麼誰幹什麼,根據需要,你可能今天干A事情,明天干B事情,後來人越來越多了,事情也越來越多了,做事情的效率越來越多,管理也很混亂,就開始做部門劃分(服務化),專門部門做專門事情的,IT部門只做研發,人事部門只做招聘; 這個時候就無法避免的發生跨部門協作(伺服器呼叫), 但是你怎麼知道有這樣一個部門可以做這個事情呢,就要依賴行政部門(註冊中心),新成立的部門要在行政哪裡做一個備案(服務註冊),然後公佈一下,讓其他部門知道了(服務釋出),大家就可以在新的工作秩序裡面嗨皮的上班了,這個時候依然是在公司的組織架構中運轉;
上述就是我理解的SOA的概念