部署包含两个相关联的概念:流程和架构
部署流程包括一些由开发人员和运维人员执行的步骤,以便将软件投入到生产环境。
部署架构,定义了该软件运行的环境结构。
四种部署选项:
- 使用编程语言特定的发布包格式部署服务,例如JAVA JAR或者WAR文件。
- 将服务部署为虚拟机,把服务打包为虚拟机镜像
- 将服务部署为容器
- 使用Serverless部署模式部署服务。
使用编程语言特定的发布包格式部署服务
好处是快速高效;高效的利用资源,一台机器上,可以运行多个实例
弊端是:
- 缺乏对技术栈的封装,运维团队需要了解每个服务的细节,以准备对应的环境和web容器。
- 无法约束服务实例消耗的资源
- 同一台服务器上运行多个服务实例,缺乏隔离
将服务部署为虚拟机
将作为虚拟机镜像打包的服务部署到生产环境中,每个服务实例都是一个虚拟机。
好处:
- 封装了技术栈
- 隔离的服务实例
弊端:
- 资源利用率较低
- 部署速度较慢。构建镜像,从镜像实例化虚拟机都比较耗时
- 系统管理的额外开销。需要负责更新镜像的操作系统和运行时打补丁
将服务部署为容器
在构建时,部署流水线使用容器镜像构建工具,该工具读取服务代码和镜像描述,以创建容器镜像并将其存储在镜像仓库中。在运行时,从个景象仓库中拉取容器镜像,并用于创建容器。
好处是:
- 封装技术栈
- 服务实例是隔离的。
- 服务实例的资源收到限制
弊端,还是需要负责更新镜像的操作系统和运行时打补丁
Serverless部署
之前的三种部署方式,
- 都会存在资源浪费的情况,例如即使处于闲置状态,也需要为容器和虚拟机付费
2.需要负责系统管理,必须承担操作系统和软件打补丁的工作
Serverless提供一种受约束的编程模型,以换取最小化的系统管理开销。如果需要更加精细化的管理基础设施,那么就不要选择Serverless
以AWS Lambda为例,只需要将应用程序打包为ZIP或者JAR文件,上载到AWS Lamdba,并指定相应请求的函数名称。AWS Lambda会自动运行你的微服务实例来影响请求,只需要为所花费的时间和消耗的内存付费。
好处:
- 消除系统管理任务
- 弹性,不需要预测负载,而判断实例数量。AWS Lamdba会帮忙处理。
- 基于使用情况定价
弊端:
- 长尾延迟。AWS需要花费时间来配置应用程序实例和启动应用程序,可能导致某些请求具有高延迟。
- 基于有限事件与请求的编程模型。不适应长时间运行的服务,例如消息代理服务。
网友评论