通过Serverless技术降低微服务应用资源成本

前言在大型分布式IT架构领域 , 微服务是一项必不可少的技术 。 从本质上来讲 , 微服务是一种架构风格 , 将一个大型的系统拆分为多个拥有独立生命周期的应用 , 应用之间采用轻量级的通信机制进行通信 。 这些应用都是围绕具体业务进行构建 , 可以独立部署、独立迭代 , 也可能根据业务负载独立的水平扩展 。 微服务思想以及相关的技术为IT架构的发展带来了一系列深刻的变革:1、 易于开发和维护:一个应用只会关注一组特定的业务功能 , 通过服务拆分 , 能减少应用之间的耦合度 , 让开发和维护更加简单 。 2、 技术栈不受限制:在微服务架构中 , 可以结合项目业务及团队的特点 , 合理的选择技术栈 。 3、 加快系统演进速度:每一个应用都可以独立的进行版本更新 , 通过灰度发布等技术手段能确保发布过程中整个系统稳定运行 。 4、 突破性能瓶颈:每个应用都能独立的水平伸缩 , 使系统性能可以根据计算资源的增加而得到线性的扩展 。
微服务的挑战世上没有免费的午餐 , 微服务技术让IT系统变得更敏捷、更健壮、更高性能的同时 , 也带来了架构复杂度的提升 。 对于开发者而言 , 要想更好的驾驭微服务架构 , 需要解决持续集成、服务发现、应用通信、配置管理、流量防护等一系列难题 。 幸运的是 , 针对这些普遍存在的难题 , 业界涌现了一系列优秀的开源技术组件和工具 , 让开发者可以更轻松的构建微服务应用 。 像Spring Cloud和Dubbo这样的技术框架 , 经过多年的发展 , 已经演化为微服务领域的通用标准 , 极大地降低了微服务的门槛 , 但这些技术框架依然没有办法解决其中两个最大的挑战 , 这两个挑战成为摆在开发者面前的两座大山 。
挑战一亟需完善的生命周期管理与服务治理方案:在一个频繁迭代的系统中 , 每个应用会经常性面临新版本发布需求 , 需要对应用的上线、下线、更新、回滚等流程进行集中性的管理 , 并配合精细粒度的灰度发布手段 , 减少版本迭代对业务造成的影响 。
通过Serverless技术降低微服务应用资源成本文章插图
【通过Serverless技术降低微服务应用资源成本】在一个简单的微服务架构中 , 如果某应用处于整个链路的入口位置 , 它的前端一般会挂上负载均衡组件(上图中的应用A) , 以承接来自于最终用户的业务请求 。 这类应用在进行生命周期管理的时候 , 复杂度会更高 , 为了确保应用在新版本发布过程中的平衡稳定 , 会经过如下的步骤:
通过Serverless技术降低微服务应用资源成本文章插图
在这个流程中 , 还没有涉及到对于流量精细粒度控制的高级灰度方案 , 但已经足够体现出其复杂性和操作难度了 。 如果仅仅依赖于简单的发布脚本进行管理 , 不但效率很低 , 还很容易导致顾此失彼 , 对系统稳定性造成巨大的风险 。
挑战二亟需完善的水平扩容与缩容方案:当某一个应用的性能出现瓶颈 , 需要通过增加实例数量来进行性能提升的时候 , 就需要引入新的计算资源 。 新的计算资源从何而来呢?
对于线下IDC而言 , 计算资源是需要预先规划的 , 扩容并不是一件简单的事情 , 可能会因为各种条件的制约而导致扩容无法实现 。 当然这种困扰在云计算时代不复存在了 , 为一个应用扩充计算资源是信手拈来的事情 , 但光有计算资源是不够的 , 还得在上面部署应用 , 并将应用容纳到微服务体系中 。
通过Serverless技术降低微服务应用资源成本文章插图
根据这个流程 , 如果需要扩容一个应用实例 , 保守估计也需要20分钟以上 , 其中购买、系统初始化、应用部署都需要占用大量的时间 。 假设系统流量突增 , 需要在2分钟之内紧急扩容 , 这个方案就无用武之地了 。