火山引擎|字节跳动杨震原:三周做出一款APP,这朵「云」很关键( 二 )



火山引擎|字节跳动杨震原:三周做出一款APP,这朵「云」很关键
文章插图
有了宏观的设计,接下来说具体的实现方法:第一是微服务化,拆更小的服务单元,从开发上就可以有利于快速地变更,这些服务单元能够在很多业务系统中灵活组合,以及多人并行开发。微服务是提高开发效率非常重要的一点。
第二个是容器化,这个概念我相信在座各位都比较了解。容器对于运维体系来讲有点像集装箱对于货运,可以解决环境部署的问题、隔离的问题、资源分配的问题。容器本身的开销可控,未来还有进一步提高灵活性的空间,以及重组的空间。

火山引擎|字节跳动杨震原:三周做出一款APP,这朵「云」很关键
文章插图
是不是有这些技术之后就很美好了?我想说的是,从实践来看,问题才刚刚开始。
比如说运维、质量和发布体系的问题。 有了大量的微服务,一旦有一个服务出问题,会导致故障的影响面不可控,排查很麻烦。做过运维的同学会了解,有可能会产生服务雪崩。另外,当我们想扩容的时候,怎么样在一条服务链路的依赖体系下比较自动地扩容,还有灰度发布问题,还有很多其他的问题。如果这些问题处理不好,你会发现你的发布是变快了,但维护代价也在成倍增加,渐渐的就敏捷不起来了。
火山引擎|字节跳动杨震原:三周做出一款APP,这朵「云」很关键】所以我们做了大量投入,建设完善的DevOps体系,包括持续集成的流程、平台、线下测试环境、灰度发布、全面的监控系统、容灾系统、故障半径分析与治理、自动缩扩容等。直到今天我们还一直在做,就是让开发人员更关注业务本身,其他麻烦事儿让平台解决。
第二个是存储的易用性问题。 微服务化之后,存储成为限制敏捷开发的一个关键因素。
存储是一个技术很复杂的领域,专业性很强,目前还没有一种可以应用于各个领域的存储技术,我们需要建立一套产品矩阵来满足需求。通过存储计算分离、架构改进、容器化部署、自动运维工具等等,来达成更优的存储方案。
第三是性能优化。 前面做了这么多敏捷、自动帮助开发者降低成本的事情,都是有代价的,性能损失就是其中之一。如果不去改进,从系统延迟和综合成本两方面,都会遇到挑战。我们做了大量的性能优化工作。
经过多年的技术实践,我们的在线微服务数量超过10万,这是指微服务的类型,确实是很大的一个数字,我自己都觉得可能有点太大了;我们容器实例部署的规模大概是1000万的量级,应该是国内容器规模最大的企业之一,目前我还没听到过其他企业公布过更大的数字。我们在微服务和容器的使用上是非常极致的。
云原生理念的实践我刚才讲的字节跳动建设云的实践,和云原生概念是非常契合的。
云原生这个概念,也火了很多年了。它的本质是什么?我自己感觉,云原生就是软件研发体系向前发展的一个过程。
大家想下,计算机刚刚被发明的时候,人们写机器代码太麻烦了,程序员都怕麻烦,于是有了高级编程语言,编译器;人们自己定义各种数据存储格式,读写存储非常麻烦,还容易出错,于是有了数据库;人们已经写了软件,想用的时候,还得买机器,租机房,部署网络,太麻烦了,于是有了云计算。
那么,现在还有哪些事情太麻烦?还有很多,我上面提到了一些问题,其实现在也还有很大的进步空间。
所以,我觉得云原生,就是考虑云上的软件开发、维护全流程,去改进各个子系统,目标就是让开发人员更聚焦在业务本身,让云平台去解决其他的“麻烦事儿”。
基于敏捷开发的理念,字节跳动不断改进系统,就是希望让开发人员更聚焦在业务。这让我更加相信云原生这个理念,因为这个理念是有实践基础的。
高密度计算、数仓与底层硬件探索接下来再分享下我们在云实践过程中的三点经验。
第一点是高密度计算。业务系统有很多类型,有些系统用非常敏捷的方式是好的。另外有些系统比如推荐、搜索、广告、视频理解,这些系统的计算密度很高,服务粒度要稍微大一点。当我们在这些系统上做敏捷的时候,可能要选择用插件化的方式去加速它的开发和迭代,这是一类高密度计算的问题。
第二点,数仓的问题。字节跳动的核心技术理念是数据驱动和敏捷开发,我们需要全面的数据平台。我在2014年初刚入职的时候,发现公司已经有一个小时级可以看到结果的A/B测试平台,之后我们也一直都在践行数据驱动理念,让新的产品发布、新的功能可以很方便地做A/B测试。所以我们在敏捷开发的同时,需要保证数据平台有很高的数据准确性、一致性、稳定性。