go 域名解析过慢

这几天发现一个问题,用go的HttpClient向某个URL发送post请求超时,经过一番排查,发现主要是在DNS解析的时候很慢要5S左右。但是同样的环境用Python和Java发送请求可以很快的返回结果,<1S。

首先看/etc/resolv.conf文件,默认配置了两个nameserver。strace执行过程发现在请求nameserver时有timeout,并且整个过程只请求了一个nameserver,同样的Python执行过程却没有这种情况。把resolv.conf中的option timeout从2设置为1之后,请求时间变为3S.如果增加一个nameserver:114.114.114.114,go的程序便可很快返回。

阅读全文

go upgrade on fly

作为一个服务端程序在修改配置时最好能够支持优雅的重启,这样避免给用户带来糟糕的体验。即使不能优雅重启,那么在停止服务做配置修改时,也要做到优雅的停止,而不是粗暴的kill掉进程,这种粗暴的做法会lost正在处理的请求,对用户也是不友好的。

目标:

    阅读全文

    只不过是一场生活

    九月,伴随着凉爽的秋风一同扑面而来的是一堆婚礼请柬。或许真的是到了年龄了,忽然之间身边的亲戚朋友都要结婚了。

    生活真是让人捉摸不透,记忆里已经有些模糊的那些年那些事真要回味起来还是蛮下酒的。谁也没曾想到亲密会戛然而止,然后便相忘于江湖;谁也没有料到会说散就散,随后便听到了婚讯。听到B哥的这首歌的时候,往事忽然涌上心头,然而转过头青春早已散场,剩下我们站在那里泪流满面。

    阅读全文

    Go使用感受

    使用Go有一段时间了,说一下感受。

    语法方面

    1. 语法比较简洁,有点像Python,这一点比Java要好。
    2. 多返回值。这一点使得go语言程序不需要像用单返回值语言写的程序那样将多个返回值封装到一个对象里,一定程度上减少了代码量。

    阅读全文

    go语言HttpClient中的https证书

    关于HTTPS中SSL/TLS具体原理就不具体说了,可以看一下阮一峰老师的文章

    阅读全文

    搜索引擎系列(三)---用户行为分析

    搜索引擎主要是帮助用户找到想要的信息或者服务,所以这里面涉及到三件事情,理解用户搜索意图,理解资源,匹配用户意图和资源。在一开始的时候搜索引擎主要通过对文本的统计分析,如TF-IDF,BM25等,来满足二者之间的匹配。后来发现除了文本统计之外还可以通过对页面质量的分析,外链的分析,如PageRank,来提升对资源的理解改善搜索效果。再到后来发现通过分析用户在搜索时的行为可以更好的了解用户意图并以此来提升搜索结果的相关度。为什么呢?用户选择搜索结果的过程是一次人类智慧的体现,通过观察多个用户的这种行为并从中找出规律可以提升搜索结果的相关度,毕竟人还是要比机器更加有智慧,这也是典型的利用集体智慧的例子。

    阅读全文

    搜索引擎系列(二)---相关搜索

    什么是相关搜索

    在使用搜索引擎的时候,输入一个关键词之后经常在页面底部或者右侧会出现相关搜索提示。例如搜索”万达”会提示“万达广场”,“万达影院”等。
    相关搜索的作用是帮助用户更加快速的找到想要的东西,提升用户体验。当你通过一个关键词找不到想要的结果时相关搜索会帮到你,它会推荐你换一个关键词试试,所以它更像是搜索引擎中的一个推荐系统。搜索与推荐是不分家的,在搜索引擎中相关搜索的点击量还是很可观的。

    阅读全文

    7月盛夏

    转眼已到7月盛夏的季节,2017已经过了一半。前几天跟同事说,到了这个年龄,最让人感到恐惧的就是时间的飞逝。

    所谓一年之计在于春,今年春天的时候回顾自己过去一年的工作与成长,感觉略有失望,跟leader沟通过后,在春末夏初的时候工作上做了新的调整。希望在下一个风口到来时自己不掉队并且能够做些事情。

    阅读全文

    Go多个pkg的单元测试覆盖率

    在go test命令后面添加 -cover参数开启测试覆盖率统计,其结果如下:
    ok models 0.012s coverage: 71.4% of statements in models
    -coverpkg 标记来指定要被统计的代码包之后,未被指定的代码则肯定不会被统计,即使是被直接测试的那个代码包。go test -coverpkg=./... pkg2可以跑pkg2下的所有单元测试及pkg2所用到的其他包的覆盖率情况。
    但是由于go不支持go test -coverpkg=./... ./...如果我们有多个pkg,则无法一次性统计出所有的测试覆盖率和跑完全部单元测试。所以需要挨个跑完单元测试然自己来合并覆盖率的结果:

    阅读全文

    ssh远程执行nohup命令不退出

    现象

    在本机执行ssh target "nohup sh test.sh &",ssh并没有立即结束退出,而是等着test.sh执行完才退出,如果提前断开ssh则执行失败。使用nohup&是想让test.sh在后台执行,并忽略SIGHUP信号,即使执行命令的console退出了,执行命令的进程也可以继续执行。而ssh远程执行nohup的命令不立即退出跟nohup没有太大的关系。将上面的命令换成下面的命令就会立即返回:
    ssh target "nohup sh test.sh >/dev/null 2&1 &"

    阅读全文