內容目錄
Toggle什麼是抽象(abstract)?
抽象的概念,可以幫助我們在系統設計時,隱藏一些無關緊要的細節,讓我們能夠專注於整體架構。脫離細節是一件很重要的事情,因為抽象可以隱藏了系統設計內部的複雜性,從而讓我們更專注於,系統設計的結果。
在現在資訊發達的現在,我們都使用電腦進行工作,但我們不會從頭開始製造硬體並開發作業系統。我們使用電腦來完成手上的工作,而不是一直深入研究建造系統。
這邊也用套件來當作舉例,軟體工程師都常會使用別人已經寫好的套件來開發大型系統。因此如果每一個人都需要自己開發套件,那大家將無法完成工作。相反的如果我們使用別人已經寫好的套件,那我們只需要專注在其他功能開發,而這樣子就相當於一個抽象概念,「套件」提供了一個簡單的介面來使用功能,並隱藏了它們是如何實現的內部細節。一個好的抽象允許開發者在多個具有相似需求的項目中重複使用。
資料庫抽象
交易(Transactions)是一種資料庫抽象,當大量的用戶同時讀取、寫入或修改資料時,交易(Transaction)隱藏了許多問題,只提供了一個簡單的介面,例如:在成功的情況下可以繼續,而在失敗的情況下中止。無論哪種方式,資料都從一個一致的狀態移動到新的一致狀態(Consistency)。
這樣的抽象概念,可以讓使用者不必糾結於高併發(High Concurrent)的資料修改,而是可以專注於商業邏輯(Business Logic)。
分散式系統中的抽象
分散式中的抽象幫助工程師簡化他們的工作,並免除他們處理分散式系統底層複雜性的負擔。
隨著許多科系巨頭,例如:Amazon AWS、Google Cloud 和 Microsoft Azure 都有提供分散式系統的雲端服務,分散式系統的抽象概念已變得越來越受歡迎,每一種雲端服務也都提供不同層次的抽象。這些分佈式系統的服務也都是直接提供給使用者使用,而不需要真的去了解,例如:CDN、Storage…。這樣的好處是讓用戶只需要專注在程式的開發,而不是花非常多時間去了解一些系統元件怎麼從無到有實踐。
網絡抽象:遠端程序呼叫 Remote Procedure Calls
這邊我參照 IBM 的說明文件的中文命名,並且也參考以下文件。
什麼是RPC?
「遠端程序呼叫 (RPC)」是一種通訊協定,提供作業系統中使用的高階通訊參照範例。也可以說是一種在分散式系統中廣泛使用的進程(Process)間通信協議。在網絡通信的OSI模型中,RPC跨越了網路傳輸層和網路應用層。
這邊也提供 IBM 的詳細解釋:RPC 假設存在低階傳輸通訊協定,例如傳輸控制通訊協定/Internet Protocol (TCP/IP) 或使用者資料封包通訊協定 (UDP) ,以在通訊程式之間傳送訊息資料。 RPC 會實作專為支援網路應用程式而設計的邏輯用戶端至伺服器通訊系統。
RPC是如何工作的?
當我們進行 RPC 時,呼叫環境會先被暫停,過程參數通過網絡發送到過程將要執行的環境中。當過程執行完成後,結果返回到互叫環境,執行就像常規過程呼叫一樣重新開始。
讓我們通過 Client Side – Server Side 的程式來做舉例,RPC 程式可以分成以下部分,這邊我使用 Microsoft 官方文件的圖片來做展示:
RPC 系統的包含,Client、Client Stub 和一個RPC運行服務在客戶端機器上運行。Server、Server Stub 和一個RPC運行服務在服務器機器上運行。
RPC 在現實生活中的應用
RPC 在許多現實世界的服務中被使用。看看以下給出的例子:
Google GCP 這個知名的雲端服務,會把將分散式系統中的某些部分使用 RPC。他們開發了 gRPC,一個開源框架,使用 RPC 來搭建更高效、高性能的分散式系統。被用於 Google Search、YouTube… 等服務,這個 RPC 的應用,使整個軟體系統在不同系統元件之間的建立連線以及通訊,完成更高效且穩定的連結。
Facebook 的大多數服務都使用 Thrift 進行 RPC,一些儲存系統使用 Thrift 在磁盤上序列化記錄(Serializing Record)。這個 RPC 應用也有幾個好處。例如,可以在不同程式語言之間,進行互通以及互相操作,利如:Python 客戶端與 C++ 伺服器端的連接。
結語
這邊也列下幾個重點:
– 抽象是一種概念,可以幫助我們在設計系統時隱藏無關緊要的細節,讓我們專注於整體架構。
– 抽象可以隱藏系統設計內部的複雜性,從而讓我們更專注於系統設計的結果。
– 資料庫抽象、分散式系統抽象、網路抽象都是抽象概念的應用。
– RPC 是一種通訊協定,提供作業系統中使用的高階通訊參照範例。
– RPC 在許多現實世界的服務中被使用,例如 Google GCP 和 Facebook。