7月29日 数人云 在上海举办金融沙龙,邀请上交所和近二十家来自银行、保险、证券的IT技术专家一同探讨容器技术在金融业中的最佳实践。数人云CTO肖德时在会上将传统金融行业经过容器能够解决的四大问题作了逐一解读。编程
如下是演讲实录:安全
容器技术基本上是2013年出来的,2014年开始在中国传播。在2016年,你们能够感受到Docker技术的发展加速,在生产环境中也有不少的成功案例。在DockerCon 2016上咱们发现,Docker已经从原来的一个工具变成一个真正的生态圈,Docker已经具有整套的解决方案,同时上下游生态也已经很是完备。这都在告诉你们,你能想到的、和你须要的一些最佳实践,Docker基本上都能提供。目前,基本上是大公司在不断的追求Docker的技术,由于小公司用Docker技术解决问题产生的收益比还比较不明显,而大公司原来冗余的架构经过使用Docker确实能够产生效益,因此一些传统企业对Docker会比较关注。服务器
最新的资料显示,如今是应用Docker技术的比较好的时机。全球雇员超过500人的公司中73%已使用Docker技术。国内的不少公司也都在关注这项技术,尤为是金融行业,由于金融业的IT发展的比较成熟,他们对新技术比较关注,Docker已经有不少生产应用在里面产生。网络
用Docker能干什么是你们比较关心的问题。第一个比较常见的场景是DevOps,DevOps实际上就是提升生产力。原来,开发能作运维的事,运维能作开发的事。但实际上从真实的场景里,术业有专攻,在创业公司能够这么干,但传统公司作不了。Docker能够帮助企业进行业务的转型,提供标准的接口,这样开发提供标准运维能知道,运维提供标准开发也能知道。传统企业的开发流程不像创业公司,一我的要干不少事,传统企业强调的是标准化,是业务的转型,而在原有的老的制度下很难实现这种标准,用Docker技术能够加快转型。架构
第二个场景,云化。2016年云计算开始了新的增加,云计算发展到了新的技术点,老的虚拟化技术已经不能知足企业对动态资源和快速响应的需求,不能起到资源复用的做用。Docker能够应用在物理机上,也能够应用在虚拟机上,能够快速构建应用管理平台,或者构建IaaS、PaaS,或者service均可以。原来部门作不了,由于没有技术栈的改变,仍然要用老设施,那些老设施都是为大企业设计的。可是Docker出来的时候就是为开发者服务的,它是一个工具,一我的也能够作一个私有云。从这个点来看,在云端的转变这个场景里Docker是目前比较推荐的技术栈,它可以快速构建应用管理平台,能够有很好的基础。框架
另外,用了Docker必定要无状态,这只是表象,之前的应用架构和原来的状态是否是就必定不能知足如今的需求?不是的,原来的单体仍然能够用,为何要作微服务?由于业务里有多个Function,其中有一个Function是特别热的,这时候怎么能抽出来?最简单的办法就是重构,由于想把它抽出来,抽出来之后,若是没有一些工具怎么作后面的工做?这都是限制问题。Docker公司提供的方案就是用Docker把它包裹一下,成为一个标准的小组件,而后利用分布式的概念,把它scale out,scale out之后再进行后面的工做。在现代的应用中,用了云,资源更容易得到,因此客户想快速地创造一些环境,这些环境里面的资源利用率解决了,可是应用的复杂度仍然存在。如何动态的分配,就是刚才上交所介绍的一些治理的方法。在Modern APP之上会面临一些问题,可是如何快速响应,这个状况是须要一些工具的,这些工具咱们认为Docker是能够作到。运维
大背景,以前IOE的架构存在,不是说很差,从技术层面来说,我并不认为IOE有什么很差,只是我加了一些策略作这件事,它比较拥堵,但不表明它很差。还有“十三五”规划,自主可控的要求,这些背景让企业对开源工具的需求变得会愈来愈多,数人云这种开源公司也是应势而生,咱们给企业提供的解决方案就是自主可控,把开源、透明的技术交给客户。分布式
在2015年,当时去跟客户说咱们上一个Docker,人家说你的Docker和VM比有什么好处?VM用的多好,为何要上Docker?当时咱们是无言以对的,由于安全性,还有各类生态圈的工具链也不成熟。可是慢慢的,咱们在作这件事的时候发现,其实这是须要和企业一块儿成长,咱们也总结一些步骤。微服务
总结一下咱们想解决的问题,首先,Docker能不能解决快速发布的问题,实际上用Docker之后,管理起来是更复杂的。因此才会有数人云这种PaaS的存在,把复杂的东西用计算机的方式管理,由于用我的的方式是无法管理那么多资源的和实例的;二是原来多套环境相互隔离,客户须要的是多套环境多租户的分发,真正的隔离,由于是内部系统,对于隔离的要求仍是能够分级的。环境的快速搭建涉及编排,怎么把DB分红两个,上面分红多个,而后都能访问DB,还有如何将手工操做变成自动的;三是大版本升级回滚,很难作这种升级回滚,怎么去作;四是各类设备,有的CPU,有的是VM,有的在物理机上,这么多设备怎么统一的管理起来。这是咱们现实的一些场景,咱们怎么解决这些问题是我今天想和你们一块儿探讨的问题。工具
第一个问题是快速部署,还有缓慢的升级,基本上就是用容器和微服务解。微服务是一个框架,若是把现有的服务拆成微服务,必定是一个统一的架构,那这个架构里面必定是包含这样的元素:首先,必定要有一个API网关的Server,微服务里面的API网关不涉及Nginx,由于Nginx无法动态的改配置,得手动去改,这是知足不了需求的,由于底下的应用无数,因此上面必定要构建本身的API网关,这个网关能够解决全部的问题,要否则下面每一个API的服务,它的服务请求SLA都是能够通过网关控制的,这也是新型微服务架构里面常常不被人提起的,被忽略的地方。可是这是很是重要的一点,由于底下的服务特别多。发到集群里,怎么管控这些服务的质量,就是API的请求,出错怎么办,怎么来控制?这些都要经过API网关来控制,因此这个必定要去注意一下。
另外是几个大块的认证,若是你的内部认证没有统一的认证,就无法作标准化的双向通行,并且API网关也没有办法给下面的应用下发东西,由于无法认证。还有Configuration server必定要加上,Service Discovery单纯靠容器解决不了,须要PaaS的容器平台解决。作端口、应用的发现,方便其余应用访问它。还有监控、报警,而后就是常规的日志分析,这就是常规的需求。这些需求里面最特殊的就是容器,由于不少个要作逐一监控,没有一个平台是不行的。对日志也是同样,每一个容器起来之后就死掉了,怎么知道这个容器是应用呢?通常都是要经过容器的ID来标识,而后收集回来。
还有一个API网关里面最大的特色,快速的熔断,什么意思呢?就是底下的服务极可能出问题。微服务架构里都打散,上面挂一个Nginx,若是业务量大了,如何快速关闭某个API呢?没有可编程的接口是作不到的。可是要采起微服务解决,这个架构的的组织形式就是这样。微服务里面承载的这些组件特别复杂,须要一个标准的组件来封装起来,这个封装组件的方式用Docker是比较合适的。微服务的架构确实能够解决这个问题,由于每一个组件的升级很快,若是把整个组件升级一下,还有一些其余的东西,会很麻烦。咱们会想到能给一个这样的架构,微服务架构里面统一管理服务。
环境之间的隔离,Docker作的目录级别的隔离已经彻底能够知足需求了,原来为何作不到这点?是由于手工的操做特别多,用别的方法隔离也是没有问题的。可是咱们以为,原来的架构里面,CICD的架构已经很成熟了,能不能把它自动化?由于彻底能够用Docker来交付整个环境,手工部署没有问题。咱们再往前走一步,怎么走?Jenkins能够调一个集群系统,而后分发集群,刚才说的微服务发到这里面,而后快速的部署。这是一个自动化的过程。这里面涉及到一个问题,原来我们常常会听到的是持续构建,也就是把原码先构建成镜像,而后镜像再发到集群里面,这个操做以为很顺,但实际上这里面真正的挑战在于,由于每一个业务组件的依赖,还有他们之间的配置怎么抽离出来,这都是须要比之前更复杂的。因此,用容器确实解决了持续集成的一部分问题,但它对你的技术要求会愈来愈高。原来是手工作,而如今须要自动化。对于基础人员的架构改造,实际上是抽象层更高一点,对你们的要求也会更高一点。
大版本升级不可回滚。大版本的升级困难点在哪儿?原来都是单体服务根本无法拆,动又不能动,刚才说了微服务基本上可以解决它。第二个状况是每一个版本的版本控制怎么解决?基本上配置中心能够把配置作出来,而后建仓库,作版本控制。要作这个最好是滚动更新,也就是在不停机的状况下,一点点把业务迁到新的应用上面,而后将老的流量在处理完业务以后慢慢的退掉,这是一种办法。服务的时候,原来指向老的服务进程,自动地切到新的服务进程里面,这样产生流量尽快切到新的服务里面,因此这是须要服务发现的。
咱们这边会构建一个集群,咱们用的ZooKeeper去保证调度器,在正常运行的状况下,咱们给Marathon发指令,让它把应用一个一个更新。起一个服务,保证老服务不停机,这时再把域名切换,进来的新流量就到新的应用里面了,老的应用在没有流量的时候自动退出,保证用户访问的时候没有宕机的感受。这是集群环境里面作升级的常见案例。
还有各类异构设备,硬件资源利用率比较低,解法是数人云的应用集群。它是容器的集群,咱们的系统会运行在独立的环境里远程控制集群系统,保证系统里面运行的只有容器,而后有相应的Agent来管理应用的服务。
这张图比较清晰一点,数人云自己就是微服务的架构,这里面针对的状况,你们都知道Nginx性能是最好的,咱们可能在这上面写一个新的API网关对接整个系统,这套系统是数人云系统架构里面的一部分。咱们业务管理用Marathon调度器会进行升级,由于Mesos自己是集群管理的调度。对于这些组件,好比镜像,咱们采用的方式是跟VMware合做的一个开源项目叫Harbor镜像管理仓库,这是咱们和他们一块儿合做开发的软件。持续集成咱们和Jenkins作集成,经过自动配置可以把咱们这个小本下发给Jenkins,而后和它构建镜像。监控报警,你们会以为容器的监控报警很差作,容器目前为止基本上都是接口,如今新的容器把日志和报警,所谓的报警的实现都要按照流程的方式提供API接口,只要接上就收走日志,在本地不落盘。日志也是同样,它如今提供plugin方式和日志系统对接,不用担忧落到盘里面收上来是否是把硬盘撑爆,如今均可以配的。这里对于咱们如今新加的网络模块,就容器发展到如今其实对于网络都是成熟的,你们都在用host模式去管,虽然容器很轻,但并不比VM先进到哪里去,只是说它更轻量一些。客户但愿VM有的东西它也有,这块最后也提供了这种对于IP的管理。因此也是刚刚在上的一种新的成熟架构,也就是说一容器一IP,如今是刚刚才开始支持,这是咱们最新配套的。
讲完这些方案以后,今天会有些容器圈的新东西给你们讲讲。
首先是Docker1.12,昨天它正式发布了,这是一个新版本的发布,最重要的发布。这个发布先是内置了本身的工具,再就是对网络的加强,达到了更容易商用的阶段。第二个是咱们如今用的Mesos,也发布了1.0,能够给你们介绍一下特性。
Docker1.12它有一个重要的特色,通常在集群系统里面,由于容器是很碎的,用户但愿知道这个服务究竟是run仍是不run,原来的方式是Docker run的时候把端口打开,而后经过一个脚本去查。这等因而第三方去作,如今提供的功能是能够在构建镜像的时候就把Healthcheck打开,经过Docker Daemon的内容给这台主机上运行的容器按期的检查,经过Docker知道这个容器是否是健康的。固然这个功能并非为我们准备的,是为本身内置的Swarm编排工具作准备的,由于Docker公司作集群管理的工具也在想这个事情。还有一个状况是我们最经常使用的CentOS系列,原来对于安全Docker公司一直在回避,它如今默认把这个组件打开了,打开之后跑出来更安全。Linux能够打标签、作监控,可是这个东西由于刚出来,因此只是一个信号,也就是Docker愈来愈安全了,原来是作不到,如今是愈来愈方便了,能够作到这样。Docker内置了一个IPVS,干什么用?就是想替代HaProxy提供IP给网络里面。这是比较新的技术,目前咱们认为处于实验阶段,它利用IPVS的模块来提供网络的接口,只是一个信号,目前是没有采用这种方案的,由于太新了,还要测试。最后是内置Swarm的组件,这是很轻量的编排工具,也就是说装几台机器,必需要组成一个网,怎么去作?能够用Swarm作这个事。这个网IP怎么作,用IPVS,这就是最新的Docker的发展,很是快。
目前为止,一容器一IP技术理论已经落地。每台机器要装一个小的路由器,而后小路由器给你的容器。这个路由器能够想象成家里的无线路由器,由于是个屋子,一台主机里面都有屋子,任何终端设备均可以向路由器调IP,这个IP是假的均可以。固然Docker里面如今有了网络的插件,就至关于相似有了一个驱动,就能够找路由器要一个IP,实现了路由器有IP。你们注意到这个IP和底下的IP不同,他们之间经过IPtable 作包头的转换,经过转换就能够双向通讯了。可是这里面192.168的网段和10网段的管控,若是只作一次转发,那就控制不了这些IP之间的东西,咱们用的方案把这些规则都记录在一个键值库里面,这样的好处在于,能够控制这个IP和这个IP的通讯,把它记录下来就能够了,若是删掉,默认不让它通讯也是能够的。虽然一台主机有三台服务器,可是他们之间是否能通讯是你能够控制的,这样更安全。也就是说,用户有一个应用,这个应用是1.1和0.9,放在这两个容器上,而后1.10是另一个APP,不但愿他们之间互相通讯就能够经过IPtable写进去,而后把他们隔开,他们通讯的时候,一看规则没有就把他们删掉了,路由器就不会给它分。
还有一个状况,都是容器里面的IP,那外网的IP之间能不能通讯?由于内网有一个路由器,路由器给它分了一个IP,也想给容器分一个一样网段的IP,须要一个网关来转换为可用的IP,转换给它,就是改包头改完包头转进去。它请求的时候再转出去,两个路由器之间再转一下,是这样的过程。它有一个缺点,就是主机的数量不能太大,毕竟是虚拟的IP网络,主机的数量不是容器的数量,基本上在200台左右是一个推荐的方式。
性能对比,跟主机、物理机再和calico的解决方案对比,基本上会在102四、204八、4096这块,若是用普通的overlay方案性能就很低,目前Docker overlay本身的原生方案性能就很低,可是它在提高,由于它刚刚出来。上面这套方案,由于calico的方案只是在包的包头上作了篡改,欺骗主机转发数据包,因此它的性能和host主机之间,有时候从数据表里面看到它传输的效率,吞吐量比host还快,可是这个数有假像,由于改了包头,可是基本上能够确定,和原生的host的网卡里面性能是差很少的,是这样的状况。
最后说Mesos如今新产品,就是1.0技术开源的组件,1.0之后,咱们基本上就会有新的HTTP API,原来的API都是Google的协议,如今有新的HTTP API更方便数人云和它作深度整合,咱们也但愿不断的前进,给客户提供更好的产品。第二个状况,你们如今遇到的状况,那就是Docker有各类各样的bug,这个问题没有很好的解决办法,由于Docker公司的产品是开源的,它的商业产品也到不了中国。Mesos解决了这个问题,Mesos拥有给Twitter、苹果等都部署过几万台的节点的经验。他发现安装Docker Daemon之后,Docker是很不稳定的,尤为在大规模集群方面很不稳定,因此他们推荐另一个方式,就是用原生的容器框架解包镜像。客户在本地用Docker,可是把镜像发给我,我用另外的方式把这种镜像给起起来,用户是透明的,就认为它是Docker room,但它不用了Docker Daemon,由于把Docker Daemon关掉之后容器就死掉了,可是把Docker Daemon去掉之后,容器还要经过原生的方式运行起来,这就知足了企业的各类需求,这是新的技术点。还有云原生APP架构里面,对于网络须要一个标准,如今提供了一个相似的架构,Mesos提供了这个标准。另外就是支持GPU。还有Mesos在和微软合做,开始接管Windows的一些信息,这也是比较大的亮点。这个生态圈仍是比较活跃的,这也是数人云关注和考虑的。