• 负载均衡,过载保护 简介


    听完陈硕的Load Blance 负载均衡课程

    恍然大悟,

    负载均衡 类型一般分为2种:

    1.基于 connect  (简单点)

    对于每个connect 进行负载

    2.基于 request (复杂点,可以对不同的任务进行区分。  比如报警,关机,损坏 等重要信息)

    对于request 每个请求 进行负载

    第一种有一些弊端, 比如connect 可能会遭遇DDOS攻击, 导致平均连接数都非常高,但是没有计算任务。        或者 内存,CPU,IO 某个任务超时,会出现长时间 等待。

    第二种可以处理优先级, 会好一点。

     ---------------------------------------------------

    client 

    proxy server A,B,C,D, E    (ABC过载保护)

    business server 1~100      (40~70 过载保护)

    Tips: 实际上还可能是分布式的,需要根据延迟,地区选择proxy server =>  business server , 

     (若本地出现问题,或者高负载,则选择邻近proxy server =》 business server  )    直接选择 最低延迟的也行。

    client 优先选择本地proxy server ,

    proxy server 优先选择本地 business server 

     ----------------------------------------

    关于负载均衡方式:

    1.  client 直接 连接多个business  server 0~10 ,

      - 得到所有的business  server   CPU状态 ,IO(网络IO状态,硬盘IO状态),内存状态。

      - 选取  (最近, 延迟最低)   资源最空闲的server 进行业务 

    2. client proxy

      - client 连接 proxy server A,B,C  得到某个,或者所有 business server  状态

      - clinet 从proxy  server 得到某个最优值后,连接 business server 5

      

    3. 混合模式

      - client 通过随机数,选择proxy server D (若该proxy 不在线,或出现问题,则继续随机 选择)   

        注意:一般随机数的获取是通过时间 取模,同一个时间的client 随机数都是一样的,所以随机要自己实现下,把MAC地址,PID进程ID ,等信息加上去。

         比如AA:BB:CC:DD:EE:FF 通过时间取模得到 4,就是DD, DD 的值  模 proxy server 的数量(221 mod 5 =  1 , 那就选第二台proxy server), 

      - proxy server  D, 得到的  business server 71(延迟最低,  负载中等。       最优先是地区和延迟,)。

    关于proxy server  和   business server  返回的状态信息,

    --------------------

    过载,或掉线异常

    - client 连接proxy server 中,  未返回

    - proxy server 连接business  server 中, 未返回

    - client 连接business  server 中, 未返回

    - client 已经发送 业务到 business  server,但是未回应,是否发送成功(断线)

    - client 已经发送 业务到 business  server,且已回应,发送成功。     但是 business  server 没有返回业务数据。(SQL 查询较忙,或者SQL 挂了)

    ---------------------

    监控server  和  日志server (DB)

    需要设计的更加严谨,任意机器掉线都不影响业务。

    发过来信息,记录日志DB,  server 返回信息,记录DB。

    需要有个内存server 来保留日志ID,方便查询日志DB,

    client 也是有DB,

      - 还未发送放到table A

      - 发送成功 放到table B ,

      - 发送失败放到table C,  

    中间的负载均衡,可以部署 2级。

    -------------------------------

    1.代理要验证client 合法性,合法则更新Business Server到client, 所以BS 肯定是合法的, BSIP 不必泄露可随便更新。   (可以代理数据,   也可以通过代理告诉client  Business Server 地址)

    2.有些是协议前4bytes 是包长度

    3. 提供lib +header给客户,客户不需要写 连接(重连,断线)的业务代码,只需要调用就行。 (不需要给IP ,协议,  也不需要更新,  可以自动更新) 

       涉及NAT

    4.TCP 半关闭 状态,CLOSE_WAIT,  是调用SHUT_DOWN(),   说明不发送,但是可以还可以接收网络上的(剩余)数据,   完整关闭需要close()

    5. server 何时关闭Connect(),这个不是GC 垃圾回收的问题, 是所有服务 都会面对的问题,  客户何时离开?  一般用超时 踢掉。

    6.TCP可靠性?   网络层(路由,交换机)接收到数据,但是 业务层不一定,  所以 数据包要做校验。

    7.为什么用GO,现在OS 启动进程几百,几千个,一个进程也只可以启动几百线程,  而go rountine 可以启动几万,几十万个。  

    8.   多线程 和 EVENT 用哪个? 简单的话,用多线程。      EVENT 的话,复杂度会增加太多。     

       所以能用多线程解决  就用多线程。 

       EVENT如果会用 就用EVENT。 

      结论:具体看业务,选择。  (多线程  简单会更好维护)

  • 相关阅读:
    用Java开发第一个APP
    去除字符串空格并竖向排列
    并发容器 concurrentHashMap--1.7 更改
    java并发容器CopyOnWriteArrayList 使用场景和内部实现分析
    java非并发容器ArrayList 和 LinkedList 优缺点比较及其实现源码分析
    并发容器之CopyOnWriteArrayList分析
    单例模式
    [Android]知识总结一:Activity
    阿里巴巴fastjson的使用问题
    java跨域请求的方式
  • 原文地址:https://www.cnblogs.com/scotth/p/8367620.html
Copyright © 2020-2023  润新知