当前位置: 首页 > news >正文

系统设计注意事项

@避免大事务、慢事务,因为事务会给数据上锁。事务中不能有接口调用、文件操作等

@注意更新/查询命中数据库索引,避免表锁,

@数据量大/读写量大时,可以考虑分库分表、冷热隔离、读写分离、异构存储(ES、HBASE、DORIS等)、冗余字段(宽表减少表join)、固态硬盘

@避免死锁,包含数据库/代码等

@常用的状态与处理模式

状态:待提交、待审批、已拒绝(终态)、待处理、处理中、成功(终态)、失败(终态)、不确定、转人工

处理模式:实时处理、准实时处理、定时处理、日终处理、人工处理等

@跨系统交互注意一致性、幂等性,避免单边账

调用外部系统状态变更API时(例如:转账、资金解冻、账户冻结、状态变更等),

先本地记录执行流水,避免调用信息丢失(唯一流水号作为表唯一键避免重复消费)。

CAS执行状态更新为处理中(并发控制),记录唯一流水号。

然后再调用外部API并上送唯一流水号(对方幂等控制)。

根据API返回结果,更新执行状态为成功/失败/不确定(异常)。

对于结果不确定(异常)的通过异步自动任务补偿对账、查询结果并更新状态或做后续处理,例如结果为失败发起冲正等。

@ 注意热点数据抢锁/竞争

@在合理的前提下,尽可能缩小并发锁包裹的范围和粒度,并减小单一锁竞争(例如用分段锁)

@避免并发计算错误\重复

悲观锁、乐观锁、CAS比较交换、无锁并发、幂等、

顺序正确(比如先收到处理成功通知,后收到处理中消息)

@注意并发性能

并行化、异步化、分治、扩容、流量削峰、缓存、限流熔断、负载均衡、CDN

流量从前端->负载均衡->后端->核心系统->数据库,应呈现漏斗状,即流量越来越小、越来越平滑

@单机TPS优化

合理提高tomcat线程池、连接池。

数据库索引、sql调优。

多级缓存。

调整JVM堆内存、更换垃圾回收器(G1\ZGC)。避免OOM、STW、FULLGC。

代码优化:区分IO密集/CPU密集、运用合理的算法和数据结构、串行/循环/递归转并行、同步转异步、释放内存。

@ 注意安全问题

加密、验签、越权(水平、垂直)

@ 代码设计注意隔离不变/可变

依赖抽象不依赖具体、策略模式、防腐层、代理层.....

@ 微服务拆分合理性

避免简单程序复杂化。

频繁联动操作的多个数据表,且需要强一致性保证的,可考虑尽量同一微服务同一事务处理。

@ 复杂的系统或者业务,尽可能向简单设计。拆分成多个简单的步骤、模块,最后组装成一个复杂业务。保证每一个独立的方法、模块维护简单。

业务复杂的接口,可以做异步化拆分,同步只标记为处理中,剩余复杂耗时逻辑都异步处理,以提高接口响应速度。

@异步处理/消息同步等场景,

注意幂等消费(只处理一次)、

时序性(例如只能处理时间戳、版本号更大的数据)、

状态机流向(例如状态更新从处理中->成功,不能反向更新)、

@大量数据的批处理,可以使用多线程、多进程、多机分片/分批并行处理。分片分批依据可以是 商户号、客户号、时间(日/时)、固定排序分页页码、预分批次号等等

@跨系统变更操作,可以做日间/日终对账。

日间对账可以通过调用对方查询接口获取单笔结果。

日终对账可以下载对方对账单获取全量结果,然后做日全量数据比对。

@考虑上线回退策略,

例如靠配置回退、全量回退。尽量将影响范围控制在最小。多个组件协同上线时,极可能避免自己回退影响到其他组件,避免强迫其他组件一起回退,导致其他组件的其他功能不能正常上线。

在方案设计之初,各个组件就应该考虑好单一组件回退的兼容性设计,做到单一组件回退,不影响其他组件正常版本更新

@全局跟踪号:从前端发起接口请求时生成,上送后端流转的全局唯一标志。通过跟踪号可以确定唯一一次接口调用。在本机日志中可以通过全局跟踪号过滤出此次调用的所有日志,在跨组件间调用时,通过全局跟踪号过滤此次调用在各个组件中的日志和请求响应报文

http://www.jsqmd.com/news/634106/

相关文章:

  • 数据结构 - 树
  • 3步掌握PyBroker:Python量化交易与机器学习框架完全指南
  • 桐庐昱华教育性价比怎样,多维度解读其实力 - mypinpai
  • BiliTools终极指南:免费高效的B站资源下载与AI总结神器
  • 永久冻结IDM试用期:开源脚本如何让30天试用变成无限期?
  • 游戏资源逆向工程:深度解析碧蓝航线Live2D资源提取技术
  • 2026最强B站资源下载指南:BiliTools跨平台工具箱使用全解析
  • 为什么92%的AIAgent在长周期任务中“学废了”?:解构记忆-策略-反馈三通道耦合失配问题及实时校准协议
  • 终极Axure RP汉化指南:4步快速实现中文界面
  • 技术判断力之AI三问粗
  • 性价比高的北亚牧业猪饲料厂家产品盘点,好用吗值得选吗 - 工业推荐榜
  • 五层协议体系结构详解:如何在实际项目中应用各层功能(含常见错误排查指南)
  • 终极指南:如何让Masa Mods在Minecraft 1.21中完美显示中文界面
  • OpCore-Simplify:零门槛黑苹果配置的革命性解决方案
  • 猫抓浏览器扩展:一键抓取网页视频资源的终极解决方案
  • 项目介绍 MATLAB实现基于长短期记忆网络(LSTM)进行多变量单步光伏功率预测的详细项目实例(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力
  • 可靠的线束加工实力厂商探讨,船舶线束加工工艺优化方法 - myqiye
  • Hunyuan-MT-7B功能体验:支持藏蒙维哈朝5种少数民族语言
  • 终极Go微服务架构解析:从单体到分布式系统的完整演进指南
  • OpCore Simplify终极教程:如何用智能工具3小时搭建稳定黑苹果系统
  • 国内用户升级 ChatGPT Plus / Pro、Claude Pro / Max / Max+的实测攻略
  • DocToc高级用法:预提交钩子、Docker部署与团队协作完整指南
  • Minecraft跨平台世界转换终极指南:如何使用Chunker实现Java版与基岩版存档互转
  • Sambert中文语音合成实战:一键部署,轻松生成带情感的AI语音
  • QT表单验证避坑指南:QLineEdit只能输入字母数字的3种实现方式
  • 大数据分析怎么用?一篇讲清大数据分析应用
  • 在Mac上免费体验本地AI绘画:Mochi Diffusion完全指南
  • 终极指南:如何使用Babel-Minify实现ES6+代码最小化压缩
  • 终极指南:如何使用Unit构建高效多线程可视化应用
  • go-cqhttp终极指南:快速搭建高性能QQ机器人框架