Skip to content

Commit 2627c5c

Browse files
authored
debug:增加DEBUG日志统计router以及loadbalance执行时间 (#49)
1 parent b950180 commit 2627c5c

File tree

12 files changed

+67
-6
lines changed

12 files changed

+67
-6
lines changed

examples/quickstart/consumer.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <thread>
2929

3030
#include "polaris/consumer.h"
31+
#include "polaris/log.h"
3132

3233
class ConsumerServer {
3334
public:
@@ -90,7 +91,9 @@ int main(int argc, char** argv) {
9091

9192
ConsumerServer::ConsumerServer(const std::string& host, int port, const polaris::ServiceKey& provider_service)
9293
: host_(host), port_(port), provider_service_(provider_service), stop_(false) {
93-
consumer_ = std::unique_ptr<polaris::ConsumerApi>(polaris::ConsumerApi::CreateWithDefaultFile());
94+
polaris::GetLogger()->SetLogLevel(polaris::kDebugLogLevel);
95+
auto consumer_api_ = polaris::ConsumerApi::CreateWithDefaultFile();
96+
consumer_ = std::unique_ptr<polaris::ConsumerApi>(consumer_api_);
9497
}
9598

9699
ConsumerServer::~ConsumerServer() {}

examples/quickstart/polaris.yaml

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
1+
# 配置模板,不要直接使用,只需要配置需要修改的值,未配置的部分会使用默认值
2+
# 不传配置文件或传空的配置文件,SDK会使用默认配置初始化,根据需要传入配置覆盖默认配置项
3+
# 描述:全局配置
14
global:
5+
# 描述:对接polaris discover server的相关配置
26
serverConnector:
37
addresses:
4-
- 127.0.0.1:8091
8+
- 119.91.66.223:8091
9+
# 描述:主调端配置
10+
consumer:
11+
# 描述:负载均衡相关配置
12+
loadBalancer:
13+
# 描述:负载均衡类型
14+
# 范围:已注册的负载均衡插件名
15+
# 默认值:权重随机负载均衡
16+
type: ringHash

polaris/api/consumer_api.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,12 @@ ReturnCode ConsumerApiImpl::GetOneInstance(ServiceContext* service_context, Rout
331331
if (load_balancer == nullptr) {
332332
return kReturnPluginError;
333333
}
334+
auto begin_time = std::chrono::steady_clock::now();
334335
ret = load_balancer->ChooseInstance(service_instances, req_impl.criteria_, instance);
336+
auto end_time = std::chrono::steady_clock::now();
337+
auto delay = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - begin_time).count();
338+
POLARIS_LOG(LOG_DEBUG, "LoadBalance(%s) ns(%s) svc(%s) do choose cost(%ld ms)", req_impl.load_balance_type_.c_str(),
339+
route_info.GetServiceKey().namespace_.c_str(), route_info.GetServiceKey().name_.c_str(), delay);
335340
if (ret != kReturnOk) {
336341
const ServiceKey& service_key = route_info.GetServiceKey();
337342
POLARIS_LOG(LOG_ERROR, "get one instance for service[%s/%s] with load balancer retrun error:%s",
@@ -386,7 +391,7 @@ void ConsumerApiImpl::GetBackupInstances(ServiceInstances* service_instances, Lo
386391
target_num);
387392
target_num = available_num; // 修正目标值
388393
}
389-
int cycle_times = available_num; //循环次数上限
394+
int cycle_times = available_num; // 循环次数上限
390395
Criteria criteria_tmp = criteria;
391396

392397
for (int i = 1; i <= cycle_times; ++i) {
@@ -928,6 +933,4 @@ void ConsumerApiImpl::UpdateServerResult(Context* context, const ServiceKey& ser
928933
}
929934
}
930935

931-
932-
933936
} // namespace polaris

polaris/plugin/load_balancer/ringhash/ringhash.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515

1616
#include <stdlib.h>
1717

18+
#include <inttypes.h>
1819
#include <map>
1920
#include <string>
2021
#include <vector>
2122

2223
#include "context/context_impl.h"
24+
#include "logger.h"
2325
#include "model/instance.h"
2426
#include "model/model_impl.h"
2527
#include "plugin/plugin_manager.h"
@@ -88,6 +90,12 @@ ReturnCode KetamaLoadBalancer::ChooseInstance(ServiceInstances* service_instance
8890

8991
if (lb_value == nullptr) {
9092
lb_value = data_cache_->CreateOrGet(cache_key, [&] {
93+
// 出现 ringhash cache 需要执行 create 时进行打印相关辅助信息日志
94+
POLARIS_LOG(LOG_DEBUG, "ringhash_cache run create action ns(%s) svc(%s) hash_str(%s) hash_key(%" PRIu64 ")",
95+
service_instances->GetService()->GetServiceKey().namespace_.c_str(),
96+
service_instances->GetService()->GetServiceKey().name_.c_str(), criteria.hash_string_.c_str(),
97+
criteria.hash_key_);
98+
9199
RingHashCacheValue* new_lb_value = new RingHashCacheValue();
92100
new_lb_value->prior_date_ = instances_set;
93101
new_lb_value->prior_date_->IncrementRef();

polaris/plugin/service_router/canary_router.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ CanaryServiceRouter::~CanaryServiceRouter() {
4141
}
4242
}
4343

44+
std::string CanaryServiceRouter::Name() { return "CanaryServiceRouter"; }
45+
4446
ReturnCode CanaryServiceRouter::Init(Config* /*config*/, Context* context) {
4547
context_ = context;
4648
router_cache_ = new ServiceCache<CanaryCacheKey, RouterSubsetCache>();

polaris/plugin/service_router/canary_router.h

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ class CanaryServiceRouter : public ServiceRouter {
3636

3737
virtual RouterStatData* CollectStat();
3838

39+
virtual std::string Name();
40+
3941
private:
4042
bool CalculateResult(const std::vector<Instance*>& instances, const std::set<Instance*>& unhealthy_set,
4143
std::vector<Instance*>& result);

polaris/plugin/service_router/metadata_router.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include "metadata_router.h"
1515

1616
#include <stddef.h>
17+
#include <map>
18+
#include <string>
1719

1820
#include <utility>
1921

@@ -49,6 +51,8 @@ ReturnCode MetadataServiceRouter::Init(Config* /*config*/, Context* context) {
4951
return kReturnOk;
5052
}
5153

54+
std::string MetadataServiceRouter::Name() { return "MetadataServiceRouter"; }
55+
5256
static bool MetadataMatch(const std::map<std::string, std::string>& metadata,
5357
const std::map<std::string, std::string>& instance_metadata) {
5458
if (metadata.size() > instance_metadata.size()) {
@@ -170,6 +174,17 @@ ReturnCode MetadataServiceRouter::DoRoute(RouteInfo& route_info, RouteResult* ro
170174
RouterSubsetCache* cache_value = router_cache_->GetWithRcuTime(cache_key);
171175
if (cache_value == nullptr) {
172176
cache_value = router_cache_->CreateOrGet(cache_key, [&] {
177+
// 出现 metadata cache 需要执行 create 时进行打印相关辅助信息日志
178+
std::string metadata_str_ = "";
179+
for (std::map<std::string, std::string>::iterator it = cache_key.metadata_.begin();
180+
it != cache_key.metadata_.end(); it++) {
181+
metadata_str_ += it->first + ":" + it->second + ",";
182+
}
183+
POLARIS_LOG(LOG_DEBUG,
184+
"ns(%s) svc(%s) metadata(%s) failover_type(%d) circuitbreaker_version(%" PRIu64
185+
") router_cache run create action",
186+
route_info.GetServiceKey().namespace_.c_str(), route_info.GetServiceKey().name_.c_str(),
187+
metadata_str_.c_str(), cache_key.failover_type_, cache_key.circuit_breaker_version_);
173188
InstancesSet* prior_result = cache_key.prior_data_;
174189
std::set<Instance*> unhealthy_set;
175190
route_info.CalculateUnhealthySet(unhealthy_set);

polaris/plugin/service_router/metadata_router.h

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class MetadataServiceRouter : public ServiceRouter {
3737

3838
virtual RouterStatData* CollectStat();
3939

40+
virtual std::string Name();
41+
4042
private:
4143
bool CalculateResult(const std::vector<Instance*>& instances, const std::set<Instance*>& unhealthy_set,
4244
const std::map<std::string, std::string>& metadata, MetadataFailoverType failover_type,

polaris/plugin/service_router/nearby_router.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ ReturnCode NearbyServiceRouter::Init(Config* config, Context* context) {
242242
return kReturnOk;
243243
}
244244

245+
std::string NearbyServiceRouter::Name() { return "NearbyServiceRouter"; }
246+
245247
bool NearbyServiceRouter::CheckLocation() {
246248
ContextImpl* context_impl = context_->GetContextImpl();
247249
Location location;

polaris/plugin/service_router/nearby_router.h

+2
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ class NearbyServiceRouter : public ServiceRouter {
115115

116116
virtual RouterStatData* CollectStat();
117117

118+
virtual std::string Name();
119+
118120
private:
119121
bool CheckLocation();
120122

polaris/plugin/service_router/router_chain.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,14 @@ ReturnCode ServiceRouterChain::DoRoute(RouteInfo& route_info, RouteResult* route
125125
POLARIS_CHECK_ARGUMENT(route_info.GetServiceInstances() != nullptr);
126126
ReturnCode ret;
127127
for (std::size_t index = 0; index < service_router_list_.size(); index++) {
128-
if ((ret = service_router_list_[index]->DoRoute(route_info, route_result)) != kReturnOk) {
128+
auto begin_time = std::chrono::steady_clock::now();
129+
ServiceRouter* router = service_router_list_[index];
130+
ret = router->DoRoute(route_info, route_result);
131+
auto end_time = std::chrono::steady_clock::now();
132+
auto delay = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - begin_time).count();
133+
POLARIS_LOG(LOG_DEBUG, "router(%s) ns(%s) svc(%s) do route cost(%ld ms)", router->Name().c_str(),
134+
route_info.GetServiceKey().namespace_.c_str(), route_info.GetServiceKey().name_.c_str(), delay);
135+
if (ret != kReturnOk) {
129136
POLARIS_LOG(LOG_ERROR, "run service router plugin[%s] for service[%s/%s] return error[%s]",
130137
plugin_name_list_[index].c_str(), service_key_.namespace_.c_str(), service_key_.name_.c_str(),
131138
ReturnCodeToMsg(ret).c_str());

polaris/plugin/service_router/service_router.h

+3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class ServiceRouter : public Plugin {
4545

4646
/// @brief 收集路由统计数据
4747
virtual RouterStatData* CollectStat() = 0;
48+
49+
/// @brief 返回路由插件的名称
50+
virtual std::string Name() = 0;
4851
};
4952

5053
} // namespace polaris

0 commit comments

Comments
 (0)