工作内容:作为主要设计者、开发者,负责维护与升级公司核心产品——网络数据播发系统。
系统简介:该系统是基于互联网技术,面向海量用户(百万级并发)的实时卫星定位数据播发服务平
台。通过TCP长链接承接用户流量,根据用户上传的位置参数和业务需求进行一系列数据处理与数据
订阅,最终向用户下发定位辅助数据。整个系统做到高并发、高性能、高可用。
系统技术特色:系统整体依据分布式和微服务思想设计,由播发主应用和支撑应用两个部分组成。播
发主应用负责用户数据的传输与处理,关键点是处理海量的网络IO和用户指令。主应用使用Netty现实
网络I/O交互,负责与Client建立连接,并将Client消息封装成系统事件,分发给异步任务模型去处
理。异步任务模型采用有限状态机模型加Dispatch模型实现,在保证单个用户所有事件串行处理的同
时避免了IO等待,极大地提高了CPU使用效率。支撑服务由一系列Dubbo服务组成,负责管理用户静
态数据,如:鉴权信息、配置管理、流量的灰度策略等。静态数据使用MySQL存储,Redis作为数据
缓存中间件,用Dubbo进行服务暴露,提供高效的信息查询接口。
系统关键词:分布式系统、微服务、Dubbo、Netty、Redis、高并发线程模型、流量灰度
个人贡献:作为主要设计者和开发者,主持实施了3次系统的大型版本升级。1、成功重构了系统线程
模型,提出并落地了有限状态机模型加Dispatch模式的线程模型方案,解决了系统在高并发情况下IO
等待过长和CPU使用率低等问题,使得系统的性能(CPU指标)提升50%;2、设计并落地了系统数
据订阅相关模块的代码重构,实现了订阅流量的聚合,减轻了系统订阅压力,提高系统负载能力;3、
优化了系统流量灰度控制模块,使得系统控制流量的能力达到单个用户级别,具备灰度发布能力。
技能储备
有大型分布式系统设计、开发经验,熟悉常用分布式解决方案框架,如Reids、消息队列、Dubbo、
Netty等;
有多线程、高并发系统设计、开发经验,熟悉JMM与Java多线程开发技术;
有系统性能调优经验,针对系统CPU性能调优有定位问题与解决问题的实践方案;
有成功重构系统的实践经验,对于系统设计和重构有一定的能力;
熟悉MySQL数据库,有分库分表实践和数据库迁移实践;
Java基础扎实,熟悉Java SE常用API与类库,熟悉JVM;
编码功底扎实,有较强的逻辑思维能力,能熟练使用常见设计模式、数据结构,有良好的编码习惯和
UT习惯;
熟悉Java常用框架Spring系列、Mybatis等。