云原生时代,应用架构将如何演进?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: IaaS上云和PaaS上云有什么区别?如何借助云原生技术来提升交付的速度?云原生时代背景下,研发的关注点又会有哪些转变?阿里云高级技术专家许晓斌通过本文分享从IaaS上云时代到PaaS上云时代的应用架构演进方向,以及云原生技术与应用架构演进的关系。

image.png

云原生已经进入了PaaS上云为主的阶段

阿里巴巴已经经历了IaaS上云的阶段,迈进到了PaaS上云的时代。在去年的“双11”,阿里巴巴就已经实现了电商核心系统的全面上云,这里的上云主要是在IaaS层。所谓IaaS主要就是对计算、网络、存储的虚拟化,经过了这个阶段,阿里巴巴就进入了PaaS上云的阶段。在PaaS上云这个阶段就需要使用更多的云产品,包括中间件、存储、缓存甚至是应用托管平台等。

image.png

IaaS阶段和PaaS阶段其实存在很大的差别。在IaaS阶段,对于应用研发来说,所关心的往往就是基础设施和资源,通俗来讲就是虚拟机或者容器等,这些对应用架构几乎没有任何侵入。但是在PaaS上云阶段,当你使用云产品,比如云Redis、云RDS、云OSS、云RabbitMQ等的时候,都会对于应用架构产生比较强的侵入。那么,这样的侵入会对应用架构产生什么样的影响,是所有研发架构师所需要思考的一个问题。

云原生技术

如果大家尝试去搜索云原生技术,就会看到Google Cloud的定义、CNCF的定义以及其他很多的云产商以及开源软件的定义,而这些定义看法都各有不同。简单归纳可以分为如下图所示的几类,纵向来看,分为了应用架构、生命周期管理、流量管理,以及基础设施及依赖四个维度;横向来看,又分为了微服务、12 Factor Apps、容器、BaaS、GitOps/IaC以及Service Mesh几个维度。

image.png

今天,大家都会谈到基于微服务架构做云原生,而不是基于巨石应用架构或者简单的CS架构。Quarkus提出了12 Factor Apps,意思就是说如果在今天想要让应用跑在Quarkus等这些应用托管平台上,对于应用具有一定的要求,大概是12条原则,比如配置和代码分离等,当然后续还有很多的扩展。这些原则中的很多条目的意思都是说只要你符合这些原则,那么应用托管平台就能够为你提供更多的能力,比如免运维等。容器的核心是使用一种标准的交互方式让平台能够管理应用的生命周期,包括发布、扩容以及自愈等。

BaaS——Backend as a Service,能够尽量使用现有的服务来构建应用程序。Service Mesh的本质是管理流量,今天的应用程序都在接收流量,提供服务时流量又需要出去,在这个过程中如何管理服务发现、流量路由规则等都需要Service Mesh技术。最后需要重点介绍的就是GitOps和IaC(Infrastructure as Code),这些技术如今在行业里面得到了越来越多的关注,尽管还没有事实上的标准,但是很多云计算公司正在不断努力。其含义是说今天在使用基础设施的时候,可以用代码去声明这些基础设施的需求。总而言之,上述这些内容都是围绕应用架构、生命周期管理、流量管理,以及基础设施及依赖这四个维度的。

业务关心的是交付速度

对于业务而言,最关心的往往是交付速度。如果你和业务总监或者CTO去聊,他们就会问你,拥有这么多的技术对于业务有什么好处?可能会谈到成本的优势、管理的优势,但是对于几乎所有业务而言,最核心的是研发效率的提升。所以我们应该思考云原生技术如何才能帮助实现更快的交付。

借助云原生技术来提升交付服务的速度可以大致分为三个步骤。

标准化平台/服务和应用的协议

将平台/服务和应用之间的协议进行标准化。如果IaaS层用云的话协议就是机器,就是虚拟机、容器等,对于业务应用而言,看到的就是一个操作系统,这样应用就可以使用操作系统上的各种资源,这样做的好处在于不需要关心物理机以及机器的故障等问题。

与业务无关能力进一步解耦至平台

对于业务应用而言,看到的就不是一个操作系统了,会给到一个更加上层的协议,让平台帮助应用实现自动伸缩以及自愈等,还可以帮助应用实现自动腾挪,当底层基础设施发生故障的时候,可以将应用从一台机器迁移到另外一台机器,也就是生命周期管理。基于上述协议,平台的很多能力就能够下沉,比如原本需要手工管理的事情只需要通过代码声明就可以很好地实现了,有了这些协议之后,业务应用就能够将相关的生命周期管理托管给平台。

应用架构升级

除了上述两点之外,第三步就是让应用架构需要通过升级来适应,这样才能让相关能力下沉到云平台。

IaaS上云阶段到云原生上云阶段的转变

进一步细化就会发现,在原来的IaaS上云阶段,除了需要关心业务逻辑之外,还需要关心业务应用的生命周期管理、流量管理,还需要自己进行搭建和配置中间件,比如在云环境中搭建Redis、kafka等,也就是说花费了大量时间在应用依赖管理的事情上,无法让云平台进行管理。今天,在PaaS上云或者云原生上云的阶段,想要做到的就是尽量使用云平台提供的能力,将更多的精力集中在业务本身,而将业务无关的通用技术能力都交给云来管理。

image.png

核心问题:

  • 业务无关能力如何解耦至平台?
  • 平台和业务(应用)之间的协议如何定义?
  • 应用架构需要如何适应?

以前在IaaS上云阶段,应用和操作系统进行交互存在标准的协议,而今天在PaaS上云阶段,这样的协议应该是什么,需要被重新定义。此外,基于这样的协议如何实现能力下沉,也是很多包括阿里云在内的很多云厂商所做的事情,比如阿里云基于RocketMQ做了RocketMQ Service,基于容器的一些协议提供容器服务等等。当然,现在只是一个开始,未来这部分内容将会更加丰富和完整。

例子1:Service Mesh把服务发现和流量从业务剥离

与此同时,应用架构也需要去适应。这里以Service Mesh为例,之前在应用内部的流量是SDK的形式,那么在演进的过程中如何将服务发现和流量等从业务SDK中剥离出来放到Sidecar里面去,进而交给云平台处理,这就是应用架构演进的一个例子。

image.png

  • 服务注册 & 发现
  • 流量路由
  • 流量回放
  • 发布过程中流量控制

例子2:轻量化容器把日志采集从业务中剥离

以前在做日志采集的时候,需要在各个虚拟机中开启一个日志采集进程,并将采集到的日志传输到日志采集平台,并通过可视化界面进行分析。而今天,在云原生时代,更好的做法是让容器服务从stdout来抓取日志,也可以通过配置的方式去特定日志目录获取日志数据。但是采集这个事情需要搬到Sidecar里面去实现Agent的升级。所以轻量化容器把日志采集从业务中剥离也是一个架构演进的例子。

image.png

  • 资源隔离
  • 独立升级

例子3:业务提供探针,让平台实现生命周期管理

生命周期管理对于应用架构的要求就是原来的应用程序启动之后是健康的还是不健康的,都是应用程序的运维或者研发需要负责和关心的。而在云原生时代,希望将这种协议固定住,通过业务提供探针,来判断应用程序是健康的还是不健康的,这就需要在应用内部通过HTTP协议或者Shell来提供健康信息,这样才能够应用生命周期管理落到平台中去。

image.png

  • 自动弹性
  • 自动腾挪
  • 自动重启(自愈)

协议(Contract)=API+Configuration

统筹来看,协议就是API+配置。对于API而言,如果大家使用缓存,那么基本会将开源的协议当做API,这样的协议通常会比闭源的协议更加友好。对于RPC协议,开源的GRPC和DUBBO会优于私有的HSF。此外还有对于基础设施的协议,比如Terraform、Pulumi这些其实是在定义一种开源的配置语言,这些配置语言能够帮助声明所需要的基础设施,比如容器、磁盘、网络、存储等,虽然现在的配置语言种类比较多,但是未来最终会形成1到2种语言,就像是Java的SDK一样,未来使用云资源必然会呈现出一套SDK来,这个SDK必然是根据一套配置代码化语言来构建的。进一步的,GitOps等将发布流程、发布策略也定义成了一套语言,而这在未来将会应用程序与云之间的标准协议。

  • Docker (& OCI) 是标准的软件交付 API。
  • 作为 RPC 协议,开源的 GRPC/DUBBO 优于私有的 HSF。
  • 作为缓存协议,开源的 Redis 优于私有的 Tair。
  • 微软的 Dapr 尝试基于 sidecar 架构将 API 标准化到 HTTP/GRPC 层,以去 SDK,并支持多语言。
  • Terraform,Pulumi 等 IaC 产品,通过配置语言声明基础设施。
  • GitOps 进一步的使用代码声明环境、发布流程、发布策略内容。

研发关注点的转变

原来的时候,应用程序所需要关心的东西太多,比如各种SDK、各种运维事件,但是这些东西实际上都可以被抽象成一种模型,并且使用一种新的语言来定义,这也是整个云产业所关心的事情。

image.png

之所以一直强调新语言和新协议,是因为定义了新的语言或者协议之后,应用程序所需要关心的就是这些了。对于开发者而言,最关心的就是代码,那么如果能够用代码来描述应用对于基础设施、运维、托管的需求,那么就会对应用程序非常友好。应用程序只需要能够对接这个协议,那么就能够在专有云、公有云、阿里云上同时运行。

image.png

总结

未来,云上的资源会越来越丰富,在基础设施之上,云平台提供了更多的PaaS能力,就像是操作系统在提供了进程这些能力之上,还有很多的SDK。但是,这些能力目前在使用上还非常低效和不标准,使用过程也比较麻烦。今天我们在以类似汇编的形式使用云,云原生则在重新定义应用程序与云平台之间的契约,并围绕这个契约来构建更高级的编程语言和工具。这就是云原生时代背景下,应用架构演进非常重要的一个方向。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
30天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
1月前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
28天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
28天前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
23天前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
28天前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
28天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
1月前
|
弹性计算 运维 Cloud Native
云原生架构的崛起与未来展望
在数字化转型的浪潮中,云原生架构凭借其高效、灵活和可扩展的特性,正逐渐成为企业IT战略的核心。本文旨在探讨云原生架构的定义、关键特性、实施优势以及面临的挑战,同时展望未来的发展趋势。通过深入分析,我们期望为读者提供一个关于云原生架构全面而深入的视角,助力企业在云计算时代做出更明智的决策。
34 3
|
1月前
|
Cloud Native API 持续交付
云原生时代的微服务架构设计
随着云计算的蓬勃发展,云原生概念逐渐成为IT行业的热点。本文将通过深入浅出的方式,介绍在云原生环境下,如何设计一个高效、可扩展的微服务架构。文章不仅涉及理论概念,还将结合实际代码示例,帮助读者理解微服务架构的核心要素和设计原则,以及如何在云平台上实现这些设计。
|
28天前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
40 0

热门文章

最新文章