赞
踩
计算机软件技术架构进化受到两大主要驱动因素影响:一是底层硬件升级,二是顶层业务发展需求。随着x86硬件体系的成熟,许多应用不再依赖昂贵的大型机,而是选择了价格更低廉的x86硬件,并推动了各种分布式架构的发展,如CORBA、EJB、RPC等。随后,互联网业务迅猛发展,传统IOE架构无法满足大规模并发需求,出现了互联网架构体系,如阿里巴巴Dubbo&RocketMQ、SpringCloud等。云计算已经发展了十五年,但仍有许多应用停滞在传统IDC时代,未能充分利用云的能力,导致效率、可用性和可扩展性受限。数字化转型要求业务更加敏捷,迭代速度更快,这对技术提出了更高要求。为应对挑战,企业需要新的云原生架构,以释放云计算的潜力,实现敏捷、成本效益和灵活性。
云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。
上图展示了在代码中通常包括三部分:业务代码、三方软件、处理非功能特性的代码。
三部分中只有业务代码是核心,但随着软件规模的增大、业务模块规模变大、部署环境增多、分布式复杂性增强,使得今天的软件构建变得越来越复杂。
云原生架构本身作为一种架构,也有若干架构原则作为应用架构的核心架构控制面。
这些原则有助于构建更灵活、可扩展和可管理的云原生架构。
云原生架构涵盖多种架构模式,以下是其中一些关键模式:
Serverless让开发者无需考虑部署细节,云平台自动管理应用的运行。Serverless更适合事件驱动、短时应答和简单任务。
在分布式环境中,有状态应用面临CAP(C一致性、A可用性、P分区容错性)问题,对于某些状态数据,如果存储在远程缓存中会导致交易性能下降,在云环境中,推荐把数据采用云服务来保存,从而实现存储计算分离。
在微服务架构中,每个服务使用私有的数据源,而不是共享数据源,但这可能导致需要跨多个微服务访问大颗粒度的业务,从而引发分布式事务问题,可能导致数据不一致。架构师在不同场景下需要选择适当的分布式事务模式:
可观测架构包括Logging、Tracing和Metrics三个方面,用于监测和分析系统性能和行为。架构决策者应选择适合的开源框架(如OpenTracing、OpenTelemetry)并规范可观测数据的传播方式,以满足服务水平目标(SLO)的度量需求,从而优化服务水平协议(SLA)。这包括规划可观测数据的传递方式,确保在分布式链路分析时有足够的信息进行快速关联分析。
事件驱动架构(EDA,EventDrivenArchitecture)本质上是一种应用/组件间的集成架构模式
事件驱动架构(EDA)与传统消息不同,它具有schema,可验证事件的有效性,同时具备QoS保障机制,可处理事件处理失败。EDA不仅用于(微)服务解耦,还可应用于以下场景:
这些架构模式有助于构建云原生应用,提高可维护性和灵活性。
容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间, 快速、可靠地运行。
容器化的三个核心价值:敏捷(着企业可以更快速的迭代产品,更低成本进行业务试错。)、弹性(通过容器技术,企业可以充分发挥云计算弹性优势,降低运维成本。)可移植性(将应用与底层运行环境进行解耦,帮助应用平滑运行在不同基础设施上)。
容器编排-Kubernetes:
Kubernetes是容器编排的事实标准,用于自动部署、扩展和管理容器化应用。它提供以下核心能力:
Kubernetes的控制平面包括四个主要组件:APIServer、Controller、Scheduler和etcd。分别负责处理API请求、管理控制器和维护副本数量、资源调度以及持久化数据存储,四个组件共同工作,以确保Kubernetes集群的稳定性、可伸缩性和高可用性。
过去,主要使用单体模式来开发后端应用,即将所有服务整合到一个单一后端应用中。但随着业务增长和需求增加,单体应用变得复杂,导致开发效率下降。为解决这个问题,引入了微服务模式。
微服务模式将单体应用拆分成多个松耦合的子应用,每个子应用负责特定功能,这些子应用称为"微服务",构成独立但完整的分布式微服务体系。微服务相互独立,通过解耦开发、测试和部署流程,提高整体迭代效率。同时,微服务通过分布式架构实现了应用的水平扩展和冗余部署,解决了单体应用在拓展性和稳定性方面的问题。
然而,微服务模型也面临分布式系统挑战,如高效调用远程方法、预测系统容量、建立负载均衡、进行集成测试以及管理大规模复杂应用的部署和运维。
在云原生时代,云原生微服务充分利用云资源的高可用性和安全性,提供弹性、可用性和安全性。应用构建在云基础设施和服务上,降低了架构复杂性,提升了可观测性、可控性和容错性。
对于优秀的微服务系统应当遵循以下设计约束:
包括可发现性和可交互性,其中可发现性是指如何使一个微服务自动感知其他微服务的变化。这通常通过服务注册中心来实现,特别是在大规模微服务集群中,服务注册中心的推送和扩展能力非常关键。可交互性指微服务之间如何相互调用。由于微服务要求使用与编程语言无关的远程调用协议,比如REST,以实现标准化和语言无关性。在高性能场景下,也可以考虑使用基于IDL的二进制协议。此外,微服务通常需要通过事先约定的接口来完成调用。为了更好地实现微服务之间的解耦,需要一个独立的元数据中心来存储服务的元数据信息,以便服务了解调用的细节。
在微服务架构中,数据存储隔离原则很重要,数据应该被视为微服务的私有资产,只能通过提供API的微服务来访问。这有助于保持高内聚和低耦合。此外,为了提高性能,通常采用读写分离(CQRS)策略。
另外,微服务的设计原则之一是尽量遵循无状态设计,以减少与底层基础设施的耦合。有状态的微服务通常将数据存取与计算分开,将数据存储在分布式存储中,以实现一定程度的无状态性。
全局视角下的微服务分布式约束包括以下方面:
高效运维:确保系统的高效运维是关键。这包括建立全自动化的CICD流水线,以提高开发效率,并支持不同的发布策略,如蓝绿部署和金丝雀发布,以确保业务发布的稳定性。
可观测性:面对复杂的微服务系统,需要具备全链路、实时和多维度的可观测能力。这意味着需要收集和分析来自多种事件源的数据,并在集中的监控系统中展现多维度信息。及时发现故障和准确找到根本原因对于开发和运维人员至关重要。
典型的架构模式按顺序共分为四代:
第一代微服务架构中,应用不仅需要处理业务逻辑,还需要自己解决与上下游服务的通信、定位和容错等问题。随着微服务规模的增加,处理服务定位逻辑变得复杂,即使是使用相同编程语言的另一个应用,也需要重新实现这些基础微服务功能。这导致了功能的重复实现。
第二代微服务架构中,引入了旁路服务注册中心作为协调者,以完成服务的自动注册和发现。服务之间的通信和容错机制开始模块化,并形成独立的服务框架。然而,随着服务框架内功能不断增加,跨不同编程语言的基础功能重复实现变得困难。这也导致微服务的开发者被限制在特定编程语言上,违反了微服务的灵活迭代原则。
在2016年出现了第三代微服务架构,即服务网格。这一架构将原本模块化到服务框架中的微服务基础能力进一步演进,变成了独立的进程,称为边车(Sidecar)。这个变化完全解决了第二代架构中的多语言支持问题,实现了微服务基础能力和业务逻辑的完全解耦。在这个云原生时代的微服务架构中,边车进程接管了微服务应用之间的流量,并承载了第二代架构中的功能,包括服务发现、调用容错,以及丰富的服务治理功能,如权重路由、灰度路由、流量重放、服务伪装等等。
近两年,随着AWS Lambda等Serverless计算服务的出现,一些应用开始尝试使用Serverless来构建微服务,这被称为第四代微服务架构。在这个架构中,微服务被进一步简化为微逻辑(Micrologic),更多可重用的分布式能力不再集成在应用中,而是下沉到边车中,这些能力包括状态管理、资源绑定、链路追踪、事务管理、安全等等。同时,在开发方面,提倡了面向localhost编程的理念,通过提供标准API来屏蔽底层资源、服务和基础设施的差异,进一步降低了微服务开发的难度。这就是目前业界提出的多运行时微服务架构(Multi-Runtime Microservices)。
Serverless(无服务器计算)是一种云原生技术,将应用构建与服务器基础设施的开发、运维、安全和高可用等工作分离,使开发人员能够将更多精力用于业务逻辑设计与实现。它的主要特征包括:
函数计算(Function as a Service)是Serverless中最典型的形式,它通过将应用逻辑拆分为多个函数,每个函数由事件触发执行。例如,当对象存储中发生上传或删除对象等事件时,FaaS函数会自动触发并处理,具有弹性和高可用性。此外,通过与消息中间件和函数计算的集成,用户可以快速实现大规模消息的实时处理。
尽管Serverless计算在普及方面面临一些挑战,如应用架构的变化、函数编程的生态不够成熟、函数冷启动导致应用响应延迟等问题,但它仍在不断发展。一些云厂商提供了容器和Serverless的融合创新,使容器化应用能够无缝运行在各种环境中,从而加快了Serverless的交付。例如,阿里云的弹性容器实例(ECI)和Serverless应用引擎(SAE),以及Google的Cloud Run服务都帮助用户专注于容器化应用构建,而不必担心底层基础设施。Google 也开源了基于 Kubernetes 的 Serverless 应用框架 Knative。
近年来,serverless呈现发展趋势,主要常见场景有:
这些领域的业务逻辑通常复杂多变,需要快速的迭代和上线速度,而且资源利用率相对较低(通常小于30%甚至低于10%),特别是对于小程序等长尾应用来说。Serverless的特点包括无需运维和按需付费,非常适合用于构建这些应用的后端系统。
通过将对象存储和Serverless计算平台集成,可以实现以对象存储为中心的大规模数据处理。用户可以实时响应对象的创建和删除等操作,并以对象存储为基础,进行增量处理新增数据,或者创建多个函数实例来并行处理存量数据。这种集成方式使大规模数据处理更加高效和灵活。
典型的Serverless计算服务采用事件驱动的方式,可以轻松地与各种云端服务集成,无需用户管理底层服务器或编写复杂的"胶水"代码,从而构建松耦合的、基于分布式事件驱动架构的应用。
通过与事件总线的集成,不论是来自云上的BaaS云服务、第三方的SaaS服务,还是用户自行建立的系统,所有的事件都可以快速便捷地被函数计算处理。例如,通过与API网关的集成,外部请求可以转化为事件,触发后端函数进行处理。通过与消息中间件的事件集成,用户可以高效地处理大量消息。这种事件驱动的方式使得应用能够灵活、高效地与各种服务互操作。
通过定时触发器,用户用函数的方式就能够快速实现定时任务,而无须管理执行任务的底层服务器。通过将定时触发器和监控系统的时间触发器集成,用户可以及时接收机器重启、宕机、扩容等 IaaS 层服务的运维事件,并自动触发函数执行处理
2019年末,阿里云和微软联合发布了Open Application Model(OAM)开源项目,其主要目标是解决从Kubernetes到"以应用为中心"的平台之间最关键的问题——标准化应用定义。
OAM的定义旨在弥补现有容器技术的不足,Kubernetes没有引入"应用"这个概念,而是提供了更细粒度的"工作负载"原语,如Deployment或DaemonSet。实际中,一个应用通常由多个独立组件组成,比如电商网站由"PHP应用容器"和"数据库实例"组成,微服务应用由"Deployment+StatefulSet+HPA+Service+Ingress"等组成。
OAM的首要设计目标是引入"应用"这一概念,建立对应用及其所需的运维能力的标准规范。换句话说,OAM既是标准的"应用定义",也有助于封装、组织和管理Kubernetes中各种"运维能力"。具体而言,OAM的描述模型基于Kubernetes API的资源模型构建,强调了现代应用是多个资源的集合,而不仅仅是一个简单的工作负载。
OAM的三个概念:
例如,一个由PHP容器和Redis实例组成的应用,在OAM框架和规范下,可以用以下示意图来表示:
OAM模型还强调整个模型的关注点分离特性。业务研发人员负责定义和维护组件(Component),用以描述服务单元,而运维人员则负责定义运维特征(Trait),并将其附加到组件上,从而构建OAM可交付物,即Application Configuration。这种分离的关注点使得开发和运维团队能够分别专注于他们的核心任务,同时保持对应用的整体控制和灵活性。这也有助于降低了应用定义的复杂性,使其更易于管理和维护。
Service Mesh是在微服务软件架构之上发展起来,旨在将微服务之间的通信、安全、流量控制和监测等通用功能下沉为平台基础设施,从而实现应用与基础设施的解耦。这种解耦意味着开发人员无需担心微服务相关的治理问题,而可以专注于业务逻辑的开发,提高了应用开发效率,加速了业务的探索和创新。
ServiceMesh目前仍然处于市场的早期采用阶段(Early Adoption)。除了Istio之外,Google和AWS分别推出了自己的云服务Traffic Director和App Mesh,这两个ServiceMesh产品与Istio有一些不同之处,但与Istio一样都采用Envoy作为数据平面。此外,阿里云、腾讯云和华为云也都推出了自己的ServiceMesh产品,同样采用Envoy技术作为数据面,处理微服务之间的流量路由、负载均衡、故障恢复和安全性。并在此基础上提供了应用发布、流量管控、应用性能监测(APM)等能力。
17年推出的Istio服务网格项目,明确定义了数据平面(由Envoy开源软件支持)和管理平面(Istio自身的核心功能)。Istio提供了微服务架构的流量管理机制,还为其他增值功能(如安全性、监控、路由、连接管理和策略等)提供了基础。
由于Istio构建在Kubernetes技术之上,因此天然适用于提供Kubernetes容器服务的云厂商环境,并已成为大多数云厂商默认使用的服务网格解决方案。
除了Istio,还有一些较小众的Service Mesh解决方案,如Linkerd和Consul。
DevOps是一系列理念和实践,旨在提高软件研发效率、快速应对变化、实现持续交付价值。它强调持续部署(CD),以缩短软件系统变更的发布时间。
实现持续部署(CD)需要端到端的业务分析,优化所有相关部门的操作,整合可用的技术和方法,以实现资源整合。DevOps理念已经深刻影响了软件开发过程,打破了开发、测试和运维之间的壁垒,通过技术手段实现自动化和智能化,提高了软件生产效率、安全性,缩短了软件发布周期,推动了IT技术的发展。
要实施DevOps,需要遵循一些基本原则,这些原则被简写为CAMS,分别代表以下四个英文单词的缩写:
要实施 DevOps,就首先要让开发和运维人员认识到他们的目标是一致的,只是工作岗位不同,需要共担责任。这就是 DevOps 需要首先在文化层面解决的问题。只有解决了认知问题,才能打破不同团队之间的鸿沟,实现流程自动化,把大家的工作融合成一体。
实施 DevOps,首先就要分析已有的软件开发流程,尽量利用各种工具和平台,实现开发和发布过程的自动化。
通过数据可以对每个活动和流程进行度量和分析,找到工作中存在的瓶颈和漏洞,以及对于危急的情况及时报警等。通过分析,可以对团队工作和系统进行调整,让效率改进形成闭环。
知识共享,团队进步。
容器技术和Kubernetes服务编排技术的结合解决了应用部署的自动化、标准化和配置化问题,成为云上平台的标准,简化了多云部署。微服务将巨大的应用拆分为独立的单功能服务,减少了耦合性,提高了开发和部署的灵活性,缩短了开发周期。ServiceMesh解耦了中间件升级和应用系统升级,提高了运维和管控的灵活性。Serverless使运维对开发透明,自动伸缩应用所需资源。FaaS简化了开发和运维的流程,集成开发环境覆盖了从开发到测试上线的全过程。无论哪种场景,后台运维平台的工作都是必不可少的,只是通过技术手段使扩容和容错等工作对开发人员透明化,提高了效率。
云原生中间件旨在充分利用云计算的特性,如弹性伸缩、自动化管理、容器化、微服务架构等,以满足现代应用程序开发和部署的需求。
云原生中间件最大的技术特点是中间件技术从业务进程中分离,变成与开发语言无关的普惠技术,只与应用自身架构和采用的技术标准有关,比如一个 PHP 开发的 REST 应用也会自动具备流量灰度发布能力、可观测能力,即使这个应用并没有采用任何服务化编程框架。
随着 Kubernetes 的流行,Kubernetes 提供的基础部署运维和弹性伸缩能力已经可以满足多数中小企业的微服务运维要求。微服务与 Kubernetes 集成会是一个大趋势。
ACNA(Alibaba Cloud Native Architecting)是阿里巴巴提供的架构设计方法,用于帮助各行各业的企业客户实现数字化转型,充分利用阿里云服务和云原生技术。ACNA方法结合了企业的核心关注点、组织文化、工程实施能力以及架构技术,形成了一套独特的云原生架构设计方法。
ACNA方法采用了4+1的架构设计流程,其中4代表了架构设计的关键视角,包括企业战略视角、业务发展视角、组织能力视角和云原生技术架构视角。另外,1表示云原生架构持续演进闭环的部分。这四个架构视角和架构持续演进闭环之间的关系如下图所示:
ACNA方法旨在帮助企业客户以云原生的方式设计和实施架构,以提高业务的灵活性、可伸缩性和可靠性,实现数字化转型的目标。它强调了架构设计的多个关键方面,从战略到技术,以确保整个过程的成功。
云原生产品家族包括:容器产品家族、微服务产品家族、Serverless产品家族、ServiceMesh产品家族、消息产品家族、可观测产品家族、云原生技术中台CNStack,详见《阿里云原生架构白皮书》第四十六页。阿里云原生产品家族如下:
家族名称 | 成员 |
容器产品家族 | 容器服务 ACK 、容器服务 Serverless 版 ASK 、容器镜像服务 ACR 、分布式云容器平台 ACK One 、边缘容器服务 ACK@Edge 、服务网格 ASM 、容器服务 ACK 发行版、阿里云容器服务 ACK 敏捷版 |
消息产品家族 | 云消息队列 RocketMQ 版、云消息队列 RocketMQ 轻量版(原 MNS)、云消息队列Kafka版、云消息队列RabbitMQ版、云消息队列MQTT版、事件总线EventBridge |
可观测产品家族 | 应用实时监控服务 ARMS、Prometheus 监控、Grafana 服务、链路追踪 |
Serverless产品家族 | FC(函数计算)、SAE(Serverless 应用引擎)、Serverless 工作流 |
微服务产品家族 | 企业分布式应用服务 EDAS、微服务引擎 MSE 、云服务总线(Cloud Service Bus,简称 CSB)、全局事务服务(Global Transaction Service ,简称 GTS) |
高可用产品家族 | 性能测试PTS(PerformanceTestingService)、'故障演练(Chaos)、多活容灾MSHA(Multi-SiteHighAvailability)、数字化安全生产(DigitalProductionStability,简称DPS) |
云原生技术中台 CNStack 产品家族(阿里云专有云敏捷版云原生 PaaS 场景(简称 CNStack)是 IaaS 解耦的企业级私有化云原生 PaaS 产品家族。) | CNStack for Application、CNStack for SaaS、CNStack for Edge |
在2018年底,vivoAI研究院为了解决高性能训练环境、大规模分布式训练和计算资源高效利用等问题,开始建设AI计算平台。经过两年多的迭代,该平台已成为vivoAI领域的核心基础平台,并包含VTraining、VServing、VContainer三大模块,提供模型训练、模型推理和容器化能力。平台拥有庞大的容器集群,数千个节点,超过数百PFLOPS的GPU算力,同时运行多个训练任务和在线服务。
混合云是将私有云和公有云服务结合使用的解决方案,目前各大云厂商都提供了相应的混合云方案。vivoAI选择建设混合云的原因包括:公有云的弹性资源可满足临时算力需求,公有云具有高级特性如高性能存储和网络,而私有云尚不具备这些特性。
通过混合云,vivoAI能够灵活满足业务的算力需求,同时降低成本,还可以利用公有云的高级特性提高计算性能。这些举措使vivoAI计算平台能够更好地支持其AI研究和开发工作。
混合云的实现方案:
混合云的整体架构:
混合云的整体架构如下图所示。K8s集群的管理平面部署在公司自建机房,工作平面包含了机房的物理机和阿里云的云主机。机房和阿里云间通过专线打通了网络,物理机和云主机可以相互访问。方案对上层平台透明,比如VTraining训练平台不需要改动即可使用云主机的算力。
落地实践:
首先需要将自建的集群注册到阿里云。
注册成功后,部署ACKAgent。作用是主动建立从机房到阿里云的长链接,接收控制台的请求并转发给apiserver。对于没有专线的环境,此机制可以避免将apiserver暴露在公网。
控制台到apiserver的链路如下:
阿里云ACK控制台<<-->>ACKStub(部署在阿里云)<<-->>ACKAgent(部署在K8s)<<-->>K8s apiserver
控制台到集群的请求是安全可控的。Agent连接Stub时,会带上配置的token和证书;链接采用了TLS1.2协议,保证数据加密;可以通过ClusterRole来配置控制台对K8s的访问权限。
K8s的容器网络要求Pod和Pod、Pod和宿主机之间通讯正常,平台采用了Calico+Terway的网络方案。机房内的工作节点采用CalicoBGP,RouteReflector会将Pod的路由信息同步给交换机,物理机和云主机都能正常访问PodIlP。
阿里云上的工作节点会采用Terway共享网卡模式,Pod会从Pod虚拟交换机配置的网段中分配到IP,该IP在机房内可以访问。
平台给云主机打上标签,配置calico-node组件的nodeAffinity,不调度到云主机上;同时配置Terway组件的nodeAffinity,让其只运行在云主机上。
将云主机加入集群的流程和物理机基本一致。
首先通过公司云平台申请云主机,然后通过VContainer的自动化平台将云主机初始化并加到集群中。最后给云主机打上云主机专有的标签。关于自动化平台的介绍,可以参见VivoAl计算平台云原生自动化实践。
机房到阿里云的专线是公司所有业务共用的,如果平台占用过多专线带宽,会影响到其他业务的稳定性。在落地时发现深度学习训练任务从机房的存储集群拉取数据,确实对专线造成压力,为此平台采取了以下措施:
1、监控云主机的网络使用情况,由网络组协助监控对专线的影响。
2、使用tc工具对云主机eth0网卡的下行带宽进行限流。
3、支持业务使用云主机的数据盘,将训练数据进行预加载,避免反复从机房拉取数据。
落地效果:
数个业务方临时需要大量的算力用于深度学习模型的训练。通过混合云的能力,平台将数十台GPU云主机加入到集群,提供给用户在VTraining训练平台上使用,及时满足了业务的算力需求。用户的使用体验和之前完全一致。这批资源根据不同业务的情况,使用周期在一个月到数个月。经过估算,使用费用大大低于自行采购物理机的费用,有效降低了成本。
未来展望:混合云的建设和落地取得了阶段性的成果,在未来持续完善功能机制和探索新特性。
随着互联网的发展和新技术的涌现,计算需求变得无处不在。不同计算场景需要不同的容器运行时技术。一些新的容器运行时技术,如KataContainer、Firecracker、gVisor和Unikernel,分别解决了安全隔离性、执行效率和通用性等不同方面的需求。出现了OCI(Open Container Initiative)标准,使各种技术都能以一致的方式进行容器生命周期管理,推动了容器引擎技术的不断创新。未来的趋势包括:
Kubemetes已经成为云时代的操作系统。对比Linux与Kubernetes的概念模型,他们都是定义了开放的、标准化的访问接口;向下封装资源,向上支撑应用。
它们都提供了对底层计算、存储、网络、异构计算设备的资源抽象和安全访问模型,可以根据应用需求进行资源调度和编排。Linux的计算调度单元是进程,调度范围限制在一台计算节点。而Kubernetes的调度单位是Pod,可以在分布式集群中进行资源调度,甚至跨越不同的云环境。
Serverless和容器技术也开始融合得到了快速的发展。通过Serverless容器,一方面根本性解决Kubemetes自身复杂性问题,让用户无需受困于Kuberetes集群容量规划、安全维护、故障诊断等运维工作;一方面进一步释放云计算能力,将安全、可用性、可伸缩性等需求下沉到基础设施实现。
Kubernetes已经成为云原生的操作系统,容器则成为了操作系统调度的基本单元,并定义了应用交付的标准。尽管对应用开发者来说,这些变化还没有深入到应用的架构,但这一变革正在悄然发生,而且呈加速态势。
综上所述,生命周期管理、运维管理、配置范围和扩展、语言无关的编程框架等因素共同构成了全新的应用与云之间的编程界面。这一变革的核心逻辑在于将与业务无关的逻辑和职责剥离到云服务中,并在这个过程中形成标准,使应用开发者能够在专有云、公有云或混合云的场景中获得一致的研发和运维体验。
近年来,Serverless一直在高速发展,具有越来越大的影响力。主流云服务提供商不断丰富其产品体系,提供更便捷的开发工具、高效的应用交付流水线、更完善的可观测性以及更多的产品集成。以下是关于Serverless未来趋势的一些观点:
趋势一:Serverless将无处不在
Serverless将不仅限于云产品,还包括合作伙伴和第三方服务,将通过API和Serverless来体现其能力。对于以API作为功能透出方式的平台型产品或组织来说,Serverless将成为其平台战略的关键组成部分。
趋势二:Serverless将通过事件驱动连接云及其生态中的一切
通过事件驱动和云服务的连接,Serverless能力将扩展到整个云生态系统,无论是用户自己的应用还是合作伙伴的服务,无论是on-premise环境还是公有云,都可以以Serverless的方式处理所有事件。云服务和其生态系统将更紧密地连接,成为构建弹性和高可用应用的基础。
趋势三:Serverless计算将持续提高计算密度,实现最佳的性能功耗比和性能价格比
虚拟机和容器是两种取向不同的虚拟化技术,前者安全性强、开销大,后者则相反。Serverless 计算平台一方面要求兼得最高的安全性和最小的资源开销,另一方面要保持对原有程序执行方式的兼容,比如支持任意二进制文件,这使得适用于特定语言 VM 的方案不可行。以 AWS FireCracker 为例,其通过对设备模型的裁剪和 kernel 加载流程的优化,实现百毫秒的启动速度和极小的内存开销,一台裸金属实例可以支持数以千计的实例运行。结合应用负载感知的资源调度算法,虚拟化技术有望在保持稳定性能的前提下,将超卖率提升一个数量级。
当 Serverless 计算的规模与影响力变得越来越大,在应用框架、语言、硬件等层面上根据 Serverless 负载特点进行端对端优化就变得非常有意义。新的 Java 虚拟机技术大幅提高了 Java 应用启动速度,非易失性内存帮助实例更快被唤醒,CPU 硬件与操作系统协作对高密环境下性能扰动实现精细隔离,所有新技术正在创造崭新的计算环境。
实现最佳性能功耗比和性能价格比的另一个重要方向是支持异构硬件。长期以来,x86 处理器的性能越来越难以提升。而在 AI 等对算力要求极高的场景,GPU、FPGA、TPU(Tensor Processing Units)等架构处理器的计算效率更具优势。随着异构硬件虚拟化、资源池化、异构资源调度和应用框架支持的成熟,异构硬件的算力也能通过 Serverless 的方式释放,大幅降低用户使用门槛。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。