南京柯基数据科技有限公司成立于2015年,提供一站式全生命周期知识图谱构建和运维、智能应用服务,致力于“链接海量数据,从大数据中挖掘智慧“。帮助企业运用知识图谱技术打造世界领先的认知工作自动化智能引擎。
目前在药企、医疗机构、军工院所、科技情报及出版等领域服务了数十家大客户,积累了丰富的行业知识图谱运用开发经验。典型客户有国防科技大学、中国航空、中国电科等。
大家好,我是南京柯基数据的解决方案架构师刘占峰,云原生技术在交付运维上的优势让我获益匪浅。作为项目合作伙伴,Rainbond持续助力柯基多套业务系统的快速开发和交付部署。在使用Rainbond之前,由于业务迭代周期短,涉及组件多,平台版本更新耗时耗力,服务运维难度大。很多项目中,客户的运维能力储备不足,基于传统的交付和管理方式,客户对于业务运维根本接管不起来,只要风吹草动,必须要我们派工程师到现场解决。针对交付运维存在的问题,各个业务平台开始着手云原生改造。
最开始我们尝试自己搭建公司内部的开发测试环境,过程中遇到的两个小坑。
第一个坑是:环境搭建完成后使用体验却不佳,所有涉及到磁盘读写的操作都显得异常卡顿,集群中的 Etcd 集群日志中不断报告处于 “read_only” 状态,随之而来的是服务器负载的不断飙升。
我们带着怀疑的心情求助了Rainbond开源社区,经过多方面的排查,我们把目光落在了磁盘的IO性能上。替换了高性能的磁盘之后,我们重新安装了整个开发测试环境,磁盘性能的提升的确解决了 Etcd 集群时常不工作的问题。
第二个坑是:使用了共享存储的服务却依然处于读写极慢的状态,这着实令在场的所有工程师又开始头大了。确认了硬件性能之后,开始将目光放在操作系统配置参数上面,操作系统内核在不断报告与共享存储有关的错误:
NFS:__nfs4_reclaim_open_state: Lock reclaim failed!指征 nfs client 和 nfs server 之间存在同步差异,差得多了就会开始报警。经过不断摸索,工程师们终于锁定了与 nfs 性能有关的两个系统参数,Linux nfs 客户端对于同时发起的NFS请求数量进行了控制,若该参数配置较小会导致 IO 性能较差。
echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
修改了这两个参数后,共享存储的性能得到了显著的提升,令人摸不到头脑的内核报警信息也随之消失。开发测试环境终于可以顺畅使用了。
接下来面临新的挑战是如何将我们的多套业务系统顺利迁移到 Rainbond 上去,所幸Rainbond 的使用很简单,整体学习梯度并不陡峭,我们很轻松把业务系统分批的部署在 Rainbond 上去。然而 Rainbond 工程师组织的云原生应用评估却指出了业务系统有多处不符合云原生特征之处,提出了一些整改意见。在整改过程中,我们对云原生也有了更深入理解。
L1级云原生应用特征——可伸缩性 云原生应用注重部署组件所使用的资源类型,像数据库类型、消息队列类型的服务组件对在Rainbond平台上,应该使用StatefulSet资源类型进行部署。通过对服务组件定义有状态或者无状态的部署类型,来规定使用StatefulSet或Deployment资源类型来部署实例。
L1级云原生应用特征——可伸缩性 通过程序数据分离等手段,实现应用程序的无状态化,就让云原生应用可以随意横向伸缩多个实例。实例数量的伸缩一方面使云原生应用具备了高可用性,也直接影响其抗并发的能力。Rainbond还提供自动伸缩功能,实现削峰填谷。
${GATEWAY_PORT:8083}
以往我们都将服务的配置项写成固定的值,这样的做法使得我们每到一个新的部署环境,都要重新更改大量的配置文件。Rainbond工程师指出,云原生应用应该将配置保存到环境当中,以环境变量加默认值的方式声明出来。而大多数需要修改的配置项,如不同组件之间的连接地址信息,就可以通过Rainbond依赖关系中的连接信息来相互注入,省去了大量的配置工作。L1级云原生应用特征——可配置性 云原生应用推崇的一种最佳实践,就是将配置保存在环境之中。在不同的运行环境中,利用环境变量来进行配置,是一种非常好的体验。Rainbond支持为每个服务组件设置环境变量,也可以基于配置组功能,批量配置环境变量。
L1级云原生应用特征——可配置性 作为对环境变量的补充,Rainbond提供了一系列可以自动生成的环境变量,这些特定的环境变量极大方便了用户的使用。
tzdata
软件包,我们就可以基于 TZ=Asia/shanghai
这样一个环境变量的配置,完成时区的配置了。L1级云原生应用特征——基础可观测性 统一时间在运维领域十分重要,在云原生领域,时区的配置也可以基于环境变量进行配置。
L1级云原生应用特征——高容错性 在提高容错性方面,云原生应用需要配置合理的健康检查策略。这有利于快速发现组件的异常状况,并根据事先配置好的策略进行自动化的重启、下线等操作。
L1级云原生应用特征——高容错性 云原生应用强调容错性,这不仅仅包含在某些错误被触发时,应用本身和平台是否提供自动的处理手段,也包括在错误无法被处理时,提供更好的可观测性,来提醒运维人员介入。
L2级云原生应用特征——前后端分离配置 Rainbond提供了便捷的方式来配置VUE等前端项目运行的Nginx,配置后只需要将前后端组件依赖起来,就可以实现API的转发。而不需要每部署一次,都要根据后端服务的地址变更而重新编译。
L2级云原生应用特征——一键安装 借助于 Rainbond 提供的应用发布能力,我们可以将运行在平台上的企业应用一键发布为一个应用模版。我们对应用模版最殷切的期待,是可以将这个应用模版以最简单的操作方式、尽可能少的人为调试即可安装成为一个应用。
L2级云原生应用特征——一键升级 Rainbond 的应用商店机制支持基于应用模板的版本对已安装的应用进行升级操作。平台的升级机制解决了服务组件版本、配置、依赖关系等绝大部份属性的版本管理问题。尚需应用开发人员关注的问题在于数据的版本管理。
应用完成改造后,通过Rainbond可以查看我们产品的拓扑图和依赖关系。
在实际项目当中,我们产品流转了三个环境:
开发环境:我们在公司内部,使用开源版本的Rainbond在公司服务器上搭建了开发测试环境,我们开发团队通过源码构建,很快将业务系统搬上了Rainbond。通过一段时间的测试和迭代,我们拿出了首个版本的应用模板,并使用离线导出功能导出了离线包。
准入测试环境:利用光盘等介质,仅需一个工程师将离线包导入了最终客户提供的私有云准入测试环境,导入后产品一键安装。对于客户反馈的意见,我们在开发环境中导出新的离线包,并再次导入了准入测试环境,进行了一键升级,经过多次迭代最终达到客户的准入要求。
生产环境:最终生产环境是完全由客户管理,我们仅需要提供经过准入的应用模板离线包以及必要的文档,客户就可以非常快速的将我们的产品完成部署和升级。
相对于以前的交付方式和流程,接入Rainbond体系给我们带来了这些更好的交付体验:
最终仅用一个星期,我们就完成了各个业务系统的云原生改造工作,并测试通过云原生应用标准规范认证L2级。之前项目交付过程中交付难、维护难的问题,是我们最大的隐形成本,客户只会看最终交付效果,并不会为交付过程而买单。
做了云原生改造后,之前需要派驻交付团队1个星期才能交付完的项目,现在一个基础的运维工程师刻盘过去安装,1小时就可以搞定。并且用户可以通过Rainbond的可视化界面快速上手掌握,95%的运维问题都可以自行解决,或者远程指导客户操作。
「云原生应用标准规范认证」为软件厂商的应用交付过程中的便利性、交付客户后的可维护性、以及必要时的可迁移性等需求,提供可信赖的技术背书。现阶段,「云原生应用标准规范认证」分为L1、L2、L3级,在应用交付及交付管理发挥重要作用。
Rainbond作为开源的云原生应用管理平台,是「云原生应用标准规范」落地实施的最佳工具。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。