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

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

案例研究:Netflix

Netflix:通过gRPC提高开发者工作效率并击败惊群问题

公司:Netflix

地点:加利福尼亚州洛斯加托斯

行业:流媒体供应商

挑战:

Netflix使用HTTP/1.1开发了自己的技术堆栈,用于服务间通信,覆盖了为Netflix产品提供动力的总微服务的98%。几年来,这一堆栈支持了公司流媒体业务的强劲增长。但到2015年,平台团队意识到它还“使我们正在努力的一些架构模式永久化,并且大规模影响了工程的生产力,”运行平台工程总监Tim Bozarth说。用于与远程服务交互的客户端通常包含手写代码,这非常耗时,“有机会产生问题,引入的错误,以及产生额外的复杂性,”他说。此外,当团队构建定义API的服务时,没有明确的方法来注释和准确描述API的功能,从而使发现、审计和理解生态系统中可用的API变得具有挑战性。为了寻找新的解决方案,该团队还希望服务客户端跨语言工作,重点是Java和Node.js.

解决方法:

有人在内部构建RPC堆栈,但经过长达一个月的多项技术评估后,运行平台团队选择实现并扩展gRPC。“在将所有这些职责集中在一个易于使用的软件包中,这方面gRPC处于领先地位,”Bozarth说。gRPC是由Google开发的高性能RPC(远程过程调用)框架,针对云原生计算环境的大规模,多平台特性进行了优化。它跨语言、云和数据中心连接服务,并将移动设备连接到后端服务器。

影响:

作为团队最大驱动力的开发人员生产力得到了很大提升。例如,对于每个客户端,数百行的自定义缓存管理代码被原型中的2-3行配置所取代。创建一个可能需要2-3周的客户端现在只需几分钟。结果,上市时间减少了几个数量级。此外,客户端不再包含手写代码这一事实意味着与远程服务交互时出现的错误要少得多。延迟也得到了改善。“我们看到了面向gRPC的服务P99延迟的惊人减少,”Bozarth说。 “我们还看到了延迟窗口一直在全面缩小。”


“有许多人为客户端的复杂性和运营的挑战而苦苦挣扎,他们选择在gRPC中重写他们的应用程序,因为gRPC带来的价值非常可观。” - TIM BOZARTH,平台工程总监,NETFLIX

对于等待下一季Stranger Things的1.3亿Netflix用户中的大多数,远程过程调用(RPC)可能并不意味着什么。

但对于负责提高公司开发人员生产力的运行平台团队而言,RPC正在成为构建和支持Netflix用户期望的高可用性服务的瓶颈。

Netflix已经开发了自己的技术堆栈,用于使用HTTP/1.1进行服务间通信,“所有服务通信的粘合剂”覆盖了Netflix产品总计98%的微服务,平台工程总监Tim Bozarth说。几年来,这一堆栈支持了公司流媒体业务的强劲增长。

但到2015年,Bozarth的团队意识到它还“使我们正在努力的一些架构模式永久化,并且大规模影响了工程的生产力,”他说。用于与远程服务交互的客户端通常包含手写代码,这非常耗时,“会产生问题的机会,引入的错误,以及繁殖的额外复杂性,”他说。此外,当团队构建定义API的服务时,没有明确的方法来注释和准确描述API如何运行或查看,审核和理解服务和生态系统存在哪些API。

“当我们选择gRPC时,我们认为它会得到采用,许多其他人在开源中构建有用的东西。我认为这个赌注在很大程度上得到了回报。” - WILLIAM THURSTON,高级软件工程师,NETFLIX

虽然该公司的其他人考虑在内部建立一个新的RPC系统,但Bozarth和团队开始对几种技术进行为期一个月的评估。最后,他们选择了gRPC。Bozarth说:“在将所有这些职责集中在一个易于使用的软件包中,这方面gRPC处于领先地位。我们最关心的事情是IDL(proto)中的架构理解,它被打包为gRPC的一部分,以及源自该proto的代码生成。到目前为止,这些对我们来说是最有趣的,因为它们解决了我们大规模面临的两个非常关键的问题:没有清晰的API以及大量的手写客户端代码。”

除了解决那些以生产力为导向的问题之外,团队还想要一个与Java没有特别结合的解决方案,因为Netflix的工程师也开始使用其他语言,比如Node.js、Python和Ruby,而gRPC在跨语言兼容性和代码生成提供承诺。Java应用程序的实现进展顺利,团队花了八个月在自己的内部RPC堆栈中存在的自定义部分移植和部署到gRPC环境中。

使gRPC与其他语言协同工作需要付出更多努力。“如果你有一个Java服务器和一个Node.js客户端,从协议的角度来看,跨语言生成和通信工作非常好,”Bozarth说。“在实际特征完整性和习语方面,其他语言中用于定制的机制有何不同。因此,使用Node.js,我们必须进行大量的增强和大量的包装。我们花了将近一年的时间来合并拦截器机制,但我们能够将整个拦截器层贡献给JavaScript。这是一个巨大的胜利。”(现在Node.js和Java之间的流量在Netflix上通过gRPC完成。)

“通过改变服务器如何利用gRPC机制自适应地限制并发性,我们已经能够有效地打败惊群问题。gRPC使它在架构上变得简单,我们能够以前所未有的方式着手。“ - TIM BOZARTH,平台工程总监,NETFLIX

随着gRPC的到位,开发者工作效率始终是团队最大的推动力,得到了很大的提升:例如,对于每个客户端,消除了数百行自定义缓存管理代码。“我们已经将一个非常繁琐,容易出错的过程转变为可能有两到三行注释,在原型文件中进行额外定义,我们只是为您生成这些交互,”高级软件工程师William Thurston说。创建客户端的时间从2-3周缩短到几分钟。“你可以在几分钟内开始运行应用程序,然后让在几个小时内完成应用程序,”Bozarth说。上市时间在使用gRPC前通常是三周,现在已经减少了几个数量级。

此外,客户端不再包含手写代码这一事实意味着这意味着已消除了常见的应用程序错误源。Thurston说:“它实际上是无错误的代码,因为它经过严格的审查和生成,可以提高生产力并降低运营负担。”

延迟也有效果。“我们已经看到了面向gRPC的服务P99的惊人减少,”Bozarth说。“我们还看到了延迟窗口一直在全面缩小。”

“我们相信,随着我们前进,gRPC对我们来说是一个非常强大而重要的基础。” - TIM BOZARTH,平台工程总监,NETFLIX

今天,Netflix的内部服务到服务通信的很大一部分都在gRPC上运行。“采用已取得成功并继续向前发展,特别是在Java领域,”Bozarth说。所有新的Java开发都是从支持gRPC的应用程序开始的。虽然没有重写现有应用程序,但他说,“有许多人为客户端的复杂性和运营挑战而苦苦挣扎,他们选择在gRPC中重写他们的应用程序,因为它的价值十分明显。”

该团队还发现gRPC对于涉及自适应并发限制的项目非常有价值 - 这对于任何需要最高服务可用性的业务来说都是一个关键问题 - 他们已经开源了。“通过使用gRPC技术改变服务器随时间自适应地改变并发限制,我们已经能够有效地打败惊群问题,”Bozarth说。 “gRPC使它在架构上变得简单。我们能够以前所未有的方式着手。”

作为gRPC的早期采用者,Bozarth和Thurston表示他们已经从社区中获益,就像他们所回馈的一样。“我们选择gRPC的原因之一就是我们打赌它会得到采用,并且会有很多其他人在开源中构建有用的东西,我认为很大程度上已经得到了回报,”Thurston说。

对Netflix来说,这是他们想身处的位置。“随着行业的变化以及新的、强大的技术的出现,我们在采用曲线上已经相当早,”Bozarth说。“但如果你正在尝试构建一个大型分布式系统,RPC对其长期成功至关重要。我们相信,随着我们前进,gRPC对我们来说是一个非常强大而重要的基础。”

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

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

原始发表时间:2018-12-06

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

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    Salesforce是客户关系管理软件领域的领导者,它的客户成功平台和其它产品支持了超过15万个组织。在幕后,“我们试图建立的一件大事是在整个公司范围内建立统一...

    CNCF
  • 为什么我们要改用gRPC

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

    CNCF
  • 浏览器引入gRPC的现况

    gRPC 1.0于2016年8月发布,现已发展成为应用通信的首选技术解决方案之一。它已被全球的初创公司、企业公司和开源项目采用。它对多语言环境的支持、关注性能、...

    CNCF
  • Idea 常用功能汇总,工作中常用技巧,移出请说明原因,笔记花了好长时间汇总的

    1.隐藏没用到的文件 比如 IDEA 的项目配置文件(.iml 和.idea),打开 Settings-File Types, 加入要隐藏的文件后缀。 ? 2...

    hbbliyong
  • Anaconda的使用-Spyder快捷键大全

    统计学家
  • IntelliJ Idea 常用快捷键 列表(实战终极总结!!!!)

    开始从eclipse转向intellij idea,记下这些实用快捷键,以便使用查询。

    用户1518699
  • IntelliJ IDEA 2019 快捷键终极大全,速度收藏!

    常用的有fori/sout/psvm+Tab即可生成循环、System.out、main方法等boilerplate样板代码 。

    芋道源码
  • Eclipse快捷键大全

    Eclipse快捷键大全 Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行  Ctrl+Alt+↓ 复制当前行到下一行...

    郭耀华
  • eclipse 常用快捷键总结

    Ctrl+Shift+O 自动导入所需要的包(这个用的次数也相当多) Ctrl+D: 删除当前行

    斯文的程序
  • Eclipse快捷键最有用的快捷键

    Java学习123

扫码关注云+社区

领取腾讯云代金券