本篇内容主要讨论的是 Serverless 架构与其事件规范的基础原则。html
首先,咱们先来了解下在 HTTP/Web 场景下咱们的典型的WEB场景是怎样的:nginx
这里,咱们不难看出典型的Web场景实际上是由三大块内容,客户端,服务器,数据库组成。客户端在服务器侧经过类型 apache,nginx 等代理服务器来请求数据,代理服务器又经过数据库来写入或拉取数据资料。这个很简单,也是咱们最经常使用的 Web 场景。git
这里面服务器中可能涉及路由规则,鉴权逻辑以及其余各种复杂的业务代码,同时,开发团队要付出很大的精力在这个服务器的运维上面,包括客户量忽然增多时是否须要扩容服务器?服务器上的脚本,业务代码等是否还在健康运行?是否有黑客在不断地对服务器发起攻击?github
那么接下来,咱们来看下 Serverless 服务是如何请求数据的吧:数据库
Serverless 场景下,客户端须要经过 API 网关 Baas 来访问函数 FaaS 服务,而后在经过函数计算作数据库连接实现数据库的写入和拉取。apache
当客户端和数据库未发生变的前提下,服务器变化巨大,以前须要开发团队维护的路由模块以及鉴权模块都将接入服务商提供的 API 网关系统以及鉴权系统,开发团队无须再维护这两部分的业务代码,只须要持续维护相关规则便可。同时业务代码也被拆分红了函数粒度,不一样函数表示不一样的功能。后端
从上面的例子中,咱们不难发现,其实一个完整的 Serverless 请求实际上是有两大块的,即咱们的 Faas 服务和咱们的 BaaS 服务。那么,简单叙述下 Serverless,其实由两部分组成的,即咱们的 Faas+Baas。服务器
了解完总体 Serverless 的状况,咱们来看下传统 Faas 的基础架构,其实传统 Faas 最关键的核心概念是咱们的调用,咱们能够经过 Event Sources 事件源调用另外一个函数的 Function 来实现单个函数的扩展,总体的原理图以下所示:架构
这样,咱们引出出来另外一个概念,就是事件,什么是事件?事件是怎么定义的?less
咱们能够引出来 CloudEvents ,它是⼀种规范,⽤于以通⽤格式描述事件数据,以提供跨服务、平台和系统的交互能⼒。 事件格式指定了如何使⽤某些编码格式来序列化 CloudEvent。⽀持这些编码的兼容 CloudEvents 实现必须遵循在相应的事件格式中指定的编码规则。全部实现都必须⽀持 JSON 格式。
事件 (Event) ⽆处不在,然⽽每一个事件源产⽣的事件各不相同。因为缺少事件的统⼀描述,对于事件的开发者来讲,须要不断地重复学习如何消费不一样类型的事件。 例如同⼀个⼚商的 CMQ 产⽣的事件和 API ⽹关触发器产⽣的事件是不一样的,不一样⼚商的 API ⽹关触发器产⽣的事件也多是不一样的。
必须的事件属性(REQUIRED attributes)
• ID - 识别事件
• Source - 识别发⽣事件的上下⽂
• Specversion - 事件使⽤该版本的 cloudEvents 规范
• Type - 发⽣相关事件的类型值
• Data - Data的数据内容格式
• Subject -事件开发者有关的事件上下⽂主题
• Tiem - 事件发⽣的事件
聊完咱们的事件,咱们来谈谈另一个核心调用,其实在 Serverless 架构中,调用简单分为四种:
能够根据不一样的用例从不一样的事件源调用函数,例如:
不一样类型的事件源包括:
虽然每一个事件提供的数据可能在不一样的事件源之间有所不一样,但事件结构应该是通用的,可以封装关于事件源的特定信息。
如上就是关于 Serverless 架构与事件规范的一点思考,但愿能够给到你们一些帮助。
传送门:
- GitHub: github.com/serverless
- 官网:serverless.com
欢迎访问:Serverless 中文网,您能够在 最佳实践 里体验更多关于 Serverless 应用的开发!