zoukankan      html  css  js  c++  java
  • springcloud微服务多节点高性能、高可用、高并发部署

    1. 共有三个服务 discovery服务,domain服务,gateway服务。

    discovery服务是用来注册其他服务的,作为服务治理用。

    domain服务是主业务服务。

    gateway服务是所有服务的一个入口,用来做一些服务的判断和过滤用。

    2. 有三台机器分别为192.168.1.1,192.168.1.2,192.168.1.3

    3. 三台服务器上分别部署各个服务。

    4. domain服务的需要注册到每个disscover服务上。

    8002 是 discover服务的端口。

    client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
    defaultZone: http://192.168.1.1:8002/lcs-discover/eureka/,http://192.168.1.2:8002/lcs-discover/eureka/,http://192.168.1.3:8002/lcs-discover/eureka/

    5. 前端访问用nginx,配置如下:

    这段在server外面

    upstream gateway {
    server 192.168.1.1:8001;
    server 192.168.1.2:8001;

    server 192.168.1.3:8001;
    }

    这段在server里面

    location /lcs-gateway {
    proxy_pass http://gateway;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 1;
    proxy_read_timeout 1;
    proxy_send_timeout 1;
    }

    6. 前端请求说明:

    http://localhost:8090/lcs-gateway
     
    7. 实现说明:
    当前端请求到8090 端口下面的lcs-gateway的时候,gateway拦截住并做了一个转发,转发的时候负载到不同的服务器(轮询机制)。
    当一台gateway接收到请求后,去找对应的服务发现eureka,所有的服务都注册在discover上面了,discover会随机找一个domain服务提供方法。
    当一个服务的domain挂掉后,discover会找其他的domain顶替,这个是discover的选举原理。
    当一台服务器的gateway挂掉后,在nginx 请求转发的时候做了一个连接超时的判断,如果1s内不通,他会自动连接另外的服务器。
    8. 问题汇总
    1. 当把一个节点的服务kill掉,一定记得要给discover发消息通知。消息接口
    http://localhost:8002/lcs-discover/eureka/apps/appID/instanceID delete 请求
    可以通过http://localhost:8002/lcs-discover/eureka/apps 这个查询当前discover 下面有哪些服务。
    2. 发布说明
    在高可用的系统部署中,发布很重要,因为发布的时候要考虑这个节点下面的服务是否正在使用。
    所以有三种发布方案:灰度发布,轮询发布,平滑发布,具体发布细节,后面实战了补上。
    9. 在多个节点发布说明
    当业务量特别大的时候,发布服务需要不影响业务的情况下进行发布。怎么能做到不影响业务呢,当通过discover的时候,你可以看到当前有哪些服务注册到这个节点上了,然后用命令

    curl -X PUT -i http://10.118.218.151:8002/lcs-discover/eureka/apps/DATAIMP-SERVICE/LCS218151:dataimp-service:8005/status?value=OUT_OF_SERVICE

    DATAIMP-SERVICE 这个为服务名称

    LCS218151:dataimp-service:8005 这个为discover中看到的服务节点名称

    当执行完这个命令之后,在discover 中看到的服务状态为 out_of_service这个红色的显示。

    这样当前端访问到网关的时候,网关就不会给这个服务上发送请求了。

    然后运维就可以在这个服务上进行换包,上线等操作,当上线完成后,重启服务,discover自动会发送心跳给每个服务,检查服务状态,如果服务状态正常就可以正常使用了。

     
  • 相关阅读:
    如何下载文件
    线程方法wait()和notify()的使用
    多线程的同步问题
    线程
    线程上下文类加载器(Context ClassLoader)
    自定义ClassLoader的使用
    类加载器及其双亲委托机制
    类加载机制导致静态变量出错问题
    JAVA JVM助记符
    JVM调试说明
  • 原文地址:https://www.cnblogs.com/baoyi/p/springcloud_master_cluster.html
Copyright © 2011-2022 走看看