一 单体程序
1.1 单体程序一般是tomcat 链接db进行通信
存在的问题是宕机,性能,饿死等
为了解决上面的问题,单体程序采用的办法:
1 连接池(提升通信的性能(长连接))
2 线程池 (提升客户端和tomcat的连接性能)
1.2 线程池和连接池的关系
1.2.1 联系
无状态情况下:(http)
一个线程池的一个线程对应一个连接池的连接,为了防止并发情况下线程之间互相引用发生污染(需要使用锁,但锁比较耗资源)
采用了threadlocal(本地线程私有)来防止线程间互相干扰,提升效率
有状态情况下:(dubbo)
一般不是线程和连接一一对应关系
1.2.2 资源隔离(性能优化:线程)
将线程池分为两个部分 一个是轻量级线程一个是重量级线程
当客户端发起连接请求时 如果是重量级连接且连接未满 则使用线程并处理;当重量级连接满了 则线程返回友好的提示给客户端并将此线程清空共其他请求使用
如果此时是轻量级请求且轻量级连接未满则此线程可以处理此轻量级请求从而提高性能
1.2.3 分库分表(性能优化:连接)
连表查询一般使用nosql数据库比较好
1.2.4缓存
缓存一般对数据不在乎(一致性要求不高 丢失也无所谓)
存储一般珍惜数据(一致性要求较高 不可丢失)
即使是热数据,如果一致性要求高的话也要使用存储(可以设计分治提升缓存)
二