you are better than you think
流量入口迁移到云的负载均衡。第二天收到合作方的反馈,提示连接被重置,我们将流量重新切回老入口。简单排查后发现,使用java的合作方出现 connection reset,而其他(如python)的调用方并没有此类报错。安卓客户端也是部分机型报错。
1.初步排查
跟调用方要了一个demo,在我本地机器上跑了一下,发现并没有被重置。抓包对比发现:jdk1.7默认使用TLSv1.0请求https服务,被reset;jdk1.8默认使用TLSv1.2请求https服务,不会被reset。Java HttpClient可以通过SSLContext指定TSL版本避免这个问题, 但是推动调用方去改,显然不妥。
jdk1.8使用TSLv1.2握手,访问新的入口
golang的map不是线程安全的,官方文档解释也给出了解释Why are map operations not defined to be atomic?。因此对于已经爬取过的url,不能直接使用map作标记。利用map加锁可以解决并发访问的问题,但是写锁也会导致无法读,怎么优雅的加锁是一个问题.
这个syncmap将map分片,利用bdkr将字符串hash到不同的map分片,这样一来,锁的粒度变小。
关于BDKR补充
这本书的中文名翻译得有点意思,翻译的人应该是把自己对芒格的崇拜放到译作中,也或许是为了引导读者购买?
书是芒格的演讲汇总,其中穿插着一些引导和解释性的文字。注释类的应该多用脚注,书中用了很多小括号来解释,读起来会影响流畅度。
个人感触最深的是芒格提出的关于心理学的几条原理和例子,做事情之前应该按照这些清单检查一遍,自己是否已经陷入到心理陷阱心理中。一个没有学过心理学的人总结出来的关于心理学的经验,很有趣,配合书中的例子,也很有说服力。