DaoCloud 孙宏亮:微服务的「扩展立方」与 Docker 化实践

2015年10月22-24日,IT168 主办的系统架构师大会 SACC 在北京隆重举行。在本次大会上,DaoCloud 技术合伙人孙宏亮发表了主题为 “微服务架构下应用 Docker 化实践” 的精彩演讲。作为 DaoCloud 的技术合伙人之一,孙宏亮在 DaoCloud 团队负责企业级容器云平台的研发工作,并著有《Docker 源码分析》这一 Docker 领域的热门书籍,在云计算领域和 Docker 开源社区具有非常大影响力。

allen1024011
【图1】DaoCloud 技术合伙人孙宏亮正在 SACC 大会上演讲

孙宏亮介绍了微服务的“扩展立方模型(ScaleCube)”,以及微服务与Docker化的实践经验,并分享了在基于Docker实现微服务架构时需要注意的问题。

allen01
【图2】微服务的扩展立方模型

“扩展立方模型”是指微服务架构的在拆分时包括三个维度,如上图所示,X 轴表示水平副本,通过副本进行扩展;Y 轴表示功能解耦,通过分解功能,在不同模块之间的扩展;Z 轴是数据分区,一个系统会有一些业务和数据,微服务架构可以通过数据分区的形式进行扩展。

allen02
【图3】Docker 的两大核心技术

孙宏亮谈到,Docker 主要包含两个方面的技术:

一方面是容器技术,可以进行物理资源的有效分配与管理,并实现资源隔离,从这个角度看来,容器跟虚拟机的理念比较类似。孙宏亮认为,容器的诞生会占据虚拟机的一些市场,但不是完全替代虚拟机,主要是隔离强度的问题,容器技术是共享内核资源的,在一些比较严苛的状况下,虚拟机更胜一筹。

Docker 的第二个技术——镜像技术。打破了 “代码即应用” 的观念,Docker 真正实现了从系统环境开始,自底向上地打包一个软件。Docker 解决了软件的环境一致性问题,使得软件的分发与交付异常便捷。

Docker 如何让微服务架构更简单?

如下图所示,结合微服务的「扩展立方」来看,Docker 镜像的一致性可以保证水平扩展,部署秒级,扩展立方的 Y轴,是功能解耦,可以把一个系统分成不同的模块,Docker 的优势是 application-centric,Docker 镜像完全独立。在数据分区方面,Docker 与数据服务结合,在这个方面,Docker 还有一些路要走。

allen03

【图4】从扩展立方模型看微服务与 Docker 化

Docker 化实践

孙宏亮表示,Docker 的本质体现在两个方面,一个是 application-centric(应用为中心),另一个是 single-process(单个进程)。

如下图所示,这个文件系统是一个涵盖用户应用的发行版,Docker 容器里面会有很多进程,容器启动以后,会有进程隔离、网络隔离(可以使用独立的网络来处理自己的逻辑)、文件系统隔离、权限控制、资源控制、资源隔离等。

allen04

【图5】App-Centric 和 Single-Process

如何 Docker 化?

  • 首先,需要定义一个 Dockerfile,Dockerfile 定义了进程需要的一切东西。Dockerfile 涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计 namespace 的权限控制)等等
  • 第二个方面是 Docker 镜像,在用 Dockerfile 定义一个文件之后,dockerbuild 时会产生一个 Docker 镜像,当运行 Docker 镜像时,会真正开始提供服务
  • 第三点是 Docker 容器,容器是直接提供服务的,关于容器的“单进程模式”,需要注意一点,容器里面有一个非常重要的进程——init 进程,它负责管理容器内部的所有进程,一旦该进程出现故障,系统会负责给容器内所有其他进程发送一个 kill 信号,随即容器退出运行。在实践时需要保证 init 进程不能经常出问题,当然也可以通过 Docker 层面,设置一些 restartpolicy 等策略,来保证容器能够成功恢复,不过如果容器内部已经有状态时,同样也会出现一些问题。

allen05
【图6】Docker 化实践的三个步骤

最后,孙宏亮介绍了遗留系统如何无差异地 Docker 化,并介绍了传统应用 Docker 化的两个关键——日志管理和配置管理。事实上,Docker 里面也有一个 init 进程,Dockerinit 进程跟宿主机上的 init 进程有很大的差异,Docker 的 init 进程是完成资源的初始化,然后把决策完全交给用户指定的进程。

另外,传统模式下,很多应用很多组件都会调用服务进程来完成特殊的需求,比如,如果说某一个组件是需要完成日志的,会需要 syslog 的服务来完成这些目标,可不可以把这些放到容器中呢?如果把它们放到容器中,容器的逻辑就变得比较复杂。孙宏亮分享了日志管理进程 syslog 的 Docker 化实践(参见下图)。

allen06
【图7】Docker 化实践——syslog 日志管理进程的 Docker 化

值得一提的是,DaoCloud 作为国内容器技术的领头羊,其自身的平台也是基于DaoCloud 研发和运维的,用孙宏亮的话说,我们 DaoCloud 是基于 DaoCloud 是基于开发 DaoCloud。

据悉,目前 DaoCloud(www.daocloud.io)公有云平台已经承载了三万多个用户,他们借助 DaoCloud 平台实现开发运维一体化和混合云管理。此外,DaoCloud 也为大型企业提供容器云平台解决方案,将 DaoCloud 平台和能力通过混合云的方式提供给企业用户,并且已经在金融、政府、能源、互联网等领域拥有诸多成功案例。

现场 PPT 下载链接:微服务架构下应用docker化实践

Leave a Reply

Your email address will not be published. Required fields are marked *