步骤:1) 在源端与台湾目标双向分别部署 ping、mtr、tcpdump:ping -c 100 -s 1200 <目标IP>,mtr -r -c 100 <目标IP>;2) 在应用层记录请求失败率、RTT、重试次数、超时错误码(TCP RST/timeout/HTTP 5xx);3) 使用Prometheus+Grafana或云监控收集packet loss、latency、retransmits、connection failures并设置告警阈值(例如loss>1% 触发告警)。
小提示:先区分是间歇性丢包还是持续性,是否影响所有客户或某运营商(ISP)用户。
步骤:1) 执行双向traceroute(traceroute -I 或 tcptraceroute)定位丢包跳点;2) 在两端抓包(tcpdump -w capture.pcap host
小分段:记录发生时间窗口,是否与批量任务/流量尖峰相关,是否有链路切换或BGP变动日志。
步骤:1) 定义可接受的掉包率、P95/P99延迟、可用性(例如99.9%);2) 为不同业务制定重试预算和超时(短链路请求超时时间更短);3) 把这些指标入到告警与Runbook中,明确谁接手和自动化触发的条件。
小提示:SLA要结合业务感知来配置,不要盲目追求“零丢包”而导致过度重试。
步骤:1) 使用BGP多线:与至少两个不同运营商建立BGP(或通过云提供商的多出口)以避免单一ISP故障;2) Anycast:在附近区域(台北/台中)部署Anycast前端将流量就近路由;3) 专线/MPLS:对关键业务考虑专线或SD-WAN以降低丢包;4) 使用云厂商跨地域VPC/VPN备份链路。
小分段:做路由策略时优先设置健康检查与本地回退(local-preference),并测试不同出口切换场景。
步骤:1) 将静态资源上CDN并在台湾附近POP部署缓存,减少跨海请求;2) 对动态请求采用分流:读请求优先就近读副本,写请求落地到主库并异步Replication;3) 使用全球负载均衡(GSLB/DNS Failover)将流量根据健康检查切换到可用节点;4) 配置流量镜像/灰度验证切换是否成功。
小分段:对于实时性高的业务,考虑边缘计算或在台部署微服务副本。
步骤:1) 明确幂等性:任何会改变状态的接口必须设计成幂等或使用幂等ID(idempotency-key);2) 重试策略:采用有限次重试+指数退避+抖动,例如初始延迟100ms,乘2,上限3次,并加随机抖动±20%;3) 重试预算:在网关/客户端设置总并发重试上限,防止雪崩;4) 错误分级:只对连接重置/超时做重试,不对业务级错误(4xx除部分可重试)盲目重试。
小分段:在API文档注明哪些错误允许重试,和重试后可能出现的延迟行为。
步骤:1) 在客户端/网关实现熔断器(如Netflix Hystrix或Resilience4j)监控错误率和延迟,达到阈值后短路请求;2) 降级策略:返回缓存数据、轻量提示或只保留关键功能;3) 自动恢复:熔断器短路后按固定间隔探测恢复。
小分段:熔断参数应结合真实流量做压力测试调整,避免误触发导致可用性下降。
步骤:1) 调整Linux内核参数:减少tcp_retries2、调整tcp_rmem/tcp_wmem、开启TCP keepalive并调小超时;2) 对短连接服务考虑开启连接复用(HTTP/2、keep-alive)以减少三次握手失败概率;3) 使用iperf3、mtr、tcptraceroute进行链路性能测试并保存结果;4) 定期运行端到端压力测试并比对历史数据。
小分段:注意改变内核参数前在预发环境验证,记录修改并可回滚。
步骤:1) 制定Runbook,包含检测、切换、回滚步骤与责任人;2) 自动化脚本:实现DNS切换、BGP前缀撤销或调高权重的自动化API;3) 定期演练:每季度做故障注入(Chaos Testing)验证切换时间与数据一致性;4) 回归与复盘:每次演练后收集度量并优化。
小分段:演练时模拟不同网络运营商与不同时间窗的故障,覆盖边界条件。
示例A - 客户端重试伪代码:attempts=0; delay=100ms; while attempts<3: call(); if success: break; if transientError: sleep(delay*(2attempts)*(1+rand(-0.2,0.2))); attempts++; else: break; 返回时带幂等ID。
示例B - DNS Failover流程:健康检查脚本->上报监控->若台节点不可达则API调用DNS服务商修改A记录或切换权重->TTL维持低值如60s便于快速切换。示例C - BGP多线检查:配置BGP session两条并定期检查AS路径变化并记录。
要点:1) 不要在没有幂等性的写接口上盲目重试;2) 不要把所有请求都设长超时,导致资源耗尽;3) 重试与熔断要配合使用,避免重试轰炸;4) 不要依赖单一监控数据源,至少双源比对后再自动切换。
小分段:落地时先做小流量验证,再全量推广。
答:第一:立即开启双向ping/mtr并抓包定位是否链路可达与丢包跳点;第二:检查应用监控(错误率、超时)并根据SLA是否触发故障等级;第三:在确认是运营商链路问题时启动备用出口(BGP切换或DNS权重切换)并通知ISP协同处理。
13.答:设计重试时保证(1)限制重试次数与总体重试并发(重试预算);(2)使用指数退避+抖动减少同步重试峰值;(3)对非重试错误立即失败;(4)配合熔断与降级,遇到持续性错误快速降级而非无限重试。
14.答:先把静态资源迁移到CDN并在台湾POP缓存,减少跨海请求;对动态请求增加客户端重试(低次数、短退避)并开启幂等机制;在服务端启用降级或缓存策略,临时提升超时阈值并密切监控,必要时通知用户并逐步恢复。