带你从零入门 Serverless | 一文详解 Serverless 架构模式
The following article is from Serverless Author Hongqi
随着需求和技术的发展,业界出现了一些 FaaS 以外的其它形态的 Serverless 计算服务,比如 Google Cloud Run,阿里云推出的面向应用的 Serverless 应用引擎服务以及 Serverless K8s,这些服务也提供了弹性伸缩能力和按使用计费的收费模式,具备 Serverless 服务的形态,可以说进一步扩大了 Serverless 计算的阵营;
为了消除冷启动影响,FaaS 类服务如阿里云的函数计算和 AWS 的 Lambda 相继推出了预留功能,变得不那么“按使用付费”了;
一些基于服务器(Serverful)的后端服务也推出了 Serverless 形态产品,比如 AWS Serverless Aurora,阿里云 Serverless HBase 服务。
我的业务是什么?
做这件事情能不能让我的业务出类拔萃?
如果不能,我为什么要做这件事情而不是让别人来解决这个问题?
在解决业务问题之前没有必要解决技术问题。
买台服务器放在 IDC 机房里托管,运行站点;
去云厂商上买台云服务器运行站点,为了解决高可用的问题又买了负载均衡服务和多个服务器;
采用静态站点方式,直接由对象存储服务(如 OSS)支持,并使用 CDN 回源 OSS。
可运维性:无需管理服务器,比如操作系统的安全补丁升级、故障升级、高可用性,这些云服务(OSS,CDN)都帮着做了;
可扩展性:无需对资源做预估和考虑未来的扩展,因为 OSS 本身是弹性的,使用 CDN 使得系统延迟更小、费用更低、可用性更高;
成本:按实际使用的资源付费,包括存储费用和请求费用,没有请求时不收取请求费用;
安全性:这样一个系统甚至看不到服务器,不需要通过 SSH 登录,DDoS 攻击也交给云服务来解决。
Web 单体应用:所有的应用逻辑都在一个应用中完成,结合数据库,这种分层架构可以快速实现一些复杂度较低的应用;
微服务应用:随着业务发展,功能多了,访问量高了,团队大了,这时候一般就需要将单体应用中的逻辑拆分成多个执行单元,比如商品页面上的评论信息、售卖信息、配送信息等,都可以对应一个单独的微服务。这种架构的好处是每个单元是高度自治的,易于开发(比如使用不同技术)、部署和扩展。但是这种架构也引入了分布式系统的一些问题,如服务间通信的负载均衡、失败处理等。
是否需要自己购置服务器安装数据库,实现高可用、管理备份、升级版本等,还是可以把这些事情交给托管的服务如 RDS;是否可以使用表格存储、Serverless HBase 等 Serverless 数据库服务,实现按使用的弹性扩容缩容和付费;
单体应用是需要自己购置服务器运行,还是可以交给托管服务,如函数计算和 Serverless 应用引擎;
是否可以通过函数来实现轻量级微服务,依赖函数计算提供的负载均衡、自动伸缩、按需付费、日志采集、系统监控等能力;
基于 Spring Cloud、Dubbo、HSF 等实现的微服务应用是否需要自己购置服务器部署应用,管理服务发现,负载均衡,弹性伸缩,熔断,系统监控等,还是可以将这些工作交给诸如 Serverless 应用引擎服务。
基于服务器的单体架构:多媒体文件被上传到服务器,由服务器处理,对多媒体的显示请求也由服务器完成;
基于服务器的微服务架构:多媒体文件被上传到服务器,服务器处理转存到 OSS,然后将文件地址加入消息队列,由另一组服务器处理文件,将处理结果保存到 OSS,对多媒体的显示请求由 OSS 和 CDN 完成;
Serverless 架构:多媒体直接上传到 OSS,由 OSS 的事件触发能力直接触发函数,函数处理结果保存到 OSS,对多媒体的显示请求由 OSS 和 CDN 完成。
如何处理海量文件?单台服务器空间有限,购买更多的服务器;
如何扩展 Web 应用服务器?Web 应用服务器是否适合 CPU 密集型任务?
如何解决上传请求的高可用?
如果解决显示请求的高可用?
如何应对请求负载的波峰波谷?
管理应用服务器的高可用性和弹性;
管理文件处理服务器的弹性;
管理消息队列的弹性。
事件触发能力:函数计算服务与事件源(OSS)的原生集成让使用者无需管理队列资源,队列自动扩展,实时处理上传的多媒体文件;
高弹性和按需付费:图片和视频(不同大小的视频)需要的计算资源规格是不同的,流量的波峰波谷对资源的需求是不同的,现在这种弹性由服务提供,按照用户的真实使用去扩容缩容,让用户 100% 地利用资源,无需为闲置资源付费。
编写大量代码来实现编排逻辑、状态维护和错误重试等功能,而这些实现又很难被其它应用重用;
维护运行编排应用的基础设施,以确保编排应用的高可用性和可伸缩性;
考虑状态持久性,以支持多步骤长时间运行流程并确保流程的事务性。
日志服务(SLS)提供了数据采集、分析和投递功能; 函数计算(FC)可以对日志服务的数据进行实时处理,将结果写入其它服务,如日志服务、OSS; Serverless 工作流服务可以定时批量处理数据,通过函数定义灵活的数据处理逻辑,构建 ETL 作业; 数据湖分析(DLA)提供了 Serverless 化的交互式查询服务,它使用标准 SQL分析对象存储(OSS)、数据库(PostgreSQL / MySQL等)、NoSQL(TableStore 等)等多个数据源的数据。