QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

从 DevOps 到 Serverless : 运维前景展望

  • 2019-10-15
  • 本文字数:3466 字

    阅读完需:约 11 分钟

从 DevOps 到 Serverless : 运维前景展望

没有比“不用做”更有效的方式来解决“如何更高效做”的问题了。


DevOps 概述


DevOps 是一组用于促进开发和运维人员之间协作的过程、方法和系统的统称。


DevOps 提倡通过一系列的技术和工具降低开发和运维人员之间的隔阂,实现从开发到最终部署的全流程自动化,从而达到开发运维一体化。通过将 DevOps 的理念引入到整个系统的开发过程中,能够显著提升软件的开发效率,缩短软件交付的周期,更加适应当今快速发展的互联网时代。


说到 DevOps ,就必然会提到持续集成,持续集成指的是在软件开发过程中,软件开发人员持续不断地将开发出来的代码和其他的开发人员的代码进行合并,每次合并后自动地进行编译、构建,并运行自动化测试进行验证,而不是等到最后各自开发完成后才合并在一起。持续集成能从根本上提高一个团队的软件开发效率。在软件开发过程中引入持续集成,可以帮助团队及时的发现系统中的问题,并快速做出修复,不仅可以缩短软件开发的时间,而且可以交付更具质量的系统。

基于 Docker 实现一个 DevOps 开发环境

一个 DevOps 开发环境需要满足以下 8 点需求。


1、环境一致性:在本地开发出来的功能,无论在什么环境下部署都应该能得到一致的结果。


2、代码自动检查:为了尽早发现问题,每一次代码提交后,系统都应该自动对代码进行检查,及早发现潜在的问题,并运行自动化测试。


3、持续集成:每次代码提交后系统可以自动进行代码的编译和打包,无需运维人员手动进行。


4、持续部署:代码集成完毕后,系统可以自动将运行环境中的旧版本应用更新成新版本的应用并且整个过程中不会让系统不可用。


5、持续反馈:在代码自动检查、持续集成、持续部署的过程中,一旦出现问题,要能及时将问题反馈给开发人员以及运维人员。开发和运维人员收到反馈后对问题及时进行修复。


6、快速回滚:当发现本次部署的版本出现问题时,系统应能快速回退到上一个可用版本。


7、弹性伸缩:当某个服务访问量增大时,系统应可以对这个服务快速进行扩容,保证用户的访问。当访问量回归正常时,系统能将扩容的资源释放回去,实现根据访问情况对系统进行弹性伸缩。


8、可视化运维:提供可视化的页面,可实时监控应用、集群、硬件的各种状态。


为了满足以上 8 点要求,设计出的 DevOps 开发环境如下图所示。



整个环境主要由 6 部分组成。


1、代码仓库 Gitlab 。


2、容器技术 Docker 。


3、持续集成工具 Jenkins 。


4、代码质量检测平台 SonarQube 。


5、镜像仓库 Harbor 。


6、容器集群管理系统 Kubernetes 。


整个环境的运行流程主要分为以下 6 步。


1、开发人员在本地开发并验证好功能后,将代码提交到代码仓库。


2、通过事先配置好的 Webhook 通知方式,当开发人员提交完代码后,部署在云端的持续集成工具 Jenkins 会实时感知,并从代码仓库中获取最新的代码。


3、获取到最新代码后,Jenkins 会启动测试平台 SonarQube 对最新的代码进行代码检查以及执行单元测试,执行完成后在 SonarQube 平台上生成测试报告。如果测试没通过,则以邮件的方式通知研发人员进行修改,终止整个流程。若测试通过,将结果反馈给 Jenkins 并进行下一步。


4、代码检查以及单元测试通过后, Jenkins 会将代码发送到持续集成服务器中,在服务器上对代码进行编译、构建然后打包成能在容器环境上运行的镜像文件。如果中间有步骤出现问题,则通过邮件的方式通知开发人员和运维人员进行处理,并终止整个流程。


5、将镜像文件上传到私有镜像仓库 Harbor 中保存。


6、镜像上传完成后, Jenkins 会启动持续交付服务器,对云环境中运行的应用进行版本更新,整个更新过程会确保服务的访问不中断。持续交付服务器会将最新的镜像文件拉取到 Kubernetes 集群中,并采用逐步替换容器的方式进行对应用进行更新,在服务不中断的前提下完成更新。


通过上述几步,我们就可以简单实现一个 DevOps 开发环境,实现代码从提交到最终部署的全流程自动化。


但是自从 2014 年 AWS 发布 ASW Lambda 以来, Serverless 的概念开始逐渐火热起来。


各大云厂商开始纷纷开始推出各自的 Serverless 产品,如 Google 的 Cloud Functions ,阿里云的函数计算、Serverless 应用引擎(SAE),等等。那么什么是 Serverless 无服务计算呢?

什么是 Serverless?

根据 CNCF(云原生计算基金会)发布的 Serverless 白皮书里的定义:


Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment.


首先需要强调一点的是无服务器计算并不意味着我们不再需要使用服务器来运行代码,代码仍需要运行在服务器上对外提供服务。


在无服务计算时代,研发人员无需对服务器进行监控、配置、更新、扩容等运维操作。只需要将代码上传到云厂商提供的无服务器计算平台上即可,云厂商会保证代码能正常运行,当流量突增时,自动对服务器进行扩容,流量减少时,对服务器进行缩容



这些运维操作对研发人员来说都是黑盒的,会将开发人员从繁琐的运维工作中解放出来,只需要按运行时长对资源进行付费即可。和 DevOps 概念提倡的是通过一系列工具和自动化的技术来降低运维的难度,促进研发运维一体化不同, Serverless 更像是一种 NoOps,即通过“不用做”的方式来解决“如何更高效做”的问题。

阿里云在 Serverless 上的实践

当前阿里云上实现 Serverless 技术的产品有 Serverles 应用引擎函数计算 FAAS

Serverles 应用引擎

Serverless 应用引擎是面向应用的 Serverless PaaS 平台,它向上抽象了应用的概念,支持 Spring Cloud、Dubbo、HSF 等流行的开发框架,并通过 WAR 包、JAR 包和镜像等多种方式部署应用。它的使用可以通过下面这张图来了解。


函数计算

FAAS 是 Serverless 所提供的服务的另一种形态。以阿里云函数计算为例,阿里云函数计算的流程大致如下图所示。



Photo @https://yq.aliyun.com/articles/574222


1、开发者在本地编写代码。


2、代码开发完成后通过命令行工具 fcli, fun 或者可视化界面控制台上传到阿里云函数计算平台。


3、开发者上传完代码后,平台会自动启动基于 Docker 的 DevOps 流程,对代码进行编译、打包成镜像文件。并上传到镜像仓库。


4、开发者在平台是配置事件触发器,当前阿里云已经支持 OSS、HTTP、CDN、SLS、定时任务等多种形式的触发器形式。


5、当触发器被触发后,会到达事件调度器。平台会将镜像快速启动成容器并执行代码,根据流量自动对服务进行弹性伸缩。保证代码能正常并执行完成。

伯克利对 Serverless 未来的预测

尽管 Serverless 仍存在诸多的挑战,但是我们相信随着市场规模的不断扩大,这些挑战会逐渐被解决。 UC 伯克利对 Serveless 未来十年的发展趋势做了以下几点预测。


1、新型的 Bass 存储服务会被创造出来,这样更多类型的应用可以迁移到 Serveless 平台上。这种存储服务的性能会和本地存储的性能相当,并提供长期和短期的存储。更多适用于 Serveless 平台的硬件会被使用。


2、由于更高级别的编程抽象以及更加细粒度的资源隔离,在无服务器计算平台上运行的代码将会比传统的方式更加安全可靠。


3、随着无服务器计算收费模式的不断发展,几乎任何应用迁移到无服务器计算平台都会比原先的有服务器计算的方式的成本更低。


4、有服务器计算在未来会促进 BaaS 的发展。


5、虽然现有的有服务器计算不会消失,但是随着 Serveless 技术的不断发展,有服务器计算在云上所占的比例会逐年下降。


6、无服务器计算将会成为云时代默认的编程方式,它将大规模取代传统的基于服务器的编程方式,并终结传统的 C/S 架构。

总结

当前数据中心的资源利用率仍处于一个较低水平,特别是对于在线业务而言,日均资源使用率仅在 10% 左右,主要是由于当今资源都是属于独享型的,不管你用不用,这些资源都需要保留。而一旦大规模使用 Serveless 之后,资源的使用由平台统一调度,按需使用,整体的资源利用率会大幅提升,整个云计算资源的使用成本无疑也会大幅降低。


随着 Serverless 的不断发展,未来编程方式将会有很大的不同。无论是从成本的角度还是使用的角度,我们有理由相信下一个时代是 Serveless 的时代,并应该朝着这个方向不断探索。


作者介绍


徐进茂,花名罗离, Java 开发工程师。现就职于阿里云智能基础设施事业部,主要负责阿里巴巴数据中心运营平台的研发工作。


本文转载自公众号阿里巴巴中间件(ID:Aliware_2018)


原文链接


https://mp.weixin.qq.com/s/aTpnY4AdUHFj8R8zcaVCMQ


2019-10-15 08:002510

评论

发布
暂无评论
发现更多内容

Spotify系统架构

俞凡

架构 大厂实践 2月月更 spotify

从IaC到IaD

俞凡

云计算 基础设施即代码

2021年度总结-拥抱变化

wood

300天创作

ReactNative进阶(四十六):移动端实现字体自适应

No Silver Bullet

自适应 React Native 2月月更

2021,平(jia)凡(ban)的一年

xiezhr

年终总结 2021 2021年终总结

Java NIO为何导致堆外内存OOM了?

JavaEdge

2月月更

简单入门计算机网络

宇宙之一粟

计算机网络 2月月更

Promise 基本方法的简单实现

编程三昧

JavaScript Promise 2月月更

WebRTC 流媒体常见开源方案综述 | 社区征文

liuzhen007

音视频 新春征文 2月月更

Linux之killall命令

入门小站

Linux

在线格式时间计算时间差

入门小站

工具

JAVA新特性的入场券-函数式接口

蜜糖的代码注释

Java 后端 Java高级特性

Mybatis技术专题之MybatisPlus自带强大功能之多租户插件实现原理和实战分析

洛神灬殇

多租户 MyBatisPlus 2月日更 多租户技术

Kubernetes初学者指南

俞凡

架构 Kubernetes 云原生 2月月更

树概念总结

en

数据结构

我的2021

劼哥stone

年终总结

Kubectl插件开发及开源发布分享| 社区征文

雪雷

golang 云原生 cobra kubectl plugin 新春征文

【优化技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)

洛神灬殇

性能调优 Java 分布式 优化逻辑 技术职场 1月日更

浅谈 Java 集合框架

宇宙之一粟

java集合总结 1月月更

ReactNative进阶(四十三):Mac 通过 .bash_profile 文件配置环境变量

No Silver Bullet

Mac 2月月更 .bash_profile

Java9特性-响应式流(Reactive Stream)

蜜糖的代码注释

Java 响应式 响应式编程 2月月更

聊聊API安全的重要性及治理思路

陈俊

安全 API 应用架构

ReactNative进阶(四十四):Mobile App 适配性优化

No Silver Bullet

React Native 适配 1月月更

特征工程:归一化与标准化

强劲九

Python 人工智能 神经网络 机器学习 scikit-learn

TTF、OTF、WOFF 和 WOFF2 的相关概念

编程三昧

CSS css3 1月月更

行业研究流程及资源总结

轻口味

android AI 1月月更

从 TDD 到测试策略

Teobler

前端 TDD 单元测试 测试策略 测试金字塔

第六周作业

cqyanbo

我所理解的云原生(二)

劼哥stone

云原生

Windows 和 Linux 上安装 TTF 字体的方法

编程三昧

HTML5, CSS3 1月月更

微服务架构实践原则

俞凡

架构 微服务

从 DevOps 到 Serverless : 运维前景展望_技术管理_徐进茂_InfoQ精选文章