• SpringCloud 网关和应用的负载均衡


    1、应用的负载均衡,只要以不同端口号同时启动多个应用,通过SpringGateway自带的Ribbon可以自动实现负载均衡。

    配置网关路由uri的时候使用lb://协议

    例如:

      cloud:
        gateway:
          routes:
            - id: websocket_route
              uri: lb:ws://wood-system
              predicates:
                - Path=/webSocket/**
    
            - id: websocket_api
              uri: lb:ws://wood-system
              predicates:
                - Path=/api/webSocket/**
    

    注意:应用需无状态 或 状态做分布式管理。

    2、网关的负载均衡

    方式一:使用nginx
    # 1. 前端资源:通过ngix加载前端静态资源+keepalived实现前端负载
    # 2. 反向代理:前端资源指向端口不要指定网关,指向反向代理服务器,反向代理服务器指向后端网关集群,问题是不能高效实现网关的弹性。 
    # 3. 将前端资源+反向代理整合到一个nginx中,再利用nginx+keepalived实现前端负载+反向代理集群。
    

    问题:关于使用websocket的问题。

    WebSocket是端对端的,所以当一个代理服务器从客户端拦截一个Upgrade请求,它需要去发送它自己的Upgrade请求到后端服务器,也包括合适的头。
    因为WebSocket是一个长连接,不像HTTP那样是典型的短连接,所以反向代理服务器需要允许连接保持着打开,而不是在它们看起来空闲时就将它们关闭。

    其他方式:

    方式二:
    # 1. lvs
    
    方式三:
    # 1. dns
    
    方式四:
    # 1. F5
    

    3、使用nginx实现网关的负载均衡,nginx配置

    
    #user  nobody;
    worker_processes  1;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    	
        sendfile        on;
    
        keepalive_timeout  65;
    		
    	
    	# websocket 协议升级
    	map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    	}
     
    	# 负载均衡
    	upstream balancer {    
            # ip_hash;            
            server localhost:9000 weight=1 max_fails=2 fail_timeout=30s; 
            server localhost:9001 weight=2 max_fails=2 fail_timeout=30s; 
        }
    
        server {
            listen       8812;
            server_name  localhost;  
    	    client_max_body_size    500m;	   
            location / {
                proxy_pass http://balancer;
                proxy_http_version 1.1;
                proxy_next_upstream http_502 http_504 error timeout invalid_header;
    			
    			proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    						
    			# 默认情况下,连接将会在无数据传输60秒后关闭,proxy_read_timeout参数可以延长这个时间。
    			proxy_read_timeout 300s;
    			proxy_set_header Upgrade $http_upgrade;
    			proxy_set_header Connection $connection_upgrade;
            }                      
        } 
    	
    	server {
            listen       8888;
            server_name  localhost;
    
            location / {
                root   html/dist_localhost8812;
                index  index.html index.htm;
    			try_files $uri $uri/ /index.html;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    	
    }
    
  • 相关阅读:
    PHP(运算符,语句,函数)
    数据库高级查询
    MySQL数据库常用函数
    mySQL数据库数据查询操作详解
    mySQL数据库设计范式及增删改查操作
    mySQL-创建表
    JavaScript-选项卡
    JavaScript做DIV下拉列表
    JavaScript-事件
    JavaScript函数-递归
  • 原文地址:https://www.cnblogs.com/asker009/p/14747818.html
Copyright © 2020-2023  润新知