作家
登录

关于负载均衡的一切:总结与思考

作者: 来源: 2018-01-05 16:03:56 阅读 我要评论

  • hashed_request_info = hash(request_info)  
  • return server_lst[hashed_request_info % len(server_lst)] 
  • 只要hash结不雅足够分散,也是能做到绝对均衡的。

    有状况的请求

    一致性哈希

    哈希算法的缺点也很明显,当节点的数量产生变更的时刻,请求会大年夜概率分派到其他的节点,激发到一系列问题,比如sticky session。并且在某些情况,比瘸愧布式存储,是绝对的不许可的。

    随机算法(random)

    为懂得决这个哈希算法的问题,又惹人了一致性哈希算法,简单来说,一个物理节点与多个虚拟节点映射,在hash的时刻,应用虚拟节点数量而不是物理节点数量。当物理节点变更的时刻,虚拟节点的数量无需变更,只涉及到虚拟节点的从新分派。并且,调剂每个物理节点对应的虚拟节点数量,也就相当于每个物理节点有不合的权重

    起码连接算法(least connection)

    以上的诸多算法,要么没有推敲到节点间的差别(轮训、随机、哈希),要么节点间的权重是静态分派的(加权轮训、加权随机、一致性hash)。

    推敲这么一种情况,某台机械出现故障,无法及时处理请求,但新的请求照样会以必定的概率源源赓续的分派到这个节点,造成请求的积存。是以,根据节点的┞锋实负载,动态地调剂节点的权重就异常重要。当然,要获得接节点的┞锋实负载也不是一概而论的工作,若何定义负载,负载的收集是否及时,这都是须要推敲的问题。

    每个节合适前的连接数量是一个异常轻易收集的指标,是以lease connection是最常被人提到的算法。也有一些侧重不合或者更复杂、更客不雅的指标,比如最小响应时光(least response time)、最小活泼数(least active)等等。

    一点思虑

    起首来看看“算法衡量”中提到的第三个问题:同一个请求是否分发到同样的办事节点,同一个请求指的是同一个用户或者同样的独一标示。什么时刻同一请求最好(必须)分发到同样的办事节点呢?那就是有状况 — 请求依附某些存在于内存或者磁盘的数据,比如web请求的session,比瘸愧布式存储。怎么实现呢,有以下几种办法:

    (1)请求分发的时刻,包管同一个请求分发到同样的办事节点。

    这个依附于负载均衡算法,比如简单的轮训,随机肯定是不可的,哈希法在节点增删的时刻也会掉效。可行的是一致性hash,以及分布式存储中的按范围分段(即记录哪些请求由哪个办事节点供给办事),价值是须要在load balancer中保护额外的数据。

    (2)状况数据在backend servers之间共享

    常见互联网分布式架构如上,分为客户端层、反向代劳nginx层、站点层、办事层、数据层。可以看到,每一个下流都有多个上游调用,只须要做到,每一个上游都平均拜访每一个下流,就能实现“将请求/数据【平均】分摊到多个操作单位上履行”。

    1. 【客户端层〗】稻反向代劳层】的负载均衡,是经由过程“DNS轮询”实现的
    2. 【反向代劳层〗】稻站点层】的负载均衡,是经由过程“nginx”实现的
    3. 【站点层〗】稻办事层】的负载均衡,是经由过程“办事连接池”实现的
    4. 【数据层】的负载均衡,要推敲“数据的均衡”与“请求的均衡”两个点,常见的方法有“按照范围程度切分”与“hash程度切分”。

    包管同一个请求分发到同样的办事节点,这个只是手段,目标是请求能应用到对应的状况数据。如不雅状况数据可以或许在办事节点之间共享,那么也能达到这个目标。比如办事节点连接到共享数据库,或者内存数据库如memcached

    (3)状况数据保护在客户端

    这个在web请求中也有应用,即cookie,不过要推敲安然性,须要加密。

    关于load balancer

    接下来答复第四个问题:关于load balancer,其实就是说,在哪里做负载均衡,是客户端照样办事端,是请求的提议者照样请求的3。具体而言,要么是在客户端,根据办事节点的信息自行选择,然后将请求直接发送到选中的办事节点;要么是在办事节点集群之前放一个集中式代劳(proxy),由代劳负责请求求分发。不管哪一种,至少都须要知道当前的办事节点列表这一基本信息。

    如不雅在客户端实现负载均衡,客户端起首得知道办事器列表,要么是静态设备,要么竽暌剐简单接口萌芽,但backend server的具体负载信息,就不实用经由过程客户妒攀来萌芽。是以,客户端的负载均衡算法要么是比较简单的,比如轮训(加权轮训)、随机(加权随机)、哈希这几种算法,只要每个客户端足够随机,按照大年夜数定理,办事节点的负载也是均衡的。要在客户端应用较为复杂的算法,比如根据backend的实际负载,那么就须要去额外的负载均衡办事(external load balancing service)萌芽到这些信息,在grpc中,就是应用的┞封种办法

    图1:关于负载均衡的一切:总结与思虑

    可以看到,load balancer与grpc server通信,获得grpc server的负载等具体具体,然后grpc client大年夜load balancer获取这些信息,最终grpc client直连到被选择的grpc server。

    而基于Proxy的方法是更为常见的,比如7层的Nginx,四层的F5、LVS,既有硬件路由,也有软件分发。集中式的特点在于便利控制,并且能轻易实现一些更周详,更复杂的算法。但缺点也很明显,一来负载均衡器本身可能成为机能瓶颈;二来可能惹人额外的延迟,请求必定先蓬勃到负载均衡器,然后达到真正的办事节点。

    load balance proxy对于请求的响应(response),要么不经由proxy,如LVS;要么经由Proxy,如Nginx。下图是LVS示意图(来源见水印)

    图2:关于负载均衡的一切:总结与思虑

      推荐阅读

      无服务器化是云计算的未来吗?

    【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞? 大年夜多半云平台的软件都是弗成知的,这些平台闪开辟人员可以决定若何精确地设计和解决问题。但谷歌的做法>>>详细阅读


    本文标题:关于负载均衡的一切:总结与思考

    地址:http://www.17bianji.com/lsqh/40284.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)