系统性能瓶颈很大一部门都是指向了数据库,而循环中查询数据库非常耗资源。
展示少量树布局数据时,循环内查询数据后进行数据组装。导致服务器在测试环境就频繁宕机。
利用java.util.Comparator#compare方法调用数据库查询接口,导致线上性能极低。二、克制把redis这种缓存当数据库用
缓存无法完全符合事务特性ACID原则,数据存在不可利用的风险比较大。
会员数据直接存储到redis缓存中,数据量也比较大,常常会丢数据。三、克制循环中创建新线程,尽量利用线程池
死循环中最好有休眠语句存在,另外还要退出机制。
订单同步应用请求第三方平台数据时,平台方没有翻页的结束标记,同时代码中没有退出机制直接导致该平台订单同步异常。五、共享变量必须考虑线程安全
尽量避免利用共享变量,无法避免时必须考虑线程安全。
微信抽奖功能中,每次中奖都是同一个,原因是对共享变量进行了修改操作,背面的逻辑获取的是脏数据。六、浮点盘算必须利用BigDecimal
假如需要准确盘算,非要用String来够造BigDecimal不可。七、批量操作必须考虑合理分组
数据量大时须批量操作,而批量操作必须分组,避免一次操作耗时过久导致连锁反应。
订单汗青迁移数据时,分组为5000,导致数据库删除操作没有走索引。建议分组数量在100~500之间。八、克制单点摆设
增加一台服务器摆设可以降低50%的服务不可用风险。九、克制大表的全表扫描不加限流
全表扫描已经很耗数据库资源了,频繁处理请求不加限流就更雪上加霜。
售后问题跟踪单的导出,时间索引没有控制范围,导致全表扫描。导出数据接口没有加限流加剧服务资源斲丧。十、读写分离架构,必须考虑读到逾期数据
读写分离在业务数据更新写入后再重现读取时会存在延迟问题,导致读到脏数据。
A. 双十一开启读写分离,主从同步有延迟,导致业务事件重复发送,原因是读取到汗青 脏数据。
B. 会员积分服务创建数据后其他服务应用马上查询,效果是查询到空数据。十一、事务内有外部调用,必须考虑外部不稳定和性能问题
事务本身是很耗资源,极易产生超时的问题,要避免再引入外部不稳定因素。
个人中心服务,事务内远程查询漂亮分享官的积分,导致性能极低。外部接口调用需要设置超时和最长等候时间。十二、接口提供方和Xxljob定时任务必须考虑幂等性,防止重复调用导致严重的业务灾难
根据墨菲定律,接口重复调用是会必现的线上问题。
订单付款接口,幂等逻辑不严谨导致重复付款问题。apollo报表中心由于xxljob一秒内重复调治任务,导致统计数据重复,严重影响管理层的决策判定。十三、克制资源操作(IO等)后未开释
利用事务注解大概编程式事务时,需要考虑默认的事务流传属性,根据需要决定是并入同一个事务还是开启新事务。
OMS异步操作任务,调用第三方接口时,修改状态为确认中状态,需要先提交事务更新,背面的逻辑操作成功则需要修改为已确认,失败则修改为待审核。当第三方接口没有返回明确的成功或失败时,状态应该保持确认中不变。假如调用接口前不开启新事务,会导致背面回滚的数据有误。十五、覆写对象的equals()方法时必须同时覆写hashCode()方法
equals和hashCode方法是对象在hash容器内高效工作的基础,正确的覆写这两个方法才能保证在hash容器内查找对象的正确性,同时一个好的hashCode方法能大幅提升hash容器服从。十六、克制含事务的循环内加线程同步锁
循环上层包罗事务,利用synchronized锁,会导致MySQL事务锁和JVM同步锁相互等候死锁问题。
不加限制的批量创建线程会抢占大量系统的资源,引发OOM等连锁异常,最终导致宕机
将new MapReduce(xxx)创建线程池的代码放在API接口实现方法中没有加其他限制,导致引发OOM宕机,中间触发了Redis连接超时、Kafka重复消耗等异常十八、所有公共代码(比如api包、通用工具类)或公共服务(中台服务、业务应用自身服务)的改动,必须考虑向下兼容
对多个系统项目都有依赖的公共代码进行修改时,需要考虑兼容汗青逻辑,除非确认所有利用方都可以或许担当功能修改产生的影响
项目A的开发人员将公共jar包中逻辑进行了修改(该修改需要开启一个新配置才和原逻辑一致),同时deploy jar包进行测试,新配置只在测试环境进行了操作。依赖了公共jar包的项目B这时进行线上发版,但是没有进行配置(而且也不知道有这个配置),导致线上事故。十九、克制在新建表大概增加修改表字段时设置字符集和排序规则
字符集和排序规则后期修改需要耗费巨大的资源,影响业务稳定性,为了保持schema-表-表字段三者的字符集和排序规则一致,克制在新建表大概增加修改表字段时设置字符集和排序规则。
A项目的某一个表的字段设置了字符集和排序规则,导致与表-schema的排序规则不一致,在联合查询时这个表作为关联字段,报关联字段排序规则不一致的错误,无法进行关联查询,只能修改,假如是一张大表修改会非常耗时,占用大量的io会影响业务。二十、新建表大概增加修改表字段时利用TEXT/BLOD字段需要评估须要性
TEXT/BLOD的大字段会产生磁盘暂时表,而且不能利用全文索引,各种操作的代价都非常高昂,在业务中最好不要利用,假如实在是要利用,也要独立出一张表专门用于存储,不得跟业务表中利用。
A项现在期的一张表中利用了一个TEXT存储json大字段,导致这张表占用了600多G的空间,其中那一个大字段就占用90%的表空间,后续的查询,迁移,碎片整理都非常的耗资源。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |