在华为担任Go语言软件开发工程师的职位,参与通用网络控制网关产品中部分微服务(会话管理服务、鉴权服务、地
址服务、DHCP服务)的特性开发,参与了多个较大特性的开发和多个性能、可用性、可观测性专项项目。工作至
今,所参与项目商用上网后都未出现过事故,年均提交代码40K+,曾连续获得部门三次绩效“A”评价。
熟练掌握GO语言编程技能, 了解GO语言内置类型及原理,了解GMP调度模型、GO并发编程、垃圾回收、内
存分配等。掌握GO基于接口编程和测试、泛型的使用,利用泛型在工作中设计多个可扩展框架。
熟悉DDD和DCI架构模型,能够将开发过程中的业务模型分层抽象。
熟悉关系型数据库GMDB、MySQL的使用和查询调优、数据同步、数据迁移,熟悉其他类型数据库如DDB、
Redis、ElasticSearch等的使用。能够使用多款数据库中间件进行开发,如DDF、GORM、Go-Redis等,也
能根据业务开发拓展数据库插件。熟悉缓存设计和开发、消息队列的使用和开发,能够设计本地缓存框架,能
够熟练使用Kafka进行流量控制、流式推送、业务处理等场景的开发。掌握使用Canal监听数据库变更,进行业
务处理、数据同步或可观测性处理。
熟悉网络开发和移动网络知识,了解TCP/IP、UDP、路由等知识,了解HTTP/HTTPS、WebSocket、
GTPv1/GTPv2、Diameter等协议栈的知识和应用开发。熟练使用Gin框架开发HTTP后端程序,并能够应用和
编写Gin的中间件。能够基于TCP和UDP协议栈开发私有通信协议,参与过定制协议的传输、编解码开发。
熟悉分布式系统软件开发和微服务开发,能够基于分布式架构设计业务功能,熟练使用分布式锁,能够基于持
久化数据库设计分布式锁、分布式任务调度框架等机制,熟悉服务注册发现、服务治理、负载均衡等。熟悉微
服务框架gRPC和CELL框架的开发使用,有单体应用转微服务化的经验。
熟悉Prometheus、OTEL、Zipkin、ELK、FileBeat等可观测性组件的使用。
熟悉容器工具Docker和Kubernetes的使用,能够在容器环境下部署软件。
了解常用数据结构和算法,了解计算机的组成原理、操作系统原理,能够对程序性能进行分析调优。
一、传统第三方服务器治理
开发
2023年02月 - 2023年10月
1. 重构改进原有鉴权服务器设备治理功能,开发服务器治理公共框架,应用于鉴权服务器、数据面网关转接鉴权
服务器、传统DHCP服务器、计费服务器等多种第三方服务器的管理功能。
2. 该框架所应用的服务器无心跳探测机制,在此前提下实现基于Redis,通过Lua脚本存储并计算一段时间内的成
功率,实时判断第三方服务器状态的功能。基于哈希表、双向循环队列和Redis的订阅发布机制实现链路集状态
管理、APN-VPN链路隔离、主备/Robin等选路功能。
3. 利用基于Redis开发的分布式锁和Cron定时任务实现链路的探测恢复功能。
4. 参考TCP的拥塞控制算法,结合链路的状态,改进出接口智能流量控制功能,可以在服务开工的不同时期、服
务器的不同状态下,动态调整链路出口流量的阈值,快速探测第三方服务器的处理能力峰值并及时对信令风暴
做出反应,保护第三方服务器。
5. 加入服务治理手段,基于Redis+Lua脚本开发限流器,对入口流量进行限流,并根据拥塞程度决定降级或者熔
断等措施,以保护服务节点本身。熔断状态下,节点将业务消息写入基于Cron+MySQL开发的分布式调度器,
并将本节点置为不可用,由可用节点消费调度业务消息。出口处失败的业务消息,通过GO的Ticker机制进行短
时间异步重试,多次失败后写入失败消息表,由异步扫描Goroutine进行长周期的重试。
6. 接入Prometheus和Grafana,上报链路业务打点,定义告警计算规则,根据各节点的业务状态上报链路级的
告警,可以实时观测到APN+VPN+第三方服务器IP粒度的告警,并发送告警信息到通讯软件和邮箱,及时判
断系统异常状态。
7. 基于用户身份标识和一致性哈希策略进行负载均衡,保证单用户的消息被同一节点处理,在此基础上开发单节点冲突检测功能,接收到重复业务消息时根据配置决策优雅停止前任务或丢弃新消息,接收到高优先级消息时优雅停止低优先级任务处理并释放相关资源。
8. 设计手动恢复链路机制,能够在无业务状态且各恢复机制都异常失效的极端情况下手动恢复异常链路状态。
二、用户数据表优化和业务无损迁移优化项目
开发
2022年03月 - 2022年09月
1. 改造用户数据表。将用户表结构分段,将主键+副Key存储在Part0表中并为各副Key建立索引,将非Key字段定
长化消除变长数据,然后分区序列化、合并主键存储到各Part的表中。写入数据TPS经优化后约提高1%左右。
2. 将用户数据写入过程中原有的指标计算、数据分析等中间件处理流程分离出来,利用Canal组件监听数据库变
更并发送到Kafka,将数据中间件放到数据节点,对Kafka进行消费和异步指标计算,并发送到数据分析平台进
一步分析和归档。
3. 在数据表改造基础上,改进查询方法,提高查询QPS约20%。利用Go的SyncPool,池化存储反序列化后的表
对象,表数据提交后Goroutine异步清空表对象数据并入池,降低大对象的内存分配和垃圾回收的开销。
4. 改进用户缓存,对在运营商处签约更高优先级的用户,增大缓存过期时间并提供过期时间可配机制,调整了部
分业务过程中缓存失效的处理策略,尽可能保证业务成功,极大提高了高优先级用户和紧急呼叫用户的缓存命
中率,优化了用户体验。
5. 优化业务迁移机制,开发“无损”迁移机制。基于业务的一致性哈希Token、Token路由、Token迁移等机制,
设计主备节点Token迁移流程。为数据库的GORM操作接口开发迁移ConnPool和数据校验器,在不同的迁移
阶段,向主备节点的数据库操作接口注入不同的ConnPool实现并切换数据校验器,实现备点数据导入、主备
双写、增量校验、全量校验等功能。并在数据库迁移的不同阶段,设计Token的路由切换策略和备点转发策
略,在双写的起始阶段,将原节点上失败一次的数据转发到备点进行处理,降低业务失败率。改进后,可靠性
测试中业务迁移的业务损失率由1.7%降到0.05%左右。
6. 无损迁移实现后,将用户表改造成为Token粒度的表,单Token下的用户使用一张表,不同Token之间分表隔
离,进一步降低了表读写压力和迁移时长。
三、分布式随机用户追踪功能
开发
2022年11月 - 2023年06月
开发分布式随机用户跟踪功能,用于对用户在分布式系统中的业务消息进行全链路的追踪,包含模块间的消息
头中携带追踪信息的编解码及适配、RPC调用过程的追踪信息的传递适配、跟踪触发条件的业务适配、跟踪触
发后的仲裁功能、仲裁过程中用户消息的缓存功能、跟踪消息的上报功能、跟