简介: IaaS 上云和 PaaS 上云有什么区别?如何借助云原生技术来晋升交付的速度?云原生时代背景下,研发的关注点又会有哪些转变?阿里云高级技术专家许晓斌通过本文分享从 IaaS 上云时代到 PaaS 上云时代的利用架构演进方向,以及云原生技术与利用架构演进的关系。
云原生曾经进入了 PaaS 上云为主的阶段
阿里巴巴曾经经验了 IaaS 上云的阶段,迈进到了 PaaS 上云的时代。在去年的“双 11”,阿里巴巴就曾经实现了电商外围零碎的全面上云,这里的上云次要是在 IaaS 层。所谓 IaaS 次要就是对计算、网络、存储的虚拟化,通过了这个阶段,阿里巴巴就进入了 PaaS 上云的阶段。在 PaaS 上云这个阶段就须要应用更多的云产品,包含中间件、存储、缓存甚至是利用托管平台等。
IaaS 阶段和 PaaS 阶段其实存在很大的差异。在 IaaS 阶段,对于利用研发来说,所关怀的往往就是基础设施和资源,艰深来讲就是虚拟机或者容器等,这些对利用架构简直没有任何侵入。然而在 PaaS 上云阶段,当你应用云产品,比方云 Redis、云 RDS、云 OSS、云 RabbitMQ 等的时候,都会对于利用架构产生比拟强的侵入。那么,这样的侵入会对利用架构产生什么样的影响,是所有研发架构师所须要思考的一个问题。
云原生技术
如果大家尝试去搜寻云原生技术,就会看到 Google Cloud 的定义、CNCF 的定义以及其余很多的云产商以及开源软件的定义,而这些定义认识都各有不同。简略演绎能够分为如下图所示的几类,纵向来看,分为了利用架构、生命周期治理、流量治理,以及基础设施及依赖四个维度;横向来看,又分为了微服务、12 Factor Apps、容器、BaaS、GitOps/IaC 以及 Service Mesh 几个维度。
明天,大家都谈判到基于微服务架构做云原生,而不是基于巨石利用架构或者简略的 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 上云或者云原生上云的阶段,想要做到的就是尽量应用云平台提供的能力,将更多的精力集中在业务自身,而将业务无关的通用技术能力都交给云来治理。
外围问题:
- 业务无关能力如何解耦至平台?
- 平台和业务(利用)之间的协定如何定义?
- 利用架构须要如何适应?
以前在 IaaS 上云阶段,利用和操作系统进行交互存在规范的协定,而明天在 PaaS 上云阶段,这样的协定应该是什么,须要被从新定义。此外,基于这样的协定如何实现能力下沉,也是很多包含阿里云在内的很多云厂商所做的事件,比方阿里云基于 RocketMQ 做了 RocketMQ Service,基于容器的一些协定提供容器服务等等。当然,当初只是一个开始,将来这部分内容将会更加丰盛和残缺。
例子 1:Service Mesh 把服务发现和流量从业务剥离
与此同时,利用架构也须要去适应。这里以 Service Mesh 为例,之前在利用外部的流量是 SDK 的模式,那么在演进的过程中如何将服务发现和流量等从业务 SDK 中剥离进去放到 Sidecar 外面去,进而交给云平台解决,这就是利用架构演进的一个例子。
- 服务注册 & 发现
- 流量路由
- 流量回放
- 公布过程中流量管制
例子 2:轻量化容器把日志采集从业务中剥离
以前在做日志采集的时候,须要在各个虚拟机中开启一个日志采集过程,并将采集到的日志传输到日志采集平台,并通过可视化界面进行剖析。而明天,在云原生时代,更好的做法是让容器服务从 stdout 来抓取日志,也能够通过配置的形式去特定日志目录获取日志数据。然而采集这个事件须要搬到 Sidecar 外面去实现 Agent 的降级。所以轻量化容器把日志采集从业务中剥离也是一个架构演进的例子。
- 资源隔离
- 独立降级
例子 3:业务提供探针,让平台实现生命周期治理
生命周期治理对于利用架构的要求就是原来的应用程序启动之后是衰弱的还是不衰弱的,都是应用程序的运维或者研发须要负责和关怀的。而在云原生时代,心愿将这种协定固定住,通过业务提供探针,来判断应用程序是衰弱的还是不衰弱的,这就须要在利用外部通过 HTTP 协定或者 Shell 来提供衰弱信息,这样才可能利用生命周期治理落到平台中去。
- 主动弹性
- 主动腾挪
- 主动重启(自愈)
协定(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、各种运维事件,然而这些货色实际上都能够被形象成一种模型,并且应用一种新的语言来定义,这也是整个云产业所关怀的事件。
之所以始终强调新语言和新协定,是因为定义了新的语言或者协定之后,应用程序所须要关怀的就是这些了。对于开发者而言,最关怀的就是代码,那么如果可能用代码来形容利用对于基础设施、运维、托管的需要,那么就会对应用程序十分敌对。应用程序只须要可能对接这个协定,那么就可能在专有云、私有云、阿里云上同时运行。
总结
将来,云上的资源会越来越丰盛,在基础设施之上,云平台提供了更多的 PaaS 能力,就像是操作系统在提供了过程这些能力之上,还有很多的 SDK。然而,这些能力目前在应用上还十分低效和不规范,应用过程也比拟麻烦。明天咱们在以相似汇编的模式应用云,云原生则在从新定义应用程序与云平台之间的契约,并围绕这个契约来构建更高级的编程语言和工具。这就是云原生时代背景下,利用架构演进十分重要的一个方向。