容器云在证券行业的探索与实践

【编者的话】随着证券行业的发展,支撑业务的IT系统也在逐渐壮大。为了快速响应业务需求,敏捷交付成为了IT系统建设新的要求。容器技术作为敏捷交付的最佳拍档,已经深刻影响了持续集成和持续交付,也改变着IT系统的开发、交付和运维。

背景

金融市场瞬息万变,高效的业务支撑能力离不开与时俱进的IT系统。随着公司业务的发展,IT系统数量在不断增多,同时每个系统的复杂度也在不断提高。即便在微服务改造之后,IT系统的开发、交付和运维依旧面临着以下难题:

开发:
  • 代码量不断增加、协同开发难度加大
  • 多样化的编译和运行环境

交付:
  • 更快的交付频率
  • 按时发布、按需发布

运维:
  • 微服务化后带来的架构复杂度提高
  • 产品整体部署和运维难度增加

这再次印证了软件工程的世界里“没有银弹”。微服务化解决了IT系统紧耦合、强技术依赖、难维护的问题,但是却同时带来了新的问题。在我们看来,这是一个螺旋上升的过程。

随着容器技术的发展,容器技术与微服务逐渐碰撞出火花,业界也普遍认为容器技术和微服务是“天生一对”。在2017年,容器化微服务成为了我们新的选择,优化了开发、交付和运维方式和流程,并一直推动着公司敏捷和DevOps的发展。

华泰容器云简介

2017年,随着容器和容器编排技术的日趋成熟,我们建设了符合实际应用场景的“容器云平台”。容器云平台采用时下最流行的容器技术Docker和已成行业标准的容器编排工具Kubernetes建设而成,通过构建、服务、流水线、监控、日志等功能有效承载了微服务、CI/CD、DevOps

微服务

现在越来越多的金融企业使用微服务架构,以应对快速变化的互联网金融挑战。通过微服务改造把应用拆分成很多细小的服务,每个服务专注于单一的功能,服务和服务之间有明确的边际,使用轻量级的通讯协议进行沟通,实现某个相对单一的功能。微服务的到来降低了巨大单体式应用复杂度、每个服务的开发技术自有选择、每个服务可独立扩展、每个服务可独立部署。但使用微服务架构不要低估细粒度分布式应用治理与运维的复杂度。而结合容器技术的微服务则可以给企业带来更高的资源使用率,更加快捷的迭代变更,更加方便的快速扩容能力。

容器是微服务的最佳载体

通过容器将微服务的运行时标准化,每个容器承载一个服务,然后像搭积木一样组合起来,让彼此通信,从而就能很轻松地模拟出复杂的微服务架构。

1.jpg


图1 容器中的微服务
  1. 容器天然做到了应用之间相互隔离,在保证安全隔离的同时,可以有效提高资源使用率;
  2. 为微服务的快速扩容提供有效的支撑,容器启动非常快速,秒级实现,通过镜像可以快速启动多个微服务;
  3. 对软件和其依赖环境的标准化打包,保证了微服务多个副本之间的绝对一致性,使得我们可以方便运维管理更多的微服务;
  4. 容器占用资源少、部署快,每个微服务应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,为每个微服务单独构建镜像,通过镜像可以独立发布一个微服务,不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。

利用Kubernetes支撑微服务

Kubernetes在支撑容器平台和微服务的竞争中依然胜出。传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作。Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

微服务运营管理
  1. 配置管理,相同的微服务,部署在不同的环境,如不同的生产中心、灾备中心、测试迭代环境、并行测试环境等,需要有不同的配置,容器云平台通过Kubernetes特有的PV/PVC功能,结合配置中心的统一管理,方便实现配置管理,真正实现“一次打包,到处运行”。
  2. 自动扩缩容和灰度发布,利用Kubernetes和容器,华泰容器云平台可以很好的的实现治理微服务需要的自动扩缩容和灰度发布。根据实际的业务需求和策略,容器云平台通过Kubernetes自动“调整”其“弹性资源”的管理服务。通过弹性伸缩功能,业务团队可设置定时、周期、自定义的监控策略,敏捷快速地增加或减少“弹性资源”,并完成实例配置,保证业务平稳健康运行。在满足业务需求高峰增长时无缝地增加“弹性资源”,并在业务需求下降时自动减少“弹性资源”以节约成本。同样结合负载均衡软件,我们可以让流量逐步指向新扩容出来的新版本的微服务,快捷的实现灰度发布全过程。
  3. 健康检查,当微服务数量不断增加后,健康检查和服务自动修复是一项重要工作,华泰容器云平台利用容器的特性,提供了容器健康监控和服务自动修复的功能,减少了微服务过程中运维的压力。

CI/CD

持续集成

持续集成是一种软件开发实践,开发人员通过经常性地自动化集成他们的工作,从而尽早地发现IT系统集成错误。持续集成通常包括如下过程:统一的代码库、自动触发、自动构建、单元测试、自动化部署、自动化集成测试等等,这些工作通过Jenkins虽然也能完成,但是需要大量编码工作,而且强依赖底层资源和环境,这使得开发和测试人员花费了大量精力在流程的对接上,而容器云平台的建成大大改善了这种情况。开发和测试人员在容器云平台通过图形化的界面操作便可以完成持续集成的整套流程,将精力聚焦在软件开发细节和测试用例上使用容器云平台不仅屏蔽了底层资源,大大简化了运行时环境准备工作,结合容器的弹性,还大大提高了资源利用率。下图展示了容器云平台的持续集成流程:

2.jpg


图2 持续集成

持续交付

持续交付是持续集成的自然延续,它完成了产品从开发测试到生产的“质的蜕变”。利用容器云平台上的流水线,我们完成了从提交代码自动化触发构建到最终自动更新生产环境某个微服务版本的整套交付流程。在开发测试环境构建出的应用镜像通过流水线同步至预发布环境,经过测试后再同步至生产环境部署,我们做到了在保证交付质量的前提下,加快交付速度,从而更快地反馈市场需求,赋能业务发展。下图是持续交付流程图:

3.png


图3 持续交付

DevOps

DevOps主要用于开发、测试以及运维之间的协作管理,并且通过自动化流程,更加快捷、频繁、易重复且可靠的构建软件、测试及发布部署。持续集成和持续交付是实现DevOps的一部分,但不等于DevOps。DevOps应该还包括一套完整的持续部署以及持续运营的完整开发测试运维一体化的DevOps方法和工具。DevOps不是一定要用容器,但是有了容器,DevOps变得更加简单。可以说容器云平台的建设既是DevOps实践,也推动了华泰证券DevOps的落地:
  1. 借助容器云平台提供敏捷开发能力,让开发端更加敏捷;
  2. 通过容器云平台,实现开发测试生产环境一致性,逐步建立标准化、一致性的开发、测试、运维环境,专注于业务应用开发,不分心于资源管理;
  3. 实现应用全生命周期管理,满足应用开发、自动化部署、自动化运维等应用服务全生命周期管理需求;
  4. 基于容器云平台的能力,实现应用服务的弹性伸缩、灰度发布等能力,满足多种业务需求。

4.jpg


图4 容器云平台上的DevOps

华泰容器云的落地路径

容器云平台的落地凝聚了很多特色功能,这些功能经过设计、验证和实践,有效支撑了容器云平台稳定、高效地运行,下面简单介绍4个落地路径:网络模式、弹性伸缩、有状态服务、应用市场。

网络模式

为了让用户应用平滑地迁移至容器,比如一些传统应用或者监控应用需要直接使用Host的物理网络,也为了保障网络管理的一致性与网络性能的高效,我们选用了Macvlan网络模式。Macvlan本身是Linxu Kernel的模块,本质上是一种网卡虚拟化技术。其原理是在宿主机物理网卡上虚拟出多个子网卡,并分配独立的IP地址和MAC地址,把子网卡分配给容器实例来实现实例与物理网络的直通,并同时保持容器实例的隔离性。Host 收到数据包后,则根据不同的MAC地址把数据包从转发给不同的子接口。在网络上看起来容器直接连接到物理网络,和物理机和虚机没有区别。Macvlan共有4种模式,我们使用的是高性能的Macvlan Bridge,如下图所示:

5.jpg


图5 Macvlan Bridge

弹性伸缩

弹性伸缩是容器云的重要特性和业务场景。容器的封装性使其横向扩展非常方便,但是想做好弹性伸缩这还远远不够。比如要做到基于CPU和内存负载的弹性伸缩,不仅要做好容器的监控,还要配合负载均衡、灰度发布等功能,最重要的是弹性伸缩的时机,这里面有些是技术问题,而有些需要根据不同业务做定制化处理。还有一点实践经验,善用Kubernetes的Liveness和Readiness Probes对增加应用程序的稳定性很有帮助。通过健康检查保障微服务之间的启动顺序,当应用程序准备好的时候,它们才会开始服务通信,这使得自动调度、滚动更新和弹性伸缩运行得十分顺利。

6.jpg


图6 弹性伸缩

有状态服务

众所周知,因为容器本身的磁盘空间不大,而且容器的可写层数据在容器重启后会丢失,所以容器没办法很好地承载有状态服务,而是被广泛应用于无状态的服务。但是我们的容器云平台基于容器和容器编排技术,并结合分布式存储技术,有效支撑了有状态服务,比如容器化RDS。其核心思想是计算与存储分离,将数据库运行于容器中,而将其数据在外部分布式存储中持久化。结合多种调度策略以及快照功能,可按需创建满足不同业务场景的数据库服务。

7.jpg


图7 计算与存储分离

中间件市场

随着越来越多的应用系统相继建设,对一些公共中间件的需求越来越强烈,例如Redis、Kafka等等。同时这些中间件的运维工作也越来越繁重,申请底层资源、安装配置中间件、调试等繁琐、重复性的工作占据着中间件运维人员的大部分时间,容器化的中间件出现大大降低了中间件维护人员的工作量,无需关心底层资源和界面化的配置操作显著提高了中间件的发放效率。后续中间件的自服务是我们的努力方向。

8.jpg


图8 中间件市场

总结和展望

容器云平台在敏捷转型之下应运而生,也很好地支撑了IT建设的敏捷转型。开发、测试和运维人员通过容器云平台真正实现了高效协作,形成了DevOps的最佳实践。我们打算在后续的容器云平台建设上更多地考虑云原生的思路,推动以容器为中心的云原生生态,赋能金融科技发展。

原文地址:https://www.cnblogs.com/alauda/p/10489458.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


前言我们于2022年5月宣布推出 AmazonDevOpsGuruforServerless ,这是面向AmazonDevOpsGuru https://aws.amazon.com/devops-guru/的全新功能。通过此功能,开发人员能够提高无服务器应用程序的运行性能和可用性。该产品链接可点击:https://aws.amazon.com/devops-guru/fe
GIT、GITLAB、GITHUB、GITLIBGit是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越...
初识JFrog Artifactory背景在软件项目开发中,一个项目常常依赖于大量的外部库,而这些外部库又在不断的进行版本更新,特别是在当前微服务开发越来越流行的情况下,一个服务依赖于多个服务,如何管理依赖库以及依赖版本,确保开发有序进行呢?JFrog ArtiFactoryArtiFactory是一款二进制存储管理工具,用来管理构建构建工具(如:gradle)等所依赖的二进制仓库,以方...
在删除文件夹的时候,可能会遇到文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开,请关闭该文件夹或或文件,然后重试。这类无法关闭删除文件夹的情况,如下图所示。 解决这个的关键是,找到是哪个程序在使用该文件夹,把这个程序关闭掉就行了。 但有时说实在的并不好找。 下面来介绍一个方便的找到这些程序的方法。 首先按ctrl+shitf+esc快捷键,打开任务管理器。然后...
xcopy 若目标盘上不存在此子目录,而在目标盘的结束符又不以""为结束,则将提示:does destination specify a file name or directory name on the target[f=file,d=directory]?在目标盘上创建文件[按下]还是创建子目录[按下d] ?应选择d键如何在命令中指定copy的是一个文件或者目录?而不用再手动输入F或...
DevOps软件开发工艺解读随着业务复杂化和人员的增加,开发人员和运维人员逐渐演化成两个独立的部门,他们工作地点分离,工具链不同,业务目标也有差异,这使得他们之间出现一条鸿沟。而发布软件就是将一个软件想从鸿沟的这边送去那边,这之中困难重重。另一方面,行业竞争更加激烈,无论是客户还是公司自身,都要求软件能快速发布,频繁修改,而上边所说的这种隔阂,阻碍了开发团队的生产力,成了企业亟待解决的难题。面对...
创建任务创建任务比较简单,这里我们创建自由风格项目:General信息这里填写项目或任务的基本信息,如下:GitBucket这里我们用到的就以下两点,一个是参数化构建:构建的时候可以指定部分参数,比如这里我们这里指定要构建的分支作参数,第二个是丢弃旧的构建:这样每次构建都会丢弃之前历史构建,防止jenkins构建项目过多导致内存泄漏等问题:源码管理源码管理主要是填写我们要构建的...
一、在任务设置-构建触发器模块,选中“Build periodically”二、然后在日程表里输入你的定时构建时间,输入的时间语法参考如下:1、时间字段遵循cron的语法,每行由TAB或空格分隔的5个字段组成:MINUTE HOUR DOM MONOW DOW - 分钟:小时内的分钟数(0-59) - 小时 :一天中的小时(0-23) - DOM:月份的日子(1-31) ...
DevOps进阶(九)使用assembly plugin实现自定义打包assembly plugin的使用方式比较简单,主要有:1. 修改pom.xml pom.xml中设置如下:<build> <plugins> <plugin> <artifactId&g
<h2 id="1-操作环境"><strong>1. 操作环境</strong></h2>1. Windows:win72. JenkinsJenkins 1.6193. JavaJDK_1.7.0_64bit.exe4. Tomcatapache-tomcat-8.
在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。(2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。一.find命令基本格式:find path expres......
走近DevOps工程师我们之前已经听到很多谈论DevOps和DevOps世界的最新趋势的事情,但是就DevOps工程师本身,到底干些什么呢?在最纯粹的存在形式上来说,DevOps工程师是为了加快开发和运营团队之间的交付效率而存在的桥梁。DevOps工程师在软件生命周期中能带来什么?在传统的交付周期中,软件开发人员会在经年累月的编写代码后,将软件交给QA团队进行测试,然后将最终版本交给运营...
1、关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit。例如我jenkins的地址http://localhost:8080/,那么我只需要在浏览器地址栏上敲下http://localhost:8080/exit 网址就能关闭jenkins服务.2、重启Jenkieshttp://localhost:8080/restart3、重新加载配置信息http...
   我们在执行Jenkins的项目构建的时候一般都是通过web管理界面中的”构建”来执行项目构建操作,但是除此之外我们还可以通过项目配置中的”构建触发器”来触发构建操作,其中”构建触发器”有一种方式是通过配置令牌远程触发项目构建;要启用Token(令牌)远程触发项目构建首先要保证Jenkins服务安装了build-token-root 插件,...
maven三种打包插件maven有多种可以打包的插件,如下: plugin function 官网 maven-jar-plugin maven 默认打包插件,用来创建 project jar maven-shade-plugin 用来打可执行包,executable(fat) jar http://maven.apache.org/plug...
Linux下查看和添加环境变量$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。编辑你的 PATH 声明,其格式为:PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后......
贾磊:高级质量经理&敏捷教练曾就职于外企、国企、大型上市企业等,担任过测试工程师、测试经理、项目经理、敏捷教练、质量总监、高级质量经理等岗位。是一名敏捷变革的爱好者和践行者。爱好网球、羽毛球。正文原文链接:https://www.scaledagileframework.com/continuous-explorati
在IT流行语的字母组合中,DevSecOps是一个很容易让人混淆的缩写。DevSecOps是一个特定工具吗?是否有DevSecOps流程或最佳实践?DevSecOps应该成为内部IT部门的优先事项,还是更广泛的公司理念?如果一个公司已经利用了DevOps的流程和技术栈,那么它应该升级到DevSecOps吗?或者这只
企业项目开发流程商城1.1B2C直销商城商家与会员直接交易(BusinessToCustomer)1.2B2B批发商城商家与商家直接交易1.3B2B2C购物平台商家和会员在另一个商家提供的平台上面进行交易1.4C2B定制商城会员向商家发起定制商品的需求,商家去完成。1.5O2O线上线下
jenkins清除工作空间报错 错误如下: Error:WipeOutWorkspaceblockedbySCM   解决方法:进入jenkins服务器,进入workspace,手动rmcd/var/jenkins_home/workspace  ===================注释==================如果你的启动命令如下:【进行了外部目录的挂载