2015.12.23 丨 壹佰案例

Docker与十二因子

2015.12.23 丨 壹佰案例

into100沙龙是TOP100Summit 全球软件案例研究峰会的一个下属品牌,从2015年1月起,每月在北京、上海、深圳等地巡回举办的技术沙龙。活动旨在交流软件研发及互联网技术的实战经验,分享TOP100峰会那些优秀的案例实践,通过平台结识更多友人,挖掘并传播业界最具价值的技术实践。

以下为“into100沙龙第13期:与Docker的深度邂逅”,根据王利俊老师讲解的《Docker与十二因子》速记内容整理的分享要点。

分享者:王利俊    云栈科技创始人兼CEO

云计算老兵一枚,原新浪内部云动态应用平台和公有云平台SAE的负责人。十年PaaS,十年运维,五年软件研发的经历,对软件研发和IT运维管理拥有多年实践经验。擅长大规模系统架构设计和研发,对DevOps自动化、持续集成持续交付有很多实践。


十二因子  SOLID原则




第一个因子:Codebase




一个比较好的应用是一个应用编一个镜像,我们这里说的应用可能更像一个服务。就是每一个服务都有对应的一个代码机,最终通过构件生产自己的一个唯一的镜像。同样,一个镜像,它是可以部署多次的,这是它的最大的能力。


第二个因子:Dependencies




十二因子的依赖强调的是显示的依赖。也就是说,我们写代码的时候,我们可能要依赖一个模块,或者依赖第三方的Page,这个都是需要显示,而不是假设,我在环境里能支持我,这是不行的,必须有显示的声明,说我需要这个依赖,所有的依赖我们都需要显示的声明。同时,我们希望这些依赖之间能够相互隔离开来。Docker解决这个问题的办法其实非常简单,通过镜像整体打包的方式避免依赖的陷阱。


第三个因子:Config




我们知道软件系统部署到某个环境下,往往都需要相关的配置。将配置从代码中分离出去是非常非常关键的,特别是在SaaS软件开发中。在Docker内部的话,它主要是通过容器的环境变量,就是运行的时候,我指定环境变量来支持。这意味着我写代码的时候,我们代码中可以通过环境变量的形式来布局到参数,而不像过去的传统的方法。


第四个因子:Backing Services




我们需要将Backing Services后端服务看做是把它抽象成attached resources ,就是说都可以置换。每个Backing Services抽象出来就是临界的点。Docker在当前阶段支持Dockerlink,这是能通过环境变量的方式,把服务和服务之间关联起来。


第五个因子:Build, Release, Run




Docker强调的build ship和Run,这个其实贯穿到很多阶段,包括从开发到测试,其实也有必要的build ship和run,到生产也是如此。这个系统主要是基于Docker自动构建。


第六个因子:Processes




Docker官方其实还是更强调Docker是一个进程,就是从它的设计上而言。我们能看得出来Docker容器内部许多自带进程,还是希望大家当做一个单进程来使用。Docker的进程运行的时候,倡导的是不变的基础设施,不更改的,就是在容器运行过程中,容器内部尽量少的去写一些持久化的数据。写上持久化数据之后,意味着容器可能没办法做横向的扩展。所以在这里其实容器的进程更强调不更改的。Docker进程里有一个选项,这个可以使容器的操作系统变得不可更改。同时在Docker容器内部,在写数据的时候,推荐写到数据的卷上,之所以不直接写到容器里是有很多原因,其中一个原因是容器的文件系统本质上是分层的,有很多很多的类。这个分层在我们更改的时候会从镜像底层的文件系统,将这个文件拷贝到上层来,然后再进行修改。如果这个文件比较大的时候,拷贝的开销就会非常非常高。还有第二个方面,由于Docker镜像是分层的,这意味着它在系统当中,比如像open等等会很可能比较耗时。Docker官方其实写了一个文章,就是AFFS,它的Open和Stat两个操作消耗的时间都非常非常的长。如果我们对容器内部的文件做了读写的话,它从效率等方面都是非常低的。


第七个因子:Port binding




随着移动互联网的发展,很多应用都走向服务化,所谓的服务化就是相互之间都在提供接口。Docker因子这点强调我们通过端口的绑定,把服务的端口暴露出来。


第八个因子:Concurrency




在处理高并发请求的时候,都是强调使用进程来扩展,而不是通过虚拟机的。当然这个进程是无状态的。


第九个因子:Disposability




在十二因子里更强调的是说,当我们服务发生问题的时候,其实这个点不要去关心,我们把它快速的关掉再起一个新的,来进行替代。这样来处理系统的间断性。这是一种思想的不同,在过去我们往往把软件写的非常非常牛,不要让它出问题;但是随着云计算发展之后,大家觉得软件出点问题也无所谓,出了问题干掉再起一个,无所谓。


第十个因子:Dev/prod parity




Docker利用镜像很好的统一企业的研发和生产环境,因为只有在这样的前提下,我们的开发和运维的协作才更加畅通。


第十一个因子:Logs




日志是生产环境中非常非常核心的一块。在十二因子中强调将日志看作是流,而不是文件。流就意味着一台机器上很多容器,它的日志都是混淆在一起的。在开发环境中,我们往往直接使用Docker logs。


第十二个因子:Admin processes




我们知道在应用中往往需要运行一些管理进程,在十二因子中强调,管理的进程在运行的时候是用one-off运行。


点击阅读原文查看更多活动信息



媒体联系

票务咨询:赵丹丹 15802217295

赞助咨询:郭艳慧 13043218801

媒体支持:景    怡 13920859305

活动详情

提交需求