into100沙龙是TOP100Summit 全球软件案例研究峰会的一个下属品牌,从2015年1月起,每月在北京、上海、深圳等地巡回举办的技术沙龙。活动旨在交流软件研发及互联网技术的实战经验,分享TOP100峰会那些优秀的案例实践,通过平台结识更多友人,挖掘并传播业界最具价值的技术实践。 以下为“into100沙龙第13期:与Docker的深度邂逅”,根据王利俊老师讲解的《Docker与十二因子》速记内容整理的分享要点。
十二因子 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运行。 点击阅读原文查看更多活动信息 本文转载自:微信公众账号 - TOP100SUMMIT,版权归原作者所有! |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|