专栏首页CNCFCNCF案例研究:gRPC如何实现Salesforce的统一互操作性策略

CNCF案例研究:gRPC如何实现Salesforce的统一互操作性策略

  • 在设计流服务和推送通知类服务方面获得了灵活性
  • 开发速度提高
  • 小团队做出了巨大的改变

行业:软件

地点:美国

云类型:混合

挑战:互操作性、速度

产品类型:安装程序

使用的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,因为它是独立的,有很好的支持,谷歌对它的大力支持使它成为一项非常可靠的技术。”

谷歌将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技术的强大之处在于,我们能够在公司内部实现巨大的变革,而无需重新发明轮子。”

本文分享自微信公众号 - CNCF(lf_cncf),作者:CNCF

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么我们要改用gRPC

    当你使用微服务风格的体系结构时,你需要做的一个非常基本的决定是:你的服务如何相互通信?默认的选择似乎是通过HTTP发送JSON — 使用所谓的REST API,...

    CNCF
  • gRPC-Web迈向GA

    我代表云原生计算基金会,很高兴地宣布gRPC-Web的GA版本,这是一个JavaScript客户端库,使Web应用程序能够直接与后端gRPC服务通信,而不需要H...

    CNCF
  • 案例研究:Netflix通过gRPC提高开发者工作效率并击败惊群问题

    Netflix使用HTTP/1.1开发了自己的技术堆栈,用于服务间通信,覆盖了为Netflix产品提供动力的总微服务的98%。几年来,这一堆栈支持了公司流媒体业...

    CNCF
  • Nginx 代理gRPC—为 Skywalking 提供负载均衡

    Apache Skywalking 是一款优秀的分布式链路追踪系统以及 APM 系统,但在社区的实现中,并没有着重考虑客户端负载的问题。因为社区已经有很多对...

    Jared.Tan
  • SAP最佳业务实践:MM–批次管理的库存物料采购(901)-1业务概览

    用途 我们的目的是描述与批次管理的库存物料采购相关的业务流程。目标组是仓库人员和财务。 处理流程中涉及的公司角色: 采购员 仓库管理员 应付会计 包含的关...

    SAP最佳业务实践
  • 机器学习到底能创造什么价值?我们精选了9位从业者的答案

    来源 | HackerNews 编译 | 晓查 不温不火的机器学习忽然蹿红业界,也就是这两三年的事,于是不仅传统行业,连风光一时的互联网公司也开始疑惑:我们要不...

    AI科技大本营
  • python3使用gzip压缩与解压缩

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/python-gzip/

    羽翰尘
  • 深度强化学习入坑笔记一

    总的来说,强化学习属于机器学习的一种,我们都知道机器学习分为有监督与学习和无监督学习,有监督学习通过大量有标记的数据来训练,所以有监督训练是黑白分明的,啥意思呢...

    opprash
  • 大数据学习:HDFS是个啥?

    HDFS集群包含单个NameNode(主服务器),它管理文件系统命名空间并控制客户端对文件的访问权限。它维护和管理文件系统元数据;例如由哪些块构成文件,以及存储...

    加米谷大数据
  • dotnet core 2 使用 DispatchProxy 做动态代理 AOP 入门

    本文简单告诉大家如何在 .NET Core 里面使用 AOP 切面编程,使用 DispatchProxy 做任意接口的动态代理实现

    林德熙

扫码关注云+社区

领取腾讯云代金券