Serverless 时代 DevOps 的最佳打开方式

分享人|竞霄

直播地址:0 基础晋级 Serverless 高手课 — Serverless 时代 DevOps 的最佳打开方式


本篇内容将通过三个部分介绍Serverless时代DevOps的最佳打开方式:

  • Ÿ   DevOps简析
  • Ÿ   Serverless简析和Serverless时代DevOps的变化
  • Ÿ   Serverless时代DevOps最佳实践


一、DevOps简析

在传统软件开发过程中,开发和运维是极其分裂的两个环节,运维不关心代码如何运作,而开发不知道代码如何运行在服务器中。互联网公司发展迅速,往往需要快读的更迭以满足用户的差异化需求,或是应对竞对的产品策略需要产品快速迭代,通过小步快跑的方式进行敏捷开发。对于每周甚至每天发布N次的场景,高效的写作文化就显得非常重要了。DevOps就在这种情况下应运而生了。


DevOps打破了开发人员和运维人员之间的壁垒,它重视软件开发人员即Dev和IT运维技术人员即Ops之间的沟通合作的文化、运动或惯例。通过自动化“软件交付“和”架构变更“的流程,来使得构建、测试、发布软件能够更加快捷、频繁和可靠。另外,它包括整个软件构建的生命周期,包括集成、测试、发布和部署,以及基础架构的管理。


DevOps工程师的工作职责主要分三个方面:

  • Ÿ  管理应用全生命周期(需求、设计、开发、QA、发布和运行);
  • Ÿ  关注流程效率提升,挖掘瓶颈点并将其解决;
  • Ÿ  通过标准化、自动化、平台化的工具来解决问题。


工程师核心关注点在于缩短开发周期、增加部署效率和更加可靠的发布。通过将DevOps的理念引入到整个系统的开发过程中,能够显著提升软件的开发效率,缩短软件的交付周期,更加适合当今快速发展的互联网时代。

 

二、Serverless简析和Serverless时代DevOps的变化

Serverless带给开发运维的体验有哪些变化呢?如下图所见,在传统的应用构件中,需要经历资源准备阶段、研发部署阶段和运维阶段;而Serverless应用构建的流程就简化了很多,在资源准备阶段是完全不需要准备资源的,也无需创建具体的集群,在研发阶段,只需要将业务部署上来,其他像监控、日志警告等等,都是平台提供的开箱即用的功能;运营阶段也是免运维的,用户无需关注,用户只需要关注核心业务即可。

Serverless 时代 DevOps 的最佳打开方式


SAE整体解决方案,实际是互联网企业一个比较标准的系统架构,整个架构自底而上的包分为几个层次。


首先是网关层,通常完成健全的网络路由、流量转发等系列回头策略的部分;第二个是业务系统,比如像电商、物流等,有逆向有交易等。一些核心业务逻辑在业务系统中,这个业务系统往往也是采用了像Java这种比较主流的微服务框架,既然有微服务,就需要有相应的注册中心、配置中心进行辅助发现以及配置管理。比较大型的电商系统中,都会有限流、降级和熔断的措施来应对流量激增的情况。还有一些压测混沌平台来保证整体的可能性。


底层的应用部署有两种方式,一种是传统部署,部署到ECS上;一种是在云原生时代慢慢兴起的现在已经趋向于主流的Kubernetes部署方式。Kubernetes也是部署到ECS上的。


以上是主题的组成部分,旁的华友一些发布系统,即如何将源码到镜像再到整个集群中进行部署的构建系统。还有监控竞购服务治理等等。这些实际上也是一个大型系统,比较标准的功能。


下图是一个比较标准的电商系统架构,当运用到SAE上,我们可以看到,用户只需要关注业务核心系统的开发,其他的都是SAE相应的解决方案。

Serverless 时代 DevOps 的最佳打开方式


首先是网关层。网关层是阿里云提供的网关功能,实际上是一个开箱即用的微服务网关,对于这些微服务的框架,我们也提供了MSE/PTS和AHAS微服务事件。MSE是微服务网关以及微服务的治理功能,PTS是一个压测组件,AHAS是一个限流降级的组件。

而下面的Kubernetes和IaaS照应了SAE方案的特点,无需用户关注。左侧的云效是阿里云一个商业化的CSC平台。Jenkins是业界比较主流的自建CSC平台;CloudTookit是阿里云提供的一个插件,可以进行全生命周期的管控。


右侧是实时监控、报警、服务治理等等,可以通过阿里云提供的可观测平台,比如ARMS/SLS/云监控和Prometheus等等系列阿里云提供的开箱即用的组件。


SAE构建高效闭环的DevOps体系,应用了开发部署和运维的整个流程。中大型企业往往都使用企业级的CICD工具/产品来实现源码到镜像再到部署的全链路的流程。而个人开发者更倾向于使用轻量级的一键部署的插件,比如上述的CloudTookit/Maven-plugin插件等。无论是通过企业级工具还是开发者工具,都很方便将应用直接部署到SAE上。他们具体的流程实际上是调用SAE提供的Open API,然后也更加友好的把这些控制台上的界面、相应的配置提升到产品中。

Serverless 时代 DevOps 的最佳打开方式

Ops提供了一站式生命周期的管理,比如通用的操作:创建应用、部署应用、启动应用、停止应用和扩容等等,也是SAE提供了开箱即用的功能。


同时SAE还提供了一些非常核心的开箱即用的高级功能,比如高可用运维提供了服务治理、性能压测和限流降级。应用诊断,可以查看应用是否存在潜在问题或是当前存在哪些异常行为。


通过上述自动化的CICD以及一键本地部署到云端和可视化智能运维的核心特性,构建了高效闭环的DevOps体系。

 

三、Serverless时代DevOps最佳实践

部署态最佳实践:CICD

SAE的部署方式有很多种,它支持Java主流的微服务框架,比如Spring Cloud/dubbo/HSF等,可以通过War.jar进行部署。另外还有多语言应用,如PHP/Python等等。同时也支持镜像部署,后续也提供了多元化的能力。


除了通过控台直接部署的方式外,还支持本地部署、云效部署和自建部署三种方式。本地部署是通过CloudTookit插件的方式,可以直接一键部署到SAE上。云效是企业级的CICD平台,也是完美的和SAE的集成,云效可以从代码库种拉取对应的代码,然后进行可配置的代码检查或是代用测试。然后进行预先操作,再对代码进行编译构建,这样会产生具体生成物。Jenkins也是同理部署到SAE上。

Serverless 时代 DevOps 的最佳打开方式

【实操过程请点击视频观看】


部署态最佳实践:一键启停

一件启停主要适用于具有多套环境的中大型企业,这些环境有比如开发环境、测试环境、线上环境等等。对于这些测试环境往往晚上是不用的,长期保留应用实例会造成资源的闲置浪费,因此SAE提供了一件启停的功能,整体可节省成本高达三分之二。另外例如,像银行这种传统企业,会有具体的上下班实践,其他时间基本没有流量,这就成为了可预测的,在这种情况下,可以使用一键启停功能来批量启动或停止具体应用。


部署态最佳实践:应用发布三板斧

部署态集成了阿里云内部实践的应用发布三板斧,即可灰度、可监控、可回滚,借助阿里云的最佳实践,可以完整的输入到SAE整个产品的设计中。


Ÿ    可灰度,它支持单批、分批、金丝雀等多种发布策略;支持按流浪灰度,批次间自动/手动发布,分批间隔等多种发布选项。


  可监控,是指发布过程中清晰对比不同批次基础监控与应用监控指标异动,及时暴露问题,定位变相风险。


Ÿ    可回滚,是指允许人工介入控制发布流量:异常中止,一键回滚。


部署态最佳实践:金丝雀发布

金丝雀发布在发布过程中有多个版本:灰度版本和正常版本。部署态是把灰度版本主键扩大流量,完全替换掉线上的版本。通过这个提供金丝雀发布功能就可以不断控制流量百分比。同时提供了非常细粒度的灰度策略,比如可以通过访问参数进行具体的灰度执行行为。

Serverless 时代 DevOps 的最佳打开方式


部署态最佳实践:全方位可观测

全方位可观测是指对分布式系统中任何变化都可以进行观测。当系统出现问题的时候,可以进行非常便捷的定位问题,排查问题和分析问题。而当系统平稳运行时,也可以提前评估风险预测可能出现的问题。


可观测分为三个方面,Metrics/Tracing/Logging,支持了非常多的细分特性。比如Metrics提供了基础监控、应用监控和监控告警。Logging提供了实时日志、文件日志和事件。Tracing提供请求调用链堆栈查询,应用拓扑自动发现,常用场景的指标下钻分析,事务快照查询和异常事务和慢事务捕捉。


部署态最佳实践:在线调试

在线调试可以在本地直接访问云端某个应用的具体实例,原理是可以为这个目标实例提供端口映射,然后借助这个能力可以安装open SSH来实现SSH远程登陆,或是SFTP上传下载功能。


部署态最佳实践:权限隔离

关于权限隔离可以参考下图左侧的应用案例。

Serverless 时代 DevOps 的最佳打开方式


在以上案例的情况下,企业A是SAE资源的所有者,企业B是实际是资源的使用者,B具有操作权限,比如应用发布、应用管控、自动弹性等等。同时企业A希望企业B有员工变动时无需任何权限变更,以及当A与B的合作终止,A可以完全撤销对B的授权。


以上就是典型的需要权限配置功能的案例。SAE集成了阿里云的RAM,实现了密闭空格键级别以及应用级别的访问权限的配置,或可以实现某个人或某一群人的权限配置。


部署态最佳实践:端云联调

对于微服务场景,本地开发联调提供了端云联调的能力。端云联调是测试阶段的功能,它可以实现本地和云端应用的互调。它可以基于CouldTookit插件加跳板机实现服务订阅并注册到云端SAE内置的注册中心,这样本地的服务就可以和云端的服务互调。

Serverless 时代 DevOps 的最佳打开方式

它的原理是,在云上SEA应用可以在同一个VPC中新建一个ECS代理服务器,因为VPC是用户的,所以需要用户自己来建代理服务器。通过ECS代理服务器跳板机,CloudTookit插件就会连到ECS中,再通过ECS转发到SAE上,实现端云联调的功能。CloudTookit同时会把注册中心的地址以微服务的上下文进行无感输入,然后借助这个插件和这个跳板机即可实现。

上一篇:七, 跨语言微服务框架 - Istio日志采集EFK


下一篇:iOS网络编程实践--蓝牙对等网络通信实例讲解