一、matrix资源及介绍


1.介绍

负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器,同时多服务器能够消除这部分的单点故障。
当然负载均衡器本身就是一个单点故障隐患,可以考虑负载均衡双机热备或其他方案消除单点故障提高可用性。

一个没有使用负载均衡的web server如果挂了那么整个系统都无法使用,也就是我们常说的系统中的单点故障,同样如果大量的用户同时访问这一台服务器,
那么这些用户很可能会遇到加载时间缓慢或者根本无法连接的问题。

这部分的单点故障可以通过引入负载均衡器和至少另一个Web Server来缓解。一般来说所有后端服务器会提供相同的内容,以便用户无论访问哪个服务器都会收到一致的内容。同时由于有多台服务器同时提供服务,也加大了系统的负载能力提高了性能。


2.负载均衡算法

负载均衡算法用于确定流量应该被分发到哪一个健康的服务器上,常见的几个算法如下:

1
2
3
4
5
6
A. Round Robin — 轮转(Round Robin)意味着服务器会被按顺序地选择,比如负载均衡器会将第一个请求分配给第一个服务器,然后下一个请求分配给第二个服务器,
这样分配下去分配完一轮之后回到开头分配给第一个服务器(操作系统调度算法复习一下)。这种方式比较适合各服务器处理能力相同而且每个业务处理量差不多的时候。

B. Least Connections — 最少连接(Least Connections)这个算法意味着负载均衡器会选择当前连接最少的服务器。

C. IP hash — 在这个算法下,负载均衡器根据请求源的IP来决定分发给哪个服务器。这个方法保证了一个特定的用户会一直访问相同的服务器。

其他还有一些不算太常见的算法,比如Url hash、Random等。


3.健康检测(health checks)

在第2点负载均衡算法中我们有一个前提,就是流量只会被分配到健康的服务器上,那么负载均衡器怎么去判断服务器现在是否健康呢?
为了监控健康的服务器,健康检查一般会通过配置的协议和端口尝试去连接服务器来保证服务器正在监听。如果一个服务器的健康检查失败了,也就是说服务器无法正常响应请求,那么就会被自动的移除池子中,流量也不会被分配到这个坏掉的服务器直到它能通过健康检查。


4.负载均衡双机热备(Hot standby)

正如开头所说,负载均衡器本身就是一个单点故障隐患,其中一个解决方案就是双机热备(提高可用性的一大基本方法就是冗余)。
双机热备方案为了解决负载均衡器的单点故障问题,引入了第二个负载均衡器,当主节点GG了之后切换到备用节点。

由于每个socket.io服务器上限就是保持5000个连接数,考虑到大用户量的情况,需要用到一定数量的socket.io服务器,专门用来保持和用户的持久化连接

模拟大量用户并发访问
单个用户访问建立TCP连接在上述是可行的,但是如果大量用户并发访问呢?目前用到 apache ab 工具来进行高并发访问实验。
命令如下
ab -n 10000 -c 100 -r 127.0.0.1:8080

关于socket.io服务器集群: https://www.jianshu.com/p/71ac2fd99457

android xmpp socketio
待运行:C:\wwd\workspace\socketio\chatdemo2
数据库集群
http https 负载均衡

socket.io-redis

由于nginx的反向代理机制和socket.io的自动重连机制,上述架构还具备高可用的特性,即当某个节点down机时,原先连接到该节点上的客户端会自动重连至其它节点上。

节点的数量可以随时增减,不需要暂停服务,只需修改nginx配置即可。

可以通过redis的订阅发布服务来实现其他系统同集群的通信,完成集群的管理工作

由于是分布式环境,所以节点内存中存储的信息(如用户、房间信息)可以考虑持久化到redis或mongodb中。

nginx的ip_hash是基于ip的前三段进行计算的,也就是说ip只有D段不同的两台客户端一定会连接到同一台服务器上,这点测试的时候需要注意。

socket.io服务器集群