飞轮|数据驱动 x 敏捷开发,字节是如何践行这两大技术理念的( 七 )


规模庞大且增长迅速 。 刚才介绍过字节跳动现在的微服务数是8万 , 但在2018年 , 整个微服务数大概只有7000到8000 , 所以三年其实翻了近10倍 , 并且还在不断的增长 。 在这个过程中 , 我们自然遇到了非常多的挑战 。
在线微服务超过90%都运行在容器里 。 对于业务线 , 是看不到资源的 , 看到的只是PaaS、容器 。 这带来很多便利性 , 有利于新技术的核心功能推广 , 但同时也有很多挑战 , 尤其是调度复杂性这方面 。
技术体系以Golang语言为主 。 根据最新的调查统计 , 字节跳动内部Golang是主要语言 , 超过55%的服务都采用了Golang , 排名第二的语言是NodeJS , 然后是其他的语言 。
Service Mesh的全面落地和应用 。 字节跳动是国内最早在生产环节大规模使用Service Mesh的公司之一 。
大家可以发现整个字节跳动在微服务的使用上是非常快的 , 甚至可以说是比较激进的 。 这背后 , 是因为在字节跳动 , 速度和效率是我们研发要解决的Top1问题 。 每天新应用和新用户增长都非常快 , 研发必须要解决好产能问题 。 这也是我们激进地采取微服务架构的原因 。 但这么大的规模下 , 做这么快的迭代 , 自然会对稳定性、信任带来非常大的冲击 。

飞轮|数据驱动 x 敏捷开发,字节是如何践行这两大技术理念的
文章图片

为了应对这些困难和矛盾 , 我们在端到端落地微服务架构时 , 针对性地做了各项优化:
首先是语言层面 ,Golang是主力使用的语言 , 因此在Golang层面做了很多框架层面的优化 , 比如RPC框架、HTTP框架 。 这些框架我们已经通过开源的方式回馈到社区——9月初 , 字节跳动开源CloudWeGo , 帮助更多开发者搭建云原生微服务架构 。
第二则是针对海量服务的治理 , 我们基于 ServiceMesh的概念构建了自己的服务网格体系 , 将服务治理的能力固化到字节内部平台上 , 一方面帮助我们多元多服务的兼容问题 , 另一方面通过Golang稳定的框架和以Mesh治理为基础的理念 , 我们实现了全局 流量的治理、单元化和体系化的整体建设 。
最后是通过落地和实践 DevOps工具和方法来提升研发的效率 , 进一步提升运维的可观测性 。

飞轮|数据驱动 x 敏捷开发,字节是如何践行这两大技术理念的
文章图片

下面我们就一个个展开 。
首先是Golang框架这块 , 一个是Kitex , 这是RPC的框架 。 另一个是Hertz , 是HTTP的框架 。 这些框架背后集成了我们自研的高性能的网络库 , 去解决网络上的一些性能、交互上的问题 。 同时我们支持多消息协议(Thrift/Protobuf)和多交互方式(Ping-Pong/Oneway/Streaming) , 能提供更加灵活自主的代码生成器 。

推荐阅读