L1-204-Ribbon负载均衡-轮询算法(10分)
题目要求:
最近出题人在学分布式,想分享给大家这个有趣东西。
负载均衡算法:rest接口第几次请求数 % 服务器集群总数 = 实际调用服务器位置下标,并且每次服务重启后rest接口计数重新从1开始
127.0.0.1:8002、127.0.0.1:8001 组合成为集群,它们共计两台机器,即集群总数为2,根据上述描述以下是调用原理:
当总请求数为1时:1 % 2 = 1 对应下标位置为1,则获得服务地址为127.0.0.1:8001
当总请求数为2时:2 % 2 = 0 对应下标位置为0,则获得服务地址为127.0.0.1:8002
当总请求数为3时:3 % 2 = 1 对应下标位置为1,则获得服务地址为127.0.0.1:8001
…
输入
第一行输入服务器集群总数n
第二行开始输入n个服务地址
接下来输入相应的命令,发送请求代号为®、服务重启代号为(S)、结束服务代号为(E)
输出
根据输入的命令输出对应的服务地址
样例输入
2
127.0.0.1:8002
127.0.0.1:8001
S
R
R
R
S
R
E
样例输出
127.0.0.1:8001
127.0.0.1:8002
127.0.0.1:8001
127.0.0.1:8001
解题思路:
如题目要求,理解题意就能通过。本题很好理解,也没有什么坑。
通关代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
int n, rest = 1;
char command;
string value;
vector<string> RAC;
vector<string> results;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> value;
RAC.emplace_back(value);
}
while (command != 'E') {
cin >> command;
if (command == 'S') {
rest = 1;
} else if (command == 'R') {
results.emplace_back(RAC[rest % n]);
rest++;
}
}
int LEN = results.size();
for (int i = 0; i < LEN; i++) {
cout << results[i] << endl;
}
return 0;
}
通关截图: