网站布局规范,数商云公司简介,百度拍照搜题,南昌网站建设风格文章目录 功能设计流程图数据库设计缓存设计job设计接口设计监控设计预案设计 功能设计流程图 
与外部系统交互、本系统模块之间流程#xff0c;比较好用的画圈软件draw .io或在线的process on 
数据库设计 
从DDD角度界限上下文、ER图、评审表结构设计是否合理#xff0c;表… 文章目录 功能设计流程图数据库设计缓存设计job设计接口设计监控设计预案设计  功能设计流程图 
与外部系统交互、本系统模块之间流程比较好用的画圈软件draw .io或在线的process on 
数据库设计 
从DDD角度界限上下文、ER图、评审表结构设计是否合理表的关联关系是否合理、是否创建索引、是否大数据量表考虑放到分片库以及分片字段设计 
缓存设计 
缓存结构是否合理 redis结构选择(string、hash、 list、set) 对于C端高并发接口hash结构要慎重用key不能用固定的key防止key倾 斜可以采用string结构value尽可能压缩下比如 {“groupId:”:“536363737” “groupId”:“989898989”}改为536363737#989898989大大节省redis空间。对于数据量很大单条valve报文很大的业务如果经常判断某个值是否存在可以考虑采用set结构利用sismember方法时间复杂度O(1) 缓存过期时间是否合理不能怕脑袋胡乱给一个时间如果存放的数量过期时间一定要给短一些比如2日分钟或半小时否则增长很长打爆redis缓存是否设计考虑预热和重建机制缓存中尽可能不能使用delete命令delete会阻塞redis特别是存放数量很大的hash、set、list 容易阻塞redis引1发事故替换方案expire -1是否是否设计二级缓存本地缓存分布式缓存实现方式caffine或quavatredis对于数据量不大热点数据一般1W条以下单条报文10kb以下比如网点数据、航线数据)可以放本地缓存这些热点数据查询非常频繁容易造成redis倾斜本地缓存可以抗这种高井发流量.防穿透处理 提供c端的接口查询不到数据尽可能不要穿透到数据库防止打爆数据库查不到一定记得打印告營日志及时人工千预提前将数据预热到缓存中(系统启动预热或者运营后台有手动刷新缓存按钮或者有个job刷缓存)  
job设计 
job逻辑要考虑幂等设计job逻辑尽可能轻量级不要太重导致执行逻辑很久(如果确实逻辑比较复杂可以分拆job或者从代码层面优化例如分批井行处理、减少单次处理数据〕构建数据到缓存类似的job尽可能选择时间在晚上12点以后尽量不要白天进行因为白天流量很大重建缓存容易引起接口抖动对于定时执行的job设计执行时间的时候要慎重考虑线上整个job执行的时间根据这个时间配置cron表达式不要拍脑袋随意设置不然本次job没执行完下一次job执行的时候容易错过。对于大表数据百万、千万甚至亿级可以利用xxjob、saturn等分布式调度框架的分片处理能力并行刷数据提供处理速度。 
接口设计 
高并发接口必须在测试环境压测清楚的知道接口支持的QPS另外根据压测报告给出的优化建议及时调整线上的配置、代码优化。提供给C端的接口要清楚曝光位省、然后根据接口可能预计调用的流量、压测的接口最大支持的QPS决定是否扩容、是否需要限流及兜底逻镇、是否熔断程序中涉及的异常信息及时配置错误监控告警遇事做到心中有数。对于业务关键位置及时打印info级别的业务追踪日志如果是高并发接口要做好开关能秒级关闭因为打印日志也特别耗性能。程序设计方面高井发接口尽可能使用缓存、能异步就异步 一般用mq不要用多线程异步、 尽可能采用无锁设计防止线程Lock CPU冲高批量写库接口前置逻铜提前尽早过滤掉不合规運银缩短接口整个调用链路时长提升接口整体吞吐量。接口要考虑无状态设计、昇等设计(考虑分布式锁唯—key)、安全设计(接口方法签名、是否接第三方防刷服务判断是否黑产用户  无状态服务客户端的每次请求必须具备自描述信息通过这些信息识别客户端身份。服务端不保存任何客户端请求者信息 有状态服务: 即服务端需要记录每次会话的客户端信息从而识别客户端身份根据用户身份进行请求的处理典型的设计如 tomcat 中的 session  对第三方服务做到零信任考虑降级、熔断与业务方确认好兜底逻辑处理。工具类尽可能使用apache、google等出的、 一些github小众的开源框架很多在高井发场最有bug和性能瓶颈。接口的时间复杂度部分在设计的时候尽可能保证是0 (1例如调用第三方接口for循环调用的是否可以提到缩环外传多个id批量调用一次时间复杂度从0n降为0(1) 
监控设计 
核心接西做好监控例如调用量上涨/下跌80%、接口健康度监控 5分钟error超过100次、5分钟接口超过1s 100日次、5分钟不可用次数超过1000次应用监控例如应用cpu、内存层、gc、繁忙线程数、数据库连接池连接数监控告警中间件监控例如redis可用性、cpu-内存-流量-大key-热key-慢查询监控、kafka可用性-消息积压情况-丢失率监控告警数据库监控例如mysql cpu、慢sql监控告警业务监控例如发券量暴涨或暴跌、活动注册人数同比或环比异常 
预案设计 
设计预案减少损失 
设计全局开关系统接近不可用通过配置中心全局开关快速切断接口流量保证系統可用遇到系统故障非核心功能通过配置中心开关下线保证整体服务可用应用能自动扩容这里就要求应用做到无状态设计比如我们之间有一些应用有调用加密机但是新应用节点需要申请白名单这种设计方式就没法自动扩容