乐趣区

关于云原生-cloud-native:Serverless-对研发效能的变革和创新

作者 | 杨皓然(不瞋)

对企业而言,Serverless 架构有着微小的利用后劲。随着云产品的欠缺,产品的集成和被集成能力的增强,软件交付流程自动化能力的进步,咱们置信在 Serverless 架构下,企业的敏捷性有 10 倍晋升的后劲。本次分享我次要分为以下四个方面:

一、DevOps 的挑战以及如何升高 DevOps 施行代价?
二、为什么 Serverless 是云倒退的必然结果?
三、Serverless + DevOps =?
四、实战案例分享

DevOps 的挑战

1. DevOps 的挑战

对于利用交付的整个流程而言,通常会波及三个环节,即开发、测试和运维,而在传统的组织架构中,他们对应的也往往是三个不同的团队。这三个环节各自有本人的侧重点,然而在实际上,想要让整个利用交付过程变得顺滑高效,并且让利用在上线后放弃高可用的状态,往往须要三个团队将相互之间存在的墙突破掉。

这里的墙不只是组织架构隔膜所带来的阻碍,还包含三个畛域关注点的不同。比方开发须要关注可测试性和可运维性,这些货色将会粗浅地影响利用的架构设计和开发实现,如果开发同学没有充分考虑到代码的可测试性,那么交给测试同学就会造成很大的问题,比方如何实现故障注入和精密流控,这都须要在开发时就思考分明。

对于运维而言也是一样的,开发的时候也须要思考到可运维性,比方在开发的时候就须要思考如何在服务实际上下线的时候做到平滑且不失落数据,同时这样的设计也须要和运维零碎进行粗浅的对接,这样能力十分牢靠、十分平安地连接起来,晋升运维的效率。

阿里外部之前很多故障也都是因为开发和运维之间在设计下面存在信息不统一导致的,比方在开发设计时会做三正本的高可靠保证,然而在运维侧则可能会认为正本所在的机器没有提供服务因而被谬误下线掉。

所以,DevOps 实际上蕴含了两层含意,首先是将开发、测试、运维变成一个团队; 其次,还须要让整个团队的心智对立,这也是 DevOps 真正的挑战。

2. DevOps 的挑战 – 开发

疾速回顾一下 DevOps 每个环节所须要思考的货色。在开发阶段,首先须要梳理业务的需要和场景,并且将需要转换为零碎设计,同时须要思考数据模型如何设计,才可能让数据库不成为单点和瓶颈。因为在阿里巴巴这样的互联网企业中,利用承载了大量的用户拜访,因而须要思考简单平衡、容错设计、流量管制等。

如果采纳了微服务架构,利用将由多个服务组成,那么还须要思考服务治理。以上全副思考到之后,将其转化为零碎设计,最初进行开发调试以及单元测试,实现了这些之后才能够将利用交给测试环节。

3. DevOps 的挑战 – 测试

在测试时须要思考很多方面和维度,保障软件各方面的品质。测试包含了集成测试、端到端的 E2E 测试、性能测试、压力测试、容错测试、兼容测试、毁坏测试等。

4. DevOps 的挑战 – 运维

当利用通过测试之后,就产出了一个交付物,这个交付物被认为具备了能够公布的能力,后续就须要进行运维工作了,比方利用灰度公布、降级回滚、服务器高低线、监控报警、安全补丁降级、网路配置、操作审计、生产环境引流等。

5. DevOps 的挑战 – 如何升高 DevOps 施行代价?

当咱们深刻地看 DevOps 中所蕴含的这些工作项之后,其实可能感触到如果想要做一个具备弹性的、高牢靠的利用,须要思考的点是十分多的,而这些在施行了 DevOps 之后就变成了同一个团队在整个利用生命周期中须要思考的事件了。这对于团队心智和能力的要求是十分高的。

DevOps 利用交付流水线外面蕴含了很多环节,如何将这些环节十分流畅地串联起来,实现自动化也是十分重要的方面。

回顾了 DevOps 的挑战之后,通过阿里外部和整个业界的实际能够看到,须要通过平台和工具升高 DevOps 的复杂度。

Serverless 简介

1. 云的趋势

在介绍 Serverless 之前,首先回顾一下云的发展趋势,再来探讨为什么 Serverless 是云倒退的必然结果。

在过来的十年间,云计算取得了很大的倒退,其使得用户可能通过 API 的形式十分轻松地取得近乎有限的算力,而这些算力是通过虚拟机来出现的,这样的模式存在很多的长处,它和利用原来的开发和运行环境是兼容的,这种模式可能使得传统遗留利用十分平滑地迁徙到云上。

云的第一个阶段就是基础设施云化,这里就是云托管模式。基于云上的存储、网络等基础设施来构建利用,这种模式的外围价值在于资源的弹性和老本。下一个阶段中,云的体系曾经远远超过了基础设施,可能看到在各个领域都呈现了很多的云服务。因而,在明天须要思考如何利用云服务的能力,以搭积木的形式来更疾速地构建利用,而不是反复造轮子,这就是云原生的模式。

2. 云的产品体系正在迅速 Serverless 化

目前,支流的云计算产商的产品体系也正在迅速地 Serverless 化,这并非是对于将来的预测,而是理论正在产生的事实。下图中的数据是基于对于 AWS、微软和阿里云的产品所公布的新性能或者新服务模式的统计,能够看到绝大多数的新服务都在出现 Serverless 化。

3. 云编程模型

云计算产生了大量的服务,在效力的角度来看,这些云服务是在更高层次形象的 Serverless 状态,这就变得十分有意义了。如果从云编程模型的角度从新来扫视云产品体系,可能看到最底层是基础设施层,这一层蕴含两局部,别离是 IaaS 和容器。在基础设施之上就是云原生利用操作系统,K8s 是这一层的事实标准,它可能把底层 IaaS 基础设施很好地治理起来。在操作系统之上呈现了十分丰盛的 API,也就是全托管的云服务体系。如果看阿里云的产品体系,就会发现了阿里云提供了丰盛的产品体系,包含数据库、大数据、中间件,这些都是以 Serverless 全托管模式提供服务的。

在这样具备大量云 API 的状况下,明天的问题是如何设计一个通用的计算框架可能与这些 Serverless 的云服务、云 API 产生十分严密的连贯来帮忙客户疾速构建弹性、高可用利用。因而在框架层就呈现了 Serverless 计算,其产生的起因最次要是须要和云 API 产生严密的化学反应,帮忙用户晋升利用构建和运维效率,帮忙客户构建分布式、数据化、智能化的新一代的云原生利用。

4. 云托管和 Serverless 利用差别

这里比照一下采纳云托管的利用和采纳 Serverless 的利用最实质的差别在哪里。对于利用而言,能够将其构建模式拆分为三层,别离是底层基础设施治理、两头的内部服务集成和下层的应用逻辑。如果采纳云托管模式,实际上是在基础设施层去构建利用,利用构建的抽象层次是比拟低的,因而会带来大量工作,用户本人须要整合不同的组件和服务,须要进行大量的决策和实现,交付的速度会比较慢,须要思考很多的事件,而且在运维方面有大量的反复工作。

如果用户采纳 Serverless 的模式构建利用,也就是相当于在下层 API 的形式构建利用,粘合的逻辑和基础设施治理的工作都由云服务商来承当,用户所须要整合和决策的代价比拟低,所须要思考的次要就是如何将业务逻辑和需要与云服务进行适配来构建利用。基于十分高效的云 API 来构建利用的益处在于构建的老本很低,并且可能实现按天、按小时进行交付,并且大大降低将来运维的累赘。

5. 什么是 Serverless 计算?

Serverless 计算具备四个特点:首先,不须要保护云计算基础设施,利用构建的抽象层次回升,变得更加高效;其次,可能实现实时的弹性伸缩,这样可能通过将来的数据驱动的负载感知算法可能实现既满足很低的延时,也可能实现很高的资源利用率;再次,计量模式提供了十分细粒度的按需的模式,能够实现按秒级计量,可能实现齐全按需的付费模式,对于用户而言,资源利用率是 100%;最初,可能实现高可用,将这种能力内置在平台层。

6. 阿里云 Serverless 产品体系

这里做一个阐明,Serverless 计算只是阿里云 Serverless 产品中的一部分,除此之外还包含存储、API、剖析、中间件等。因而,从这个角度来看,Serverless 也不是一个十分新的概念,最早的 OSS 对象存储就是一个 Serverless 产品,能够看出云产品体系正在 Serverless 化,只不过最近几年呈现了函数计算这样通用的 Serverless 计算平台,进而可能将 Serverless 体系产品连接起来,构建一个 Serverless 利用。

Serverless DevOps

当有了这些 Serverless 的能力,那么如何将这些能力与 DevOps 联合起来呢?

1. 简化基础设施的治理和运维

下图更多地是从如何构建高可用利用的角度来展示。这里将利用的模块分为四个方面:包含基础设施、运行时、数据和利用。基础设施层就是须要解决与机器相干的操作,比方故障解决。运行时则须要做利用资源隔离、流控等。数据层次要须要和数据库、缓存相干,比方如何设计数据库表构造,如何设计缓存策略,如何实现负载平衡,如何保障不会呈现横向扩大瓶颈。

在应用层,则须要解决与利用相干的操作,比方代码包的谬误、配置谬误、心跳异样的解决。下图中蓝色虚框中的局部能够齐全由平台负责,用户能够无感知;蓝色实框则是平台帮忙用户做了大量工作,然而还是须要用户感知和作出肯定决策;红色框则代表还是须要用户本人治理的局部。能够看到,在容错方面,平台提供了十分强的能力,包含多 AZ 的容灾能力、疾速的弹性能力、内置的流控能力以及多层次、多维度的监控报警能力。借助于这些能力,用户治理基础设施的复杂度就大大降低了。

2. 麻利的利用角度流程

下图展现了利用交付的流程,代码通过对立治理的代码库存储和治理起来,再通过继续集成将其变成一个交付物,再将其存储到交付物仓库外面。交付物能够是容器镜像,也能够是代码包的模式。产出了交付物之后,能够主动地将其部署到测试、生产环境中去做版本部署,最初实现到生产环境的主动部署。因而这样利用交付流程的关键点在于实现高度自动化,而自动化的关键环节有两点:别离是基础设施即代码和环节间的自动化串联。

3. 自动化利用交付流水线

下图展示的是自动化利用交付流水线,能够看到在上面的每一个环节都须要实现很多的性能,而很多都是重复性工作,因而须要做到基础设施即代码。

4. 基础设施即代码

下图是基础设施即代码的展现。Serverless 利用模型通过申明来定义利用资源,可能实现标准化、自动化和可视化。

能够为模板传入不同参数,能够动静生成利用运行环境。

5. 服务版本和灰度公布

在函数计算外面,利用有版本的概念,版本是一个不可变实体,因而杜绝了版本因为非预期的批改造成线上利用受损,阿里云通过服务版本和灰度公布防止了这样的问题,客户端拜访利用通过别名来拜访。

6. Serverless 工作流

阿里云提供了 Serverless 工作流不便用户将 DevOps 串联起来,用户能够通过配套的服务能力、工具能力疾速地创立工作流,并且以可视化的形式展示进去,可能分明地看到工作流的成果。

7. 自动化利用交付流水线

回顾一下当有了这些能力之后,如何实现自动化利用交付流水线。在源码阶段,能够实现代码品质动态查看,保障 CheckIn 的代码品质。当 CheckIn 到代码库之后,会主动运行单元测试,并且产出交付物。在测试的环节,通过与阿里云 ROS 的无缝集成可能实现自动化部署到测试环境,并且运行测试用例。这些实现之后,通过 ReleaseManager 能够确认部署,通过工作流将这些工作串联起来,公布到预公布环境中,并且进一步部署到生产环境中,每一个步骤都实现了自动化,研发效力失去了极大晋升。

8. 日志收集和查问

在 Serverless 计算平台之上,原生提供了很多的日志收集和 Metric 收集能力,比方简略日志查问以及高级日志查问,可能通过日志形式为用户提供高级数据分析能力。

9. 指标收集和可视化能力

Serverless 计算平台除了提供了根本的指标视图之外,还反对自定义指标视图,用户能够通过自定义的关键词指标搜寻实现与业务相干的数据分析。

当 Serverless 和 DevOps 联合之后,可能大大晋升研发效力,一方面大大降低了开发团队的心智累赘;另外一方面,通过工具使得整个 DevOps 流水线可能实现高度自动化。

案例分享

最初分享一些比拟胜利的案例。阿里 Serverless 计算撑持了阿里经济体小程序平台,节俭了 40% 研发资源。阿里云 Serverless 撑持语雀应用函数计算实现文档等计算密集型业务,大幅度地升高了运维老本,还为石墨文档升高了 58% 的运维老本,帮忙微博晋升了研发效力,使得性能上线工夫从本来的 2 周变为几小时。

能够看到,2020 年业界对于 Serverless 的接受度有了极大晋升,同时,Serverless 的能力也变得更加普适。

作者介绍: 杨皓然(不瞋),Serverless 计算负责人,2010 年退出阿里云,深度参加了阿里云飞天分布式系统研发和产品迭代的全过程。对大规模分布式计算,大规模数据存储和解决有十分深刻的了解。

课程举荐

为了更多开发者可能享受到 Serverless 带来的红利,这一次,咱们集结了 10+ 位阿里巴巴 Serverless 畛域技术专家,打造出最适宜开发者入门的 Serverless 公开课,让你即学即用,轻松拥抱云计算的新范式——Serverless。点击链接即可收费学习课程:https://developer.aliyun.com/learning/roadmap/serverless

Serverless 公众号,公布 Serverless 技术最新资讯,会集 Serverless 技术最全内容,关注 Serverless 趋势,更关注你落地实际中的遇到的困惑和问题。

退出移动版