大并发服务器开发架构介绍

大并发服务器开发架构介绍

 

架构逻辑

(1)当数据库服务器每秒只能处理1000个请求,而从应用服务器传来10000个请求时,此时考虑加入DAL(data access layer)数据访问层(可以是一台独立的服务器队列+数据库连接池),但是这种方法可能造成延时,第一个请求与最后一次请求的时间间隔是10秒钟,如果系统要求响应时间为5秒,显然这种情况下不能满足需求。所以应尽可能地将主要地业务逻辑挪到应用服务器处理,数据库只做辅助地业务处理,降低数据库地压力,且数据库服务器地运算能力是比不上应用服务器的。

(2)为了降低访问数据库的频度,还应在应用服务器和数据库服务器之间加上一层缓存cache,当应用服务器请求数据时,先去访问cache,当cache中没有,再去访问数据库服务器。其中涉及到缓存更新(缓存同步),(a) 当去缓存查询时, 如果发现缓存的内容失效,就重新去数据库查询,实时性比较差(b)一旦数据库中的数据更新,立即通知缓存更新,实时性比较高。

(3)和应用服务器类似,缓存服务器应该有多个,这就牵涉到分布式缓存。使用nosql(反sql)来实现,key/value形式,例如有redis、memcached

(4)当缓存服务器出现频繁换页时,说明内存不够,将不活跃的数据换出内存。FIFO、LRU(least recently used)最近最少使用、LFU(least frequently used)最不频繁使用(操作系统课程里面内存换入换出的算法)

(5)数据库的读写分离,数据库的读操作 》写操作, 利用主从机制对数据库服务器进行负载均衡,master服务器负责写,slave服务器负责读,如果master主服务器中有数据更新,使用replication机制,让slave从属服务器进行复制更新。

(6)应用服务器的负载均衡。增加一个任务服务器来实现,任务服务器可以监视应用服务器的负载, 比如CPU高、IO高、并发高、内存换页高,查询到这些信息之后,选取负载最低的服务器分配任务。这属于应用服务器被动接受应用服务器指派的任务。也可以由应用服务器主动去请求任务服务器中的任务。

(7)如果数据库读写分离之后,每个服务器数据量还是很大, 考虑数据分区(分库、分表)。分库:垂直分区,将用户表、业务表、基础信息表分成不同的库,也就是用户表自身就是一套主从服务器机制, 业务表、基础信息表也是如此。这样每个数据库服务器的数据量减少,提高并发能力。最常用的还是水平分区:将一个数据库切分为10个数据库,每个数据库都有业务表、用户表、基础信息表,只是将表里面的记录水平切分到不同的数据库。假设用户表、业务表、基础信息表都有10条记录,水平切分到10个数据库,每个数据库都有用户表、业务表、基础信息表中的一条记录。这时候DAL层也需要改写业务逻辑,如何访问数据库,该到哪个数据库去访问。水平切分之后 ,我们就可以很容易的横向扩展数据库,只要它的压力出现了瓶颈。

(8)数据库的压力降低了,缓存就有可能出现瓶颈,就需要更多的缓存服务器了,应用服务器出现了瓶颈,就增加应用服务器,任务服务器出现了瓶颈就增加任务服务器。哪一个层面出现了瓶颈,就在哪一个层面上增加服务器。这就是一个分布式系统架构的思路。

 

前面我们所说的架构,实际上很多时候可以用一些开源的软件来搭建。我们所编写的应用服务器它的性能提升,我们也需要有一些服务器的高性能编程技术。

服务器性能四大杀手

数据拷贝(缓存来解决,在服务器内部,内核到应用层之间建立缓存,减少数据拷贝)

环境切换 (理性创建线程,服务器到底该不该用多线程,单线程好还是多线程好,如果服务器是单核,使用多线程不一定能提高性能,此时采用状态机编程,效率最佳。多线程能充分发挥多核服务器的性能)

单核服务器是不能够并行处理任务的,当大量的任务提交到服务器,此时使用多线程也不能够使得服务器并行处理任务,反而会增加线程间的切换开销。但是我们可以采用状态机的编程,一个任务过来了,某个任务执行一段时间,可能又切换到了另外一个任务,当然这个任务可能还没有处理完,它处于某种状态,一个任务又处理了一段时间,切换到了另外一个任务,让它有序的把这些任务都处理完,而且我们使用的是单线程,就减少了线程切换的开销。类似于操作系统里面的进程切换,操作系统的进程切换对于一个单核的服务器来说也是一个cpu ,把它的cpu时间分享给多个进程,每个进程相当于有自己的一些状态,这种思想和操作系统进程切换的思想是类似的。

多核服务器使用了多线程,我们也应当尽可能避免线程之间的切换,并不是说你创建的线程越多越好,线程创建多了就会出现线程切换的开销。

内存分配(增加内存池,减少内存分配,减少向操作系统申请内存)

锁竞争(锁能降低性能,有时候我们应该通过逻辑避免锁的使用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值