调用者日志可以比被调用者多显示几毫秒到10秒。重负荷下问题恶化,轻负荷下问题仍然存在。许多调用在调用者和被调用者之间确实是一致的,但是这种不一致的情况确实发生得足够频繁,足以使整体性能真正下降。
时间戳表示时间间隔可以是
之前
之后
被叫方已报告其响应已完成。
示例日志(来自实时差异的数字)
ServiceB: [2018-10-11T22:41:41.374Z] S2S request complete to ServiceA, Duration: 11644
ServiceA: [2018-10-11T22:41:29.732Z] Request complete, Duration: 5
调用方计时(所有S2S调用的公共类)
var timer = Stopwatch.StartNew();
var response = await _httpClientFactory.CreateClient().SendAsync(request);
timer.Stop();
Logger.Info($"S2S request complete to {service}, Duration: {timer.EllapsedMilliseconds}");
被叫方计时(自定义Asp.Net中间件)
var timer = Stopwatch.StartNew();
await _next(context);
timer.Stop();
Logger.Info($"Request complete, Duration: {timer.EllapsedMilliseconds}");
这个中间件几乎是管道中的第一个(仅次于用于日志关联的ActivityId/TraceId中间件)。
-
无法在Windows开发计算机上重现此问题
-
-
调整了k8s spec CPU和内存请求/限制(不同级别有一定效果,但不能缓解问题)
-
使用环境变量COMPlus\ U gcServer=1启用服务器GC
-
在资源限制内且不需要自动缩放的服务上发生问题
-
改为新的红隼插座运输(而不是libuv)
-
已更改为新的.Net Core 2.1 SocketsHttpHandler
系统拓扑
更新
-