作者 | 西流 阿里云技术专家

导读:阿里云 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 | 函数计算如何粘合云服务,提供端到端解决方案的更多相关文章

  1. 从零入门 Serverless | 函数计算的开发与配置

    导读:在本篇文章中,"基本概念"部分主要对函数计算最核心的概念进行详细介绍,包括服务.函数.触发器.版本.别名以及相关的配置:"开发流程"部分介绍了基于函数计算 ...

  2. 从零入门 Serverless | 函数计算的可观测性

    作者 | 夏莞 阿里巴巴函数计算团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...

  3. 发评测赢好礼 | Serverless 函数计算征集令

    随着云计算发展,云原生热度攀升,Serverless 架构崭露头角且发展势头迅猛.不仅被更多开发者所关注,市场占有率也逐年提高.阿里云函数计算(Function Compute)是一个事件驱动的全托管 ...

  4. 从零入门 Serverless | 一文搞懂函数计算及其工作原理

    作者 | 孔德慧(夏莞) 阿里云函数计算开发工程师 什么是函数计算 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器.下图是一个应用从开发到上线的对比图: 在传统 Se ...

  5. 从零入门 Serverless | 课时5 函数的调试与部署

    作者 | 江昱 阿里巴巴高级产品经理 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...

  6. 从零入门 Serverless | 一文详解 Serverless 技术选型

    作者 | 李国强 阿里云资深产品专家 今天来讲,在 Serverless 这个大领域中,不只有函数计算这一种产品形态和应用类型,而是面向不同的用户群体和使用习惯,都有其各自适用的 Serverless ...

  7. 从零入门 Serverless | 架构的演进

    作者 | 许晓斌 阿里云高级技术专家 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复 入门 ,即可获取 Serverless ...

  8. 从零入门 Serverless | 一文讲透 Serverless Kubernetes 容器服务

    作者 | 张维(贤维) 阿里云函数计算开发工程师 导读:Serverless Kubernetes 是以容器和 kubernetes 为基础的 Serverless 服务,它提供了一种简单易用.极致弹 ...

  9. 从零入门 Serverless | SAE 场景下,应用流量的负载均衡及路由策略配置实践

    作者 | 落语 阿里云云原生技术团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...

随机推荐

  1. 解决servlet中get方式中中文乱码问题(二):装饰者模式使用

    注意,这里是针对Tomcat容器中get方式提交的servlet中获得参数,参数中有中文的时候乱码的问题: 之前我已经讲过,Tomcat8.0及以上URIEncoding都是utf-8的默认编码,不会 ...

  2. 关于对String中intern方法的理解

    在java的String中有个一直被我们忽视了的方法intern方法:它的官方解释是:一个初始时为空的字符串池,它由类 String 私有地维护. 当调用 intern 方法时,如果池已经包含一个等于 ...

  3. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类

    package util; import java.io.File; import java.io.InputStream; import java.sql.Connection; import ja ...

  4. Go初始化二维数组

    初始化二维数组 var a = make([][]int, n) for i := 0; i < n; i++ { a[i] = make([]int, n) }

  5. PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台

    本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品. PowerDotNet不仅仅是包含像Newtonsoft.Json.Dapper.Quartz.R ...

  6. Qt之类反射机制

    在java语言中,可以使用getObject(String)函数,从类型直接构建新的对象. 而在C++中是没有这种机制的,Qt虽然提供了元对象机制,但只可以获取对象的类名,不能反向构建. 所以搜索一下 ...

  7. shell中的引号

    单引号: 所见即所得 原封不动输出 双引号: 与单引号类似 特殊符号进行解析 ( $ $() `` ! ) 无引号: 与双引号类似 支持通配符( {} * ) 反引号: 优先执行 优先执行里面的命令, ...

  8. [考试总结]noip模拟39

    不写那么多没用的了 开题就发现 \(T4\) 原题, \(T1\) 大水题. 然后发现 \(T4\) 忘了.... 不扯了 打地鼠 大水题,我代码都不想放... 算了,还是放一下吧.. #includ ...

  9. GC-优化-案例

    优化案例 Service S 优化 现在看一下执行jstat -gcutil的结果 S0 S1 E O P YGC YGCT FGC FGCT GCT 12.16 0.00 5.18 63.78 20 ...

  10. Java 扫描识别条形码图片

    1.条形码扫描识别的实现方法及步骤 本文以Java代码示例介绍如何来扫描和识别条形码图片.这里使用免费条码工具 Free Spire.Barcode for Java,调用BarcodeScanner ...