云原生时代架构师的进化之道
你好,我是华仔。
我们在讲架构设计三原则的时候说过,软件系统架构是需要随着业务和技术发展逐步演进的。其实架构师自己,同样需要随着业务和技术的发展逐步“进化”:学习新的技术,分析新技术对业务和架构的可能价值,尝试通过技术驱动架构的演进,为业务创造更大的价值。
2018年专栏推出后,软件行业技术继续飞速发展,各种技术热点你方唱罢我登场:中台、比特币、区块链、物联网、低代码、云原生、大模型……经过大浪淘沙和时间的检验,中台已经逐步冷却甚至消失,比特币、区块链、物联网、低代码局限于特定的业务领域,而云原生和大模型,正在深刻地影响和改变整个软件行业。
面对云原生和大模型的技术浪潮,有的人感到兴奋和热情,认为这是新的机遇;但是更多的人感到迷茫和彷徨,因为云原生和大模型初步看起来都是取代技术人员的。因此,我在讲课和交流的时候,遇到的最多的问题就是:有了云原生是不是就不要架构师了?大模型会不会全面取代技术人员?
要回答这样的问题并不容易,既需要对架构师岗位和职责有深刻的理解,也需要对云原生和大模型的技术本质有深刻的理解。这里我先不简单地给出问题的答案到底是“是”还是“否”,而是先用两篇加餐来展开谈谈我对云原生和大模型的理解,它们对技术领域的影响,以及架构师如何在云原生和大模型时代进化。相信看完后,你一定能够自己得出答案。
这一篇,我们先来聊聊云原生时代架构师的进化之道。
深入剖析云原生
对于云原生,CNCF(Cloud Native Computing Foundation,云原生计算基金会)是这么定义的:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
上述定义有3个关键点:
- 云原生是在云计算的环境中实现的:没有“云”就谈不上“云原生”。
- 可弹性扩展的应用:不能弹性扩展就不是真正的云原生。
- 云原生的代表技术:容器、服务网格、微服务、不可变基础设施和声明式API。
不管是公有云、私有云还是混合云,不可变基础设施都由云产品的方式来提供。基于上述理解,我们可以将云原生简化为一个容易理解的公式:云原生 = 服务化 + 容器化 + 网格化 + 云产品。
理解了什么是云原生后,我们还需要进一步思考:为什么会出现云原生?云原生与云计算是什么关系?
要回答这个问题,我们先来看看云计算发展的历史进程。
如上图,云原生可以理解为是云计算发展的第三个阶段。我来简单介绍下云计算的不同发展阶段。
首先是云计算1.0:云托管。云厂家提供了硬件基础设施,主要是服务器、网络、存储这些设备。我们不再需要自己买机器、租机房、拉网线,只需要向云厂家购买相关资源,就可以开始安装软件、搭建环境、部署程序了。
然后是云计算2.0:云服务。云厂家提供了很多云产品来实现基础的服务,例如关系数据库、负载均衡、CDN等。以关系数据库MySQL为例,我们不但不需要买机器、租机房、拉网线了,还不需要自己安装MySQL、配置主备同步、写脚本做快照备份了,只需要向云厂家购买相关MySQL服务就可以开始使用。
最后是云计算3.0:云原生。云厂家提供了实现弹性扩展的云产品,进一步简化软件设计。以MySQL为例,在云计算2.0时代,虽然我们不用自己搭建和维护MySQL了,但还是要事先根据业务的需求来做容量规划和高性能设计。例如,我们需要自己来实现分库分表,如果评估错了或者业务发展超出预期,后面做扩容还是很麻烦的。
到了云原生时代,关系数据库云产品本身已经实现了可弹性扩展,并且支持了很多原来需要我们自己设计的高级特性,这大大简化了我们的软件设计复杂度。
如下是阿里云PolarDB的官方介绍:
综合上面的分析,我们可以看到,云原生的技术本质核心其实就是“可弹性扩展”。服务化、容器化、网格化、云产品这些技术,本质上都是为了实现“可弹性扩展”。其中服务化、容器化、网格化本质上是应用的计算架构“可弹性扩展”,而应用的存储架构可弹性扩展是通过云厂家提供的云原生产品来实现的。
云原生的行业影响
单纯从云原生的等式(云原生 = 服务化 + 容器化 + 网格化 + 云产品)来看,很多人会简单认为云原生只是给一组技术名词套了一个外壳,进行了包装。实际上恰恰相反,云原生已经在逐步深刻地改变软件行业了。这主要体现在两个方面:抹平技术层差和降低岗位要求。
“技术层差”指的是不同公司由于所处规模、等级不同,处于不同的技术层级上,各层级之间有着较为显著的技术水平差异。例如互联网巨头公司往往处于较高技术层级,掌握前沿核心技术,而一些小型初创公司可能处在相对较低的技术层级,技术相对简单、基础。
过去20多年软件行业的开源运动蓬勃发展,已经在很大程度上降低了技术层差的程度。但是由于不同层级公司人才能力的差异,即便是同样的开源系统,不同层级公司的理解和掌握能力差异也很大,比如说很多大公司都会基于Nginx做二次开发来实现基于业务的定制化需求。
云原生的出现进一步抹平了技术层差。云厂家通过提供功能强大的云原生产品,将原来只有巨头公司才能够掌握和使用的高级能力,封装在云原生产品内,提供给所有企业使用。以前面提到的PolarDB为例,如果没有云原生产品提供这样的能力,不用说普通中小公司自己不可能实现如此能力的系统,很多巨头如果技术能力不够也无法实现。
云原生的第二个重大影响是对技术岗位的影响,我把其整理为如下表格:
从上面的表格可以看出,整体上来说,云原生会降低绝大部分技术岗位的技能要求,技术人员需要更多地关注业务本身。
架构师进化指南
理解了云原生是什么,以及它对行业有什么影响后,我们来看看架构师在云原生技术时代如何进化。
云原生带来的机遇
云原生对架构师来说,既是挑战,也是机遇。正如上面我们分析云原生对行业的影响时提到的:云原生实际上会导致架构师岗位增多,因为大量的现有企业架构需要进行云原生的演化。
因此,对于架构师来说,我们可以从4个方面抓住云原生带来的机遇。
首先是发挥自身的业务积累优势,结合数字化的技术趋势,将系统架构演进到微服务。
国内软件行业目前有三个大趋势:数字化、国产化、云原生。其中云原生是数字化的基础,而大部分云厂家也提供了国产化的替代产品,因此也可以说云原生是国产化的基础。对于架构师来说,需要发挥自己以前在业务方面的积累优势,在实施数字化的过程中,将系统重构为微服务架构。因为微服务架构是应用容器、K8s、网格等技术的基础。
然后是利用容器和云原生技术,实现架构的弹性资源管理,降低硬件成本。
企业通过容器和云原生产品的按需弹性技术,基于实际的业务需求来申请资源,而不是买了很多资源,结果用不上导致浪费。根据业界之前的一些统计分析,线上服务器使用率(按照CPU使用率评估)平均约20%-30%左右。如果能够基于容器实现弹性扩缩容,可以大大降低硬件成本。
接着是利用K8s和网格技术,统一跨语言的基础设施,降低运维成本。
企业往往会运用多种编程语言来构建不同的业务系统,像Java凭借其强大的面向对象特性、丰富的类库以及出色的跨平台能力,被广泛应用于大型企业级应用开发、后端服务搭建等诸多场景。而C++则以其高性能、对底层硬件的良好操控性,在游戏开发、对性能要求苛刻的系统软件等领域发光发热。然而,随着业务的不断拓展和系统规模的持续扩大,基于不同语言构建的应用所面临的运维挑战也日益凸显。
通过将K8s和网格技术相结合,企业能够搭建起统一跨语言的基础设施,原本分散且各自为政的、基于Java、C++等不同语言开发的应用,都可以被纳入到这个统一的管理体系之中。运维团队不再需要针对不同语言的应用,花费大量精力学习和使用不同的运维手段。这大大降低了整体的运维成本,使得企业可以将更多的资源聚焦在业务的创新与拓展上,推动业务不断向前发展。
最后是利用云产品的强大能力,快速搭建顶尖的系统架构,例如异地多活、弹性扩缩容、全球部署等等。
云产品涵盖了从计算、存储到网络等多个方面的丰富资源与服务,它们基于先进的云计算技术,具备高度的可扩展性、可靠性以及灵活性。当企业想要快速搭建顶尖的系统架构时,云产品的优势就展现得淋漓尽致了。
比如在打造异地多活的系统架构方面,云产品能够借助分布在不同地域的数据中心,通过智能的网络连接和数据同步机制实现多个数据中心,同时对外提供服务,并且在某个数据中心出现故障时,其他的数据中心可以无缝接管业务,确保业务的连续性和高可用性。这意味着无论面对自然灾害、网络故障还是其他突发状况,企业的系统都能稳定运行,用户的体验不会受到严重影响。
云原生时代进化建议
说了这么多,我们到底该如何在云原生时代完成进化呢?
如果你还不是架构师,我建议你先逐步积累行业相关的业务经验,成为技术业务都懂的 π 型人才。
在云原生出现之前,架构师的技术能力对于设计优秀的系统架构至关重要,架构师需要花费大量的时间和精力来学习和锤炼高性能、高可用、可扩展、可伸缩等架构设计技术和技巧;而云原生时代,这方面的技术和能力大部分会由云厂家提供的云产品来实现。因此,架构师是否对业务有深刻理解,设计出来的系统架构是否契合业务的特点就成了设计优秀系统架构的关键,所以架构师对业务的熟练程度将会越来越重要。
然后,我建议你能学习云厂家的云产品,考云厂家认证。考虑到投入时间和精力,建议先考初级认证,先大体上了解一下。
不同云厂家的云产品在功能、特性和适用场景上各有差异。例如,阿里云的飞天操作系统,为海量数据处理和大规模计算提供了强大的支持;腾讯云的万象优图,专注于图片处理和多媒体服务,为内容型企业提供了便捷的解决方案。通过学习这些云产品,技术人员能够深入了解云计算的实际应用,拓宽技术视野,为构建复杂的云架构奠定基础。
在学习云产品的过程中,考取云厂家认证是一种非常有效的方式。云厂家认证不仅是对个人知识和技能的权威认可,还能在职业发展中增加竞争力。
然而,考虑到获取认证需要投入大量的时间和精力,建议你先从初级认证入手。初级认证通常涵盖了云产品的基础知识和基本操作,能够帮助学习者从大体上了解云产品的架构、功能和应用场景。例如,阿里云的 ACA(阿里云认证 - 助理工程师)认证,主要考核对阿里云云计算基础产品的理解和使用能力,通过学习和考取该认证,学习者可以对阿里云的核心产品有一个初步的认识,为后续深入学习和考取更高级别的认证打下基础。
最后,我建议你能系统学习K8s,因为这是事实上的标准。在学习过程中,你要重点关注 K8s 的原理和使用。K8s 的原理涉及集群管理、资源调度、服务发现、负载均衡等多个方面,深入理解这些原理,能够帮助技术人员更好地优化 K8s 集群的性能,解决遇到的各种问题。例如,了解 K8s 的资源调度算法,能够根据应用的资源需求,合理分配集群中的计算资源,避免资源浪费或过载。
同时,在学习 K8s 时,不一定要转 Golang。虽然 K8s 是用 Go 语言编写的,但这并不意味着学习者必须精通 Go 语言才能掌握 K8s。K8s 提供了丰富的 API 和命令行工具,通过这些接口,技术人员可以使用多种编程语言与 K8s 进行交互。例如,使用 Python 编写脚本自动化部署 K8s 集群中的应用,或者使用 Java 开发与 K8s 集成的业务系统。因此,学习者应将重点放在理解 K8s 的架构和功能上,掌握其使用方法,而不是局限于学习某一种编程语言。
如果你已经是架构师,承担了架构设计的职责,我也有几点建议给到你。
首先是系统学习架构设计方法论。架构设计方法论是架构师开展工作的基石,它为设计出高效、可扩展、可靠的系统架构提供了指导原则和流程。作为已经承担架构设计职责的架构师,系统学习架构设计方法论显得尤为重要,这样才能在面对复杂多变的业务挑战时游刃有余,而不是只会生搬硬套以往的经验。
然后,我建议你深入学习和对比多家云厂家的产品,为老板决策(Why、What、How)提供技术支撑。
云计算具有诸多显著优势,其中之一就是成本效益。云服务采用按需付费的模式,企业无需大量前期硬件和软件投资,只需根据实际使用量支付费用,这对于初创企业和中小企业尤为重要,能够有效降低企业的运营成本。此外,云服务具有高度的可扩展性,企业可以根据业务需求的变化,随时调整云资源的使用量,无论是业务高峰期的资源扩容,还是业务低谷期的资源缩减,都能轻松实现,确保企业始终以最优的资源配置运行。
不同的云厂家提供了丰富多样的云产品,涵盖计算、存储、网络、大数据、人工智能等多个领域。架构师要根据企业的业务特点和需求,对这些云产品进行详细的对比分析,包括性能、功能、价格、服务质量等方面,为老板推荐最适合企业的云产品组合。
接着,我建议你能以数字化为契机,推动业务上云。数字化转型涵盖了企业的各个层面,从业务流程优化到商业模式创新,从客户体验提升到内部管理变革。而云计算作为数字化转型的关键支撑技术,能够为企业提供强大的计算能力、灵活的资源配置和高效的服务交付。通过上云,企业可以打破传统 IT 架构的束缚,实现业务的快速创新和敏捷响应。
最后,对于已经上云的企业系统,架构师可以进一步推动云原生化,尝试使用云原生产品。云原生化是提升系统性能、灵活性和可扩展性的重要举措,云原生技术以容器化、微服务、DevOps 等为核心,能够充分发挥云计算的优势,帮助企业构建更加高质量、高水平的系统架构,例如多活架构、弹性架构等。
小结
这一节,我们重点学习了架构师如何在云原生时代进化。云原生是云计算发展的3.0阶段,可以概括理解为“服务化 + 容器化 + 网格化 + 云产品”。云原生会进一步抹平“技术层差”,并且大大降低对各个岗位的技能要求。好消息是,对架构师的岗位会增多,但是架构师也要与时俱进的自我进化,结合自己的业务积累经验,学习云原生相关的技术,利用云原生技术带来的机遇,然后抓住机会,在公司和业务里面落地相关事项,给业务带来新的价值,同时也提升自己的能力。
思考题
以上就是今天的全部内容,最后留一道思考题给你吧:有人说云厂家提供功能强大的云原生产品,且云厂家也有解决方案架构师,感觉企业都不需要自己的架构师了,你怎么理解这个观点?
欢迎你把答案写到留言区,和我一起讨论。相信经过深度思考的回答,也会让你对知识的理解更加深刻。
- 蒹葭残辉 👍(0) 💬(1)
项目是独特的,每个项目面向不同的业务系统。也就意味着架构师以云为基准去设计架构时,需要考虑架构的是否满足当下(合适原则),架构是否满足未来2年的项目迭代。 而云原生产家的架构师更多是为企业提供解决方案,但企业需要结合自身发展情况,去选择最合适的解决方案,这里就需要企业自己架构师来考虑这个问题了。
2025-02-05