[參考] Udemy: gRPC [Golang] Master Class: Build Modern API & Microservices
https://www.udemy.com/grpc-golang/
因為最近在研究一個DB Middleware的計畫,原本打算利用gin-gonic這套Http Framework架構,使用Post接收SQL Command,然後把撈取結果回傳給User,不過最近發現gRPC覺得十分有趣,所以去Udemy找了課程,發現這個課程前顯易懂,所以打算好好來研究一下,看能否把gRPC的好處結合進來。
過往RESTful的Web Service,Client端與Server端的兩個開發者必須Align清楚每一個Service的Input參數名稱,甚至是資料型態都必須確認,當然現在有很多工具可以解決這樣的問題,例如:Swagger,但是實做起來卻沒有那麼簡單,而且當傳輸的資料量很大的時候,又會害怕掉資料的問題。
gRPC即是因應解決這些問題而生,他於2015年由Google所支援免費且open-sorce的框架,他是基於Protocol Buffers所開發出來的RPC框架,其擁有的優點恰巧能解決上面提到的問題,例如:支援Streaming傳輸,跨語言的溝通文件:其中,目前他是屬於Docker和Kubernetes的子計畫,因為他架構在HTTP/2之上,故傳輸更快且更低延遲,並且如果你想要有log或是驗證功能,也都有現成的套件可以使用。
剛剛提到的跨語言溝通文件,即是指Protocol Buffers,這是由Google定義的數據描述語言(其他如XML與JSON),在文件中同時也會定義Request與Response參數的參數內容與Data type,並且目前有多個程式語言有第三方套件可以支援(如: Golang, C, Python等),而且使用起來也很簡單,只要你安裝好gRPC tool後,就能根據撰寫好的文件產生合約文件供Server端與各Client端使用。
於gRPC架構中的Server與Client溝通方式分為四種,分別為Unary、Server Streaming、Client Streaming與Bidirectional Streaming,其中Unary就是傳統的溝通方式Server會等待Client送完Request Data,然後再一包把處理結果回傳,但有了Streaming的支持,就可以根據不同的目標需求,將Server與Client的data透過Streaming方式將資料送出,如前面提到的DB Middileware計畫,即是想應用Server Straming方式,把從Oracle撈回來的資料分批的傳回給Client端。