微服务架构(二)分布式系统高并发设计方案

性能优化指标

微服务架构(二)分布式系统高并发设计方案

优化手段


调用了多少RPC接口,载入多少数据,使用什么算法;非核心流程能否异步化,没有数据依赖的逻辑能否并行执行。

微服务架构(二)分布式系统高并发设计方案

优化层次


从整体到细节,从全局角度到局部角度


架构设计优化层次


分布式系统微服务化、无状态化设计、动态水平弹性扩展
分库分表、读写分离
分布式cache、多级多类型缓存
调用链路梳理,热点数据尽量靠近用户
提前拒绝、保证柔性可用

算法逻辑优化层次


用更高效的算法替代现有算法而不改变其接口
增量式算法,复用之前的计算结果,比如一个报表服务,要从全量数据中生成数据量很大,但是每次增量的数据就很小,则可以考虑只计算增量,
然后与之前的合并,这样处理的数据量就很小。
并行执行,比如一段逻辑调用了多个RPC接口,而这些接口之间并没有依赖关系,可考虑并行调用,降低响应时间。
异步执行,分析业务中的主次流程,把次要流程拆分出来异步执行
当系统时间是瓶颈时,采用空间换时间的逻辑算法,分配更多空间节省系统时间
当系统空间容量是瓶颈时,采取时间换空间算法策略,比如网络传输是瓶颈,使用系统时间换取空间的压缩,HTTP的gzip压缩算法,APP
的请求分类接口,使用版本号判断哪些数据更新,只下载需要更新的数据,使用更多的代码逻辑处理更细粒度的数据。

代码优化层次


循环遍历是否合理高效,不要在循环里调用RPC接口、查询分布式缓存、执行SQL等,先调批量接口组装好数据,再循环处理。
代码逻辑避免生成过多对象或无效对象
ArrayList、HashMap初始化容量设置是否合理,扩容是有代价的。
对数据对象是否合理重用,比如通过RPC查到的数据能重用则必须复用。
根据数据访问特性选择合适数据结构、比如读多写少,考虑CopyOnWriteArrayList。
拼接字符串的时候是使用String相加还是使用StringBuilder进行append(在StringBuilder的容量预分配的情况下,StringBuilder的性能比String相加性能高15倍左右)。
是否正确初始化数据,有些全局共享的数据,饿汉式模式,在用户访问之前先初始化好。

微服务架构(二)分布式系统高并发设计方案

 

上面图中第一种写法比第二种写法效率要高20倍,第一种写法是按行遍历,第二种写法是按列遍历。

微服务架构(二)分布式系统高并发设计方案

数据库代码优化层次


数据库建表语句尽量用小的数据结构,IP使用int而非varchar,使用enum的场景使用tinyint替代。
避免使用select * 查询数据,只查询需要的字段,避免浪费数据IO、内存、CPU、网络传输。
字段尽量为Not NULL类型,NULL需要额外的存储空间进行处理,并且很难查询优化。
分析查询场景建立合适的索引,分析字段的可选择性、索引长度,对长的varchar使用前缀索引。

微服务架构(二)分布式系统高并发设计方案

在mysql中如果查询的数据量达到了总数据量的30%,那么数据库引擎是不会走索引的。 

 

电商秒杀方案

微服务架构(二)分布式系统高并发设计方案

 

 

微服务架构(二)分布式系统高并发设计方案

 

微服务架构(二)分布式系统高并发设计方案