架构模式: 无服务器部署
架构模式: 无服务器部署
上下文
您已应用微服务架构模式并将系统架构为一组服务。每个服务都部署为一组服务实例,以实现吞吐量和可用性。
问题
如何打包和部署服务?
要点
- 服务使用各种语言,框架和框架版本
- 编写每个服务包含多个服务实例
- 用于吞吐量和可用性服务必须是可独立部署的
- 可扩展的服务实例需要彼此隔离
- 您需要能够快速构建和部署服务
- 您需要能够约束服务所消耗的资源(CPU和内存)
- 您需要监视每个服务实例的行为
- 您希望部署可靠
- 您必须尽可能经济高效地部署应用程序
结论
使用隐藏任何服务器概念(即保留或预分配资源)的部署基础结构 - 物理或虚拟主机或容器。基础架构获取服务的代码并运行它。根据消耗的资源,您需要为每个请求付费。
要使用此方法部署服务,请将代码打包(例如,作为ZIP文件),将其上载到部署基础结构并描述所需的性能特征。
部署基础结构是由公共云提供商运营的实用程序。它通常使用容器或虚拟机来隔离服务。但是,这些细节对您来说是隐藏的。您或您组织中的任何其他人都不负责管理任何低级基础架构,如操作系统,虚拟机等。
例子
有几种不同的无服务器部署环境:
它们提供类似的功能,但AWS Lambda具有最丰富的功能集。AWS Lambda函数是一个无状态组件,可以调用它来处理事件。要创建AWS Lambda函数,请将您的服务的NodeJS,Java或Python代码打包到ZIP文件中,然后将其上载到AWS Lambda。您还可以指定处理事件和资源限制的函数的名称。
发生事件时,AWS Lambda会找到您的函数的空闲实例,如果没有可用的则启动一个,并调用处理函数。AWS Lambda运行足够的函数实例来处理负载。在封面下,它使用容器来隔离lambda函数的每个实例。正如您所料,AWS Lambda在EC2实例上运行容器。
有四种方法可以调用lambda函数。一种选择是配置要调用的lambda函数,以响应由AWS服务(如S3,DynamoDB或Kinesis)生成的事件。事件的示例包括以下内容:
- 在S3存储桶中创建的对象,
- 在DynamoDB表中创建,
- 更新或删除项目,
- 可以从Kinesis流中读取通过简单电子邮件服务接收的电子邮件的消息。
调用lambda函数的另一种方法是配置AWS Lambda Gateway以将HTTP请求路由到lambda。AWS Gateway将HTTP请求转换为事件对象,调用lambda函数,并从lambda函数的结果生成HTTP响应。
您还可以使用AWS Lambda Web Service API显式调用lambda函数。您调用lambda函数的应用程序提供一个JSON对象,该对象将传递给lambda函数。Web服务调用返回lambda返回的值。
调用lambda函数的第四种方法是定期使用类似cron的机制。例如,您可以告诉AWS每五分钟调用一次lambda函数。
每次调用的成本是调用持续时间的函数,调整持续时间以100毫秒为增量,并消耗内存。
结果上下文
使用无服务器部署的好处包括:
-
它消除了花费时间在管理低级基础架构上的无差别的繁重工作的需要。相反,您可以专注于您的代码。
-
无服务器部署基础架构非常有弹性。它会自动扩展您的服务以处理负载。
-
您为每个请求付费,而不是配置可能未充分利用的虚拟机或容器。
无服务器部署的缺点包括:
-
显着的限制和约束 - 无服务器部署环境通常具有基于VM或基于容器的基础结构的更多约束。例如,AWS Lambda仅支持几种语言。它仅适用于部署响应请求而运行的无状态应用程序。您无法部署长时间运行的有状态应用程序,例如数据库或消息代理。
-
有限的“输入源” - lambdas只能响应来自有限的一组输入源的请求。AWS Lambda并非旨在运行服务,例如,订阅诸如RabbitMQ之类的消息代理。
-
应用程序必须快速启动 - 无服务器部署不适合您的服务需要很长时间才能启动
-
高延迟风险 - 基础架构配置功能实例和初始化功能所需的时间可能会导致严重的延迟。此外,无服务器部署基础架构只能对负载增加做出反应。您无法主动预先配置容量。因此,当负载突然出现大量峰值时,您的应用程序最初可能会出现高延迟。
部署基础结构将使用其他模式之一在内部部署您的应用程序。它很可能会使用每个主机模式的服务服务。
关联的模式
- 每个主机的多个服务实例模式是备用部署解决
- 方案每个主机的单个服务模式是备用部署解决方案
posted on 2019-08-02 15:56 yaofengspark 阅读(720) 评论(0) 编辑 收藏 举报