网络编程——3、大并发服务器架构介绍
网络编程——3、大并发服务器架构介绍
分布式,A-B之间不能使用本地的进程间通信(如共享内存),而应使用TCP。

网络编程——3、大并发服务器架构介绍
网络编程——3、大并发服务器架构介绍

提高数据库的并发能力的手段:

1、加一个中间件DAL,让客户端请求排队:DAL队列+连接池
2、主要的业务逻辑应该放在应用服务上去处理,数据库只做辅助的业务处理。
3、增加缓存设计,将热点数据存至缓存(但缓存的更新、同步需要考虑。)
网络编程——3、大并发服务器架构介绍

缓存同步:

1)缓存存在一定时间限制,若timeout,则缓存失效,需重新去数据库中查询,再更新缓存;【此方法实时性比较差】
2)一旦数据库中的数据更新,立即通知前端缓存更新【此法实时性较高,但实现起来麻烦一些】

缓存换页:内存不够,将不活跃的数据换出内存。
具体的策略有:FIFO
LRU(least recently used)(最近最少使用) 详细点击12面试题:LRU原理和Redis实现
LFU(least frequently used)(最不频繁使用)。

分布式缓存:

减轻服务器的负担

网络编程——3、大并发服务器架构介绍

分布式缓存有哪些呢:

它们都是开源的。
nosql
redis
memcached

数据库读写分离:

写是独享的,会把整个程序阻塞。
对于大部分应用来说,读操作 > 写操作。

对数据库进行负载均衡:

  • 现在主流数据库都具有 replication 机制。
  • 数据库的主-从机制,分为主数据库和从数据库,分别提高写入和读出。
  • 当主数据库被写入,发送改变时,需要更新从数据库,这时候是基于 replication机制,通过日志文件发送更新的数据。这就实现负载均衡。

网络编程——3、大并发服务器架构介绍

应用服务器的负载均衡:

方案一:应用服务器被动接受任务

增加一个任务服务器来实现,任务服务器可以监视当前各个应用服务器的负载,看是CPU高、IO高、并发高、还是内存换页高。查询到这些信息后,选取负载最低的服务器分配任务。

方案二:应用服务器主动到任务服务器接收任务进行处理
根据自己的空闲程度,主动去选择。负载均衡更加公平一些。

1、应用服务器的负载均衡,就能接收更多的连接请求。
2、任务服务器不止一台,这样当一台发生故障可以用另外一台,即满足高可用。

数据分区(分库、分表)

网络编程——3、大并发服务器架构介绍
分库:垂直分区。
如有三个表,用户表、业务表、基础表,则把每一个表都分成一个库。

水平分区(更常用)
每一个库里面都有用户表、业务表、基础表,三个表水平切分到各个库。

服务器高性能编程

服务器性能的四大杀手:

  • 1、数据拷贝

缓存来解决

  • 2、环境切换(理性创建线程)

该不该用多线程、
单线程还是多线程好、
单核服务器(采用状态机编程,效率最佳),若采用多线程,又不能并发处理,反而增加了线程间切换的开销。
多核服务器,多线程能充分发挥多核服务器的性能,但也要尽量减少线程间切换。

  • 3、内存分配

增加内存池,减少向操作系统申请内存。

  • 4、锁竞争

锁会降低性能,应尽量减低锁的使用。

相关文章: