您的位置:首页 > 数据库 > Redis

利用Redis+Nginx实现Sping-Boot应用的负载均衡部署

2017-10-08 10:53 746 查看

利用Redis+Nginx实现Sping-Boot应用的负载均衡部署

@(个人博客)

众所周知,通过Nginx可以简单高效的实现对web后台服务负载均衡的需求。Nginx中内置权重等策略可动态配置实际连接每个后台进程的策略。

Spring-Boot是时下最为流行的web后台框架,其开箱即用的特性、与外部组件良好的集成性,越来越受到程序员们的青睐。

要实现多个Spring-Boot程序共同向外提供相同的web服务能力(每个进程拥有相同的能力,横向扩展),需要解决三个主要的问题:1、多进程间共享用户Session;2、每个进程需要无状态,特殊情况下需要共享的状态,需要集中化管理;3、对于某些一致性要求较高的场景,需要使用分布式锁进行相关逻辑控制。Spring-Boot提供与Redis无缝集成的能力来解决第一个问题,第二和第三个问题,需要读者自己根据自己应用的特点有针对性的解决。



1、Spring-Boot结合Redis实现外部用户Session

直接上干货,首先,我们需要在pom文件中引入redis和spring-Session的依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>


然后,我们需要在application.yml文件中配置一个redis,比如这样:

spring:
redis:
host: redis-session
port: 6379


这边作的配置比较简单,只设置了host和port,并且没有设置密码。实际上,spring-data-redis中会使用jedis连接池,而jedis连接池底层使用了comoms-pools2来管理连接对象,commons-pool2的配置,都可以在这边配置。

接着,需要新增一个配置类:

@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}


好吧,要做的事情已经做完了,使用spring
9796
-boot世界就是这么简单,这个时候不用修改原来的代码,所有的httpsession信息就会保存到redis中了,如下图所示:



2、配置Nginx连接多个Spring-Boot进程

Spring-Boot应用启动后,每个应用实例会对应一个端口,假设我们要对两个完全相同的应用实例进行负载均衡,其端口分别为8888和9999,那么Nginx可以如下配置:

upstream 127.0.0.1 {
server 192.168.1.180:8888 weight=1;
server 192.168.1.180:9999 weight=1;
}

server {
listen       8080;
server_name  127.0.0.1;

location / {
proxy_pass        http://127.0.0.1; proxy_set_header  X-Real-IP  $remote_addr;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}


这个配置已经是支持websocket协议的标准配置了。Ngnix的配置还是比较复杂的,后面可以单独写一篇博文来说明。在配置负载均衡时,需要特别注意配置好http响应的超时时间,当一个应用实例宕机时,假如请求被分发到这个实例中,那么需要超时时间长度,原请求才会被转发到仍工作的应用实例中。那么,如果设置了一个很长的超时时间,那就有可能会导致某些请求响应非常慢的情况出现,这一点要特别注意。

3、总结

使用Spring-Boot+Ngnix+Redis实现后端的负载均衡,是比较清晰易懂的,对于应用实例不是特别多,又有一定负载均衡需求的场景,是一套性价比较高的解决方案。假如应用实例特别多,服务治理难度很大,就可以考虑使用微服务框架了,推介Spring-Cloud是一个不错的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: