负载均衡

负载均衡(LB)是任意一个分布式系统中的非常关键的组成部分。它可以通过多个度量(随机,轮训,随机加权重,CPU与内存的利用率等)来分配多个跨多个节点资源的负载。当系统进行分发请求时,对所有资源进行状态跟踪。如果一个服务节点不可用,或者高频发送错误、不能接受新的请求(阻塞没有反应)LB讲停止路由到该节点。

为了达到全链路的高可用,可扩展,可以在三个地方加入LBs。

Lb.png
  • User Client->Server之间 (Nginx 、网关 、硬件)
  • Server ——Server之间 (Eureka+Ribbon、zk、Consul、Etcd )
  • Server-DB (MyCat)

可以多种方式实现LBs

  1. 智能客户端

    智能客户端将请求发送到个服务主机,并平衡负载。它还检测到没有响应的节点,以避免发送请求。智能客户端还必须检测已恢复的主机,处理添加新主机等。

    将负载平衡功能添加到数据库(缓存、服务等)客户机通常是开发人员很有吸引力的解决方案。它看起来很容易实现和管理,特别是当系统不大的时候。但是随着系统的发展,LBs需要演化为独立的服务器。

  2. 硬件负载

    负载平衡最昂贵但性能最好的解决方案是购买专用的硬件负载均衡器。虽然它们可以解决很多问题,但是硬件解决方案非常昂贵,而且配置起来也不容易。

    因此,即使是拥有大量预算的大公司也经常会避免使用专用的硬件来满足所有负载均衡的需求。相反,它们只将它们作为用户请求的第一个接触点,并使用其他机制来实现对其网络内的流量的负载平衡。

  3. 软件负载均衡

    如果我们想要避免创建一个智能客户的痛苦,并且由于购买专用硬件过多,我们可以采用一种称为软件负载均衡器的混合方法。

    HAProxy是流行的开源软件LB之一,负载均衡器可以放置在客户端和服务器之间,或者在两个服务器端层之间。如果我们能够控制客户端运行的机器,HAProxy就可以在同一台机器上运行。我们希望负载均衡的每个服务都可以在该机器上有一个本地绑定的端口(例如localhost:9000),客户端将使用这个端口连接到服务器。这个端口实际上是由HAProxy管理的;这个端口上的每个客户端请求都将被代理接收,然后以有效的方式传递到后端服务(分配负载)。如果我们不能管理客户机的机器,那么HAProxy可以在中间服务器上运行。类似地,我们可以在不同的服务器端组件之间运行代理。HAProxy管理健康检查并将机器移到这些池中。它还平衡了这些池中所有机器的请求。

对于大多数系统,我们应该从软件负载均衡器开始,然后根据需要转移到智能客户端或硬件负载平衡。

你可能感兴趣的:(负载均衡)