大并发服务器结构框架
大并发服务器结构框架
基本模型
-
队列 + 连接池
在应用服务器和数据服务器之间有一个数据访问层( DAL ),应用服务器通过 DAL 访问数据服务器,可以将底层的数据库操作对其他层透明化;所以我们给 DAL 抽象出一个统一的接口,供其他层来操作,而底层我们可以分别使用各种ORM工具,或者原生SQL去实现。
它的主要功能:增删改服务、查询、事务管理、并发,另外事务中包括工作单元,查询中包括延迟加载。 -
缓存(分布式)
缓存是用来保存热点数据的;
缓存的更新方式:- 缓存超时,time out
- 缓存换页,LRU(最近最少使用)
- LFU(最不频繁使用)
这种机制称为 nosql(反sql),用于保存非关系型数据( key / value),例如 Redis, memcahed;一般的非关系型数据库都自带有缓存机制
数据库读写分离
- 使用主从服务器,由于一般服务器的读操作 > 写操作,所以主服务器进行写操作,更多的从服务器进行读操作,实现数据服务器的读写分离
- 当主服务器进行写操作之后,对从服务器进行更新,通过日志更新。
使用任务服务器负载均衡
应用服务器被动接受任务
任务服务器的作用:
- 应用服务器上有一个接口,任务服务器可以通过接口监控应用服务器的负载(CPU / IO / 并发 / 内存换页)
- 查询之后选取合适的应用服务器分配任务
缺点:A有3个任务。B有5个任务,任务服务器会将新的任务交给A,但是B的5个任务比A的3个任务执行的更快,会造成分配不公平的问题
应用服务器主动索要任务
当应用服务器空闲时会主动向任务服务器索要任务,会解决上述问题,但是需要更改任务服务器的逻辑
使用多个任务服务器
应当采取心跳机制
一个出现问题,能迅速转移故障
数据量大
以上的服务器优化都是针对并发量大的问题,如果数据量大时,应当进行数据分区
数据分区:
- 垂直分区:
- 用户数据库
- 业务数据库
- 基础信息数据库
- 水平分区:可以横向扩展
服务器性能四大杀手
- 数据拷贝:缓存解决
- 环境切换:多线程问题,单核服务器(采用状态机编程)
- 内存分配:内存池
- 锁:使用逻辑减少锁的使用