从 DevOps 到 Serverless

中间件小哥 2019-10-11 14:43:18 浏览1572

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

阿里云 Serverless 应用引擎6折特惠,节省闲置资源,IaaS免运维。

https://cn.aliyun.com/product/sae

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 开发工程师。现就职于阿里云智能基础设施事业部,主要负责阿里巴巴数据中心运营平台的研发工作。

本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

Serverless 实战 —— 从 DevOps 到 Serverless相关推荐

  1. Serverless 实战 —— Serverless 架构揭秘与静态网站部署实战

    Serverless 架构揭秘与静态网站部署实战 讲师简介 陈涛 Serverless Framework 社区专家 参与 Serverless 社区及开源的相关研发工作.拥有丰富前端.JavaScr ...

  2. Serverless 实战 —— Serverless 的运行原理与组件架构

    Serverless 的运行原理与组件架构 本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决 过去一年,我们和大量 Serverless 用户进行了线上和线下的交流, ...

  3. Serverless 实战 —— ​​​​​​​与微服务一脉相承,Serverless适用何种场景?会带来哪些冲击?

    Serverless 实战 -- 与微服务一脉相承,Serverless适用何种场景?会带来哪些冲击? Serverless 架构用来描述那些显著或完全依赖于第三方应用或服务("在云端&qu ...

  4. 我的Serverless实战——能掰扯面试官的SSVM超详细解析!

    [本文正在参与 "100%有奖 | 我的Serverless 实战"征稿活动]活动链接:https://marketing.csdn.net/p/15940c87f66c68188 ...

  5. 我的 Serverless 实战 — 云函数与触发器的创建与使用 ( 开通腾讯云 “ 云开发 “ 服务 | 创建云函数 | 创建触发器 | 测试触发器 )

    文章目录 一.开通腾讯云 " 云开发 " 服务 二.创建云函数 三.创建触发器 四.测试触发器 [本文正在参与 "100%有奖 | 我的Serverless 实战&quo ...

  6. 我的 Serverless 实战 — Serverless 架构理念 ( 后端服务器发展 | Serverless 与 ServerFul | Serverless 定义 | 架构优缺点 )

    文章目录 一.后端服务器架构发展 二.Serverless 与 ServerFul 三.Serverless 定义 四.Serverless 优缺点 [本文正在参与 "100%有奖 | 我的 ...

  7. Spring Boot Serverless 实战 | Serverless 应用的监控与调试

    作者:西流|阿里云函数计算专家 导读:Spring Boot 是基于 Java Spring 框架的套件,它预装了 Spring 的一系列组件,让开发者只需要很少的配置就可以创建独立运行的应用程序.在 ...

  8. Spring Boot Serverless 实战系列“架构篇” | 光速入门函数计算

    作者 |:西流(阿里云函数计算专家) Spring Boot 是基于 Java Spring 框架的套件,它预装了 Spring 一系列的组件,开发者只需要很少的配置即可创建独立运行的应用程序. 在云 ...

  9. Serverless 实战 —— Funcraft OSS ROS 进行 CI/CD

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):[函数计算](https://statistics.functioncompute.com/?title ...

最新文章

  1. 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析
  2. mysql lib_explode_这简直就是一个“定时炸弹”!记一次 MySQL 的奇葩故障
  3. css3的动画特效--动画序列(animation)
  4. Spring MapFactoryBean例子
  5. 一款炫酷Loading动画--载入成功
  6. Jsoup解析的例子 之 选择器
  7. JVM调优总结(四)-垃圾回收面临的问题
  8. 上机环境是什么意思_Python能不能自学,可以找到什么工作?
  9. IDEA远程连接mysq数据库
  10. python实现LU分解
  11. 所谓的AI芯片到底指什么?
  12. 网络API接口的使用
  13. windows xp 实现远程关机
  14. 二义性和C++消除二义性
  15. 微信公众号回复服务器参数错误,为什么微信文章网址在浏览器访问提示参数错误...
  16. 开源论坛框架调研总结
  17. android监控app被杀死,Android App前后台监控
  18. Centos7 安装MongoDB
  19. 习惯养成android软件,小小成长(习惯养成)app
  20. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”七、redis数据库缓存页面数据、使用NUXT框架搭建前台系统环境、前台系统页面、首页轮播图(banner数据显示)、首页热门课程,名师推荐

热门文章

  1. 怎么让IIS支持PHP
  2. windows下安装、卸载mysql服务
  3. jQuery地图插件-jqvmap
  4. linux下关于密码复杂度设置
  5. 更换 CentOS 7 的下载源为阿里云
  6. 《剑指Offer》 不用加减乘除做加法
  7. 【英文写作日知录 第2期】句式汇总 Sun, 04 July 2021
  8. Ubuntu下安装visual studio code
  9. MessageBox消息框 1126
  10. linux-vim-进入编辑模式的多种方法