通用架构设计规范

实战性设计规范!!!

内容分类编号系统性分类规范明细建议项
模块设计1.1扩展性、健壮性模块不互相依赖互相依赖部分抽取成公共的模块
1.2可用性每个逻辑实体(独立部署的组件)必须考虑冗余备份策略 
1.3扩展性服务端必须支持集群部署,不允许出现单点情况 
1.4扩展性应保证横向扩展(通过增加主机数量扩展处理能力)时对客户端透明,无需对客户端做变更 
关联调用2.1可维护性接口文档中须明确定义异常情况的错误码、错误说明 
2.2可维护性接口文档中须明确定义接口方法的输入输出 
2.3扩展性、健壮性接口实现必须考虑新老版本的兼容性或多版本并行,做到服务更新对关联方的影响最小化 
2.4可维护性服务接口必须具有可测试性(依赖第三方服务是否可mock或者有可用联调测试环境) 
2.5健壮性接口调用必须支持服务降级、限流与熔断。支持开关控制对外部接口的调用 
2.6健壮性接口设计必须考虑是否支持幂等(重试)数据一致性考虑
2.7扩展性、健壮性系统或服务之间不能存在循环依赖 
2.8扩展性、健壮性应用层之间不能调用 
2.9健壮性数据同步必须有相应的机制检测同步的数据是否一致 
2.10健壮性数据同步程序须支持补同步,支持人工干预同步 
日志规范3.1扩展性应用中不可直接使用日志系统(Log4j、Log4j2、 Logback) 中的 API,应使用日志框架SLF4J 中的 API日志按天滚动
3.2性能对 trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方式避免重复打印日志,浪费磁盘空间,务必设置 additivity=false
3.3可维护性、安全性日志必须分级、关键操作必须添加审计日志 
3.4可维护性记录日志必须采用统一的日志格式稳定项目日志级别可只记录info/error级别即可
3.5灵活性必须支持日志级别可动态调整谨慎地记录日志。生产环境禁止输出 debug 日志; 有选择地输出 info 日志; 如果使
用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘
撑爆,并记得及时删除这些观察日志
3.6可维护性运行时异常的日志记录中必须包含堆栈信息 
3.7安全性记录的日志中不能记录敏感信息,如密码等,如有敏感信息必须进行屏蔽处 
3.8其他其它遵循《IT服务中心日志记录规范》,《安全日志规范》 
数据库规范4.1扩展性前期容量规划必须包含一年的数据量预估 
4.2安全性敏感信息不能明文存放数据库,参见《信息安全规范》 
4.3安全性禁止在sql语句中使用拼接参数以防sql注入 
4.4扩展性数据量如果超过千万级别必须考虑进行数据分片分库分表shardingkey及hash策略考虑:业务查询是否都能带上之分片key、一个处理业务最小单元是否能落在同一个库保证单库事务;
4.5健壮性新系统必须采用公司统一规定的字符集UTF8mb4 
4.6扩展性禁止在数据库中使用存储过程、数据库定时任务、触发器 
4.7健壮性查询结必须有最大记录条数限制,建议不超过2000条,大量的数据查询必须分页查询阿里druid数据源可添加selectLimit=2000配置,详见https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter
4.8可用性以下情况都不允许共用数据库:
1.重叠维护窗口低于2小时的子系统
2.外购子系统与自开发子系统
3.跨业务线
4.OLAP和OLTP子系统
 
4.9可用性不同子系统共用数据库,不允许共用用户 
4.10可靠性使用Mysql必须使用Innodb引擎 
4.11可用性含有业务数据、订单数据、用户数据等具有唯一性、时间戳性、不可再造等特征的数据库,必须搭建容灾库并配置同步 
4.12其他其它请遵循公司DBA规范 
中间件5.1可维护性JVM启动参数中须配置HeapDumpOnOutOfMemory参数jvm内存大小 
5.2健壮性Dubbo的服务定义中必须配置timeout accepts actives参数 
5.3灵活性、健壮性消息中间件的使用必须考虑消息的优先级、消息顺序。消费消息必须考虑消息的重复处理(是否支持幂等) 
5.4可维护性必须优先使用公司标准中间件,新引入中间件必须经过架构评审 
配置6.1灵活性环境相关配置(如依赖的服务调用地址、APPID、APPSECRET)禁止写在代码中写入统一配置中心如disconf等
6.2灵活性可能经常变化的参数需支持动态修改 
6.3安全性敏感信息必须进行加密处理 
6.4其他其它遵循《IT服务中心应用配置规范》 
多线程7.1健壮性线程池必须有大小限制,禁止使用无界队列队列长度合理、拒绝策略关注业务数据丢失
7.2可维护性线程池大小必须可动态配置 
7.3健壮性多线程使用中须避免产生线程安全问题线程安全问题、类属性变量、SimpleDateFormat HashMap非线程安全类使用时多加注意
7.4健壮性防止无限制创建线程,防止线程不回收 
锁、事务8.1性能禁止在一个事务中采用for循环处理大量数据(避免长事务)须考虑MySQL锁成本(行锁升级至表锁,MySQL锁其实是锁索引)
8.2健壮性须有最终一致性方案处理跨系统事务 
8.3健壮性防止产生死锁优先使用cas原子操作,锁粒度尽可能小
注意解锁顺序及异常情况避免死锁等
定时任务9.1可维护性须支持手动立即触发、错过重次执行、查看任务的执行状态推荐当当的分步式任务elastic-job
9.2可用性必须防止存在单点故障 
9.3健壮性多实例并发运行时需考虑同一数据重复执行多次问题并发运行控制
缓存10.1性能、可用性缓存使用必须有前期的容量规划(key大小、数量级)是否要引用代理层如codis等
10.2性能、可用性必须根据实际场景选择采用分布式(redis)/本地(ehcache/guava cache)或联合使用的缓存方案数据量很小但访问非常频繁的数据建议优先使用本地缓存,如数据字典、国家行政区划分等;
具体业务相关的、数据量大的优先使用分布式缓存;
10.3安全性缓存数据必须设置过期策略防止不必要的占用空间,防止数据不一致导致问题
10.4健壮性临时存储与持久存储的key一定要分开实例 
文件传输与存储11.1可维护性临时读写可使用本地文件,如果是长久保存(如文件上传这些的)须使用公司标准存储方案1、生命周期与session 同步的临时文件可选择不在instance 间共享;
2、生命周期大于session 的临时文件必须在instance 间共享
11.2安全性禁止跨网络区域共享文件 
11.3安全性文件访问必须有访问权限控制,记录操作日志 
11.4灵活性文件存放路径必须可配置 
11.5健壮性防止因多个instance 同时处理一个文件产生错误数据 
11.6可用性长久存储文件必须避免单点丢失数据 
其他12.1安全性系统必须防止SQL注入、XSS、CSRF等漏洞 
12.2安全性敏感数据必须加密传输、防篡改、防重放 
12.3安全性系统必须防止越权操作 
12.4安全性登录信息必须加密传输 
12.5安全性必须使用CAS进行统一登录控制 
12.6安全性所有业务系统的APP,必须部署在DCN区 
12.7安全性所有外联单位、终端用户、互联网用户,不允许直接访问DCN区 
12.8安全性除DCN区APP外,不允许访问业务数据的DB 
12.9安全性所有存放业务数据的DB,必须部署在DCN区 
12.10可用性在程序中,打开的资源对象、流对象须及时关闭释放建议使用Java7新特性try-with-resources
12.11可维护性系统代码必须使用统一的代码风格,遵守公司统一的《编码规范》查看阿里巴巴java开发指南
12.12性能,可用性,可维护性关键接口必须有性能TP99、curl访问存活、系统心跳存活监控报警端口存活监控、多地区访问监控
12.13安全性遵循其他《安全规范》要求 
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半月孤客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值