如何使用“会话追踪方案”排查解析异常

当您对解析结果或HTTPDNS服务质量产生如下疑问,希望排查问题时,请参考此“会话追踪方案”。

  • 您认为解析出的IP不符合预期,以至于影响了业务域名的服务质量。

  • 您接入的APM系统显示,HTTPDNS服务质量有问题。

注意

  • 对于有疑问的解析IP,需要先确定是否由HTTPDNS解析的结果:需要提供从HTTPDNS接口取出IP的日志及具体的HTTPDNS接入代码。

  • 由于技术限制,我们只提供三天内的解析问题排查。

  • 由于此方案需要配合SDK的getSessionId方法,您至少需要升级至 Android ≥ 1.2.3, iOS ≥ 1.6.20 才能应用此方案。

背景介绍

对于一个配置了分线路解析的域名,根据客户入网IP的不同,返回的IP是根据各线路的配置而不同。为了获得更好的服务质量,服务节点调度系统(GSLB)可能会频繁地变更上述的线路调度配置,例如CDN系统,可能每几个小时就会调整一次调度配置。如果客户端获取到了错误的调度结果(即解析结果),可能会导致服务质量受损,也就是慢或超时,还有可能导致服务不可用。

为了定位上述问题,一般需要您提供来源IP、解析时间、解析的域名、解析结果IP列表来定位异常现场,以便观察是否有对应的调度结果记录。但这种定位异常现场的方案存在以下问题:

  • 客户端难以提供准确的入网IP。

  • 即使提供了准确的入网IP,由于IP一般是共享的,不一定能定位到该次解析现场。

  • 对于同一个网络环境,运营商可能会针对不同的目的IP,提供不同的入网IP。

  • 在App的一次生命周期中,入网IP可能发生变化。

  • 难以解释以上入网IP发生的变化原因。

引入sessionId(会话唯一ID)

sessionId参数在App启动时生成,在整个App生命周期中不会发生变化。在同一个App生命周期中的HTTPDNS解析请求均会携带同一个sessionId,服务器则会记录这个参数,并生成索引。与App异常日志上报中以单个设备ID为索引条件类似,本方案以App的一次生命周期作为做索引条件。与问题常规排查方案中“来源IP-解析结果”组合的追踪方式相比,使用sessionId对App生命周期进行追踪,是一种更精准,更适用于App场景的问题排查方式。

通过引入sessionId,我们不再需要您提供客户端入网IP,改为根据sessionId获取准确的IP信息。同时可以追踪在App的一次生命周期中所有的HTTPDNS解析请求,可以观测到入网IP可能发生的变化,还可以根据net参数的变化解读客户入网IP变化的原因。

例如:一个客户通过4G入网,接入使用的SIM卡可能是广东的运营商发行的,那么接入IP可能是广东区域的。当从HTTPDNS获取IP后,客户连接了其物理所在地的有线网络或wifi,可能导致接入IP立即变为该地区的IP,导致内容服务质量受到影响。这种场景在传统LocalDNS环境下和HTTPDNS下都会出现。

使用“会话追踪方案”

由于App更新升级过程是渐进式的,无法在短时间内部署最新的版本,我们建议您在接入HTTPDNS时就参考本方案,记录解析结果和对应的sessionId,以便后续有问题时,方便准确提供追查线索。

  • SDK接入:我们会在App启动时生成sessionId,并提供了getSessionId方法获取生成的结果。您需要更新SDK版本来使用此功能(Android ≥ 1.2.3, iOS ≥ 1.6.20),但我们建议您升级至最新版本,以便解决一些已知的其他SDK问题。

  • HTTP API方式接入(即非SDK接入):您可以仿照SDK的逻辑生成相应参数。

  • 端日志上报调度服务质量问题时,需要额外记录sessionId参数。

另外,您也可以将sessionId携带至其他系统中。例如当使用HTTPDNS解析结果,请求该域名的服务时,可以在URL中额外携带sessionId参数,这样可以更加完整地观察客户使用场景。

在本方案中,每次SDK对HTTPDNS服务器的请求中,我们添加了如下三个参数(服务器会记录这些信息):

  • sid=<sessionId:[a-zA-Z0-9]{12}>,在SDK启动时生成,用于标记一次独立的App生命周期。

  • net=<4g|3g|2g|wifi|unknown>,用于标记请求发起时刻os层提供的网络情况;提供sessionId后,我们可以将当时记录的net信息反馈给您。

  • bssid=<wifi_bssid>,用于标记不同的wifi网络;提供sessionId后,我们可以将当时记录的bssid信息反馈给您。

  • 示例URL: http://203.107.1.33/100000/dhost=www.aliyun.com&sid=wInhNA3iM0PK&net=wifi&bssid=54e061553e79

排查场景:解析出的结果不符合预期

当出现解析出的结果不符合预期,您认为可能和HTTPDNS有关,需要排查时:

请您提交HTTPDNS工单,并提供以下信息:

  • 解析时的sessionId、解析时间、解析的域名、解析结果、预期解析结果。

  • 是否造成了实际业务服务质量下降(例如调度到了不正确地域的服务节点)?

  • 是否造成了业务不可用的问题?

如果发现这类问题,建议您尽早针对此类情况,考虑重新获取域名解析结果(HTTPDNS或LocalDNS),并进行业务重试。

我们会根据sessionId提供以下调查结果:

  • 该解析结果是否由HTTPDNS服务提供?

根据端上策略不同,解析结果可能有三种不同的来源:HTTPDNS、LocalDNS、持久化缓存。

  • 该次HTTPDNS解析对应的网络环境及入网IP。

  • 客户在该次App生命周期内是否存在IP跨区域切换的情况。

排查场景:APM显示HTTPDNS服务质量有问题

当您接入了APM组件(即线上版端性能分析工具),APM组件中显示HTTPDNS服务出现无法连接的问题时

请提交HTTPDNS工单,并提供以下信息:

APM系统截图:连接失败或返回错误时的URL地址、出现的错误信息、以及问题出现的时间

  • URL中会包含sessionId、网络情况等信息。

  • 虽然该请求可能没有到达服务器,但请求时的网络情况(net)会被添加到URL中,并由您接入的APM系统记录。

我们会根据您提供的信息提供如下帮助:

  • 协助您分析该次失败请求的原因。

  • 该次App生命周期内的相关请求记录,以便做如下分析:

    • 判断是否存在网络切换的情况。

    • 是否同一时间有成功的请求。