• home > webfront > engineer > Architecture >

    Serverless架构浅析

    Author:zhoulujun Date:

    Serverless 产品时,代表的是无需理解、管理服务器,按需使用,按使用付费的产品。Serverless 代表的是利用 Serverless 形态的产品实现

    Serverless 产品时,代表的是无需理解、管理服务器,按需使用,按使用付费的产品。

    Serverless 代表的是利用 Serverless 形态的产品实现的应用架构,这种架构完全依托于云厂商或云平台提供产品完成系统的组织及构建。在这种架构中,用户无需关注支撑应用服务运行的主机,而将关注点投入在系统架构,业务开发,业务支撑运维上。

    Serverless = FaaS(函数即服务) + BaaS(后端即服务)。其中 Serverless 计算一般指 FaaS,即云函数。

    后端即服务 BaaS,其实大家已经使用很久了,这里的后端,指的就是各种云产品和云服务,例如对象存储OS,消息队列MQ,云数据库DB、TDSQL,云缓存Redis、Memcached,甚至到各种以 API 形式提供的服务如万象优图 CI,视频处理 VC。这些产品或服务,用户直接开通即可使用,无需考虑部署、扩容、备份、优化、安全等各种运维工作,做到了开箱即用,无需自己去进行服务器或应用的维护和管理,因此同样也是Serverless的一部分。

    函数即服务 FaaS,作为一种新的计算能力提供方式,让用户抛弃了对服务器的配置和管理,仅需编写和上传核心业务代码,交由平台完成部署、调度、流量分发、弹性伸缩等能力。FaaS的出现,会从底层开始变革计算资源的形态,提供了一种新的方式来提供计算资源,同时也会给软件架构与应用服务部署带来新的设计思路,进一步降低云计算的使用门槛,推动全行业在服务架构上的创新步伐。

    微服务是一种架构模式,而云函数是实现微服务的一种方式。微服务可以用云函数实现,也可以用 K8S + 容器,或者 VM 实现。

    阿里云函数计算

    使用BaaS和FaaS是Serverless应用的基本特征,符合这两个基本特征的应用可称为Serverless应用

    Serverless 历史

     

    Serverless 的价值

    降低运维需求、降低运营成本、缩短迭代周期/上线时间、快速试错

    • 降低运维需求:从开发者使用的来说,不用更多地去考虑服务器的相关内容,无需再去考虑服务器的规格大小、存储类型、网络带宽、自动扩缩容问题。同时,也无需再对服务器进行运维,无需不断打系统补丁、应用补丁,无需进行数据备份、软件配置等工作。

    • 降低运营成本:Serverless 产品是完全自动化的弹性扩缩容的。在业务高峰时,产品的计算能力、容量自动扩容,承载更多的用户请求,而在业务下降时,所使用的资源也会同时收缩,避免资源浪费。

      跟随着完全自动化的弹性所带来的,是全新的计量计费模式。开发者仅需根据使用量来付费,而在深夜无业务量的情况下,不会有空闲资源占用,因此也不会有费用产生。

    • 缩短迭代周期、上线时间:Serverless 架构带来的是进一步的业务解耦,应用功能被解构成若干个细颗粒度的无状态函数,开发可以聚焦在单功能的快速开发和上线同时拆解后的云函数,也都可以进行独立的迭代升级,更快速的实现业务迭代,缩减功能的上市时间

    • 快速试错:利用 Serverless 架构的简单运维、低成本及快速上线能力,可以来快速尝试业务的新形态、新功能  利用 Serverless 产品的强弹性扩容能力,在业务获得成功时,也无需为资源扩容而担心

    Serverless 的技术特点

    这里提到的技术特点的对象,特指 Serverless 产品中的计算产品,也就是云函数。云函数包含了如下的技术特性:

    1. 事件驱动

    • 云函数的运行,是由事件驱动起来的,在有事件到来时,云函数会启动运行

    • Serverless 应用不会类似于原有的「监听 - 处理」类型的应用一直在线,而是按需启动

    • 事件的定义可以很丰富,一次 http 请求,一个文件上传,一次数据库条目修改,一条消息发送,都可以定义为事件

    事件驱动

    2. 单事件处理

    • 云函数由事件触发,而触发启动的一个云函数实例,一次仅处理一个事件

    • 无需在代码内考虑高并发高可靠性,代码可以专注于业务,开发更简单

    • 通过云函数实例的高并发能力,实现业务高并发

    单事件处理

    3. 自动弹性伸缩

    • 由于云函数事件驱动及单事件处理的特性,云函数通过自动的伸缩来支持业务的高并发

    • 针对业务的实际事件或请求数,云函数自动弹性合适的处理实例来承载实际业务量

    • 在没有事件或请求时,无实例运行,不占用资源

    自动弹性伸缩

    4. 无状态开发

    • 云函数运行时根据业务弹性,可能伸缩到 0,无法在运行环境中保存状态数据

    • 分布式应用开发中,均需要保持应用的无状态,以便于水平伸缩

    • 可以利用外部服务、产品,例如数据库或缓存,实现状态数据的保存

    无状态开发

    Serverless 的应用场景

    Serverless 架构或者技术,可以用在什么样的场景下,来充分发挥它的优势呢?如下的场景,都适合使用 Serverless 架构或产品,来实现所需的业务逻辑。

    1. WEB 及移动后端

    通过结合使用云函数和 API 网关或 HTTP 触发器,可以对外提供 URL 访问地址,成为 Web、小程序、或移动应用等的后端服务。Serverless 架构既可以直接用于构建后台来服务应用,也可以通过类似 BFF 模式,构建中台和应用间的桥梁。

    Serverless 架构提供的强弹性能力,使得可以支撑业务或应用的暴涨;而提供的低运维需求,使得开发者可以专注于业务实现和优化;同时,按实际使用量的付费方式,使得开发者无需预配置资源,无需担心预配置资源的浪费。

    2. 消息处理

    Serverles 架构的应用本身是由事件触发的,因此极其适合于进行消息处理。无论是消息队列中传递的业务消息,还是 Kafka 中采集应用日志,均可以对接到云函数上,进行实时的消息处理、分析。

    3. 对象存储文件处理

    在 Serverless 应用场景中,由对象存储中的文件上传事件,来触发云函数的运行,也是一种常见场景。

    针对图片文件的上传,可以借助云函数完成图片的缩略图生成、二维码或水印标记、图片优化处理;而针对数据文件的上传,可以启动数据的自动化分析

    4. 物联网

    物联网意味着成千上万的设备会连入网络,时刻在不断的产生数据,这对数据的分析、处理的及时性提出了很高的挑战。通过使用 Serverless 架构,物联网设备所采集的数据将可以作为云函数的触发事件,而实现数据的实时处理、分析和应用。

    随着物联网设备计算能力的进一步提升,云函数作为最小粒度的计算单元,有机会被调度到设备端运行,实现边缘计算,达到「端 - 云」联合的 Serverless 架构。

    5. 运维及集成

    通过对接云函数以及云上的各个产品、日志服务、监控告警系统,云时代的运维也都可以用云函数来构建。定时触发的云函数,将可以方便地替代需要在主机上来运行的定时任务;而日志或告警触发的云函数,将可以对云中的事件作出立刻回应及处理。


    参考文章:

    Serverless 基本概念入门  https://zhuanlan.zhihu.com/p/78250791?

    Serverless介绍 https://blog.csdn.net/liukuan73/article/details/80702555

    Serverless简介 https://www.jianshu.com/p/c847bc77e027



    转载本站文章《Serverless架构浅析》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/engineer/Architecture/8469.html