原文:

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. 笔记本无密码连接wifi

    用手机可以用wifi万能钥匙破解wifi,就想找电脑版的wifi万能钥匙,然并卵. 就去寻找各种办法,最后找了个巧, 用手机下载wifi万能钥匙连接,并且使用数据线连接上笔记本. 然后手机设置中找到开 ...

  2. SQLServer创建链接服务器

    --SQLServer创建链接服务器----1.访问接口中Oracle接口 属性 选择 允许进程内-- --删除链接服务器EXEC master.dbo.sp_dropserver @server=N ...

  3. [错误记录]python requests库 Response 判断坑

    在requests访问之后, 我直接判断resp的值, 如下: if resp: do something 发现当Response 为500的时候没有进入if分支, 检查源码,发现Response重写 ...

  4. (转)获取安卓iOS上的微信聊天记录、通过Metasploit控制安卓

    在这篇文章中我们将讨论如何获取安卓.苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制.文章比较基础.可动手性强,有设备的童鞋不妨边阅读文章边操作,希望能激发大家对 ...

  5. Java反射学习三

    反射与数组 java.lang.Array类提供了动态创建和访问数组元素的各种静态方法. 例程ArrayTester1类的main()方法创建了一个长度为10的字符串数组,接着把索引位置为5的元素设为 ...

  6. JDK(八)JDK1.7&1.8源码对比分析【集合】HashMap

    前言 在JDK1.8源码分析[集合]HashMap文章中,我们分析了HashMap在JDK1.8中新增的特性(引进了红黑树数据结构),但是为什么要进行这个优化呢?这篇文章我们通过对比JDK1.7和1. ...

  7. Uva442

    https://vjudge.net/problem/UVA-442 思路: 1)当遇到左括号将字母进栈,遇到右括号将字母出栈. 2) isalpha() 判断一个字符是否是字母 int isalph ...

  8. 网络流$1$·简单的$EK$与$Dinic~of~Net-work ~ Flow$学习笔记

    \(2333\)这是好久之前学的了,不过一直在咕咕咕咕. 一般来讲,正常的网络流笔记一开始都是要给网络流图下定义的.那么我们不妨也来先进行一波这种操作. 那么网络流图,类似于有向图,边上带权,但是这个 ...

  9. Python学习笔记系列——高阶函数(filter/sorted)

    一.filter #filter()函数用于过滤序列.和map()类似,也接收一个函数和一个序列,把函数依次作用于每个元素,根据返回值是True还是False决定是否保留该元素. #filter()函 ...

  10. Flask租房项目总结

    该Flask项目历时3天,开发小组6人,目的是开发一个租房web项目,该项目采用前后端分离模式. Flask租房项目总结 分析需求文档,需要完成的功能模块有: 登陆注册 首页展示,首页搜索 详情展示, ...