系统设计杂谈:
- 硬件:
- 网络
- 内存
- CPU
- 软件
-
编码
-
IO使用更合适的io模型
同步阻塞io、同步非阻塞io、io多路复用、异步io
-
多线程线程安全问题
锁的使用,单体应用或是分布式应用,是否使用分布式锁?使用redis、zookeeper还是数据库?使用synchronized还是reentrantlook?.
-
线程(池)的使用
线程池大小的考虑,应用为IO密集型还是计算密集型,计算密集型应用应该减少线程数量,大小为硬件支持的线程数量,避免频繁切换线程,提高cpu利用率;io密集型应该考虑增加线程数量
-
-
设计模式
提高应用可拓展与安全性,应该采用合适的设计模式,
例:
-
垃圾回收
使用合适的垃圾回收算法,提高垃圾回收效率,减少fullgc.
例:
-
数据结构的使用
使用合适的数据结构,提高内存使用率,减少垃圾回收的频率,避免频繁的fullgc.
例:
-
单体应用
- 技术选型
分布式应用
-
技术选型
选用使用人数较多,易于维护的技术类型,在现有技术无法满足时应该根据项目规模选择是否需要对原有产品进行改造或技术自研;
-
架构部署
考虑系统的高性能,高并发,高可拓展性等一系列互联网应具备的基本特征。网络安全、网络延迟、数据安全、主备切换、灾难恢复、数据存储等。
上图是我能想到的对于系统优化一些关注点,当然所有事情都具有两面性,分布式环境下的并发问题,缓存一致性问题,如何保证消息不会丢失等等再给应用添加每一个功能的同时都应该记录下来它的弊端,然后统一消除影响。
接下来我将按照章节一点点讲述的我的思考。