中国人寿张青南:中国人寿如何基于容器构建PaaS平台

口述/做者: 张青南 中国人寿研发中心高级架构师web

编辑: Rancher Labsdocker

中国人寿研发中心高级架构师 张青南数据库

从2017年起,中国人寿正式开始利用容器技术搭建PaaS平台“稻客云”,结合持续集成/持续交付技术,实现了研发全流程自动化及对应用容器的全面管理,至2019年,“稻客云”已支持中国人寿15个关键系统的生产运行,管理应用容器4800多个。容器技术的应用促进了中国人寿整个研发流程的优化和可管控,软件的迭代周期大大缩短,而且以容器部署的方式承载了应用,实现弹性伸缩,应用快速构建部署。本文将介绍中国人寿基于容器构建PaaS平台的实践。缓存

2017年初,中国人寿容器云建设开始启动,6月完成了研发测试云和生产云的搭建。搭建完成后,开始大面积推广研发测试云,生产云依然处在试运行阶段。2017年年末,咱们在研发环境上个迁移了54个系统,几乎全部Java类系统都在云上进行开发和测试。服务器

2018年6月,生产云上线了第一个真正意义上的关键业务系统——大健康平台,一个彻底基于云原生开发的系统。其后,咱们陆续在生产云上线了其余的关键业务系统。2019年初,部分中国人寿的分公司开始使用中国人寿PaaS平台。网络

截至目前,中国人寿有174台服务器,绝大部分是中高端的刀片机,托管了600多个微服务,运行了4000多个容器,有15个关键业务系统在生产云上运行。中国人寿新一代核心业务系统中的保全平台已经彻底上云,综合查询、批做业等业务模块也在7月份上线到生产云。另外,中国人寿面向客户的寿险APP和面向营销员的E店系统的部分微服务也运行在云上。同时,中国人寿的统一用户系统也运行在云上。架构

过去两年多的时间里,中国人寿PaaS云一直稳定运行,主要是由于Rancher比较稳定,且咱们在部署和运维上作了不少稳定性相关的保障。框架

本文的内容分为三部分,一是中国人寿为何要建设PaaS平台,二是咱们是怎么建设PaaS平台,最后是咱们如何利用PaaS平台。运维

为什么建设PaaS平台?微服务

中国人寿建设PaaS平台的目标很简单,就是一句话“为了更好地使用资源”。你们都应该知道,字越少,事儿越大。一句话的目标听来宽泛,咱们须要分解它,以便于更好地理解。

首先,什么是资源?咱们以为如下三类内容是咱们须要考虑的:一是“环境”,程序须要运行起来,就须要使用CPU、内存、磁盘操做系统,这些程序运行起来的须要的最基本的资源就是环境;光有环境你的程序可能仍是没法运行,大部分系统的运行还须要依赖中间件,好比web中间件、数据库、缓存服务等,这些是你须要的“技术依赖”;有了这些,你的程序能够运行起来了,但不必定能处理业务。好比咱们开发一个出单服务,这可能须要依赖保单服务、支付服务,这些是你的“业务依赖”。

上述三个就是咱们须要解决的资源问题,一是环境资源,二是技术依赖,三是业务依赖。

理解了什么是资源,咱们再去看什么是“更好地使用”。咱们认为它包括两个方面的内容,一是对人来讲,可以更便利地使用资源,最好能达到像使用水电同样,想用的时候就打开,想用多少就用多少,用完了就关上。二是对应用来讲,能更有效地利用资源,以达到节约资源和下降成本的目的。过去须要花10份的资源才能作成的事情,如今用5份资源就能完成。

用一句话总结中国人寿的PaaS平台,就是:基于“容器技术”和“自动化技术”为“人”和“应用”提供服务,解决“更好地使用资源”问题的“云平台”。

首先,这句话里包含了两大关键技术:“容器技术”和“自动化技术”。

咱们先来讲说以Docker为表明的容器技术。为何中国人寿要用Docker容器技术搭建PaaS平台,而非使用传统的虚拟化技术呢?

在这个项目启动以前,中国人寿已经大量地使用基于VMware的虚拟化技术了。那么,在搭建PaaS平台的时候,为何咱们不用VMware搭PaaS,而是用容器来进行搭建呢?主要有两个缘由。一是容器的“轻”,这个“轻”体如今各个方面。举个例子,容器是基于进程的资源管理,全部运行的容器共享一个宿主机上的资源,它是抢占式的。虚拟机像是切蛋糕,你把资源分配给它,不管它是否使用,它始终都会占用这个资源,其余人没法使用。容器要比虚机模式节省很是多的资源,咱们在后面会用一组数听说明这个问题。

第二个缘由也很是重要:容器是以应用为中心的,容器一旦启用,启动的是一个应用;而虚机是以环境为中心的 ,当你启动虚机的时候,它为你提供的是一个操做系统。两者之间区别很大。中国人寿PaaS平台的建设以应用为中心。诚然PaaS译为Platform as a Service,但我一直将它看成是APP as a Service去考虑这一问题。

中国人寿使用Rancher进行容器调度,目前用的是Rancher 1.6版本。2017年咱们开始搭建中国人寿PaaS云平台的时候,Rancher仍是1.0的版本。

咱们选择Rancher主要有三方面的缘由:

第一,Rancher足够简单,这个很是重要,Rancher的概念模型沿用的是Swarm的概念,上面是应用栈,底下是一组Service即微服务,这个概念与中国人寿“以应用为中心”的概念很是吻合,拿来即用,咱们很喜欢这个概念。

第二,Rancher功能足够,不复杂,但足够。做为一个金融企业的IT部门,咱们不须要那些花里胡哨的、没用的功能,Rancher产品自己使用简单,但提供的功能又能知足咱们的需求,这样很好。

第三个缘由也很是关键,就是稳定,咱们从Rancher 1.0版本一直使用到如今的1.6版本。在Rancher1.5以后,Rancher基本上没有过多功能上的变化,一直在完善功能和应用性,后面的几个版本都很是稳定,咱们从1.4版本开始上生产云,如今用的是1.6的版本。

说完了容器技术,接下来说第二个关键技术,以Jenkins为中心的自动化技术。

中国人寿的自动化技术主要用于持续集成和持续交付,咱们重点谈一下持续集成。

咱们认为,容器技术使持续集成技术格外强大。在容器技术以前,持续集成指的是,当代码发生变化,触发Jenkins上的一个Job,将程序编译打包后,发布到一个固定环境的固定中间件上,让它跑起来,你所能作的就是能让代码的变更触发程序的变化。而有了容器技术以后,你就能作到当环境变化后,经过触发持续集成搭建新的环境;当中间件依赖变化后,经过触发持续集成构建新的中间件;当业务应用架构变化后,例如从一个应用变成了十个应用,仍是能够经过触发持续集成拉起一套全新的应用体系。这点很是关键,由于咱们刚才说了,咱们想解决的问题是环境依赖、技术依赖和业务依赖,如今经过容器技术,经过docker-compose文件结合持续集成,咱们基本能够作到自动获取任何资源了。这是第一个关键点。

第二个关键点是持续集成使容器技术在中国人寿这样的企业普遍推广,它大幅下降了技术人员的使用门槛。中国人寿有各类产品、不一样的团队,并非全部的开发人员都有意愿去学习和掌握什么是PaaS、什么是Docker、什么是镜像、怎样作部署。但咱们又但愿全部人都能把容器用起来,那该怎么作呢?在公司内部推广的时候,每个须要对接进来的系统,咱们都会让PaaS团队为这个系统实现持续集成。持续集成将代码编译、构建镜像、镜像更新、应用商店等等所有自动化。如此一来,对研发项目组、对开发人员而言,他的工做没有发生任何大变化,只需更新代码便可,PaaS的使用均由持续集成自动化执行。

咱们的服务对象包括两类,一类是“人”,一类是“应用”。咱们但愿为“人”即项目经理、开发人员、运维人员提供研发运营模式上的革新,对“应用”提供微服务架构、无服务器架构等架构模式上的革新。

中国人寿PaaS平台旨在解决“是否更好地使用资源”的问题。咱们如何判断是否更好地使用资源呢?咱们能够将它量化为三项,即:是否是省时了、是否是省事了、是否是省钱了。

中国人寿有一组数据,它并不是整个平台的使用成果,而是中国人寿的一个分公司在平台迁移先后的数据成果,咱们将过去部署在虚机上的服务器和部署在云上进行了先后对比。

上图是平台的资源使用状况和效率提高状况。资源之因此节省,是由于容器基于争抢资源的模式,能极大避免虚机时代资源占用浪费的问题。效率的提高,则是因为持续集成极大地提高了研发及资源获取的效率。在中国人寿,咱们申请设备须要走流程进行审批,这个过程会花费大量的时间,如今能够经过持续集成实现“自管理”,开发人员在须要资源时,经过触发持续集成自动获取资源。

如何建设PaaS平台?

上图是咱们在2017年立项时画的,这张简单的图指导了中国人寿两年左右的PaaS平台建设工做。

咱们认为,中国人寿须要有一款本身的PaaS产品,咱们要基于这个产品搭建两朵云,一朵是开发测试云,一朵是生产云。两朵云有不同的定位。开发测试云解决的是资源利用率、管理成本和研发效率等问题,生产云主要解决微服务托管、快速部署、交付一致性、弹性伸缩等问题。

两朵云对应用的要求也不同。对于开发测试云而言,全部你能搬上开发测试云的应用,我都能帮你作容器化和自动化,你享受开发测试环境带来的种种优势便可。但对于生产云,咱们有更高的要求,生产云的应用必须是云原生的应用,必须作好微服务化改造,技术人员自身还必须知道如何利用云上的优势。因此两朵云对应用的要求是不同的。

咱们在开发测试云上作了持续集成,经过持续交付打通两朵云,两种云结合为DevOps夯实了基础。

上图是咱们对产品的定位,主要关注四个部分:第一部分是经过Rancher进行容器管理;第二部分经过Harbor进行镜像管理;第三部分是经过Git进行应用商店管理;最后一部分是是基于Jenkins搭建CI/CD,开发运维一体化。

这四部分明确以后,咱们经过中国人寿的稻客云门户集中管理底层云生态,再经过稻客云门户对接用户管理,统一权限、统一用户,进行界面上的集成,让用户在一个界面上完成全部事情,以及实现监控、日志等功能。

除此以外,稻客云门户还能够实现两个比较有意思的功能,一是多租户,一是快速部署。Rancher 1.6版本里没有基于用户层面的多租户隔离,它基于环境进行隔离,因此若是一个环境上不少用户,上层运行的应用能互相看到,和咱们理解的多租户隔离有所区别,因此中国人寿自行开发了多租户隔离功能。

快速部署是一个将发布流程极简化的功能,它屏蔽了持续集成以及PaaS、Docker的过程。咱们先前有个状况,分公司的同事但愿运行本身的应用,但又不想关注PaaS、Docker、容器包括持续集成等技术。为了解决这个问题,咱们开发了一个界面,让分公司选好应用程序,点击上传,再点击启动,咱们在容器上运行应用程序,再将容器IP返回去,就完成一次快速部署。

中国人寿在北京和上海各有一个数据中心,在上海和北京各部署了一套生产云,开发测试云只部署在北京。每朵云的管控节点均为独立部署,每一个管控节点托管不少个不一样的环境。当中有一个关键点,即环境的划分。一个环境里托管的主机越多,共享的应用就越多,从而规模效益越好,资源利用率也越高。但这样会使隔离性下降,当系统出现问题时,运维难度将呈几何级上升。

所以,在开发测试环境中,咱们追求尽可能扩大规模效益,在开发测试环境划分了5个大环境,全部机器部署在五个大环境当中,你们混合使用,资源利用率很高。但在生产环境中,咱们很是谨慎,一个关键系统独占一个环境。正如我先前所说的:两朵云的定位不一样,想解决的问题也是不一样的。

如何利用PaaS平台?

前文曾经提到,中国人寿PaaS平台的服务对象一类是“人”,一类是“应用”。“人”指的是项目经理、研发人员、运营人员,“应用”指的是微服务框架和无服务架构的支持。

对于项目经理而言,咱们但愿为他提供的变革是自服务。过去,项目经理的主要职责是找各类可以提供资源的对象,获取开发所需的资源。如今,咱们但愿对他进行变革,利用PaaS平台,让他经过平台、应用商店、持续集成实现自助服务,提高项目经理获取资源的效率。

对于开发人员而言,咱们但愿达到自动化。刚才前面几位嘉宾在分享的时候,提到了开发人员专一于业务逻辑开发。咱们认为开发人员要作的最基本的事情是开发代码、提交代码、测试、查看,开发人员只须要作这几件事情,剩下的活动好比编译、构建、部署、测试等彻底经过持续集成、自动化脚原本实现。

咱们经过持续交付,为运维人员提供软件交付上的变革。咱们在开发环境专门找了一台开发交付机部署Jenkins,这台机器打通了跳板区的镜像仓库,为每个在云上提交的项目实现交付任务。交付任务完成后,咱们将Jenkins上的用户权限提交给应用的应用经理及应用团队。当应用团队须要交付时,先将代码提交到交付机器上,再在Jenkins上执行交付任务,交付的Jenkins会抓取代码,打包编译、构建镜像,将发布镜像推到跳板区的镜像仓库,再由生产的运维同事在应用商店里选取应用,点击部署,一键部署后将整个应用从Rancher上拽起来。

文初提到中国人寿PaaS云平台上线的第一个业务应用——大健康平台,拥有45个微服务,运行200多个应用容器。由于大健康平台是第一个上线的业务应用,咱们对它进行了测试,从开始交付到运维人员现场部署一共花了8分钟。假如咱们手工按传统的方式去部署,200多个应用预计要花2周的时间。

中国人寿PaaS平台的微服务主要有三个场景。第一个场景是应用彻底微服务化,所有应用均跑在容器上。咱们为这个应用拽取两个应用栈,让它能实现蓝绿发布与灰度部署,这两个栈是同样的,栈里面的微服务经过服务名进行通讯,这一功能由Rancher实现。对外提供服务则是在Rancher界面上配置一个内部代理,将内部代理固定到主机,在PaaS环境外配置一个外部代理,指向两个栈的内部代理。

第二个场景就是部分应用容器化,一个应用在进行微服务改造后,一半跑在传统环境上,另一半跑在云上。这种状况建议引入两个关键组件,应用网关和服务发展中心。

里面有很是关键的一点,咱们使用的是Rancher 1.6提供的扁平网络模式。在这种模式下,每一个容器均拿到一个真实的IP,在它们的IP及PaaS环境外部,公司其余设施IP互通。这样设置以后,假设应用拆分出三个微服务,均部署在云上,三个微服务都注册到服务注册发现中心,微服务和过去的传统应用之间的通讯直接经过IP,经过服务注册发现中心便可直接互通。云外面的应用须要访问微服务或者是传统应用,经过上面的应用网关便可访问。

最后一种模式很是简单,它可能不是微服务,就只是一个普通应用,需求是要在云上进行扩容。例如,我有一个业务几月几日开始,将产生大量访问,我须要扩容,怎么办?这是最简单的一个场景,咱们把应用容器化以后,做为服务在PaaS进行部署,上层部署一个内部代理,将外部的负载指向两边便可。

编者按: 本文是根据中国人寿张青南在Rancher于2019年6月20日在北京举办的第三届企业容器创新大会(Enterprise Container Innovation Conference,简称ECIC)上的演讲整理而成。本届ECIC规模宏大,全天共设置了17场主题演讲,吸引了近千名容器技术爱好者参加,超过10000名观众在线观看。您可在Rancher公众号中阅读更多大会演讲实录的文章。

相关文章
相关标签/搜索