从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案
作者 | 西流 阿里云技术专家
导读:阿里云 Serverless 产品函数计算可以作为粘合剂,串联其他云服务提供端到端解决方案,从而简化编程模型,快速实现最上层的业务目标。
传统单体应用的拆解

首先我们来看下单体应用里面常见的两个编程模型,如上图所示,一种是 UI-driven,另外一种是 Message-driven。单体应用这种体系结构,客户端可能相对不那么智能,系统中的许多逻辑(比如身份验证、页面导航、搜索、交易等)由服务器应用程序实现,随着业务逻辑复杂度的增长,服务端的应用程序会越发膨胀和难以维护。
而在 Message-driven 异步消息处理这种模式中,需要用户实现一个常驻的、弹性高可用的消费者服务。为了更专注具体业务逻辑的开发,对一个庞大的单体应用进行拆解,充分利用云服务体系结构是一个非常好的解决方案。在这里,最大的关键是如何为应用程序的各个组件选择和使用正确的云服务,而通过函数作为粘合剂来串联云上的托管服务,就是一个非常好的实践。

如上图所示,UI-driven 切换到 Serverless 架构以后:
第三方 BaaS 服务取代认证逻辑;
允许客户端通过临时 token 直接访问架构与第三方上的数据子库(BaaS);
宠物商店服务端的逻辑可以转移到客户端中,例如跟踪用户访问、读取数据库转化为可视视图等,客户端则慢慢转化为单页面应用;
CPU 密集型或者需要访问大量数据,比如搜索,使用 FaaS 实现,无需一直运行的 server;
购买功能使用另外一个 FaaS 实现,因为安全原因放在服务端。
Message-driven 切换到 Serverless 架构以后:
与单体应用示例相比,这里改动很小,同时使用 FaaS 功能替换了长期存在的消息消费者应用程序,消息消费的高可用性交给了云平台去负责。
事件驱动与编排助力完整 Serverless 应用

目前,在很多的人的第一印象中,一般将 FaaS,也就是 Fucntion as a Service(函数即服务)等同于 Serverless,比如阿里云的函数计算、AWS 的 Lambda,但是实际上有许多其他的云服务也是 Serverless,他们和 FC 一起构建成完整的 Serverless 应用,让用户完全聚焦他最上层和核心的原始业务。
比如,用户直接使用 API 网关,就可以从 API 限流、鉴权等许多 API 层面上需要考虑的繁杂工作中解放出来;直接使用 Serverless 的 NoSQL 数据库 TableStore 或者对象存储 OSS 来持久化数据,替代自己管理数据库实例;使用 SLS 或者 Datahub 从外部系统收集数据流;使用消息服务 MNS/MQ 来管理消息等。
用户可以使用一个个函数将这些 Serverless 服务串联起来,从而达到构建具体复杂的业务逻辑和应用的目标。在这里,用户也可以选择 Serverless 工作流来编排函数和其他云服务,简化了开发和运行业务流程(比如自己去编写代码进行任务协调、状态管理、错误处理以及重试等繁琐工作),让用户聚焦业务逻辑开发。当然,用户也可以使用阿里云提供的开发工具链来简化自动化部署和持续集成。使用这些开箱即可使用的工具可以帮助用户快速达到想要的目标和效果。
如果是一个庞大复杂的单体应用或者是一个面向服务体系的架构,开发者需要负责所有的事情,包括代码的编写、管理和部署数据库以及其他相关的后端服务等,切换到 Servrless 架构,可以看到:特定的模块交由特定的托管云服务去处理,之后再使用实现了具体业务代码的函数将它们串联起来,也实现了解耦。为了使这种架构运转得更有效率,事件驱动是一个必不可少的特性,比如用户尝试往 OSS 上传一个文件或者更新表格存储会自动做一些逻辑处理,对于开发者来说,最关心的是什么样的事件可以触发我的编写逻辑。
Serverless 粘合云服务示例
这里有一个有趣的例子:

如上图所示,用户上传图片文件,产生消息事件触发了 FC 函数执行,处理生成了图片缩略图,并将缩略图存储至对象存储 OSS,之后触发了另一个 FC 函数,将图片产生的更新信息写入表格存储数据库,最后再触发一个 FC 函数,完成搜索模块的更新。整个过程中文件处理存储、搜索服务、表格存储数据库服务被几个 FC 函数粘合为一个业务处理逻辑。
从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案的更多相关文章
- 从零入门 Serverless | 函数计算的开发与配置
导读:在本篇文章中,"基本概念"部分主要对函数计算最核心的概念进行详细介绍,包括服务.函数.触发器.版本.别名以及相关的配置:"开发流程"部分介绍了基于函数计算 ...
- 从零入门 Serverless | 函数计算的可观测性
作者 | 夏莞 阿里巴巴函数计算团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...
- 发评测赢好礼 | Serverless 函数计算征集令
随着云计算发展,云原生热度攀升,Serverless 架构崭露头角且发展势头迅猛.不仅被更多开发者所关注,市场占有率也逐年提高.阿里云函数计算(Function Compute)是一个事件驱动的全托管 ...
- 从零入门 Serverless | 一文搞懂函数计算及其工作原理
作者 | 孔德慧(夏莞) 阿里云函数计算开发工程师 什么是函数计算 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器.下图是一个应用从开发到上线的对比图: 在传统 Se ...
- 从零入门 Serverless | 课时5 函数的调试与部署
作者 | 江昱 阿里巴巴高级产品经理 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...
- 从零入门 Serverless | 一文详解 Serverless 技术选型
作者 | 李国强 阿里云资深产品专家 今天来讲,在 Serverless 这个大领域中,不只有函数计算这一种产品形态和应用类型,而是面向不同的用户群体和使用习惯,都有其各自适用的 Serverless ...
- 从零入门 Serverless | 架构的演进
作者 | 许晓斌 阿里云高级技术专家 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复 入门 ,即可获取 Serverless ...
- 从零入门 Serverless | 一文讲透 Serverless Kubernetes 容器服务
作者 | 张维(贤维) 阿里云函数计算开发工程师 导读:Serverless Kubernetes 是以容器和 kubernetes 为基础的 Serverless 服务,它提供了一种简单易用.极致弹 ...
- 从零入门 Serverless | SAE 场景下,应用流量的负载均衡及路由策略配置实践
作者 | 落语 阿里云云原生技术团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...
随机推荐
- mybaits源码分析--类型转换模块(三)
一.类型转换模块 String sql = "SELECT id,user_name,real_name,password,age,d_id from t_user where id = ? ...
- 接口测试进阶接口脚本使用--apipost(预/后执行脚本)
预执行脚本的作用时间 预执行脚本是一个请求发送前执行的脚本. 预执行脚本的作用 预执行脚本可以完成以下作用: 编写JS函数等实现复杂计算: 变量的打印 定义.获取.删除.清空环境变量 定义.获取.删除 ...
- 前端~定位属性position(relative、absolute、fixed)的分析
前端~定位属性position(relative.absolute.fixed)的分析 1,简单了解: relative:移动自身时,参考自身的原来位置而移动,移动子元素(子元素设置了absolute ...
- 【进阶之路】持续集成、持续交付与持续部署(CI/CD)
由来 记得7月份刚刚换工作的时候,中午和老大一起去吃饭,回来的路上老大问我:"南橘,CI/CD有没有研究过?" 我隐隐约约在哪里听过这个名词,但是又想不起来,秉着实事求是的态度,我 ...
- SQL-DELETE触发器练习
&练习一 如下所示三张表( student,grade,student_updata_before ): student表 grade表 Student_update_before表 # 触发 ...
- 如何将 Ubuntu 版本升级到新版本
@ 目录 0.将 Ubuntu 版本升级到新版本的注意事项 1.以图形方式升级到 Ubuntu 20.04(适用于桌面用户) 2.使用命令行升级到 Ubuntu 21.10 本教程通过从 Ubuntu ...
- C语言学习笔记---2.C语言数据类型
1.C语言基本数据类型 1.1 int类型 int类型是有符号整型,即int类型的值必须是整数,可以是正整数.负整数或零.其取值范围依计算机系统而异.一般而言,储存一个int要占用一个机器字长. 声明 ...
- Apollo 配置中心详细教程
一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...
- FastAPI(5)- get 请求 - 查询参数 Query Parameters
什么是查询参数? http://127.0.0.1:8000/get?name=xxx&age=18 http://127.0.0.1:8000/get?age=18&name=xxx ...
- python爬取疫情数据存入MySQL数据库
import requests from bs4 import BeautifulSoup import json import time from pymysql import * def mes( ...