《企业级容器云架构开发指南》—2.3.5 微服务部署模式

举报
华章计算机 发表于 2019/05/30 22:36:32 2019/05/30
【摘要】 本书摘自《企业级容器云架构开发指南》一书中的第2章,第2.3.5节,编著是闫健勇 龚 正 吴治辉  屈晓萌 王健飞 王 伟 刘晓红。

2.3.5 微服务部署模式

微服务的部署模式有很多种,每种服务可有自己的部署、资源、扩展和监控要求,但必须快速、可靠和性价比高,如图2-24所示。

image.png

图2-24 微服务的部署模式

第1种:单主机多服务。这种方式简单,但是也会存在挑战,如监控困难,不知道哪个服务使用CPU的频率更高一点;同时服务之间会造成影响,一个服务可能会使系统资源用尽,这对其他服务也会有影响。

第2种:多应用程序容器。这种方式从根本上说是试图优化资源的使用,但现在云服务的出现使得这种诉求已经没有必要了。这种方式将5个Java服务打包在一个容器(如Jetty)中,不可避免地限制了技术的选择,同时在聚合监控时也会难以支持。

第3种:单主机单服务。这种方式很容易对服务进行扩展,安全性也可以在更小的范围内进行,但主机数据的增加也是个问题。

第4种:使用PaaS(平台即服务)。PaaS平台会提供一些特定的支持,还会自动配置机器然后运行,能够透明地对系统进行弹性管理,允许控制运行服务的节点数量,PaaS平台帮忙处理其他工作。

为了从众多的服务器中解脱出来,我们需要自动化,需要写一行代码来启动或开户一个虚拟机,需要能够自动部署的软件,需要自动完成数据库的变更。那么,如何实现上诉的需求呢?有以下几种方法。

(1)方法1:传统的虚拟化技术

图2-25所示为传统的虚拟化技术。在操作系统之上,存在着Hypervisor,它的任务主要有两个:对CPU和内存资源做从虚拟主机到物理主机的映射,以及给上层提供一个控制的层。但Hypervisor也需要一定的资源来完成自己的工作,它也会占用CPU、I/O和内存等,Hypervisor的主机越多,占用的资源就越多。

(2)方法2:Vegrant

Vegrant是一个部署平台,通常在开发和测试环境中使用,可以在一台机器上创建一个虚拟的云,它的底层使用的是标准的虚拟化系统。例如,可以同时创建多个VM,通过关掉其中的几台来测试故障模式,并且可以把本地目录映射到虚拟机上,这样就可以在修改代码后立即查看效果。

(3)方法3:Linux容器

Linux容器可以创建一个隔离的进程空间,进而在这个空间运行其他进程。在Linux中,进程必须由用户来运行,并且根据权限的不同拥有不同的能力,进程可以创建其他进程。举个例子,如果在终端启动了一个进程,可以认为它是终端程序的子进程,Linux内核的任务就是维护这个进程树。Linux容器扩展了这一想法,每个容器就是整个系统进程树的一棵子树,内核已经帮我们完成了给这些容器分配物理资源的任务,LXC就是这样一种容器(类似的还有Solaris Zones、OpenVZ),它的基本结构如图2-26所示。

image.png

图2-25 传统的虚拟化技术 图2-26 Linux容器

它不再需要Hypervisor,尽管每个容器可以运行不同的操作系统发行版,但必须共享相同的内核,因为进程树存在于内核中,这意味着我们的主机操作系统可以是Ubuntu,而在容器中可以运行CentOS,只要它们的内核相同即可。

由于容器更轻量,所以在相同的硬件上能够运行的容器数量比虚拟机要多得多,而且启动速度更快,但容器在隔离性上还存在一定的问题。

(4)方法4:Docker

Docker是构建在轻量级容器之上的平台,可以处理大多数与容器管理相关的事情,我们可以在Docker中创建和部署应用,这些基于容器的应用与VM镜像类似,Docker也能管理容器的配置,并处理一些网络问题。Docker本身并不能解决所有的问题,它只是一个在单机上运行的简单的PaaS,还需要一些工具来管理多台机器上的Docker实例上的服务。例如,当向这些工具请求一个容器时,它会找到容器并运行它。谷歌的Kubernetes和Deis就是这样的软件。

“Docker+调度工具”构成的解决方案介于IaaS和PaaS之间,我们可以称之为CaaS(容器即服务)。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。