金融保险领域统一消息发送平台

项目介绍:系统为金融保险行业统一推送基础平台,日均推送消息2000万条,支持短信、官微、邮件多种发送渠道。

项目定位:结合公司项目产品化战略,从基础的推送能力出发,形成公司的统一推送基础产品

项目功能:包括基础推送服务,可扩展的多推送渠道管理,第三方推送应用管理,推送数据分析平台、个性化服务平台,安全推送审计平台等多个子系统。

技术难点:

  1. 高可靠难点:搭建金融保险领域高可靠消息发送链路,支持同城两机房灾备部署,确保消息不漏发不重发,发送异常实时预警。
  2. 性能难点高并发低延迟架构设计,系统支撑峰值1200TPS/异常时5000TPS处理能力,数据库支撑6000TPS写入操作。
  3. 大存储难点:单日100GB+数据库存储容量,总量100TB+存储容量,支持实时数据读写。

项目职责:

  1. 平台顶层架构设计:识别技术/管理复杂度,选择架构设计理论依据及架构设计方法,制定架构评审360度环评标准。
  2. 故障分析隐患预案:制定FMEA列表,分析故障模式与影响范围,排除架构高可用隐患。
  3. 云原生开发架构搭建:搭建配套微服务基础设施平台、基础的高可用、高性能中间件框架、自伸缩K8S云原生基础设施框架。
  4. 研发规范管理:35人项目团队管理,合理分配团队体力,平衡项目周期与团队工作压力;设定代码评审、文档交付精简策略;制定运维监控指标阈值及异常处理方案,规划降级/故障/切换定期演练方案,形成完备平台运维手册。

方案设计:

  1. 高性能低延迟发送方案设计
  1. 系统容量评估评估系统数据容量/线路容量,量化系统漏斗型并发访问均值/峰值以及不同时间段并发访问分布特征,评估DB/缓存/MQ中间件读写均值/峰值及存储占用,明确消息发送响应时间要求;输入线路容量100Mb/输出线路容量30Mb,消息发送响应时间低于100ms,主键查询响应时间低于1s,范围查询响应时间低于3秒,归档库查询响应时间低于5秒;单实例CPU使用率低于80%,量化结果做为高并发设计依据。
  2. 高性能数据库方案设计:读写分离/分库分表方案选型,按业务维度/时间维度/消息类型维度分为3个数据库4个核心表,确保单表数据量低于500万/存储占用低于10G,insert操作耗时低于50ms,update操作耗时低于10ms;采用API组合模式/CQRS模式实现跨库查询,采用雪花算法生成全局ID实现数据读写路由方案。
  3. 高性能缓存方案设计:根据不同缓存数据一致性要求设计缓存加载/缓存穿透策略;设计缓存数据预热方案及后台更新方案,规避缓存雪崩;实现热点数据内存级缓存方案,内存级数据缓存14万条/空间占用300M/并发8000QPS,Redis数据缓存27万/空间占用700M/并发3600QPS。
  4. 高性能MQ方案设计:生产端量化不同模式下MQ并发发送量,选型异步confirm模式发送MQ消息,支持12000TPS并发发送;消费端设计多线程消费计算策略,线程池与MQ配合实现消费限流;定时消息堆积400万条/天,占用存储空间6.8GB。
  5. 异步写数据库方案设计:利用MQ队列异步执行写数据库操作,消息发送延迟缩短50%,单数据库可支撑峰值3600次/秒写库操作;解决异步写库引发的消费乱序、重复消费、消息丢失问题。
  1. 高可靠消息发送链路方案设计
  1. 分布式系统高可用性规划:结合CAP理论/BASE理论梳理各业务数据存储与缓存一致性/可用性要求、软状态场景、最终一致性实现策略;遵照基本可用原则,区分在系统故障时允许损失可用性的功能和需确保正常的核心功能;定时消息发送功能要求99.9%可用性,实时消息发送功能要求99.99%可用性,消息漏发率0%。
  2. 高可用存储架构设计:Myql高可用架构MHA选型,支持10--30秒内的自动故障转移,最大程度保证数据完整性,采用1主2备结构,半同步复制确保数据一致性与可用性;制定数据库宕机/脑裂恢复策略;制定双机房分区存储方案及数据同步、归档方案,每日完成2机房8个表总计2000万条数据归档操作,传输数据量35T。
  3. 同城异区两机房灾备部署方案:业务分级,只保证实时消息发送核心业务两机房部署;数据分类,保证核心数据强一致性、非核心数据最终一致性;制定实时同步/回源查询等多种数据同步方案确保可靠数据同步;制定双机房数据缓存异常/归档异常时解决方案;机房级故障时10--20秒完成机房切换,确保核心业务正常。
  4. MQ高可用方案设计:生产端选用异步Confirm机制+重试实现可靠写入,消费端选用手动ACK机制+死信队列实现可靠消费,MQ集群高可用采用1主2从镜像队列和全面持久化(exchange持久化/队列持久化/绑定关系持久化/消息持久化)方案;制定MQ消息全流程风险(乱序/重复/丢失)规避策略。
  5. 自动降级/消息隔离方案:自动降级包括定时消息自动降级和下游状态回调写库自动降级,实时消息发送服务压力大时(单实例连续30秒并发300并且响应时长500ms以上,)自动降级定时消息发送服务,增加实时发送服务器资源,确保实时消息发送高可用;下游状态回调更新数据库响应慢时(连续10秒响应时间超过50ms)自动降级,停止更新回调状态,在30秒后尝试恢复更新;定时消息与实时消息发送链路互相隔离使用,包括发送接口隔离、发送服务隔离、缓存隔离、MQ隔离、存储隔离,确保实时消息稳定发送;
  6. 接口调用限流方案:Nginx网关采用lua+Redis方式实现分布式动态限流,采用lua-resty-limit-traffic模块,根据Nginx实例数量自动调整每个Nginx实例限流参数,确保集群总流量峰值为1200TPS;并基于内存与Redis两层缓存实现网关层黑名单过滤、访问认证、消息高并发防重功能,实现网关层过滤5000TPS异常重复请求。
  1. 高扩展微服务架构设计及基础设施建设
  1. 微服务拆分:基于业务逻辑/可扩展性/可靠性/性能/团队规模进行微服务拆分,规避常见微服务开发风险,将系统拆分为5个微服务:实时消息接收及模板合并服务、定时消息接收及模板合并服务、消息发送服务(包括定时消息/实时消息)、消息发送状态回调服务、后台管理服务,微服务数量与开发人员数量比例约为1:3,确保团队高研发效率。
  2. 微服务基础设施建设:分步骤完善微服务基础设施建设,首先建设服务发现/路由/容错及接口框架/网关,第二步实现微服务部署自动化、测试自动化、配置自动化,最后实现平台监控预警/服务跟踪/服务安全;具体包括全链路灰度发布平台、全链路监控平台,注册中心/配置中心、网关等技术选型开发。
  3. 全链路监控平台建设实现系统级/应用级/业务级全方位全链路监控,制定监控指标及指标数据来源,制定探针采样频率递减策略;系统级监控通过接入容器平台实现CPU/内存/网络/磁盘监控;应用级监控通过自建Skywalking全链路监控平台实现应用QPS/请求耗时/请求错误数/SLA/GC次数/JVM堆和方法区使用情况监控;业务级监控通过MQ消息和接入日志系统实现业务流程关键节点监控,实时发现业务异常并启动应急预案。
  4. 全链路灰度发布平台建设:实现网关层/业务微服务/基础微服务全链路不停服灰度发布;实现线上A/B测试,支持多种规则流量切换;通过逐步递增的阶梯流量切换,实现程序预热平滑上线。平台实现灰度单元格设置、流量染色、染色流量路由、流量递增切换基础功能,灰度单元格设置划定部分微服务实例在30秒内优雅下线并同步下线状态到各个微服务Ribbon路由;流量染色在网关层对符合条件的流量设置灰度标记;染色流量路由在Ribbon路由算法中将染色流量路由到灰度单元格。
  5. 微内核动态扩展架构设计:采用微内核架构实现防腐层设计,解决系统核心功能与上游业务深度耦合问题,通过微内核架构动态扩展能力解决上游业务需求变化频繁,上线要求时间短的问题;支持热插拔消息处理插件,包括插件配置管理、插件连接方式选择、定义统一插件通信协议。目前已实现消息内容合规检查、消息内容二次加工等多个动态插件。
  6. 部署架构设计:双机房总计部署服务实例40个,其中主机房微服务实例30个,包括实时消息发送链路相关微服务实例10个、定时消息发送链路相关微服务实例4个、后台管理/雪花算法ID生成/XXL-Job/数据分析等基础能力微服务实例16个;从机房微服务实例10个,全部为实时消息发送链路相关微服务。
  1. 其他支撑系统设计:
  1. 数据分析子系统设计梳理多数据源采集方案/制定数据指标模型/评估数据质量/制定指标分析策略;分析用户行为数据形成用户偏好分析指标,根据用户偏好个性化消息发送时间/渠道/类型,提升消息触达率,提升产品价值;分析系统运营/运维数据形成系统运行状态变化趋势指标,掌握系统运行状态,规避系统运行风险;数据处理流程包括数据采集、数据清洗、数据存储、数据分析、数据展示/应用环节;日处理数据量50GB+,支持离线分析/实时分析,形成用户阅读时间偏好、渠道偏好、消息到达率等10+个分析指标。
  2. 异常告警子系统设计梳理告警分类指标/定义告警级别/告警渠道/告警范围/处理时限/确定告警阈值;支持主动轮询告警和自动监控告警两种方式,探测平台主动轮询平台重点接口/页面,确保重点功能异常实时告警;自动监控系统级/应用级/业务级异常,在系统不可用之前产生告警;告警级别分为致命/严重/中等/一般等级,严重问题多渠道告警,确保告警多种方式实时送达;告警渠道包括管理界面告警/邮件/钉钉/短信/电话告警;
  3. 数据安全合规设计:包括敏感数据加密存储/脱敏展示、消息内容合规、模板内容合规且必要;手机号敏感数据采用AES加密存储,同时存储手机号后4位生成的SHA摘要信息以及AES加密秘钥版本号;支持输入手机号后4位查询和完整手机号查询,查询过程先根据后4位摘要匹配,然后解密完整手机号进行匹配。
  4. 分布式定时任务规划:采用分布式定时任务处理平台内由时间驱动的批处理任务,在Quartz/elastic-job/xxl-job进行方案选型,制定定时任务路由分片策略/失败重试策略/阻塞策略/调度过期策略。
  5. 全局唯一ID生成策略:采用雪花算法生成全局唯一ID,ID长度64bit,由高到底分别为1bit预留位,始终为0;41bit时间戳,可支持49年时长;4bit工作机器ID,其中2bit表示4个机房编号,2bit表示4个机器ID编号;10bit消息业务类型ID,最多支持1024个类型;8bit序列化,表示每毫秒可生成256个ID。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F103学习笔记(六) RTC实时时钟(应用篇)

目录 1. RTC 实时时钟的应用场景 2. RTC 的配置与初始化 2.1 设置 RTC 时钟源 2.2 初始化 RTC 寄存器 2.3 中断配置 2.4 备份寄存器配置 2.5 校准 RTC 3. 实例演示代码 4. 总结 1. RTC 实时时钟的应用场景 实时时钟(RTC)在嵌入式系统中具有广泛…

用C#开发Excel插件的强大开源工具

推荐一个开源项目,方便我们使用C#为Excel开发插件。 01 项目简介 Excel-DNA是一个.Net开源项目,为开发者提供了一种便利的方法,可以将.Net代码与Excel集成,能够轻松的为Excel创建自定义函数、图表、表单等,一方面不仅…

VS2022调试技巧(一)

什么是bug? 在1945年,美国科学家Grace Hopper在进行计算机编程时,发现一只小虫子钻进了一个真空管,导致计算机无法正常工作。她取出虫子后,计算机恢复了正常,由此,她首次将“Bug”这个词用来描…

【C语言基础】:操作符详解(二)

文章目录 操作符详解一、上期扩展二、单目操作符三、逗号表达式四、下标访问[]、 函数调用()五、结构成员访问操作符六、操作符的属性:优先级、结合性1. 优先级2. 结合性 操作符详解 上期回顾:【C语言基础】:操作符详解(一) 一、上期扩展 …

https://htmlunit.sourceforge.io/

https://htmlunit.sourceforge.io/ 爬虫 HtmlUnit – Welcome to HtmlUnit HtmlUnit 3.11.0 API https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit/2.70.0 https://s01.oss.sonatype.org/service/local/repositories/releases/content/org/htmlunit…

进程间通信学习笔记(有名管道和无名管道)

进程间通信方式: 无名管道(pipe)有名管道(fifo)信号(signal)共享内存(mmap)套接字(socket) 无名管道: 在内核里面开辟一片内存,进程1和进程2都可以通过这片内存进行通信 无名管道特点: 只能用于具有亲缘关系的进程之间的通信&am…

YOLOv9图像标注和格式转换

一、软件安装 labelimg安装(anaconda) 方法一、 pip install labelImg 方法二、 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install lxml -i ht…

从Unity到Three.js(shader创建)

本文介绍three.js 中shader的创建和应用到模型,具体shader的语法和函数应用,已经有很多大佬总结过了。 three.js shader详解 import * as THREE from three;const scene new THREE.Scene();//创建场景 scene.backgroundnew THREE.Color(0,0.1,0.2,1);/…

系统找不到xinput1_3.dll怎么办?试试这五种解决方法轻松搞定

在计算机系统运行过程中,当我们遭遇“找不到xinput1_3.dll”这一错误提示时,实际上正面临一个软件兼容性、系统组件缺失以及游戏或应用程序无法正常启动的关键问题。深入探究这一现象,我们会发现它可能引发一系列连带问题,例如某些…

linux之前后端项目部署与发布

目录 前言 简介 一、安装Nginx 二、后端部署 2.1多个tomcat负载均衡 2.2 负载均衡 2.3 后端项目部署 三、前端部署 1.解压前端 2.Nginx配置文件修改 3.IP域名映射 4.重启Nginx服务 前言 上篇博主已经讲解过了单机项目的部署linux之JAVA环境配置JDK&Tomcat&a…

车载终端_联发科MTK6762车载平板电脑解决方案

智能车载终端方案搭载了MTK联发科8xARM Cortex-A53(64bit)高速CPU,采用12nm工艺制程,提供更快的数据采集速度和APP响应速度,能够快速满足用户的应用需求。配备3GB RAM32GB ROM的低功耗EMCP一体化存储,性能良好,支持多任…

【LeetCode:2476. 二叉搜索树最近节点查询 + 中序遍历 + 有序表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

panelRef.value.getBoundingClientRect is not a function

<el-cascader-panel v-model"value" ref"panelRef" expand-change"expandChange" />const panelRef ref(null) panelRef.value.getBoundingClientRect()报错&#xff1a; panelRef.value.getBoundingClientRect is not a function 报错原…

python使用winio控制x86工控机的gpio

视频讲解 https://www.bilibili.com/video/BV1Nu4m1w7iv/?vd_source5ba34935b7845cd15c65ef62c64ba82f pywinio库 https://pypi.org/project/pywinio/ 安装库 pip install pywinio寄存器地址 测试代码 import pywinio winio get_winio() # 设置排针2输出1,0x40是bit6置…

嵌入式中逻辑分析仪基本操作方法

前期准备 1.一块能触摸的屏对应的主板机 2.逻辑分析仪对应的软件工具 3.对应的拓展板 4.确定拓展板的引脚分布情况 第一步&#xff1a;逻辑分析仪j基本操作 1.数据捕捉需要先进行对应软件安装,并按照需求进行配置 2.这里以A20为例:此手机使用显示驱动芯片CST148,触摸屏分辨…

插件废土课:打造属于你的“智能笔记”!

哎呀嘞&#xff0c;亲爱的网页冲浪者们&#xff0c;抓紧浮板&#xff0c;我们要继续在Chrome插件的海浪上翻滚啦&#xff01;上次我们玩了个小把戏&#xff0c;搞了个显示时间的Hello World插件&#xff0c;这次我们要把游戏玩大&#xff0c;准备打造一个能让你在网页上乱涂乱画…

Onlyfans信用卡支付失败怎么办?怎么订阅Onlyfans

OnlyFans信用卡支付失败解决方案及订阅指南 简介 OnlyFans是一个以内容创作者为重点的订阅平台&#xff0c;让用户可以通过支付订阅费用来获取独家内容。然而&#xff0c;有时候在进行信用卡支付时可能会遇到一些问题。本篇文章将为你提供解决OnlyFans信用卡支付失败的方案&a…

数学建模【GM(1, 1)灰色预测】

一、GM(1, 1)灰色预测简介 乍一看&#xff0c;这个名字好奇怪&#xff0c;其实是有含义的 G&#xff1a;Grey&#xff08;灰色&#xff09;M&#xff1a;Model&#xff08;模型&#xff09;(1, 1)&#xff1a;只含有一个变量的一阶微分方程模型 提到灰色&#xff0c;就得先说…

大数据开发项目--音乐排行榜

环境&#xff1a;windows10&#xff0c;centos7.9&#xff0c;hadoop3.2、hbase2.5.3和zookeeper3.8完全分布式&#xff1b; 环境搭建具体操作请参考以下文章&#xff1a; CentOS7 Hadoop3.X完全分布式环境搭建 Hadoop3.x完全分布式环境搭建Zookeeper和Hbase 1. 集成MapReduce…

消息中间件之RocketMQ源码分析(十八)

Broker CommitLog索引机制中的构建过程 1.创建ConsumeQueue和IndexFile。 ConsumeQueue和IndexFile两个索引都是由ReputMessageService类创建的 RequestMessageService类图 ReputMessageService服务启动后的执行过程。 doReput()方法用于创建索引的入口&#xff0c;通常通过…