单机多服务实例模式(传统的应用部署方法)

  这种模式需要提供若干台物理或虚拟机,每台机器上运行多个服务实例,每个服务实例运行一个或者多个主机的well-known端口。

  这种模式有两个参数:

  • 一个参数代表每个服务实例由多少个进程构成
  • 一个参数定义同一进程组内有多少服务实例运行

单机多服务实例模式的优点

  • 资源利用有效性,多服务实例共享服务器和操作系统,如果进程组运行多个服务实例效率会更高
  • 部署服务实例很快,只需要将服务拷贝到主机并启动它
  • 网络负载很低,启动服务很快

单机多服务实例模式的缺点

  • 服务实例间很少或者没有间隔,除非每个服务实例是独立的进程。因此要想精确监控每个实例的资源使用,就不能限制每个实例的资源使用,就可能造成某个糟糕的服务占用了主机的所有CPU或内存
  • 同一进程内的多服务实例没有间隔,某个糟糕的服务很容易攻击其他服务,而且可能无法监控每个实例的资源使用情况
  • 运维团队必须知道如何部署的详细步骤

单主机单服务实例模式

单虚拟机单实例

  单虚拟机单实例模式一般是将服务打包成虚拟机映像,每个服务实例是一个使用此映像启动的VM。

单虚拟机单实例的优点:
  • 每个服务实例都是完全独立运行的,都有各自独立的CPU与内存而不会被其他服务占用
  • 用户可以使用成熟云架构
  • 服务实施技术被自包含了。一旦一个服务被打包成了VM就成为了一个黑盒子,VM的管理API成为部署服务的API,部署成为一个非常简单和可靠的事情
单虚拟机单实例的缺点:
  • 资源利用率不高
  • 部署服务新版本比较慢。虚拟镜像由于大小原因创建起来比较慢,虚拟机初始化也比较慢,操作系统启动也需要时间。
  • 运维团队工作量增大,他们负责许多客制化工作,除非使用Boxfuse之类的工具,可以帮助减轻大量创建和管理虚拟机的工作,否则将会花大量时间从事与核心业务无关的工作。

单容器单实例

  在单容器单实例模式中,每个服务实例都运行在各自的容器中,容器是运行在操作系统层面的虚拟化机制,这类容器技术包括Docker和Solaris Zones。

  一般在一台物理机或虚拟机上运行多个容器,一个容器包含若干个运行在沙箱中的进程,可以限制容器的内存和CPU资源。

  部署的时候,将服务打包成容器映像,一个容器映像是一个运行包含服务所需库和应用的文件系统。

单容器单实例的优点
  • 服务实例之间完全独立,可以很容易监控每个容器消耗的资源
  • 像虚拟机一样,使用隔离技术部署服务
  • 容器管理API也可以作为管理服务的API
  • 容器是一个轻量级技术,容器映像创建起来很快,容器启动也很快
单容器单实例的缺点
  • 目前还不像虚拟机架构这么的成熟
  • 容器之间共享host OS内核,因此并不像虚拟机那么安全
  • 容器技术将会对管理容器映像提出许多客制化需求,除非使用如Google Container Engine或者Amazon EC2 Container Service(ECS),否则用户将同时需要管理容器架构及虚拟机架构
  • 容器经常被部署到按照虚拟机收费的架构上,一般情况下客户也会增加部署费用来应对负载的增长



参考链接:
微服务实战(六):选择微服务部署策略