全部产品
云市场

解析异常排查之 “会话追踪方案”

更新时间:2018-12-28 15:49:38

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

  • 您认为解析出的IP不符合预期,以至于影响了业务域名的服务质量
  • 您接入的APM系统显示,HTTPDNS服务质量有问题

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

注意: 由于技术限制,我们只提供3天内的解析问题排查。

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

背景介绍

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

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

  1. 客户端难以提供准确的入网IP
  2. 即使提供了准确的入网IP,由于IP一般是共享的,不一定能定位到该次解析现场
  3. 对于同一个网络环境,运营商可能会针对不同的目的IP,提供不同的入网IP
  4. 在app的一次生命周期中,入网IP可能发生变化
  5. 以及难以解释以上入网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服务器的请求中,我们添加了如下3个参数(服务器会记录这些信息):

  • 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/d?host=www.aliyun.com&sid=wInhNA3iM0PK&net=wifi&bssid=54e061553e79

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

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

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

  • 解析时的sessionId、解析时间、解析的域名、解析结果、预期解析结果
  • 是否造成了实际业务服务质量下降(例如调度到了不正确地域的服务节点)?
  • 是否造成了业务不可用的问题?
    • 如果发现这类问题,建议您尽早针对此类情况,考虑重新获取域名解析结果(HTTPDNS或LocalDNS),并进行业务重试

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

  1. 该解析结果是否由HTTPDNS服务提供
    • 根据端上策略不同,解析结果可能有三种不同的来源:HTTPDNS、LocalDNS、持久化缓存
  2. 该次HTTPDNS解析对应的网络环境及入网IP
  3. 客户在该次app生命周期内是否存在IP跨区域切换的情况

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

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

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

  • APM系统截图:连接失败或返回错误时的URL地址、出现的错误信息、以及问题出现的时间
    • URL中会包含sessionId、网络情况等信息
    • 虽然该请求可能没有到达服务器,但请求时的网络情况(net)会被添加到URL中,并由您接入的APM系统记录

我们会根据您提供的信息提供以下调查结果

  1. 协助您分析该次失败请求的原因
  2. 该次app生命周期内的相关请求记录,以便分析是否
    1. 判断是否存在网络切换的情况
    2. 是否同一时间有成功的请求