➣ 10年IT开发经验,3年以上系统设计和架构设计经验,3年14人+团队管理经验。
➣ 熟悉高并发编程,掌握JUC并发包,掌握Java锁的机制及原理,以及线程安全机制。
➣ 熟悉分布式系统架构设计,具有大流量、大访问量、高负载环境下的系统设计、开发和优化经验。
➣ 熟悉微服务生态,掌握Spring、SpringBoot、SpringCloud(Nacos、Eureka
、Springcloud Config、Gateway、Ribbon、Hystrix、Zuul)等技术,并能搭建微服务体系架构。
➣ 熟悉主流数据库,包括MySQL、Oracle、Postgresql、MongoDB,深入理解MySQL存储原理、事务隔离级别、事务传播机制,对SQL优化有着一定的经验
➣ 深入理解Redis线程模型,熟练掌握Redis的核心数据结构的使用场景,熟悉分布式系统中多级缓存架构设计,对缓存雪崩、缓存穿透以及缓存击穿有一定的解决能力
➣ 熟悉主流中间件,掌握RocketMQ、Kafka、ElasticSearch底层原理及特性,并能根据不同业务场景进行技术选型。对消息中间件消息丢失、重复消费、顺序消费、大规模消息投递有一定的经验
➣ 熟悉分布式理论,熟悉Paxos算法、Raft协议,熟悉zookeeper、分布式锁,使用seata解决分布式事务问题。
➣ 深入理解JVM底层原理,熟悉JVM各种垃圾收集器的使用和参数调优,有过JVM线上调优经验,对JVM调优有一定的见解和思路。
➣ 熟悉云原生技术,掌握docker、kubernetes容器技术,能够制作镜像、进行服务编排。
➣ 熟悉网络技术、信息安全领域、加密技术,熟悉常见的网络攻击手段以及应对办法。
➣ 熟悉常用设计模式,并能在系统设计中灵活运用。
➣ 熟悉数据结构与算法,掌握链表、队列、栈、堆、树,以及各类常见算法。
➣ 了解大数据相关组件。
项目描述: 智医助理,用人工智能帮助医生完成辅助诊断。目前已覆盖全国280+个区县,服务5万医生群体,覆盖1亿患者,提供3亿次AI诊断。
技术栈:智医助理3.0:springcloud+eureka+springcloudconfig+feign+ribbon+nginx+redis+rocketMQ+MySQL+websocket+swift(文件系统)+ Sharding-JDBC
智医助理4.0:springcloud+nacos+ribbon+nginx+redis+rocketMQ+ PostgreSQL +websocket+MiniIO(文件系统)+seata
你的成就:
1. 负责智医助理3.0研发过程,以及智医助理技术架构演进
① 主导千万级业务大表的分库分表实践
➢背景:核心库病历表一天产生约3w条记录,一年约1000w条数据,生产环境数据量2100w+,MySQL性能遇到瓶颈,需要针对数据量>1000w的核心业务表做分库分表方案。
➢方案与措施:先做技术预研,确定使用ShardingSphere,并选择对业务侵入性较小、性能较高的Sharding-JDBC。集群+读写分离+分库分表,按照行政区划(区县级别)水平分片,分片后单表数据预计在100w,按照当前增速,可保证5~8年内无性能瓶颈。届时再做冷热数据分离。针对未达性能瓶颈的私有化环境,设置关闭启动开关,避免因分表带来的运维成本。
➢产生效果:核心表数据拆分以后,在机器资源(16核32G)较充足时,单表查询吞吐量相比与JDBC提升近两倍,混合场景提升约30%。
② 高并发推送接口性能优化
➢背景:智医助理为插件型应用,数据需要第三方his系统调用接口(就诊接口、病历接口、处方接口)导入数据,业务高峰时,接口性能下降,甚至请求超时,需要针对接口进行性能优化
➢业务分析与解决办法:
a)业务流程梳理优化:异步请求三方系统;三方系统的多个接口合并;将能力平台的多个能力接口合并成一个大接口,减少多次调用带来的网络传输延时。针对不能合并的接口,且结果间无相互依赖的,使用Future机制异步调用。
b)数据库优化:慢SQL优化,病历ID字段为bigint36,部分SQL中隐式转换成了字符串;explain慢SQL的执行计划,分析耗时原因,就诊表name字段索引冗余,与联合索引首位重复,并且有两张表jion时,连接字段未建立索引,删除冗余索引,新建连接字段的联合索引。
c)缓存优化:对于接口中的字典信息(性别、职称等)重复调用字典服务,将字典信息缓存至Caffeine本地缓存。
d)对依赖的三方服务优化: token生成策略优化,每次请求三方接口的鉴权token需要重新生成,改为一次申请8h内可用。
f)异常处理:针对小概率失败的数据,推到rocketMQ,利用MQ的延时消息1s后重试。
➢产生效果:压测后,相同机器,50路并发,接口的平均响应时间由原有的200~400ms降低至100~200ms,tps有小幅提升,具体请参照下图(压测报告节选):
③ 基于雪花算法(snowflake)的分布式主键生成器的设计与落地
➢背景:对于分布式系统环境,主键ID的设计很关键,自增ID在分库分表后数据合并时会冲突,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入时因为UUID/GUID的不规则导致每插入一条数据就需要重新排列一次,性能低下;医疗的私有化部署场景多,每个医院都需要部署一套系统,10位数据机器位,可以部署1024个节点,这是不够的。
➢复杂度:了解雪花算法生成器的工作原理,并能基于医疗需求进行改进。
➢改进方案:通过对算法原理分析可知:可以调整 时间位,机器ID位,序列位的大小来满足业务的个性化需求。讯飞医疗的业务有如下特征:
a) 云边一体,每个医院都需要部署一套系统,原版机器位10位只能部署1024台机器,这是不够的。我们把机器位默认设置为20位,这样能部署1048576台机器。
b)讯飞的并发量并没有Twitter那么大,所以毫秒时间戳太让费,我们到秒即可。我们默认设置时间位是33位,这样可以用272年。
c)原版12位序列每秒可产生4096个ID,我们默认设置的是10位,每秒产生1024个ID.
➢产生效果:封装成通用组件纳入脚手架的公共组件,形成BU级别的规范标准。
④ 分布式事务seata在业务侧的落地
➢背景:随着业务的发展,医疗需要基于DDD思想进行服务拆分,微服务分布式事务问题随之而来,引入seata组件。
➢方案与措施:技术调研发现,Springcloud Alibaba的seata为主流的解决方案,较为成熟,且符合医疗整
项目描述: 智医助理,用人工智能帮助医生完成辅助诊断。目前已覆盖全国280+个区县,服务5万医生群体,覆盖1亿患者,提供3亿次AI诊断。 技术栈:智医助理3.0:springcloud+eureka+springcloudconfig+feign+ribbon+nginx+re
支持省市区多维度的开关配置。统一配置中心,可视化配置,以交付视角重新设计配置页面,打破研发系统的割裂性。