CNCF案例研究:gRPC如何實現Salesforce的統一互操作性策略
- 2019 年 12 月 4 日
- 筆記
- 在設計流服務和推送通知類服務方面獲得了靈活性
- 開發速度提高
- 小團隊做出了巨大的改變

行業:軟體
地點:美國
雲類型:混合
挑戰:互操作性、速度
產品類型:安裝程式
使用的CNCF項目包括:Envoy、gRPC、Kubernetes
挑戰
Salesforce是客戶關係管理軟體領域的領導者,它的客戶成功平台和其它產品支援了超過15萬個組織。在幕後,「我們試圖建立的一件大事是在整個公司範圍內建立統一的互操作性策略。」服務網格團隊首席工程師Ryan Michela說:「我們過去在基於JSON的集成中遇到的一個痛點是,它們需要雙方進行大量的協商,並且很容易出現向後不兼容的更改。」
解決方案
在決定gRPC和REST類型的服務之間,團隊在2016年選擇了gRPC,因為「通過協議緩衝區(protocol buffer),它從一開始就內置了向後兼容性,並在組件之間建立了非常強的契約,」Michela說:「我們非常喜歡gRPC的契約驅動開發實踐,以及它在基本HTTP和JSON之上提供的一些其它技術特性。」
影響
服務網格和gRPC「在分發服務契約方面一直非常出色,這樣團隊就可以在網路上彼此之間擁有一個非常容易理解、定義良好的介面,而JSON和REST往往更具流動性,更開放於解釋,」Michela說。另外,作為一種基於HTTP2的二進位協議,gRPC相對於REST基於HTTP1的文本協議具有優勢。對於Salesforce,Michela說:「HTTP2為我們在設計流服務和推送通知類型的服務方面提供了更大的靈活性,在這方面我們無法像使用HTTP1能夠輕鬆地做到這一點。」儘管這種影響很難量化,Michela相信開發者的開發速度已經得到了提高,因為團隊已經通過維護向後兼容性改進了他們的服務。
Salesforce是客戶關係管理軟體領域的領導者,它的客戶成功平台和其它產品支援了超過15萬個組織。
在技術方面,「我們試圖建立的一件大事是整個公司統一的互操作性策略,」服務網格團隊的首席工程師Ryan Michela說:「我們過去在基於JSON的集成中遇到的一個痛點是,它們需要雙方進行大量協商,而且可能很容易出現向後不兼容的變化。」
該公司從2016年開始考慮gRPC。將其與REST類型的服務進行比較,團隊發現「gRPC從一開始就通過協議緩衝區構建了向後兼容性,並在組件之間建立了非常強的契約,」Michela說:「我們非常喜歡gRPC的契約驅動開發實踐,以及它在基本HTTP和JSON之上提供的一些其它技術特性。」
另一個因素是gRPC是一個多語言框架。「我們收購了一些公司,所以我們沒有一個用單一程式語言編寫的程式碼庫。」Michela說:「因此,gRPC可以幫助我們使用所有我們使用的語言。」

在對這項技術進行了一些基本的實驗之後,來自Salesforce的許多不同公司和主要產品線的代表達成了一個共識:gRPC是未來的發展方向。「一旦我們對它的工作原理有了感覺,我們就得出結論,gRPC符合我們的技術要求,」Michela說:「它只是在優勢和劣勢之間取得了一種特殊的平衡,這與我們正在努力實現的目標一致。我喜歡gRPC,因為它是獨立的,有很好的支援,Google對它的大力支援使它成為一項非常可靠的技術。」

Google將gRPC作為其公有雲策略的一部分的承諾也是一個重要因素。他補充說:「得到社區的大力支援,尤其是來自企業的支援,是非常重要的。」
Salesforce的工程師幾乎不需要做什麼就可以讓gRPC在組織內工作。「當我們朝著雲原生,我們的目標之一是儘可能與我們使用的開源技術一致,「Michela說:「因此,我們不是試圖採用一個開放源碼項目,作分叉使它適應我們的需求,而是努力適應我們的需求,與共同做事的方式一致。」
「從某種意義上說,gRPC就是拿來就有用。它解決了一個非常具體的問題,它解決得很好,以及毫不費力地解決了這個問題。我們知道我們做出了正確的選擇,因為我們不必與之抗爭。」 - Ryan Michela,Salesforce服務網格團隊首席工程師
唯一的訂製是在gRPC之上構建一個小層,以便在Salesforce的其它程式碼框架中更容易使用,並「鎖定一些配置選項」,Michela說:「開箱即用,它有大量的配置選項,其中大多數我們的應用程式開發者不需要擺弄。」
為了簡化gRPC程式碼生成,Michela維護Salesforce gRPC contrib庫,其中包括一些基於Java的協議緩衝區程式碼生成,以及Reactive gRPC庫,這是一組存根(stub),用於將gRPC協議與Rx、Java和Spring Reactor庫連接起來。
Salesforce使用gRPC和服務網格已經有兩年半的時間了,並在生產中發展到多種產品。「在內部可測試性和快速開發方面有一些的煩惱,但gRPC總體上對我們非常非常好,」Michela說:「它非常適合分發服務契約,這樣團隊就可以通過網路在彼此之間擁有一個非常容易理解、定義良好的介面,而JSON和REST往往更具有流動性,更開放於解釋。因此,在團隊之間建立這種強類型的互操作性層非常有用。」
「我們正在做整個CNCF平台。我們有一個基於Kubernetes的堆棧,我們正在努力讓Istio與Envoy和gRPC一起運行,把所有這些不同的部分一起使用。」 - Ryan Michela,Salesforce服務網格團隊首席工程師
另外,作為一種基於HTTP2的二進位協議,gRPC相對於REST基於HTTP1的文本協議具有優勢。對於Salesforce來說,Michela說:「HTTP2使我們在設計流服務和推送通知類型的服務時具有更大的靈活性,在這些方面,我們無法像使用HTTP1能夠輕鬆地做到這一點。」
儘管這種影響很難量化,Michela相信開發者的開發速度已經得到了提高,因為團隊已經通過維護向後兼容性改進了他們的服務。「從某種意義上說,gRPC就是拿來就有用。」他說:「它解決了一個非常具體的問題,它解決得很好,以及毫不費力地解決了這個問題。我們知道我們做出了正確的選擇,因為我們不必與之抗爭。」
有了gRPC,Salesforce就可以繼續構建自己的雲原生平台。「我們正在做整個CNCF平台,」Michela說:「我們有一個基於Kubernetes的堆棧,我們正在努力讓Istio與Envoy和gRPC一起運行,把所有這些不同的部分一起使用。」
這項技術已經被證明是一個很好的推動者。「我們只是小團隊,」Michela說:「我們使用的開源技術和CNCF技術的強大之處在於,我們能夠在公司內部實現巨大的變革,而無需重新發明輪子。」

