桂核酸项目:面向广西 6000 万用户的核酸采集检测系统
项目背景
在新冠疫情期间,为满足广西全区大规模核酸采集与检测的需求,快速、准确、高效地完成 6000 万居民的核酸信息采集与检测流程管理,开发了桂核酸系统。该系统需具备高并发处理能力、数据安全性和可靠性,以支撑大规模人群的核酸检测工作顺利开展。
担任角色
负责系统整体架构设计、技术选型、性能优化以及团队技术指导。
技术实现
1. 架构设计
• 微服务架构:采用 Spring Cloud 体系对系统进行微服务拆分,将系统划分为用户信息服务、采集点管理服务、样本检测服务、结果查询服务等多个独立的微服务。确保服务之间的解耦和可扩展性,方便应对大规模用户并发访问。
2. 数据库处理
• 关系型数据库优化:选用 MySQL 作为主要的关系型数据库存储核酸检测相关数据。对数据库进行了深度优化,包括合理设计数据库表结构,使用合适的数据类型以节省存储空间;为高频查询字段创建索引,如根据采集点编号、检测时间等字段创建索引,提高查询效率;通过 SQL 调优,描和复杂的嵌套查询,确保数据查询和写入的高效性。
• 分布式数据库解决方案:考虑到 6000 万用户的数据量和高并发写入需求,采用了分库分表技术。使用 ShardingSphere 中间件对数据进行水平分表和垂直分库,将数据分散存储在多个数据库节点上,减轻单数据库的压力,提高系统的整体性能和可扩展性。同时,采用 MySQL 的主从复制和读写分离架构,一主多从实现数据库的高可用
3. 缓存与消息队列应用
• Redis 缓存:引入 Redis 作为缓存服务器,对热门采集点信息、常用检测结果等热点数据进行缓存。通过设置合理的缓存过期时间和更新策略,减少对数据库的访问次数,提高系统的响应速度。同时,使用 Redis 的分布式锁机制解决并发更新缓存的问题,确保缓存数据的一致性。针对缓存穿透、击穿和雪崩问题,、热点数据预加载和缓存失效时间随机化等方法进行防范。
• RabbitMQ 消息队列:使用 RabbitMQ 消息队列实现异步任务处理和流量削峰。在核酸采集信息提交时,将采集信息发送到 RabbitMQ 队列,由异步任务进行后续的数据处理和存储,避免因大量并发请求导致系统崩溃。同时,通过消息队列实现系统间的解耦,例如当检测,通过消息队列通知相关服务进行结果推送和数据更新。
4. ElasticSearch 缓存历史数据
• 数据存储与索引:利用 ElasticSearch 存储核酸检测的历史数据,如过往的采集记录、检测结果等。凭借其强大的全文检索和索引能力,为这些历史数据建立高效的索引,支持快速的模糊查询、范围查询等操作。例如,用户可以快速查询某一时间段内某个地区的核酸检测历史记录。
5. 使用 Flink CDC 同步数据到kafka将数据共享到共享平台同时同步到 Doris 实现实时同步
• 数据写入kafka: 使用 Flink CDC工具实时捕获 MySQL 数据库中的数据变更
将数据写入kafka;公共资源平台通过消费数据达到数据实时共享,清洗数据程序消费kafka,将数据清洗后写入 Doris ,实现核酸检测数据从 MySQL 到 Doris 的实时同步,为后续的数据分析和报表生成提供实时、准确的数据支持。
6. 负载均衡与高可用
• Nginx 负载均衡:部署 Nginx 作为负载均衡器,将用户请求均匀地分发到多个应用服务器上。根据不同的负载均衡算法进行合理配置,提高系统的并发处理能力和可用性。同时,Nginx 还具备反向代理功能,可隐藏内部服务器的真实地址,提高系统的安全性。
• 应用服务器集群:采用 Tomcat 服务器集群部署应用程序,通过配置集群节点和会话复制机制,确保用户会话的一致性和高可用性。当某个应用服务器出现故障时,能够自动将请求转发到其他正常的服务器上,保证系统的持续运行。
7. 监控与运维
• 监控系统:搭建 zabbix监控系统,对系统的性能指标(如 CPU 使用率、内存使用率、响应时间、吞吐量等)进行实时监控和可视化展示。通过设置告警规则,当系统指标超过阈值时及时发出告警,以便运维人员及时处理。
• 自动化运维:采用 Ansible 进行服务器的自动化部署和配置管理,提高运维效率和减少人为错误。
项目成果
• 高并发处理能力:系统成功应对了大规模人群核酸采集检测的高并发访问需求,在高峰期能够稳定处理每秒十万的请求,确保了核酸信息的快速采集和处理。
• 数据准确性与安全性:通过严格的数据验证和加密机制,保证了 6000 万用户核酸检测javascript:void(0);数据的准确性和安全性,为疫情防控提供了可靠的数据支持。
• 高效的流程管理:实