负载均衡
引入依赖
参考文档:依赖引入
初始化 polaris.yaml
你需要在项目的根路径下创建一个 polaris.yaml 文件用于初始化 polaris-cpp SDK。polaris.yaml配置详细
SDK实例构建
当初始化好 polaris.yaml 文件之后,你可以直接使用 include polaris/consumer.h, 使用polaris::ConsumerApi::CreateWithDefaultFile() 方法进行构造一个 ConsumerApi SDK 实例
#include "polaris/consumer.h"
int main(int argc, char** argv) {
consumer_ = std::unique_ptr<polaris::ConsumerApi>(polaris::ConsumerApi::CreateWithDefaultFile());
}
服务路由
GetInstances
每次获取一批可用服务提供者实例,该方法会执行路由流程。
该方法默认会过滤掉不健康、隔离、权重为0、被熔断的实例。
说明:
执行路由流程的条件
- 配置了 GetInstancesRequest.SourceService.Metadata 属性,会触发自定义路由流程
- 设置了 GetInstancesRequest.Metadata 属性,会触发元数据路由流程
/// @brief 获取单个服务实例请求
class GetOneInstanceRequest : Noncopyable {
public:
/// @brief 构建获取单个服务实例请求对象
/// @param service_key 命名空间和服务名
explicit GetOneInstanceRequest(const ServiceKey& service_key);
/// @brief 设置hash key,用于一致性哈希负载均衡算法选择服务实例。其他负载均衡算法不用设置
void SetHashKey(uint64_t hash_key);
/// @brief 设置 hash 字符串, sdk 会用 hash_string 算出一个 uint64_t
/// 的哈希值用于一致性哈希负载均衡算法选择服务实例。其他负载均衡算法不用设置
void SetHashString(const std::string& hash_string);
/// @brief 设置负载均衡类型。可选,默认使用配置文件中设置的类型
/// LoadBalanceType可取值如下:
/// - kLoadBalanceTypeWeightedRandom // 权重随机
/// - kLoadBalanceTypeRingHash // 一致性hash负载均衡
/// - kLoadBalanceTypeMaglevHash // 一致性Hash: maglev算法
/// - kLoadBalanceTypeL5CstHash // 兼容L5的一致性Hash
/// - kLoadBalanceTypeSimpleHash // hash_key%总实例数 选择服务实例
/// - kLoadBalanceTypeDefaultConfig // 使用全局配置的负载均衡算法,默认值
void SetLoadBalanceType(LoadBalanceType load_balance_type);
/// @brief 设置用于重试的实例数。可选,默认不返回用于重试的实例
/// @note 第一个实例由负载均衡器给出,外加backup_instance_num个实例,实例不重复,但不保证数量
/// 内部的一致性环hash负载均衡返回实例后方相邻的实例,其他返回随机实例
/// 从GetOneInstance的InstancesResponse获取实例
/// @param backup_instance_num 重试(备份)实例数
void SetBackupInstanceNum(uint32_t backup_instance_num);
/// @param replicate_index 副本索引,默认为0表示当前hash实例本身
/// 大于0表示从hash实例后面的第几个副本
void SetReplicateIndex(int replicate_index);
};
// 调用该方法执行请求
consumer->GetOneInstance(request, instance)