通过负载均衡减轻单机压力。
包括静态数据使用CDN、本地缓存、分布式缓存等,以及对缓存场景中的热点key、缓存穿透、缓存并发、数据一致性等问题的处理。
比如HBase、TiDB等,但是团队必须熟悉这些组件,且有较强的运维能力。
将次要流程通过多线程、MQ、甚至延时任务进行异步处理。
需要先考虑业务是否允许限流(比如秒杀场景是允许的),包括前端限流、Nginx接入层的限流、服务端的限流。
通过MQ承接流量。
通过多线程将串行逻辑并行化。
比如抢红包场景,可以提前计算好红包金额缓存起来,发红包时直接使用即可。
通过异步任务提前预热数据到本地缓存或者分布式缓存中。
比如数据库和缓存的批量读写、RPC的批量接口支持、或者通过冗余数据的方式干掉RPC调用。
包括采用轻量级的通信协议、合适的数据结构、去掉接口中的多余字段、减少缓存key的大小、压缩缓存value等。
比如将大概率阻断执行流程的判断逻辑前置、For循环的计算逻辑优化,或者采用更高效的算法。
包括HTTP请求池、线程池(考虑CPU密集型还是IO密集型设置核心参数)、数据库和Redis连接池等。
包括新生代和老年代的大小、GC算法的选择等,尽可能减少GC频率和耗时。
读多写少的场景用乐观锁,或者考虑通过分段锁的方式减少锁冲突。
从计算和 IO 两个维度考虑所有可能的优化点,需要有配套的监控系统实时了解当前的性能表现,并支撑你进行性能瓶颈分析,然后再遵循二八原则,抓主要矛盾进行优化。