建筑工程设计流程,建筑项目设计流程
12月2日,火山引擎所有云产品正式亮相。
依托字节跳动云原生理念和实践,火山引擎推出78款云产品和服务,涵盖云基础、视频和内容分发、数据中台、开发中台、人工智能等五大类。
在过去的九年里,字节跳动不断地建设其信息技术基础设施。现在,我们每天增加了1500个AB实验和2万个在线修改,3周内完成了新App的设计和上线,27天就准备好了春晚红包项目。
在这些敏捷迭代和创新的背后,“云”发挥了关键作用。那么,在过去的九年里,字节跳动是如何打造云的呢?字节跳动副总裁、火山发动机业务负责人杨振源与大家聊一聊我们的云实践。以下是讲话全文:
qvj2l q49k 0/1 bbdd 94 b 447 F4 e 0298 aa 5b 52 D1 a3 fa 5c '/
当时,今天的头条是一个全新的移动互联网产品,我们的愿景是打造全球最大的内容分发平台。我们每天都有很多想法和讨论,包括内容流派、创作工具、产品交互、推荐算法等等,每天都在变化。如果这些想法能够更快地得到检验和释放,将会给公司带来强大的竞争力。如果有想法却不能快速上线,会给公司的发展造成很大的风险。
我们已经实现了敏捷性的目标,产品也在快速增长。大家都认为建立敏捷IT基础非常有效。这种想法一直延续到今天。
然而,不可能只关注敏捷性,因为仍然存在许多问题。需要考虑稳定性和综合成本,不能说做得很快,但成本很高;还要考虑操作维护的复杂程度等等。在实现敏捷目标的同时,我们不应该让稳定性等问题成为缺点。
在介绍我们如何做云之前,先分享一些案例。外面有人说,字节跳动好像是一个App工厂。虽然不准确,但我们的产品确实非常快。有些新产品从一开始就有想法,我们决定去做。只需要三个星期就能在网上发布。这个基础是围绕敏捷目标构建的云。
分享另一个案例。去年,离除夕只有27天的时候,我们的产品技术团队接到了参加央视春晚红包互动的通知。这个活动很复杂,有很多环节。众所周知,春晚是一个拥有大量用户的突发事件。方案设计、资源准备、产品开发上线只需要27天。最后,我们成功地完成了这项工作。以往这类活动通常需要三个月的准备时间,而且都是由有大量资源准备的互联网厂商完成的。
qvj2l q49k 0/80a 730 df 53974 a4f B1 e 324 da 026 f 0d 0e /
第三个数据是我们每天增加1500个左右的A/B测试,说明当我们有很多想法的时候,可以快速验证,就会发生进化。我再举一个例子。假设有两家方向相同、战略层次相近的公司。如果一家公司每周能做10个A/B测试验证10个想法,另一家公司每周只验证一个想法,可以想象半年后两家公司的差距会有多大。因此,当方向和战略相似时,敏捷性是决定竞争力的关键因素。
#如何实现敏捷开发?
首先,有宏观的业务设计和合理的整体架构分层。因为不可能处处敏捷,一些应用比较多、变化比较频繁的部分需要敏捷,一些基础模块需要更稳定、更高的性能。我们应该对业务进行宏观设计,这样我们就可以集成不同的子系统。
放到对应的位置上去。如果胡子眉毛一把抓,什么地方都想快,这是错误的,而且也是很难实现的。
有了宏观的设计,接下来说具体的实现方法:第一是微服务化,拆更小的服务单元,从开发上就可以有利于快速地变更,这些服务单元能够在很多业务系统中灵活组合,以及多人并行开发。微服务是提高开发效率非常重要的一点。
第二个是容器化,这个概念我相信在座各位都比较了解。容器对于运维体系来讲有点像集装箱对于货运,可以解决环境部署的问题、隔离的问题、资源分配的问题。容器本身的开销可控,未来还有进一步提高灵活性的空间,以及重组的空间。
是不是有这些技术之后就很美好了?我想说的是,从实践来看,问题才刚刚开始。
比如说运维、质量和发布体系的问题。
有了大量的微服务,一旦有一个服务出问题,会导致故障的影响面不可控,排查很麻烦。做过运维的同学会了解,有可能会产生服务雪崩。另外,当我们想扩容的时候,怎么样在一条服务链路的依赖体系下比较自动地扩容,还有灰度发布问题,还有很多其他的问题。如果这些问题处理不好,你会发现你的发布是变快了,但维护代价也在成倍增加,渐渐的就敏捷不起来了。
所以我们做了大量投入,建设完善的DevOps体系,包括持续集成的流程、平台、线下测试环境、灰度发布、全面的监控系统、容灾系统、故障半径分析与治理、自动缩扩容等。直到今天我们还一直在做,就是让开发人员更关注业务本身,其他麻烦事儿让平台解决。
第二个是存储的易用性问题。 微服务化之后,存储成为限制敏捷开发的一个关键因素。
存储是一个技术很复杂的领域,专业性很强,目前还没有一种可以应用于各个领域的存储技术,我们需要建立一套产品矩阵来满足需求。通过存储计算分离、架构改进、容器化部署、自动运维工具等等,来达成更优的存储方案。
第三是性能优化。
前面做了这么多敏捷、自动帮助开发者降低成本的事情,都是有代价的,性能损失就是其中之一。如果不去改进,从系统延迟和综合成本两方面,都会遇到挑战。我们做了大量的性能优化工作。
经过多年的技术实践,我们的在线微服务数量超过10万,这是指微服务的类型,确实是很大的一个数字,我自己都觉得可能有点太大了;我们容器实例部署的规模大概是1000万的量级,应该是国内容器规模最大的企业之一,目前我还没听到过其他企业公布过更大的数字。我们在微服务和容器的使用上是非常极致的。
# 云原生理念的实践
我刚才讲的字节跳动建设云的实践,和云原生概念是非常契合的。
云原生这个概念,也火了很多年了。它的本质是什么?我自己感觉,云原生就是软件研发体系向前发展的一个过程。
大家想下,计算机刚刚被发明的时候,人们写机器代码太麻烦了,程序员都怕麻烦,于是有了高级编程语言,编译器;人们自己定义各种数据存储格式,读写存储非常麻烦,还容易出错,于是有了数据库;人们已经写了软件,想用的时候,还得买机器,租机房,部署网络,太麻烦了,于是有了云计算。
那么,现在还有哪些事情太麻烦?还有很多,我上面提到了一些问题,其实现在也还有很大的进步空间。
所以,我觉得云原生,就是考虑云上的软件开发、维护全流程,去改进各个子系统,目标就是让开发人员更聚焦在业务本身,让云平台去解决其他的“麻烦事儿”。
基于敏捷开发的理念,字节跳动不断改进系统,就是希望让开发人员更聚焦在业务。这让我更加相信云原生这个理念,因为这个理念是有实践基础的。
# 高密度计算、数仓与底层硬件探索
接下来再分享下我们在云实践过程中的三点经验。
第一点是高密度计算。业务系统有很多类型,有些系统用非常敏捷的方式是好的。另外有些系统比如推荐、搜索、广告、视频理解,这些系统的计算密度很高,服务粒度要稍微大一点。当我们在这些系统上做敏捷的时候,可能要选择用插件化的方式去加速它的开发和迭代,这是一类高密度计算的问题。
第二点,数仓的问题。字节跳动的核心技术理念是数据驱动和敏捷开发,我们需要全面的数据平台。我在2014年初刚入职的时候,发现公司已经有一个小时级可以看到结果的A/B测试平台,之后我们也一直都在践行数据驱动理念,让新的产品发布、新的功能可以很方便地做A/B测试。所以我们在敏捷开发的同时,需要保证数据平台有很高的数据准确性、一致性、稳定性。
这里列一些规模和效率的数据。现在我们数据仓库本身,不算视频和机器学习的数据,总量已经到了9500PB的规模,每天新增40PB左右,指标数超过27000个。在这样的一个体量之下,我们依然能够很快地去做新产品的数据支持。一个全新的产品线,大概需要两周时间就可以完成所有核心数据的分析,包括数据报表建设等工作。
第三点,底层硬件的技术探索,这肯定是基础的事情,我们也有很多的投入,比如自研服务器、DPU、AI芯片、数据中心技术等等。这里不展开介绍,未来可以和大家做更多展示。
以上就是我对字节跳动建设IT基础的一些思考。这些技术、这些实践全部都会在火山引擎云产品中开放给我们的客户,希望能够帮助更多的企业,这样也会产生更大的社会价值和商业价值。
这就是我今天的分享,谢谢大家!