延迟瓶颈实测为本机 CPU 而非机房位置,跨站对比主指标改为 compute_ms
用户指出本机选新加坡是因为 Bitget 机房在新加坡。查证下来 ws.bitget.com 解析 到的是 CloudFront(dxotqhr62n6z4.cloudfront.net),落在新加坡 AS16509 (Amazon),即连的是 AWS 的 CDN 边缘而非 Bitget 自有机房。 腾讯云 ap-singapore(AS132203)到该边缘实测:ICMP 往返 2.1ms、TCP 握手 3.3ms、TLS 完成 9.0ms、首字节 87.8ms。首字节减 TLS 那约 79ms 是 CloudFront 回源开销,与我们的位置无关。 延迟构成(33 根样本):数据到达中位 506ms、信号计算中位 646ms、合计 1315ms。 随机房位置变化的只有那 2ms 往返,占总延迟 0.15%。而 646ms 的信号计算是每根 在 2000 根 1m 加 800 根 5m 上重建缠论结构,本机 2 核、2 个计算进程,三币同时 收盘时第三个还要排队——这才是有改善空间的一项。 因此: - 新增 deploy/netprobe.sh,把网络那一段单独量出来并入运行元数据。用到达 延迟去比两个机房等于用公斤秤称克,必须把可变的那段拿出来单独看。 - compare_sites.py 主指标改为 compute_ms,lag_data_ms 降为自检项(两站应当 接近;若差很多,先怀疑时钟而非网络)。元数据表加 nproc/cpu_model/往返。 - README 改写:第二台机器该测 CPU 规格而非地理位置,WORKERS 按核数减一给, 币数多于 worker 数时排队时间直接计入 compute_ms。 另修正站点标签:本机是腾讯云而非 Hetzner,sg-hetzner → sg-tencent,标错的 33 行数据已清掉重采。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Executable
+69
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env bash
|
||||
# 量本机到 Bitget 端点的网络距离,输出 JSON。start.sh 会把它并进运行元数据。
|
||||
#
|
||||
# 为什么要单独量:K 线到达延迟(lag_data_ms)是「交易所推送节奏 + 回源 + 网络」
|
||||
# 三者之和,中位 506ms。其中只有最后一段随机房位置变化,而实测它只有 2ms
|
||||
# 往返——用到达延迟去比两个机房,等于用公斤秤称克。这个探测把可变的那一段
|
||||
# 单独拿出来。
|
||||
#
|
||||
# 还有一件事值得知道:ws.bitget.com 解析出来是 CloudFront(AWS 的 CDN 边缘),
|
||||
# 不是 Bitget 自己的机房。所以「离交易所近」实际是「离 CloudFront 边缘近」。
|
||||
set -uo pipefail
|
||||
|
||||
WS_HOST="${WS_HOST:-ws.bitget.com}"
|
||||
N="${N:-10}"
|
||||
|
||||
resolved="$(getent hosts "$WS_HOST" 2>/dev/null | head -1 || true)"
|
||||
edge_ip="$(awk '{print $1}' <<<"$resolved")"
|
||||
cname="$(awk '{print $2}' <<<"$resolved")"
|
||||
|
||||
icmp_min=null; icmp_avg=null
|
||||
if out="$(ping -c "$N" -q -W 2 "$WS_HOST" 2>/dev/null)"; then
|
||||
stats="$(grep -oE 'rtt min/avg/max/mdev = [0-9./]+' <<<"$out" | awk '{print $NF}')"
|
||||
if [[ -n "$stats" ]]; then
|
||||
icmp_min="$(cut -d/ -f1 <<<"$stats")"
|
||||
icmp_avg="$(cut -d/ -f2 <<<"$stats")"
|
||||
fi
|
||||
fi
|
||||
|
||||
# TCP 握手是一个完整往返,比 ICMP 更能代表实际连接路径(有些网络对 ICMP 降级)
|
||||
tcp_min=null; tls_min=null; ttfb_min=null
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
vals="$(for _ in $(seq "$N"); do
|
||||
curl -s -o /dev/null --max-time 8 \
|
||||
-w '%{time_connect} %{time_appconnect} %{time_starttransfer}\n' \
|
||||
"https://$WS_HOST/v2/ws/public" 2>/dev/null
|
||||
done)"
|
||||
if [[ -n "$vals" ]]; then
|
||||
tcp_min="$(awk '{print $1*1000}' <<<"$vals" | sort -n | head -1)"
|
||||
tls_min="$(awk '{print $2*1000}' <<<"$vals" | sort -n | head -1)"
|
||||
ttfb_min="$(awk '{print $3*1000}' <<<"$vals" | sort -n | head -1)"
|
||||
fi
|
||||
fi
|
||||
|
||||
org="unknown"
|
||||
if [[ -n "$edge_ip" ]]; then
|
||||
org="$(curl -s --max-time 6 "https://ipinfo.io/$edge_ip/json" 2>/dev/null \
|
||||
| awk -F'"' '/"org"/{print $4}')"
|
||||
[[ -n "$org" ]] || org="unknown"
|
||||
fi
|
||||
self_org="$(curl -s --max-time 6 https://ipinfo.io/json 2>/dev/null \
|
||||
| awk -F'"' '/"org"/{print $4}')"
|
||||
self_city="$(curl -s --max-time 6 https://ipinfo.io/json 2>/dev/null \
|
||||
| awk -F'"' '/"city"/{print $4}')"
|
||||
|
||||
cat <<EOF
|
||||
{
|
||||
"ws_host": "$WS_HOST",
|
||||
"edge_ip": "${edge_ip:-unknown}",
|
||||
"edge_cname": "${cname:-unknown}",
|
||||
"edge_org": "$org",
|
||||
"self_org": "${self_org:-unknown}",
|
||||
"self_city": "${self_city:-unknown}",
|
||||
"icmp_min_ms": ${icmp_min:-null},
|
||||
"icmp_avg_ms": ${icmp_avg:-null},
|
||||
"tcp_connect_min_ms": ${tcp_min:-null},
|
||||
"tls_done_min_ms": ${tls_min:-null},
|
||||
"ttfb_min_ms": ${ttfb_min:-null}
|
||||
}
|
||||
EOF
|
||||
Reference in New Issue
Block a user