原文:

https://martinfowler.com/articles/serverless.html

消息驱动型应用

后台数据处理服务是一个不同的例子。 你要写一个需要快速响应UI请求的以用户为中心的应用, 但是你又想捕捉发生的各种不同类型的活动。让我们想一下在线广告系统 - 当一个用户点击时你想要非常快速的把它们转向到他们的目标广告,但同时你也需要拿到点击发生的数据以便于给广告商充值。(这个例子可不是假设的 - 我在Intent Media的前团队最近正在做这样的设计。)

传统上,架构可能看起来是这样的。‘广告服务器’同步地响应用户 - 在这个例子中我们可不关心交互 - 而他也会用‘点击处理器’向频道发送一条异步处理消息以便于更新数据库,例如去扣减广告商的预算。

在Serverless的世界看起来是这样的:

这里的架构跟我们之前那个例子有一点不同。我们将一个长存活周期的消费者应用替换成了厂家给我们提供的可以跑在事件驱动上下文中的FaaS函数。记住厂家同时提供MessageBroker和FaaS环境 - 这两个系统紧密捆绑在一起。

FaaS环境也可以用启动多个函数代码副本的方式来处理并行的点击 - 取决于我们如何写原始的处理逻辑,这是一个我们需要考虑新概念。

拆解‘函数即服务’

我们已经说了很多FaaS的主意,但现在是时候深入讲下它到底是什么意思了。我们可以先看一下Amazon Lambda产品的公开介绍 https://aws.amazon.com/lambda/。我加了一些注释,会在下面讲解

AWS lambda可以让你在不需要管服务器的情况下跑代码。(1)… 用Lambda,你可以运行各种类型的应用或后台服务(2) - 全都是0管理配置。只需要上传你的代码并让Lambda来管让你的代码高可靠的运行(3)并伸缩(4)的事。你可以设置让你的代码被其他AWS服务(5)自动触发或者直接从任何web或移动应用调用。

1.基本上FaaS就是运行后端代码并不需要管理你自己服务器或你自己服务端应用的系统。第二个部分 - 服务端应用 - 是一个与像容器和PaaS(平台即服务)这样现代架构模式的关键不同。

如果我们回到之前点击处理的例子,FaaS做的就是替换点击处理服务器(可能是个物理服务器,),换成一些不需要实际服务器或者一直运行应用的东西。

2.FaaS可以不需要对某种框架或类库做编码。如果用语言和环境来实现FaaS函数功能的话一般就是常规的应用。例如AWS Lambda函数可以在Javascript,Python和任何JVM语言(Java, Clojure, Scala等)中被实现成‘一级类’。总之你的Lambda函数可以执行任何被任何绑定了其部署描述的进程,这样你可以用任何语言最终编译成一个Unix进程(参考后面的Apex)FaaS函数确实有明显的架构限制,特别是当它遇到状态和执行周期,这个我们后面会说。

让我们再想一下我们的点击处理例子 - 唯一需要更改并移动到FaaS的是‘主方法/启动’代码,这处需要删除,并且这个会变成顶层消息处理器(’消息监听借口’实现),但这只是对方法签名的一点改变。其他所有的代码(例如对数据库写数据的)在FaaS世界没有什么不同。

3.既然我们没有服务器程序要跑,部署跟传统系统非常不同 - 我们上传代码到FaaS提供商并且让它做其他所有事情。现在这基本上就是让你上传一个新的代码定义(例如zip或JAR文件),并且调用一个合适的API来初始化更新。

4.水平扩展是完全自动的,由供应商管理弹性。如果你的系统需要并行处理100个请求,供应商会处理而你不需要任何额外配置。FaaS供应商用‘计算容器’短暂执行你的函数方法并且根据运行时需求来销毁。

让我们回到点击处理。比如我们今天运气很好,用户像比平常点击了10倍的广告量。我们的点击处理应用能处理吗?比如我们是否对能一次能处理很多消息的场景进行编码?甚至我们只用运行一个应用实例够不够?我们能否运行自动扩展运行多个处理程序或者我们需要手动更改配置吗?在FaaS上你需要在写行数方法时先考虑并行,但在这之后FaaS供应商会自动处理所有扩展伸缩需求。

5.FaaS的函数方法是由厂家定义的事件类型来触发的。在亚马逊AWS上这包括了S3(文件)更新,时间(计划任务)和被发送到消息总线的消息(如Kinesis)。你的函数需要为你绑定的消息源提供特定的参数。在点击处理器中我们假设我们使用了支持FaaS的消息分发者。如果我们需要换一个,那么需要连消息生产者也要改。

6.大多数厂商允许函数方法可以被进入的http请求触发并作为响应,这很像一种API网关。(如AWS API Gateway, Webtask)。在我们宠物商店里作为‘搜索’和‘下单’的函数功能。


文章来自微信平台「麦芽面包」
微信公众号「darkjune_think」转载请注明。
微信扫一扫关注公众号。

【译】Serverless架构 - 3的更多相关文章

  1. 了解Serverless架构

    1 概述 Serverless中文译为“无服务”是一种新兴起的架构模式,公司ESB产品引入Rest微服务服务机制过程,笔者刚好参与其中,其中Serverless作为一个新起的概念,跟微服务架构相关,为 ...

  2. 【转】Serverless架构

    这是来自martinfowler.com的Serverless架构一文的大意翻译. 什么是Serverless?    Serverless首先是用于描述我们的应用程序是明显或充分地依赖第三方应用或服 ...

  3. Serverless 架构:用服务代替服务器

    Serverless 架构:用服务代替服务器 转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需 加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:&q ...

  4. Serverless架构

    什么是Serverless架构 Servlerless 架构是新兴的架构体系,在Serverless 架构中,开发者无需考虑服务器的问题,计算资源作为服务而不是服务器的概念出现,这样,开发者只需要关注 ...

  5. 转帖: Serverless架构模式简介

    Serverless架构模式简介   原贴地址:https://blog.csdn.net/chdhust/article/details/71250099?utm_medium=referral&a ...

  6. Serverless架构详解:开发者如何专注于业务代码本身?

    本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 演讲嘉宾:黄文俊,曾负责企业级存储.企业级容器平台等产品的架构与开发,目前主要负责SCF腾讯无服务器云函数产品相关. ...

  7. 采用Serverless架构搭建Web应用

    本文会向你介绍一种新的可能,一种无服务器的方案来搭建Web应用.使用这个方案大部分运维方面的问题就不需要你自己操心了,而且也省去运行服务器的费用.本文从无服务的优势与限制两方面带您初识Serverle ...

  8. Serverless 架构的优点和缺点

    Serverless 的优势 在我使用 Serverless Framework 开发 AWS Serverless 应用的过程中,最方便的莫过于,第一次部署和第二次.第三次部署没有什么区别.只需要执 ...

  9. 阿里云云开发平台助力风变科技Serverless架构升级实战

    阿里云云开发平台助力风变科技Serverless架构升级实战 背景 风变科技 一个希望通过技术去推动下一代基础教育的组织.旗下产品包括第一代的熊猫书院(读书类产品).第二代的熊猫小课(泛学科综合学习平 ...

  10. COS 数据湖最佳实践:基于 Serverless 架构的入湖方案

    01 前言 数据湖(Data Lake)概念自2011年被推出后,其概念定位.架构设计和相关技术都得到了飞速发展和众多实践,数据湖也从单一数据存储池概念演进为包括 ETL 分析.数据转换及数据处理的下 ...

随机推荐

  1. java开发初识

    jdk目录相关介绍: bin:存放的是java的相关开发工具 db:顾名思义jre附带的轻量级数据库 include:存放的是调用系统资源的接口文件 jre:java的运行环境 lib:核心的类库 s ...

  2. 从 s = "我爱北京天安门" 中悟道了-----------迭代器操作print(c.__next__())的最!大!好!处!-----------------------------------------------------可以一个一个输出

    s = "我爱北京天安⻔"c = s.__iter__() # 获取迭代器# print(c) # 打印迭代器的地址# print(c.__next__()) # 打印迭代器中的下 ...

  3. U-Mail如何实现邮件营销自动化?

    对于很多企业来说,人力成本可能就是最大的成本支出了,如果能节省这方面成本支出,也就意味着公司增收了,因此很多公司在做营销工作时,都希望营销能够高效率.有系统.有规划.循序渐进的开展,同时还要减轻营销人 ...

  4. Java 处理cookie的方法

    一.java创建cookie 方法一: Response.Cookies["userName"].Value = "patrick"; Response.Coo ...

  5. Golang channel 用法简介

    channel 是 golang 里相当有趣的一个功能,大部分时候 channel 都是和 goroutine 一起配合使用.本文主要介绍 channel 的一些有趣的用法. 通道(channel), ...

  6. 2339: [HNOI2011]卡农

    Description 首先去除顺序不同算一种的麻烦,就是最后答案除以总片段数\(2^m-1\) 设\(f_i\)表示安排\(i\)个片段的合法种类 那么对于任何一个包含\(i-1\)个片段的序列(除 ...

  7. 【node.js】模块系统、函数

    为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩 ...

  8. Sequelize-nodejs-11-Raw queries

    Raw queries原始查询 就是使用了原始的查询语句,如UPDATE users SET y = 42 WHERE x = 12 As there are often use cases in w ...

  9. C++ pair(对组)的简单了解

    类模板:template<class T1,class T2> struct pair 参数:T1是第一个值得数据类型,T2是第二个值的数据类型. 功能:pair将一对值组合成一个值, 这 ...

  10. UNIX网络编程之旅-配置unp.h头文件环境

    最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include “unp.h”  相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程,算是一种个性化的开 ...