spring高性能服务器,springcloud微服务多节点高性能、高可用、高并发部署

本文介绍了在一个微服务架构中,如何通过discovery、domain和gateway服务实现服务治理和高可用。前端通过nginx负载均衡访问gateway,后者利用服务发现机制将请求转发到合适的domain服务。当服务实例挂掉时,discovery服务会自动进行故障转移。此外,还讨论了服务发布的策略,并介绍了如何在不影响业务的情况下进行服务发布和更新操作。
摘要由CSDN通过智能技术生成

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

discovery服务是用来注册其余服务的,做为服务治理用。nginx

domain服务是主业务服务。服务器

gateway服务是全部服务的一个入口,用来作一些服务的判断和过滤用。app

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

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

4. domain服务的须要注册到每一个disscover服务上。curl

8002 是 discover服务的端口。fetch

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,配置以下:url

这段在server外面code

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自动会发送心跳给每一个服务,检查服务状态,若是服务状态正常就能够正常使用了。

spring的良好的扩展性,集成度,IOC,AOP事务,已经是项目的基础条件. 整个项目只使用了spring 没有struts,没有hibernate //就极简而言,一个数据库只需要一个Service,就可以查询这个数据库的任意一张表 //以下是我的测试用例 //@Test 查询基本类型 public void testObject() throws Exception{ Finder finder=new Finder("select id from [Users] where 1=1 "); finder.append("and userId=:userId").setParam("userId", 6); Integer id = baseFangService.queryForObject(finder, Integer.class); System.out.println(id); } //@Test 查询日期 public void testObjectDate() throws Exception{ Finder finder=new Finder("select cteateTime from Users where id=6 order by id"); Date id = baseFangService.queryForObject(finder, Date.class); System.out.println(id); } //@Test 查询一个对象 public void testObjectUser() throws Exception{ Finder finder=new Finder("select * from Users where id=6 order by id"); Users u = baseFangService.queryForObject(finder, Users.class); System.out.println(u.getName()); } //@Test 查询分页 public void testMsSql() throws Exception{ Finder finder=new Finder("select * from Users order by id"); List<Users> list = baseFangService.queryForList(finder, Users.class, new Page(2)); System.out.println(list.size()); for(Users s:list){ System.out.println(s.getName()); } } //@Test 调用数据库存储过程 public void testProc() throws Exception{ Finder finder=new Finder(); finder.setParam("unitId", 0); finder.setProcName("proc_up"); Map queryObjectByProc = (Map) baseFangService.queryObjectByProc(finder); System.out.println(queryObjectByProc.get("#update-count-10")); } //@Test 调用数据库函数 public void testFunction() throws Exception{ Finder finder=new Finder(); finder.setFunName("fun_userId"); finder.setParam("userId", 6); String userName= baseFangService.queryForObjectByByFunction(finder,String.class); System.out.println(userName); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值