对于多并发实时数据的服务器,需要考虑的一些策略,使负载能在不同的服务器进程中异步处理,含有当机恢复服务器进程数据,动态维护服务器进程,提高数据读写的速度。 其中的一些策略如下:
1、p2p :服务器网关中转客户端地址数据消息到另一客户端,客户端之间通信大文件。
2、多网关。
(1)用户网关
支持网关连接的负载均衡,通过网关的分配服务器分配用户连接到的网关。网关支持多端登陆,则每个端登陆不同的用户网关。
(2)分布式子系统网关
每个分布式子系统含自己的网关。用户进入子系统时会重新登陆子系统的网关(如进入视频/语音频道会重新登陆频道的网关)。
另外,用户的多端在子系统如果是互斥的就不需要考虑子系统下的多端登陆的多连接问题。
3、多会话服务器。主要负责中转消息。缓存角色重要数据。当机时数据会转移到另一台服务器(通过网关)。
对于多端登陆,会话服务器中的角色需要保存多个网关连接对象。
4、中转服务器,负责会话服务器之间转发消息。
5、业务服务器分为多服务器
服务器消息的选择方式:
(1)硬哈希(使用配置数量取模)
使用配置数量取模方式选择业务服务器。缺点:不可变化数量。
(2)根据业务服务器连接数量
转发消息服务器上根据业务服务器连接数量选择业务服务器,每次选择下一个。优点:可动态启动服务器,消息流程较简单,一定程度的负载均衡。缺点:数据及其操作分散。
(3)一致性哈希(负载服务器)
负载服务器负责同步服务器哈希列表。
优点:负载分布较好,负载服务器可动态获知当前业务服务器数量,可动态启动(可以根据连接对象数量)。
缺点:负载服务器需要较稳定,有维护哈希列表成本。
理论分析参考:http://blog.csdn.net/chenjiayi_yun/article/details/41624603
6、数据库
(1)数据表分片
针对记录较多的表,需要常查询与插入。
(2)分库
针对记录较多的一类表。
7、数据缓存
(1)自定义数据cache进程
热点数据的业务进程会对应有一个数据缓存进程。比如登陆数据cache服务器、好友数据cache服务器、其他业务数据cache服务器(如鲜花数据缓存服务器)。
(2)memcached数据备份(或者redis)
有不同的方式来使用,一般不可同时使用不同策略。
方式一:写策略,buffer数据,减少写db操作次数(目前较多使用)
把数据及时同步到memcached,使业务进程内存与memcached中的对象在短期内是一致的。 为了加速业务进程的意外数据恢复。
1)进程启动,缓存对象到memcached。
2)内存修改对象时,缓存对象到memcached。
3)内存对象删除时,删除memcached中对象。
4)根据内存对象活跃时间,删除不活跃对象对应的memcached对象(如3天没有访问的)。
方式二:读策略(cache数据),加速数据读取
把数据加载到memcached,为了加速读取
1)在数据访问时加载数据到memcached(或者在进程启动时完全加载,这种需要内存足够大,启动时会有一定时间消耗)。一般适合在中小型应用。
2)动态热加载,在第一次需要数据时同时加载到内存和memcached。 设置memcached对象时间期限(比如30天),让memcached根据回收算法自行回收。较好利用内存。