用户案例 | 腾讯医疗资讯平台云原生容器化之路

此账号已注销
• 阅读 569

作者

yuhuliu,腾讯研发工程师,关注存储、大数据、云原生领域。

摘要

医疗资讯业务在高速发展过程中,形成了覆盖不同场景、不同用户、不同渠道的几十个业务,以及上千个服务。为了高效满足用户多样化的需求,医疗技术团队通过 TKE 上云,使用 Coding DevOps 平台,以及云上可观测技术,来提升研发效率、降低运营运维成本。本文介绍我们在上云过程中一些实践和经验,以及一些思考和选择。

业务背景

  • stage1: 医疗资讯主要包括了医典、医生、医药等核心业务,其中医典主要提供医疗相关内容获取、医疗知识科普传递;医生满足医生和患者的互联;医药服务了广大药企。在业务发展过程中我们原来基于 taf 平台构建了大量后台服务,完成了初期业务的快速搭建。由于业务数量较多,大量业务有多地域的述求,最终我们在 taf 平台部署多个业务集群。这个时候发布、运维、问题排查纯靠人工阶段,效率较低。

业务上云

  • stage2: 随着业务规模的急速扩张,传统的开发、运维方式在敏捷、资源、效率方面对业务迭代形成较大的制约。随着公司自研上云项目推进,拥抱云原生化,基于 K8s 来满足业务对不同资源多样化需求和弹性调度,基于现有成熟 devops 平台来进行敏捷迭代,越来越成为业务正确的选择。医疗后台团队开始了整体服务上云的迁移。

  • 上云之前,还有几个问题需要考虑

​ 1:服务众多,代码如何管理

​ 2:上云后怎么快速进行问题定位、排查

​ 3:监控告警平台如何选择

​ 4:基础镜像怎么选择

关于服务代码管理

使用 git 做代码版本控制,按业务建立项目组,每个服务使用单独的代码仓库,仓库名使用同一命名规范。

关于问题排查

调研云上有成熟的 elk 服务,业务只需要把日志放到同一目录,通过 filebeat 采集后,通过 ETL 逻辑可以把日志方便导入 Elasticsearch。这样的做法还有个优点就是可以同时支持前后端服务日志的采集,技术较为成熟,复用了组件能力,通过在请求中埋点加入 traceid,方便在全链路定位问题。

用户案例 | 腾讯医疗资讯平台云原生容器化之路

关于监控告警平台

CSIG 提供了基于日志监控的 CMS 平台,将业务日志导入到 CMS 后,可以基于上报的日志配置监控和告警,监控维度、指标业务可以自己定义。我们采用了主调、被调、接口名等维度,调用量、耗时、失败率等指标,满足业务监控告警诉求。基于日志的监控可以复用同一条数据采集链路,系统架构统一简洁。

用户案例 | 腾讯医疗资讯平台云原生容器化之路

关于基础镜像

为了方便业务初期快速上云,以及统一服务启动、数据采集上报,有必要对业务的基础镜像进行处理,预先建立对应目录,提供脚本和工具,方便业务快速接入。这里我们提供了不同语言、版本的基础镜像,封装了 supervisord 和 filebeat,通过 supervisord 来拉起 filebeat 和业务服务。

用户案例 | 腾讯医疗资讯平台云原生容器化之路

Devops

  • stage2: 在上云过程中,也通过和质量同学逐步完善,将开发过程中原有人工操作的步骤 pipeline 化,来提高迭代效率,规范开发流程;通过单测和自动化拨测,提升服务稳定性。采用统一的流水线后,开发、部署效率从原来的小时级别降低到分钟级别。

这里主要使用了 coding 平台,为了区分不同环境,建立了开发、测试、预发布、测试四套不同流水线模板,还引入了合流机制来加入人工 code review 阶段。

在合流阶段:通过 MR HOOK,自动轮询 code review 结果,确保代码在 review 通过后才能进行下一步(不同团队可能要求不一样)。

用户案例 | 腾讯医疗资讯平台云原生容器化之路

在 CI 阶段:通过代码质量分析,来提升代码规范性,通过单元测试,来保证服务质量。

用户案例 | 腾讯医疗资讯平台云原生容器化之路

在 CD 阶段:通过引入人工审批和自动化拨测,提高服务稳定性。

用户案例 | 腾讯医疗资讯平台云原生容器化之路

资源利用率提升

  • stage3:在业务整体上云后,由于不少业务有多地域部署(广州、南京、天津、香港)的述求,加上每个服务需要四套(开发、测试、预发布、正式)不同的环境,上云后我们初步整理,一共有3000+不同 workload。由于不同业务访问量具有很大不确定性,初期基本上按照理想状态来配置资源,存在不少的浪费。

用户案例 | 腾讯医疗资讯平台云原生容器化之路

为了提高资源整体利用率,我们进行了一系列优化,大致遵循如下规范:

用户案例 | 腾讯医疗资讯平台云原生容器化之路

这里由于 HPA 会导致业务容器动态扩缩,在停止过程中如果原有流量还在访问,或者启动还未完成就导入流量,会导致业务的失败,因此需要需要预先开启 TKE 上 preStop 以及就绪检测等配置。

1:优雅停止,进程停止前等北极星、cl5 路由缓存过期; 入口:tke->工作负载->具体业务->更新工作负载 如果使用的服务发现是 CL5,推荐 preStop70s,北极星配置 10s 足够了

2:就绪、存活检测,进程启动完成后再调配流量; 入口:tke->工作负载->具体业务->更新工作负载,根据不同业务配置不同探测方式和时间间隔。

通过上面一系列调整优化,我们的资源利用率大幅提升,通过 TKE 上弹性升缩,在保证业务正常访问同时,局部高峰访问资源不足的问题基本解决,避免了资源浪费,也提升了服务稳定性;但多环境问题还是会导致存在一定损耗。

可观测性技术

  • stage4:初期使用基于日志的方式来做(log/metric/tracing),满足了业务快速上云、问题排查效率提升的初步述求,但随着业务规模增长,愈加庞大的日志流占用了越来越多的资源,日志堆积在高峰期成为常态, CMS 告警可能和实际发生时已经间隔了半个小时,ELK的维护成本也急剧上升。云原生的可观测技术已经成为必要,这里我们引入了 Coding 应用管理所推荐的可观测技术方案,通过统一的 coding-sidecar 对业务数据进行采集:

    用户案例 | 腾讯医疗资讯平台云原生容器化之路

监控:云监控中台

日志:CLS

Tracing:APM

用户案例 | 腾讯医疗资讯平台云原生容器化之路

通过接入这些平台的能力,我们的问题发现、定位、排查效率有了极大的提高,业务的运营维护成本较大降低,通过监控、和 tracing,也发现了不少系统潜在的问题,提高了服务质量。

结尾

最后,要感谢上云过程中全体开发同学的辛勤付出,以及各位研发 leader 的大力支持。

关于我们

更多关于云原生的案例和知识,可关注同名【腾讯云原生】公众号~

福利:

①公众号后台回复【手册】,可获得《腾讯云原生路线图手册》&《腾讯云原生最佳实践》~

②公众号后台回复【系列】,可获得《15个系列100+篇超实用云原生原创干货合集》,包含Kubernetes 降本增效、K8s 性能优化实践、最佳实践等系列。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
【案例分享】如何利用京东云建设高可用业务架构
本文以2022年一个实际项目为基础,来演示在京东云上构建高可用业务的整个过程。公有云及私有云客户可通过使用京东云的弹性IAAS、PAAS服务,创建高可用、高弹性、高可扩展、高安全的云上业务环境,提升业务SLA,提升运维自动化水平,降低资源成本及运维成本。有业务迁移上云需求,希望构建云上高可用业务架构的客户或对云上高可用架构规划有兴趣的读者可以一看。
光速从0到1掌握Prometheus和Grafana,腾讯云专家5万字精华教程免费送
作者黄雷,腾讯云高级工程师,曾负责构建腾讯云云监控新一代多维业务监控系统,擅长大规模分布式监控系统设计,对golang后台项目架构设计有较深理解,后加入TKE团队,致力于研究Kubernetes相关运维技术,拥有多年Kubernetes集群联邦运维管理经验,目前在团队主要负责大规模集群联邦可观测性提升,主导研发了腾讯云万级Kubernetes
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
DOIS 2019 DevOps国际峰会北京站来袭~
DevOps国际峰会是国内唯一的国际性DevOps技术峰会,由OSCAR 联盟指导、DevOps时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈DevOps体系与方法、过程与实践、工具与技术。会议召开时间:2019070508:00至2019070618:00结束会议召开地点:北京主办单位:DevOps
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这