1 大并发服务器架构和优化手段
客户端访问服务器,当应用服务器请求太多时,数据库处理不过来,可以采用队列服务和连接池。
主要的业务逻辑可以挪至应用服务器上,数据库辅助的一些业务处理
使用缓存减少对数据库的访问
两种方式缓存定期更新:如果缓存失效,则重新到数据库里查询,实时性差;将热点数据存至缓存,一旦数据库更新,立即更新缓存,实时性好。
缓存还可能出现内存不够的问题,这时需要采用缓存换页,将不活跃数据换出内存,主要方法有FIFO,LRU,LFU。这些缓存技术都有开源的技术,比如nosql(采用key/value),分布式缓存:redis、memcached。缓存假如部署在多个,独立的服务器(分布式缓存)上,则避免了无法多客户端访问同一个cache的局限。
即使有以上方法,仍有可能数据库处理不过来,其中一个原因是数据库读或者写将数据库锁住了,这时可以采用读写分离将数据库读和写部署在不同的服务器上,使数据库负载均衡。当写数据库发生变化后,则需要对读数据库进行同步更新(replication机制–raft等)。
数据库可能仍然过大,这时可采用数据分区的方式,分区方式有两种:垂直分区、水平分区。垂直的意思按数据的种类分区,水平数据时每一种数据都含有一点点,一般是水平分区。
当应用服务器忙不过来时,可部署一个任务服务器,监视应用服务器的负载情况,当新任务抵达时,选择负载最轻的应用服务器,这种情况时应用服务器被动地接受任务,可能会任务分配不公平,这时可采用应用服务器在轻负载时主动请求任务的方式。为了防止任务服务器瘫痪,还需要设置备用的任务服务器,采用HA心跳机制检测彼此状况。
服务器性能四大杀手:数据拷贝(缓存),环境切换(单核采用状态机编程,尽量减少线程切换,多核则需要尽量发挥多核性能),内存分配,(采用内存池),锁(尽量少用)
2 大型网站架构演变过程
- webserver和数据库分离,webserver可进一步动静分离,分为前端(静)和后端(动)
- 缓存处理:客户端(浏览器)缓存,前端页面缓存,后端的ESI页面缓存,本地数据缓存。
- webserver集群(前后端负载均衡)+读写分离(负载均衡)
- CDN、分布式缓存、数据库分库分表
- 多数据中心(将一致性较低的数据用nosql(key-value)提高并发能力,分布式文件系统(GFS)、分布式存储和计算(Map/Reduce)