1百度核心业务对基础架构的要求
百度的搜索业务特点是用户使用逻辑简单,只需要一个搜索框或下拉动作就可以完成产品的全部使用过程。但简单背后,其实隐藏着非常复杂的算法逻辑,需要经过大量的计算过程,对算法和大数据技术要求很高。
由于用户交互简单,架构上来说,用户对搜索引擎的速度有更高的要求。对基础架构而言,数据规模和性能有非常高的要求,比如基于 C++ 语言的高性能 RPC 框架 (brpc),海量数据的流式计算和分布式存储架构来支持离线数据处理和分析,大规模微服务和服务治理系统等。
相比于更复杂的业务形态比如电商业务来说,郑然体会有两个显著的特点:一方面复杂的业务模型天然缓解了对响应时间的要求,因为业务模型复杂,过程中会和用户产生更多的交互,即使用户购买这个简单的动作也需要多次互动;另一方面是交互结果的精确性。电商业务对交易结果的要求非常精确,而像搜索或者推荐这类侧重算法的产品产出的结果本身就是一种概率模型,不可能完全精确。复杂的场景要求架构设计得更加松耦合和可扩展,更加注重吞吐的优化,所以郑然注意到电商架构中可以大量使用微服务和消息队列机制来降低服务之间的耦合,Java 由于可以支持更快的研发效率,面对复杂业务场景在电商或者金融架构中也是主流,交易场景对分布式事务技术也有大量的应用场景。对结果的精确要求和相对复杂的业务流程,天然增加了业务的延迟,架构中可以侧重吞吐的优化。
随着人工智能技术的不断发展,基础架构的技术层面,郑然理解是一个从简单的单机系统向全面的分布式系统演化的过程。早期数据量少,算法也比较简单,小型的单机系统就可以轻松应付。随着数据量、算法复杂度的不断增加,对数据和算力的要求也越来越高,逐步引入了大量的分布式架构,比如分布式文件系统、表格存储系统、服务治理系统等等。在移动互联网时代,用户对内容的要求也发生着根本的变化,比如通过深度学习技术和大规模视频理解系统来提升对视频内容的理解程度,这些技术在百度智能云的视频云产品系列里也有体现。
2如何看待中台和微服务?
郑然认为,中台的概念过于广泛,他主要分享了百度在技术方面的一些做法。在百度相同业务部门和不同体系之间都有很多技术中台的案例,比如垂类搜索架构会复用通用搜索架构中大量的基础能力,搜索引擎架构会复用公司基础架构团队的很多基础能力。技术上通常以服务的形式提供,这其中相对基础的技术能力是比较容易界定的,但是越偏业务侧的就越难界定,需要更高层次的业务和技术架构设计。
在郑然看来,微服务只是中台的一种实现形式,但并不是唯一的实现形式。微服务的本质是单一职责,是松耦合,是技术能力复用,这和中台的本质是一样的,所以如果业务部门微服务做得好,那么也更容易中台化。
3云原生给架构带来了什么?
云原生这个时下最流行的技术概念,在郑然看来其实是云计算技术的第二次进阶。在前十年,云计算技术是围绕资源层的弹性来建设的,通过大量的虚拟化技术来实现 IaaS 层强大的弹性能力。但是最近几年,大家发现只有资源弹性还无法释放云的全部能力,业务必须充分意识到自己是运行在云上,按照云的特点进行设计才能进一步发挥云的威力,这就是 Native 的含义。
郑然所理解的云的特性中,核心是弹性,是按需使用。因此,业务架构也要向着弹性发展,比如微服务、存储计算分离、高可用等等,这对业务架构的要求也非常高。在 CNCF 社区的努力下,云原生不仅仅停留在理念和思想上,还涌现出了像 Kubernetes 和 Prometheus 这样成为事实标准的工业级软件,加速了云原生理念的落地。可以想象,随着这些标准化的云原生技术的普及,可以全面加速企业上云的进程,全面释放云的技术红利,让所有企业从中受益。
百度早在 2012 年就开始在云原生的理念下探索了,在 2015 年左右百度集群操作系统 Matrix 已经覆盖了大量的业务线,以此为基础的 PaaS 技术和在离线混部等技术也一直走在前面。2019 年春晚红包,百度作为历史上第一次春晚全程无宕机的公司,云原生的技术思想和业务架构起到了关键的作用。
郑然补充到,目前百度的云原生技术更多的是自研的技术体系,和 CNCF 社区的标准化技术方案有较大差异。团队看到了云原生社区的迅速发展和强大生命力,从 2019 年开始逐步拥抱 Kubernetes、Istio、Prometheus 等优秀的开源技术,希望结合自研的技术实践经验,将百度的优秀实践回馈到 CNCF 开源生态中去,促进云原生技术的发展,在 2019 年百度向 Kubernetes 社区的贡献进入全球前十的行列。
对于云原生是否适用于传统行业,郑然认为云原生适用于任何企业,CNCF 2019 年的年度报告中不乏各行各业的实践案例。事实上,云原生的本质是应用需要按照云的特点而设计,虽然很多业界标准的云原生技术能够帮助企业加速云原生理念的落地,但是企业必须认识到自身架构必须按照云原生的理念进行优化才能真正达到云原生的能力,这方面郑然认为没有捷径。很多企业希望完全依赖公有云厂商或者自己的 IT 部门就能实现云原生的转型是绝对错误的,只有业务积极适配云原生的技术理念,才能真正完成云原生的蜕变。
4中小企业架构师应该如何设计 IT 架构?
架构是为了保证业务高速发展而准备的,作为架构师首先需要深入理解业务, 只有深刻理解业务需求,才能设计出最符合当前业务发展阶段的架构。除此之外,架构师还需要在某些维度锻炼自己的核心能力,郑然在自己的个人公众号里曾经写过一遍《架构师能力模型》的文章,总结了架构师应该锻炼的十项能力,稍微总结一下:
研发流程的持续改进。架构师不是单兵作战,一定需要团队的共同努力,那么需要对团队的研发效率了如指掌,并且针对性的提出优化手段。
归纳抽象和技术泛化能力。架构设计很多情况下郑然理解就是将共性和差异化的东西分离出来,共性的部分抽象成独立的接口,功能模块或者组件,差异化的部分分别形成其他代码模块。那如何识别或者分析出共性的部分,这主要就是依靠架构师的归纳,抽象和技术泛化能力。
业务和需求的分析和理解能力。架构师要能够接地气,只有更好的理解业务才能设计出符合业务发展阶段的架构。
技术折中和持续改善的能力。架构设计需要在很多因素中平衡,把握其中的平衡点并且知道后续如何改善是架构师内功的一种体现。
技术广度和深度。架构师毕竟仍然是工程师,而且大都是从一线研发工程师逐步成长和积累起来的,在某一技术领域或者技术方向通常都有较为深入的理解和积累。不管是一线研发同学还是架构师,至少应该在 1~2 个技术领域有着深入理解的基础上,再同时涉猎技术广度。
持续学习能力。计算机技术发展速度非常快,持续学习能力对于计算机工程师来说都非常重要,特别是架构师还要求开阔技术视野。持续学习能力与其说是一种能力,更多的还是一种习惯的养成。
技术影响力。可以多参加 QCon 的演讲。
沟通表达能力。对上可汇报,对下可讲细节,对用户可讲产品功能,沟通可以说贯穿日常工作的方方面面,是架构师综合能力的集中体现。
技术管理能力。架构师不是做完架构设计之后就可以高枕无忧了,架构师往往要带领整个研发团队完成架构的落地。这就要求架构师即使不是经理角色,也要具备一定的技术管理能力,从而带着整个团队一起完成工作。技术管理能力首先要求能够设定清晰的目标,这是整个团队工作的方向;其次要求在行进过程中不断纠正执行路径,执行路径很难在项目启动时就规划清楚,需要在执行过程中不断探索;有了目标和路径,还需要优秀的人才组成团队,所以架构师也不能疏忽人才招聘和人才培养的工作。
坚持正确的价值观,积极正能量。有着正确的价值观,时刻充满积极正能量的人,面对诱惑的时候,能够更加坚定自己的选择。面对困难的时候,可以主动寻找解决办法,有足够的韧性。这可能也是很多成功者的必备素质吧。