继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

微服务架构的部署方案

小强聊架构
关注TA
已关注
手记 40
粉丝 9454
获赞 241

试想在微服务之前,我们部署一个单体的应用程序的时候,我们需要提供多台的服务器或者虚拟机,然后在上面部署我们的几个模块和应用程序,可能需要部署成多POP的集群形式。

在微服务的架构中,部署将是更加复杂。一个微服务系统有数百个服务组成,这些服务用不同的语言和框架实现,每个服务都是一个独立的小的应用程序, 需要特殊的监控,资源等要求。

例如,我们需要按照实际的需求进行服务的动态扩展,每个服务需要不同的CPU,内存,存储空间和IO,而且部署微服务的时候还必须快速,高效。

下面列举几种微服务部署的方法:

1. 每台主机上部署多个服务实例

部署多台物理主机或者虚拟机,每个主机上可以运行多个服务实例。

图片描述

这种部署方法有几种情况,
一种是每个微服务部署在一个独立的服务进程中, 例如,Java的web服务部署在Tomcat下,Node.js服务部署在别的进程下。

另一种是在同一个进程中运行多个服务实例,例如,在一个Tomcat下面部署多个服务实例,这种方法的主要好处就是可以有效的利用资源,效率比较高,另外部署也比较快。
一个主要的缺点是,每个服务实例之间没有相应的资源隔离措施,每个服务实例的资源使用很难做出限制,某个服务实例可能独占CPU和内存。

这种部署方法还有一个缺点就是,部署人员需要了解微服务实现的具体语言和框架,以及响应的部署要求,需要部署人员和开发团队进行密切的沟通,这样会导致出错的概率增大。

2. 每个主机一个服务实例

其中有两种方式,一种是每个虚拟机部署一个服务实例,另一种方式是每个容器部署一个服务实例。

A. 每个虚拟机部署一个服务实例

这种方式是将微服务打包成一个虚拟机镜像,然后部署到虚拟机上。
我们可以通过一些CI的工具,比如Jenkins等来打包虚拟机镜像。

图片描述

这种方式的好处就是:

  1. 每个服务独立运行,他们有固定的CPU和内存。
  2. 可以利用现在比较成熟的云计算技术,一些云公司可以提供成熟的负载均衡和弹性计算的技术。
  3. 封装了服务的实现技术,一旦打包成虚拟机镜像,部署人员不需要关注微服务的实现技术和框架。

缺点就是:

  1. 资源的利用效率低,每个服务都需要一个VM,但是每个VM运行的时候是有一些资源开销的。
  2. 部署新版本的服务通常比较慢,VM实例化是比较慢的。
  3. 如果没有好的工具,部署工作比较重复。

B. 每个容器部署一个服务实例

这个方式需要用到Docker等技术,需要将服务打包成一个容器镜像,容器映像是由运行服务所需的应用程序和库组成的文件系统映像。一些容器映像包含一个完整的linux根文件系统。其他的更轻。例如,为了部署Java服务,您可以构建包含Java运行时的容器映像,可能是Apache Tomcat服务器,以及编译后的Java应用程序。

一旦将服务打包为容器映像,就可以启动一个或多个容器。通常在每个物理或虚拟主机上运行多个容器。我们可以使用集群管理器(如kubernetes或marathon)来管理容器。集群管理器将主机视为资源池。它根据容器所需的资源和每个主机上可用的资源来决定放置每个容器的位置。

图片描述

这种模式的好处就是:

  1. 它们将服务实例彼此隔离。我们可以轻松监视每个容器消耗的资源。此外,与vms一样,容器封装了用于实现服务的技术。容器管理api还用作管理服务的api。
  2. 和vms不一样的是,容器是一种轻量级的技术,容器镜像构造很快。容器启动也非常快。

缺点是:

  1. 容器技术还没有虚拟机技术成熟。
  2. 安全性没有VM好,因为多个容器会共享主机操作系统的内核。
  3. 需要好的机制来管理容器。

3 无服务的部署

使用无服务部署的技术,例如aws lambda, 它支持Java、NoDE.js和Python服务。要部署微服务,可以将其打包为zip文件并上传到aws lambda。还需要提供元数据,其中指定了为处理请求(也称为事件)而调用的函数的名称。aws lambda会自动运行足够多的microservice实例来处理请求。

lambda函数是无状态服务。它通常通过调用aws服务来处理请求。例如,当镜像上传到s3 bucket时调用的lambda函数可以将项目插入dynamodb images表,并将消息发布到kinisis流以触发镜像处理。lambda函数还可以调用第三方web服务。

有四种方法可以调用lambda函数:
1.直接使用web服务请求
2.自动响应由aws服务(如s3、dynamodb、kinisis或简单电子邮件服务)生成的事件
3.通过aws api网关自动处理来自应用程序客户端的http请求
4.根据类似于cron的时间表定期

aws lambda是部署微服务的一种方便方法。因为开发人员不负责it基础设施,所以可以专注于开发应用程序。

当然,这种方式还有缺点,那就是服务必须是无状态的,而且需要用服务支持的语言来编写,还可能有响应超时问题。

以上,微服务部署详解From小强聊架构。

打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP