架构:负载均衡

业务增长到一定量级,单纯的增加增加服务器的配置已经不能满足业务需求,这个时候集群模式就是出现了。在集群模式中,负载均衡是回避不了的。负载均衡就是将请求“均匀”的分摊给不同的服务器。

架构:负载均衡

负载均衡

浏览器(客户端)负载均衡

通过DNS来实现负载均衡。DNS是域名解析服务器,可以将域名转换成IP。服务器可以将多个IP注册到DNS,这样DNS在解析的时候,可以以轮询的方式返回这些IP中的一个,从而实现负载均衡。

这种实现方式的特点是,简单。另外,这种方式还能够根据客户端的地理位置返回离客户端较近的服务器的IP,加快与客户端的交互。这种方式的弊端也非常明显:1.小公司没有能力构建自己的DNS;2.DNS无法感知后端服务器的负载,只能实现简单的轮询处理;3.DNS的更新较慢。我们知道,域名会被缓存在本地和各级DNS中。当域名对应的IP更新的时候,客户端要等到缓存过期才能使用新的IP。

LVS+nginx

LVS是四层负载均衡器,工作在内核态。nginx是七层负载均衡器,当然现在nginx也推出了四层负载均衡器,但是是收费功能。什么是四层负载均衡器和七层负载均衡器呢?四层和七层是指负载均衡器工作在网络协议的哪个层次。四层是IP层(网络协议层),在这一层面的负载均衡器可以感知IP协议,也就是能够知道客户端的IP,可以根据客户端的IP选择将请求分发到哪个服务器上。请求的分发是通过修改目的IP的方式实现的,即将目的IP修改成后端服务器的IP。七层负载均衡器工作在应用层,对于http请求,负载均衡器可以知道请求的URL、session等。一般情况下,四层负载均衡器的性能要高于七层负载均衡器。

对于nginx来说,配置简单,通过可以实现轮询、随机、加权轮询和基于连接数的负载均衡等。

为了提高LVS的可用性,我们使用双机对外提供服务。可以使用keepalived+VIP的方式实现双机。双机中,一台机器是主机,对外提供服务,另一台为备机,不对外提供服务。二者通过keepalived软件来判断主机是否故障,自动完成VIP从主机切换到备机。主备机的切换对客户端是无感知的。

服务层负载均衡

这一层一般使用RPC框架来实现,如DUBBO、SpringCloud等。

数据存储层

对于数据库,有如下两种常用的负载均衡方式:

1.读写分离。数据库是一主多从,即一台主服务器负责数据的写操作,从库对外提供读服务,主库完成写操作后,将更新同步到从库或者从库监控主库的写LOG,将写LOG同步到从库。这种模式很适合写少读多的情况。

2.分库。当数据库表大到一定规模后,就要考虑分库了,即将一张表拆分到两个数据库中。常见的拆分规则有:

1)按照范围拆分。比如对于用户的ID,可以将小于5000的拆分到一个库中,大于5000的拆分到另外一个库。这种拆分比较简单,但是可能会出现活跃的用户仅在某一个段内,导致负载均衡效果不是很理想。

2)hash。比如根据用户ID计算哈希值,然后对数据库服务器个数取模,得到这个用户应该存储在哪个数据库。这种方式可以很好的实现负载均衡,但是在增加服务器的情况下,数据的重新分布比较慢,而且可能移动的数据比较多。现在一般使用一致性hash,更好的实现负载均衡并较少服务器变化时数据移动的数量。

发布了84 篇原创文章 · 获赞 64 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/kxkxyzyz/article/details/104503633