微服务生态体系建设之 三个火枪手(2) 容器技术

微服务生态体系建设之 三个火枪手(2) 容器技术_第1张图片

现在我来尝试回答这个问题 :“微服务为什么这几年才火起来?”

要回答这个问题,先要知道云原生这个概念。国际上有个组织叫CNCF,即Cloud Native Computing Foundation,这个基金组织对云原生的定义如下:Cloud-native computing uses an open source software stack to deploy applications as microservices, packaging each part into its own container, and dynamically orchestrating those containers to optimize resource utilization.

中文我就不翻译了,核心内容是说用开源软件的应用,这个应用满足如下特征

  1. 微服务
  2. 容器化封装
  3. 自动化动态编排

进而,CNCF又提出了云原生应用的12-factor,

 

通过对以上的解读,你就知道微服务这几年火起来,是跟容器技术和DevOps的成熟紧密相关的。

本文重点讲一下容器这个概念。

虚机技术大家已经不陌生,容器技术和虚机技术的区别在哪里?请看下图。其实虚机是台完整的虚拟服务器,而docker容器是服务器操作系统下的一个进程。

微服务生态体系建设之 三个火枪手(2) 容器技术_第2张图片

微服务生态体系建设之 三个火枪手(2) 容器技术_第3张图片

 

再看下图,如何将应用部署到容器里

先读一下Dockerfile中的内容,有了注释,相信大家还是能读懂的:

svw@master:~$ cat dockerfile

#基于哪个基础镜像

FROM frolvlad/alpine-oraclejdk8:slim

#将本地文件夹挂载到当前容器

VOLUME /tmp

#拷贝文件到容器

ADD eurekaserver-0.0.1-SNAPSHOT.jar app.jar

#配置容器启动后执行的命令

ENTRYPOINT ["java","-jar","/app.jar"]

#开放8761端口

EXPOSE 8761

 

微服务生态体系建设之 三个火枪手(2) 容器技术_第4张图片

通过容器技术,我们把应用需要的运行环境、缓存环境、数据库环境等等封装成docker registry中的一个个image,只要执行docker build操作,按照dockerfiler里写的脚本执行,就能生成新的镜像,以后就可以随时把这个镜像pull下来,然后docker run一下新的镜像,容器就能快速启起来提供服务(示例是微服务的注册服务器eureka server的制作脚本)。无需像在虚机环境下部署一样,一步步安装操作系统、数据库、中间件,然后再手工执行部署命令,把应用包部署上去,最后才能启动应用。所以容器化的服务就特别容易自动化快速部署和动态伸缩,甚至通过不同的部署策略完成不宕机部署。

由于微服务本身的体量小,又内嵌了tomcat的运行环境(拜springboot所赐),使得它特别轻巧,更加适合于容器化部署,所以说,微服务和容器就是绝配,微服务就是容器化的服务。

至于部署策略,像蓝绿部署、灰度发布、金丝雀发布等等概念,这里就不展开了。还有为什么容器前面加个docker?简单理解,docker是管理容器的工具集,在docker之上,我们又会有kubernetes (k8s),在k8s之上,我们又会有openshift。这些细节,请CII的大咖们来解释吧。

最后看一下,部署在容器下的微服务,在运行时是怎么样子的

微服务生态体系建设之 三个火枪手(2) 容器技术_第5张图片

记住这些方盒子,它们就是容器,里面装着微服务。

忘记主机吧,我们不用知道主机在哪里,只要知道有容器在跑就行,把微服务部署在多个容器里,“杀了夏明翰,还有后来人”。不用关心容器跑在哪里,只要知道它在超融合的云环境里就可以了。

到此为止,我们解释了微服务近几年才火的一个原因,就是容器技术的成熟;接下来的一篇,我会简单介绍“狭义的”DevOps技术,它也成熟了,它是微服务火的第二个原因,我们就用DevOps的姿势来开发微服务。

 

 

 

 

你可能感兴趣的:(IT技术)