1、背景redis
金融市场瞬息万变,高效的业务支撑能力离不开与时俱进的IT系统。随着公司业务的发展,IT系统数量在不断增多,同时每一个系统的复杂度也在不断提升。即使在微服务改造以后,IT系统的开发、交付和运维依旧面临着如下难题: 开发:代码量不断增长、协同开发难度加大 多样化的编译和运行环境 交付:更快的交付频率 按时发布、按需发布 运维:微服务化后带来的架构复杂度提升 产品总体部署和运维难度增长 这再次印证了软件工程的世界里“没有银弹”。微服务化解决了IT系统紧耦合、强技术依赖、难维护的问题,可是却同时带来了新的问题。在咱们看来,这是一个螺旋上升的过程。数据库
随着容器技术的发展,容器技术与微服务逐渐碰撞出火花,业界也广泛认为容器技术和微服务是“天生一对”。在2017年,容器化微服务成为了咱们新的选择,优化了开发、交付和运维方式和流程,并一直推进着公司敏捷和DevOps的发展。安全
2、华泰容器云简介网络
2017年,随着容器和容器编排技术的日趋成熟,咱们建设了符合实际应用场景的“容器云平台”。容器云平台采用时下最流行的容器技术Docker和已成行业标准的容器编排工具Kubernetes建设而成,经过构建、服务、流水线、监控、日志等功能有效承载了微服务、CI/CD、DevOps。架构
2.1 微服务 如今愈来愈多的金融企业使用微服务架构,以应对快速变化的互联网金融挑战。经过微服务改造把应用拆分红不少细小的服务,每一个服务专一于单一的功能,服务和服务之间有明确的边际,使用轻量级的通信协议进行沟通,实现某个相对单一的功能。微服务的到来下降了巨大单体式应用复杂度、每一个服务的开发技术自有选择、每一个服务可独立扩展、每一个服务可独立部署。但使用微服务架构不要低估细粒度分布式应用治理与运维的复杂度。而结合容器技术的微服务则能够给企业带来更高的资源使用率,更加快捷的迭代变动,更加方便的快速扩容能力。负载均衡
2.1.1 容器是微服务的最佳载体 经过容器将微服务的运行时标准化,每一个容器承载一个服务,而后像搭积木同样组合起来,让彼此通讯,从而就能很轻松地模拟出复杂的微服务架构。运维
2.1.2 利用Kubernetes支撑微服务 Kubernetes在支撑容器平台和微服务的竞争中依然胜出。传统的应用部署方式是经过插件或脚原本安装应用。这样作的缺点是应用的运行、配置、管理、全部生存周期将与当前操做系统绑定,这样作并不利于应用的升级更新/回滚等操做。Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,一般要部署该应用的多个实例以便对应用请求进行负载均衡。分布式
在Kubernetes中,咱们能够建立多个容器,每一个容器里面运行一个应用实例,而后经过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不须要运维人员去进行复杂的手工配置和处理。微服务
2.1.3 微服务运营管理 1.配置管理 相同的微服务,部署在不一样的环境,如不一样的生产中心、灾备中心、测试迭代环境、并行测试环境等,须要有不一样的配置,容器云平台经过Kubernetes特有的PV/PVC功能,结合配置中心的统一管理,方便实现配置管理,真正实现“一次打包,处处运行”。工具
自动扩缩容和灰度发布 利用Kubernetes和容器,华泰容器云平台能够很好的的实现治理微服务须要的自动扩缩容和灰度发布。根据实际的业务需求和策略,容器云平台经过Kubernetes自动“调整”其“弹性资源”的管理服务。经过弹性伸缩功能,业务团队可设置定时、周期、自定义的监控策略,敏捷快速地增长或减小“弹性资源”,并完成实例配置,保证业务平稳健康运行。在知足业务需求高峰增加时无缝地增长“弹性资源”,并在业务需求降低时自动减小“弹性资源”以节约成本。一样结合负载均衡软件,咱们可让流量逐步指向新扩容出来的新版本的微服务,快捷的实现灰度发布全过程。
健康检查 当微服务数量不断增长后,健康检查和服务自动修复是一项重要工做,华泰容器云平台利用容器的特性,提供了容器健康监控和服务自动修复的功能,减小了微服务过程当中运维的压力。
2.2 CI/CD 2.2.1 持续集成 持续集成是一种软件开发实践,开发人员经过常常性地自动化集成他们的工做,从而尽早地发现IT系统集成错误。持续集成一般包括以下过程:统一的代码库、自动触发、自动构建、单元测试、自动化部署、自动化集成测试等等,这些工做经过Jenkins虽然也能完成,可是须要大量编码工做,并且强依赖底层资源和环境,这使得开发和测试人员花费了大量精力在流程的对接上,而容器云平台的建成大大改善了这种状况。开发和测试人员在容器云平台经过图形化的界面操做即可以完成持续集成的整套流程,将精力聚焦在软件开发细节和测试用例上使用容器云平台不只屏蔽了底层资源,大大简化了运行时环境准备工做,结合容器的弹性,还大大提升了资源利用率。下图展现了容器云平台的持续集成流程:
2.2.2 持续交付 持续交付是持续集成的天然延续,它完成了产品从开发测试到生产的“质的蜕变”。利用容器云平台上的流水线,咱们完成了从提交代码自动化触发构建到最终自动更新生产环境某个微服务版本的整套交付流程。在开发测试环境构建出的应用镜像经过流水线同步至预发布环境,通过测试后再同步至生产环境部署,咱们作到了在保证交付质量的前提下,加快交付速度,从而更快地反馈市场需求,赋能业务发展。下图是持续交付流程图:
2.3 DevOps DevOps 主要用于开发、测试以及运维之间的协做管理,而且经过自动化流程,更加快捷、频繁、易重复且可靠的构建软件、测试及发布部署。持续集成和持续交付是实现DevOps的一部分,但不等于DevOps。DevOps应该还包括一套完整的持续部署以及持续运营的完整开发测试运维一体化的DevOps方法和工具。DevOps不是必定要用容器,可是有了容器,DevOps变得更加简单。能够说容器云平台的建设既是DevOps实践,也推进了华泰证券DevOps的落地: 1.借助容器云平台提供敏捷开发能力,让开发端更加敏捷; 2.经过容器云平台,实现开发测试生产环境一致性,逐步创建标准化、一致性的开发、测试、运维环境,专一于业务应用开发,不分心于资源管理; 3.实现应用全生命周期管理,知足应用开发、自动化部署、自动化运维等应用服务全生命周期管理需求; 4.基于容器云平台的能力,实现应用服务的弹性伸缩、灰度发布等能力,知足多种业务需求。
3、华泰容器云的落地路径
容器云平台的落地凝聚了不少特点功能,这些功能通过设计、验证和实践,有效支撑了容器云平台稳定、高效地运行,下面简单介绍4个落地路径:网络模式、弹性伸缩、有状态服务、应用市场。
3.1 网络模式 为了让用户应用平滑地迁移至容器,好比一些传统应用或者监控应用须要直接使用Host的物理网络,也为了保障网络管理的一致性与网络性能的高效,咱们选用了Macvlan网络模式。Macvlan自己是linxu kernel的模块,本质上是一种网卡虚拟化技术。其原理是在宿主机物理网卡上虚拟出多个子网卡,并分配独立的 IP 地址和 MAC 地址,把子网卡分配给容器实例来实现实例与物理网络的直通,并同时保持容器实例的隔离性。Host 收到数据包后,则根据不一样的 MAC 地址把数据包从转发给不一样的子接口。在网络上看起来容器直接链接到物理网络,和物理机和虚机没有区别。Macvlan共有4种模式,咱们使用的是高性能的Macvlan Bridge,以下图所示:
3.2 弹性伸缩 弹性伸缩是容器云的重要特性和业务场景。容器的封装性使其横向扩展很是方便,可是想作好弹性伸缩这还远远不够。好比要作到基于CPU和内存负载的弹性伸缩,不只要作好容器的监控,还要配合负载均衡、灰度发布等功能,最重要的是弹性伸缩的时机,这里面有些是技术问题,而有些须要根据不一样业务作定制化处理。还有一点实践经验,善用Kubernetes的Liveness和Readiness Probes对增长应用程序的稳定性颇有帮助。经过健康检查保障微服务之间的启动顺序,当应用程序准备好的时候,它们才会开始服务通讯,这使得自动调度、滚动更新和弹性伸缩运行得十分顺利。
3.3 有状态服务 众所周知,由于容器自己的磁盘空间不大,并且容器的可写层数据在容器重启后会丢失,因此容器没办法很好地承载有状态服务,而是被普遍应用于无状态的服务。可是咱们的容器云平台基于容器和容器编排技术,并结合分布式存储技术,有效支撑了有状态服务,好比容器化RDS。其核心思想是计算与存储分离,将数据库运行于容器中,而将其数据在外部分布式存储中持久化。结合多种调度策略以及快照功能,可按需建立知足不一样业务场景的数据库服务。
3.4 中间件市场 随着愈来愈多的应用系统相继建设,对一些公共中间件的需求愈来愈强烈,例如redis、kafka等等。同时这些中间件的运维工做也愈来愈繁重,申请底层资源、安装配置中间件、调试等繁琐、重复性的工做占据着中间件运维人员的大部分时间,容器化的中间件出现大大下降了中间件维护人员的工做量,无需关心底层资源和界面化的配置操做显著提升了中间件的发放效率。后续中间件的自服务是咱们的努力方向。
容器云平台在敏捷转型之下应运而生,也很好地支撑了IT建设的敏捷转型。开发、测试和运维人员经过容器云平台真正实现了高效协做,造成了DevOps的最佳实践。咱们打算在后续的容器云平台建设上更多地考虑云原生的思路,推进以容器为中心的云原生生态,赋能金融科技发展。