Files
Chan/research/live/deploy/netprobe.sh
T
jackandCursor 95f2b614a2 延迟瓶颈实测为本机 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>
2026-08-28 02:51:51 +08:00

70 lines
2.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 量本机到 Bitget 端点的网络距离,输出 JSON。start.sh 会把它并进运行元数据。
#
# 为什么要单独量:K 线到达延迟(lag_data_ms)是「交易所推送节奏 + 回源 + 网络」
# 三者之和,中位 506ms。其中只有最后一段随机房位置变化,而实测它只有 2ms
# 往返——用到达延迟去比两个机房,等于用公斤秤称克。这个探测把可变的那一段
# 单独拿出来。
#
# 还有一件事值得知道:ws.bitget.com 解析出来是 CloudFrontAWS 的 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