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

简介: 如何借助云原生技术来提升交付速度?云原生时代背景下,研发的关注点又会有哪些转变?阿里云高级技术专家许晓斌通过本文分享从 IaaS 上云时代到 PaaS 上云时代的应用架构演进方向,以及云原生技术与应用架构演进的关系。

1.png

作者 | 许晓斌  阿里云高级技术专家

导读:如何借助云原生技术来提升交付速度?云原生时代背景下,研发的关注点又会有哪些转变?阿里云高级技术专家许晓斌通过本文分享从 IaaS 上云时代到 PaaS 上云时代的应用架构演进方向,以及云原生技术与应用架构演进的关系。

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

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

2.png

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

云原生技术

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

3.png

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

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

业务关心的是交付速度

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

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

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

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

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

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

3. 应用架构升级

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

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

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

4.png

核心问题:

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

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

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

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

5.png

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

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

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

6.png

  • 资源隔离
  • 独立升级

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

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

7.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、各种运维事件,但是这些东西实际上都可以被抽象成一种模型,并且使用一种新的语言来定义,这也是整个云产业所关心的事情。

8.png

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

9.png

总结

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

 

 

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Serverless 对研发效能的变革和创新

简介: 对企业而言,Serverless 架构有着巨大的应用潜力。随着云产品的完善,产品的集成和被集成能力的加强,软件交付流程自动化能力的提高,我们相信在 Serverless 架构下,企业的敏捷性有 10 倍提升的潜力。 作…

查看mysql服务的可视化_Prometheus 监控Mysql服务器及Grafana可视化

Prometheus 监控Mysql服务器及Grafana可视化、mysql_exporter:用于收集MySQL性能信息。使用版本mysqld_exporter 0.11.0官方地址使用文档:https://github.com/prometheus/mysqld_exporter图标模板:https://grafana.com/dashboards/7362下载地…

SprinBoot 集成 Flowable/Activiti工作流引擎

文章目录一、 Flowable工作流引擎1. flow2. flowable3. cims4. RuoYi-flowable5. springboot-flowable-modeler6. flowable-diagram二、Activiti 工作流引擎2.1. RuoYi-Vue-Process2.2. RuoYi-Process2.3. ruoyi-vue-activiti2.4. activiti7-workflow2.5. JeeSite4 JFlow2.6. a…

持续定义Saas模式云数据仓库+实时分析

简介: 从实时分析的价值、场景和数据流程,以及用户对平台能力要求展开,讲述云数据仓库MaxCompute的产品能力优势 ,面对实时分析场景的能力演进要求。进而以实时分析典型场景的全数据流程处理、建模和分析的最佳实践,讲…

超 8 成软件存已知高危开源漏洞,奇安信发布《2021 中国软件供应链安全分析报告》

编辑 | 宋 慧 出品 | CSDN云计算 头图 | 付费下载于东方IC 2020年底,SolarWinds 遭受的大规模网络攻击,使得美国和多国政府在内的 18000 机构被影响。几乎每个月,软件供应链都在遭受黑客攻击。 而从软件端看,“检测发现&#xf…

前后端分离 常用工具汇总

文章目录一、数据框架1. vue2. react二、UI框架2.1. element2.2. element-plus2.3. Ant Design Vue2.4. Ant Design of React2.5. Bootstrap三、工具3.1. Fast Mock3.2. Easy Mock3.3. Mock语法/案例一、数据框架 1. vue https://cn.vuejs.org/ 2. react https://react.do…

Fluid 0.3 新版本正式发布:实现云原生场景通用化数据加速

简介: 为了解决大数据、AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据**访问延时高、联合分析难、多维管理杂**等痛点问题,南京大学 PASALab、阿里巴巴、Alluxio 在 2020 年 9 月份联合发起了开源项目 Fluid。近期我们更新了0.3…

mysql 主从 跳过_mysql主从同步如何跳过错误

mysql主从同步跳过错误的方法:1、跳过指定数量的事务,代码为【mysql>SET GLOBAL SQL_SLAVE_SKIP..】;2、修改mysql的配置文件,通过【slave_skip_errors】参数来跳所有错误。本教程操作环境:windows7系统、mysql 5.6…

模拟驾驶能力输出,赋能客户提升稳定性信心

简介: 模拟驾驶能力输出,赋能客户提升稳定性信心 1.背景 我们技术服务团队经常会遇到这样的状况,随时随地收到紧急电话,开始紧张地排查问题,处理故障以及恢复服务。硬盘故障、网络不通、大量不到终态、水位高、流量激…

微服务如何拆分,能解决哪些问题?

作者 | 修冶来源 | 阿里巴巴中间件头图 | 下载于ICphoto微服务在最近几年大受欢迎,很多公司的研发人员都在考虑微服务架构,同时,随着 Docker 容器技术和自动化运维等相关技术发展,微服务变得更容易管理,这给了微服务架…

Tair持久存储系列技术解读

简介: 阿里云数据库重磅发布自研Tair持久存储系列的产品打破了传统Redis中的数据只能在易失性存储上进行读写的刻板印象,针对客户不同业务阶段的数据存储要求与服务成本考量,全新实现了持久性更强、成本更低的KV数据库。 Redis做为当今主流的…

Serverless X OpenKruise 部署效率优化之道

简介: 相信在不久的将来,SAE 的极致弹性,无论在弹性效率,弹性规模,还是智能精准等方面都会大放异彩。 作者 | 许成铭(竞霄) Serverless 作为云计算的最佳实践、云原生发展的方向和未来演进趋势…

重磅来袭 | 移动云城市峰会分论坛暨移动云TeaTalk青岛站 即将开启

随着大数据技术不断演进和应用持续深化,以数据为核心的大数据产业生态正在加速构建。6月10日,移动云城市峰会将在青岛举办。届时,“云数融通,驱动未来”分论坛暨移动云TeaTalk青岛站 也将同步重磅开启。分论坛将围绕移动云核心数据…

2020阿里云双11--0.73折起,爆款提前抢大促全攻略

2020阿里云双11大促活动于10月24日正式开启,此次双11阿里云将有哪些亮点活动,此篇文章将一网打尽。大家一定要关注,此文会一直更新到活动结束。 从活动页面来看,阿里云双11上云狂欢节活动分为三个阶段: 10月24日-10月…

linux共享软件_为什么 linux 要用 tar.gz,很少用 7z 或 zip?

因为 7z 和 zip 压缩格式都不能保留 unix 风格的文件权限,比如解压出个可执行文件要重新 chmod chown 才能恢复正常。而 tar 格式可以。而 tar 本身不提供压缩,无非就是把包括所有文件的內容和权限拼成一个文件而己,所以用另外如 gzip 格式压…

端应用研发进入云原生时代

简介: 随着技术的发展和各种用户端场景的涌现,业务前台形式变得更加多样,“面向多样化的端场景提供无缝的、一致的数字用户旅程”已经成为了新时代企业应用架构的关键目标,同时它也是当下大前端技术发展背后的核心业务牵引。基于阿…

关于卫星定位,你想知道的一切

简介: 本文将简要介绍卫星定位的原理和应用情况,方便大家对北斗、卫星定位有更多的了解。 5G和北斗,是国之重器。北斗作为卫星定位系统,目前在国际上已处于领先地位,而且已经渗透到我们工作和生活的方方面面。本文将简…

拯救运维工程师,数据链 DNA 来袭!

在《凤凰项目——一个IT运维的传奇故事》一书中讲述运维工程师的常态: A工程师:“是的,我们复制了你给的那个文件……是的,就是1.0.13版……你说那个版本是错的,这话是什么意思……什么?你什么时候把它改了…

jre for mac 删除_在 Mac 的 Docker Desktop 中运行 K8s

Docker Desktop for Mac 从 Docker Community Edition 18.06.0-ce-mac70 2018-07-25 版本起,添加了对 Kubernetes 的支持,可以方便的在 Mac 上运行一个单节点的 K8s 集群。在 Docker Desktop 的 Preferences 中的 Kubernetes 页面里,提供了一…

阳振坤:OceanBase 数据库七亿 tpmC 的关键技术

OB君:2020年9月25日,OceanBase在外滩大会举办的“数据库,新标杆,新征途”分论坛正式落幕,内容涵盖数据库的趋势探讨、分布式数据库的技术创新与行业应用,及国内数据库的发展与生态。欢迎持续关注本系列内容…