MeiK/每周分享第 13 期

Created Thu, 24 Jan 2019 18:46:07 +0000 Modified Fri, 11 Oct 2019 20:49:42 +0800
2067 Words

记录我过去一周看到的值得分享的东西,每周四发布。

随笔

Readhub

一个新闻实事聚合网站,质量颇高。

某搜索引擎的进化之路,从互联网到局域网再到内网

详情见下方搜索引擎百度已死

《为什么老外不愿意使用 MyBatis?》

虽然我的 Java 水平只能用渣渣来形容,但我好歹也是正儿八经的上过本科的 Java 课程的,对 MyBatis 和 Hibernate 也都有过使用。我自己的感觉是: Hibernate 比 MyBaits 更好用,使用起来更简单,更符合常识。

新闻

拼多多被撸羊毛

1 月 20 日凌晨,拼多多出现 BUG:用户可以领取 100 元无门槛优惠券。大批用户呼朋唤友开启了“撸羊毛”节奏。10 点左右,拼多多修复了这个漏洞,并在之后的半天内追回大量损失。

有的网友认为,抢拼多多优惠券和哄抢高速路上翻车商品是一样的。我认为,这完全就是两种概念。拼多多平时的活动就好以“团购居然只要XXX,拼多多这回赔大发了”为噱头,这次的优惠券漏洞,普通用户不太可能能辨别出来是 BUG 还是拼多多刻意为之。

还有网友认为“这个漏洞需要扫描二维码触发,撸羊毛的人明知是漏洞”。来,我给你看个东西,然后“*下次再买东西记得坐高铁到 pdd 总部去要他们法务出具一份文件证明你要购买的那包抽纸的价格不是测试数据*”。

多种角度的讨论,可以参照 V 站网友讨论:《关于此次拼多多事件引发的思考》

搜索引擎百度已死

最近半年使用过百度的朋友,可能会注意到一个现象:你在第一页看到的搜索结果,基本上有一半以上会指向百度自家产品,尤其频繁出现的是“百家号”。

看完这篇文章我去测试了一下,随机使用了几个关键词进行搜索,百度自家产品(百家号、百度百科、百度知道、百度贴吧)的首页覆盖率均在 70% 以上。

对于这篇文章,百度方面有回应称:在目前百度搜索结果中,百家号内容占比小于 10%。

这波偷换概念连小学生都能看出来,果不其然,声明一出,百度马上被骂了。

必应无法访问

据网友反映,1 月 23 日到 24 日全国各地均出现了必应无法访问的情况,具体表现为 DNS 被解析到 127.0.0.1。

截至本文发布时(1 月 24 日 19 时),北京联通可以正常访问。

V 站相关讨论:《百度死不死,反正必应国内是死了。。。》《是必应被 QIANG 了嘛?》《微软搜索引擎必应突然挂了!官方:因百度流量所致…》

腾讯网易获得游戏版号

据说之前腾讯的《刺激战场》之所以没有收费项目,是因为没有版号。以《刺激战场》的玩家数量来看,如果《刺激战场》可以收费的话,那么腾讯瞬间就增加一条稳定而大量的资金来源。

螃蟹网络程序员跑路事件

网传某游戏公司主程锁死服务器跑路导致游戏项目流产,事件刚出我就感觉会有反转瓜,果不其然……

因为都是长图,会影响页面的浏览,这里就不直接放图了。放几张图片链接供瓜友吃瓜。

一开始的声明

螃蟹负责人后续补充

当事人回应

不知道后续还会不会反转一波呢?

技术杂谈

如何写一个实时爬虫聚合类的网站

假设我们现在需要写一个网站,用户可以通过这个网站来启动一些爬虫来获取第三方的数据。比如大学内的一个查询平台,学生可以在单个页面上看到成绩、绩点、作业、校园卡余额等信息,对实时性的要求比较高。我们要怎样来设计这个网站呢(假设使用 Python 进行开发)?

最简单的方法

和其他网站没有什么不同,我们可以使用 Flask 或者 Django 这些稳定且有庞大社区的框架来构建 WEB 端,用 Requests 来开发爬虫。我们记住每个用户必需的一些信息,用户发来请求的时候我们将请求发送到爬虫,然后爬虫爬取数据,WEB 服务解析并返回给用户,看起来很符合常识。如果我们不使用 Python,而是使用 PHP、Java 等语言依旧可以轻松的完成。

假设爬虫需要 1 秒才能返回结果(这还是一个乐观的估计),那么我们的用户需要 1 秒得到结果,这并不是什么大问题。假设我们使用 gunicorn 启动了 8 个服务(或者 PHP 或 Java,本质上没有什么区别),在 1 秒内到达的前 8 个用户可以正常的访问,而当第 9 个用户到来的时候,因为所有的 8 个服务已经被占用了,哦豁,完蛋!

我们有足够多的资源

上面的问题,解决起来很简单:8 个服务不行,我们开 80 个、800 个。

如果我们比较穷

如果我们的机器配置不足以支持我们开很多个服务的话,那么还能怎么解决呢?

一个方案是使用消息队列等技术,将同步的请求转换为异步。当用户发来请求的时候,我们不阻塞的去爬取,而是给用户返回一个我们正在爬取的通知(http 状态码 201 可以表示这种情况),同时将这个任务通过消息队列发送给爬虫服务。用户端可以轮讯或者使用 WebSocket 来获取状态,当爬虫爬取到结果的时候,用户端就可以获得数据。

还有没有其他方案

有。除了用消息队列将同步转为异步之外,我们还可以从 WEB 开始异步。

我们可以写一个纯异步的 WEB 服务,配合异步的爬虫。这种方案和最简单的那种类似,唯一的区别在于 WEB 服务与爬虫都要是异步的。

使用 Sanic 配合 aiohttp(这两个都是 Python 的异步框架),我们可以使用很低的配置(腾讯云,1 核 1 G 1 mbps)获得很高的并发支持(1k - 10k QPS),同时用户还能获得同样的体验(1 秒响应时间),此时并发的瓶颈就变成了带宽:一个只能加钱解决的问题。

aio-libs

The set of asyncio-based libraries built with high quality.

高质量的异步库,用于构建任何用途的异步项目。

表情包

今天是程序员专场

音乐分享

届不到

届不到,届不到。