阿里腾讯神仙打架之要命DNS(草泥马飘过)

引言

最近有项目上线,虽然PV巨大(1kw/天),但整体复杂度不高,主要还是靠CDN抗流量,但就是这么个项目,遇到了两个意料之外的非程序级问题。
扎心了,扎心了,扎心了;罪魁祸首其实是开发人员都特别容易忽略的DNS

问题描述

  • 微博+微信授权获取个人信息,突然发现都不行了
  • 内网CI系统,发布线上和测试都失败了

说着容易,但实际上当时急着上线,客户着急花钱,几百万银子呀,客户在提修改,兄弟们都奔溃了,实在是不知道啥原因,难道只能认栽吗?
– 以上都是废话。。。。

解决思路

  1. 排查,先排查CI系统,代码上不了服务器,这不要命么,总不能一直手动更新吧,一顿操作,shell、php、python都查了个遍、无问题
  2. 排查,后排查项目程序,客户改的太频繁,负责后端的兄弟都失去自信了,最终一个挨个方法查无问题
  3. 排查,程序没问题,那就是服务器了,看zabbix报警,看网络跑满、看服务器error_log,一顿操作无问题无问题
  4. 客户着急上线、商务催着发版、兄弟们依然崩溃(凌晨1点了呀)
  5. 一顿操作猛如虎,原来是个250呀
    点燃一根烟,冷静、冷静、冷静,程序没错、服务器正常、网络正常,那么CI用域名了,微博用域名了,微信也用域名了,难道DNS出问题了么???
ping: unknown host api.weixin.qq2.com
  1. 原来DNS挂了,那家的机房我就不说了,反正是DNS挂了全完了。

故事还没有结束,
那就换呗,换个好的阿里云的DNS可以了吧,CI/weibo好了,可是微信还是不行,这就让人费解了,DNS好了,也能ping通了,咋回事?

  1. 本地ping 微信域名居然和服务器返回IP不一样,是不是有问题?
  2. 换个腾讯的DNS,所有问题解决。。。。

解决方案

  • 绑定hosts,这是最快的解决方案
  • 换DNS,找个运营商(联通、电视都行)的DNS

写个工具

换DNS的时候发现有的DNS解析特别不稳定,有的时候解析快,有的时候解析慢,怎么解决?写个脚本吧,用数量来衡量质量吧。

# -*- coding: utf-8 -*-
# @Junqiang 
import sys
import os
import time
print('start test dns.....')
t_nums  =       10000
timeout =       0
domain  =      "api.weixin.qq.com"
command =       "curl -o /dev/null -s -w %{time_namelookup},%{time_total}"+" "+domain
t_nl_total=0
t_t_total=0
i=0
while (i < t_nums):
        re_str  =       os.popen(command).read()
        re_list =       re_str.split(",")
        t_nl    =       float(re_list[0])
        t_t     =       float(re_list[1])
        t_nl_total = float(t_nl_total+t_nl) if t_nl_total>0 else t_nl
        t_t_total = float(t_t_total+t_t) if t_t_total>0 else t_t

        #results
        if i==0 :
                print "-----namelookup over 1s show lists:-----"
        if t_nl>=1 :
                print str(t_nl)+"--"+str(t_t)

        #time.sleep(timeout)
        i=i+1

print "average time_namelookup -- avearge time_total"
print str(t_nl_total/t_nums)+"--"+str(t_t_total/t_nums)

#print "test is end"

善意的想法

  • 机房的DNS可能半夜重启或者睡着了,不怪他
  • 阿里云的DNS不是解析不了微信域名,而是人家不让他更新了。。。。。

遇事不要慌,先点一根烟。。。。

你可能感兴趣的:(笔记,linux,php,bug)