单体转变集群 —— 有哪些优化的技术手段?
》出现的问题:宕机、性能、饿死(隔离,个别请求无响应)
- 访问数据库的性能,使用长连接减少握手,提高通讯效率
- 引入连接池,池化技术
- 分治优于读写分离(分开治理即按业务等进行分表,绝对分治即减少表之间依赖,减少事务问题;读写分离存在同步和性能问题)
- 应用内线程并发,提高运行效率
- 使用线程池threadlocal,考虑通讯是否有状态?无状态http协议,无锁化提高效率;有状态例如dubbo协议,存在消息Id,归属哪个线程方便回调,就需要调整线程数来提高效率
- 多个业务做多个线程池隔离(资源隔离),减少线程等待
- 缓存,不同于存储(缓存对数据没有绝对保证,可放热数据,要考虑分布式事务一致性问题,所以一致性要求极高的数据建议要用数据库去做分治)
- 加入redis前置缓存,减少数据库瓶颈,分担数据库压力,提高有效数据库请求(可考虑将数据库数据转移至缓存,将减去部分数据库请求)
- redis设置集群,分担redis单台压力,redis单台宕机重启后(只影响了出现故障redis的数据),减少数据库回传重启redis缓存或者不做回传当透传数据库后回写到重启redis的压力。不做redis集群主从同步(redis分治),保持独立的单实例单节点,否则极易出现脏数据和低性能。分布式下数据一致性难度太高。
0条评论