[{ "id": "router1", "uri": "lb://user-api-service", "order": 0, "filters": [{ "args": { "parts": "1" }, "name": "StripPrefix" }], "predicates": [{ "args": { "pattern": "/test/**" }, "name": "Path" }] }]
uri使用了负载均衡,但是对应的定义"user-api-service"需要提前现在配置文件中声明。aliCloudTest
├── api-gateway -- 网关
├── api-service -- 对外开放api接口
├── api-service2 -- 对外开放api接口(模拟集群环境)
├── user-center -- 用户详细信息服务
├── user-login -- 用户登录服务
└── user-login2 -- 用户登录服务(模拟集群环境)
用户详细信息表结构及mock数据:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- Table structure for user_info
DROP TABLE IF EXISTS user_info
;
CREATE TABLE user_info
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
user_id
bigint(20) NULL DEFAULT NULL COMMENT '用户id',
true_name
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '真实姓名',
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- Records of user_info
INSERT INTO user_info
VALUES (1, 1, '甘道夫');
SET FOREIGN_KEY_CHECKS = 1;
用户登录用户名记密码表结构及mock数据:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- Table structure for user_login
DROP TABLE IF EXISTS user_login
;
CREATE TABLE user_login
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
user_name
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '登录用户名',
user_password
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '登录密码(暂不做MD5加密)',
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- Records of user_login
INSERT INTO user_login
VALUES (1, 'test', '1234');
SET FOREIGN_KEY_CHECKS = 1;
1.负载均衡的心跳列表,默认是30s心跳一次,且每次心跳后会在下一秒再心跳一次,为了防止网络不好的情况下导致的丢包;可以设置心
跳间隔时间(配置详见gateway模块的bootstrap.yml中的配置及注释)。
1.由于消费者与生产者之间dubbo方式调用默认的是随机Random访问,想要改成按照生产者的相应时间动态分发请求LeastActive。
* dubbo负载均衡策略
- random loadBalance:
- 随机,按权重设置随机概率。
- 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
- roundRobin loadBalance:
- 轮询,按公约后的权重设置轮询比率。
- 存在慢的提供者类即请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
- leastactive loadbalance:
- 这个就是自动感知一下,如果某个机器性能越差,那么接收的请求越少,越不活跃,此时就会给不活跃的性能差的机器更少的请求。
- consistanthash loadbalance:
- 一致性 Hash 算法,相同参数的请求一定分发到一个 provider 上去,provider 挂掉的时候,会基于虚拟节点均匀分配剩余的流量,抖动不会太大。如果你需要的不是随机负载均衡,是要一类请求都到一个节点,那就走这个一致性 Hash 策略。
* 使用leastactive loadbalance需要在流量大的情况下才能看见差异。
2.自建startup.sh :java -jar user-login2-1.0-SNAPSHOT.jar > /home/logs/log.txt &
3.linux文件关键字次数命令: grep -o 'XXXX' log.txt|wc -l
4.如果同一个jdk同时启动user-login和user-login2会产生一些很佛性的问题(即时指定不同端口启动),比如断点走到user-login上,但是实际的打印输出是user-login2的内容。
可能原因是user-login与user-login2的代码是一样的,只是端口不同,在本地打出来的包可能在jdk看来是同一个。
我的解决办法就是再招个虚拟机启动user-login2,保证一个jdk就启动一个相同的生产者。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。