#710 curl 使用的 DNS 为什么和 dig 的结果不一致 [编辑中]
Linux Curl dig 开发工具 DNS 2021-12-17:) 本文正在编辑中,暂时不提供浏览...
#709 Bing 打不开了
互联网 Bing 搜索引擎 2021-12-17Bing 是我的默认搜索引擎。但是今天早上发现 Bing 打不开了,只有通过特殊手段才行。
- 应监管部门要求,Bing 需要在 30 天内对搜索框的建议功能做出整改,看到很多网友贴出了公告。
- https://www4.bing.com 目前可用 (随时会挂)
- 切换到谷歌 DNS 之后,Bing 可以正常访问
Update @ 2021-12-19: 必应搜索恢复正常访问(持续时间大约 2 天)。
#708 Tornado 正在死亡
Tornado 2021-12-162020 年 10 月发布的 6.1,结果到现在,已经一年多过去了,6.2 还没有见到。
Update @ 2022-04-28: 又过去了小半年,6.2 还是没有影子。
从 GitHub 提交频率图上明显可以看到 Tornado 的活跃度大幅下滑,2020 年的提交已然不多,2021 年更加惨不忍睹。
官方协程框架 AsyncIO 的诞生,标志着 Tornado 的历史使命已经完成。
是时候带着对 Tornado 的回忆,全面转投原生协程生态了。
#707 plocate
Linux 命令行 2021-12-15Fedora 36 将采用 plocate 替代 mlocate 成为默认的查找索引,据说更快。
而且 Debian 也早采纳了 plocate。
安装
apt show plocate
# Package: plocate
# Version: 1.1.8-2
# Priority: optional
# Section: universe/utils
# Origin: Ubuntu
# Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
# Original-Maintainer: Steinar H. Gunderson <sesse@debian.org>
# Bugs: https://bugs.launchpad.net/ubuntu/+filebug
# Installed-Size: 510 kB
# Depends: libc6 (>= 2.33), libgcc-s1 (>= 3.3.1), libstdc++6 (>= 6), liburing1 (>= 0.7), libzstd1 (>= 1.4.0)
# Suggests: systemd-sysv | powermgmt-base, systemd-sysv | nocache
# Breaks: mlocate
# Replaces: mlocate
# Homepage: https://plocate.sesse.net/
# Task: xubuntu-desktop, ubuntu-budgie-desktop, ubuntu-budgie-desktop-raspi
# Download-Size: 119 kB
# APT-Manual-Installed: yes
# APT-Sources: https://mirrors.cloud.tencent.com/ubuntu impish/universe amd64 Packages
# Description: much faster locate
# plocate is a locate(1) based on posting lists, giving much faster searches
# on a much smaller index. It is a drop-in replacement for mlocate in nearly
# all aspects, and is fast on SSDs and non-SSDs alike.
sudo apt install -y plocate
使用
根据 apt show 信息,plocate 会 break mlocate。
updatedb 命令会改由 plocate 提供。
ll /usr/bin/locate /usr/bin/updatedb /etc/alternatives/locate /etc/alternatives/updatedb
lrwxrwxrwx 1 root root 16 2021-12-15 11:51:56 /etc/alternatives/locate -> /usr/bin/plocate
lrwxrwxrwx 1 root root 26 2021-12-15 11:51:56 /etc/alternatives/updatedb -> /usr/sbin/updatedb.plocate
lrwxrwxrwx 1 root root 24 2021-12-15 11:51:56 /usr/bin/locate -> /etc/alternatives/locate
lrwxrwxrwx 1 root root 26 2021-12-15 11:51:56 /usr/bin/updatedb -> /etc/alternatives/updatedb
根据官网提供的演示数据,其 DB 只有 mlocate 的 40%,查询时间只有 mlocate 的万分之四。
其具体操作和 mlocate 类似:
sudo updatedb
locate go.mod
有没有 2500 倍的提升我不知道,但是感觉好像确实快。挺好!
参考资料与拓展阅读
- OSCHINA, Fedora 36 将使用新的查找索引组件 Plocate
#706 基于 CentOS Stream 的桌面环境
CentOS 2021-12-15CentOS Stream 9 已于月初发布,基于 Fedora 34,这就是 RHEL 9 未来的发展方向。
CentOS Stream 的稳定性应该是比 Fedora 更好,如果我想选择改用 Fedora 当桌面环境,为什么不试试 CentOS Stream 呢?
这里就开始调研一下。
#705 Node 包管理器
NodeJS 2021-12-14Node 包都存储在 Registry 中,官方 Registry 是 npmjs.org。
切换源
npm config set registry https://registry.npm.taobao.org
或者直接修改 ~/.npmrc
, 加入:
registry = https://registry.npm.taobao.org
下载的时候也可以指定:
npm info lodash --registry https://registry.npm.taobao.org
包管理器
- npm
- yarn
Facebook 出的, 对 npm 做了一些优化,npm 后面也做了类似的优化 - cnpm
淘宝出的,主要是默认使用淘宝自己维护的国内镜像 - pnpm
- entropic
据说是 NPM 前 CTO 成立的新项目,目标是去中心化
包依赖的语法
~
匹配最近的小版本, eg:~1.2.3
会匹配1.2.x
^
匹配最新的大版本,eg:^1.2.3
会匹配所有1.x.x
*
永远最新版本
参考资料与拓展阅读
#704 DNS_PROBE_FINISHED_NXDOMAIN
WebDev DNS 2021-12-14- 浏览器突然打不开 zhihu.com, 报
DNS_PROBE_FINISHED_NXDOMAIN
。 - Windows 网络诊断之后说是 DNS 不可用。
- 经过检查,使用 DHCP 获取到的 DNS
172.16.0.1
。 - 改成 AliDNS:
223.5.5.5
,223.6.6.6
之后就好了。 - 然后再改回默认的 DNS 发现也能正常访问了。
我应该在出现问题的时候先尝试 nslookup 一下,看看 DNS 解析出来的到底是个什么结果。
下次遇到再继续更新。
C:\Users\Administrator>ipconfig /all | findstr DNS
主 DNS 后缀 . . . . . . . . . . . :
连接特定的 DNS 后缀 . . . . . . . :
DNS 服务器 . . . . . . . . . . . : 172.16.0.1
连接特定的 DNS 后缀 . . . . . . . :
DNS 服务器 . . . . . . . . . . . : fec0:0:0:ffff::1%1
连接特定的 DNS 后缀 . . . . . . . :
连接特定的 DNS 后缀 . . . . . . . :
连接特定的 DNS 后缀 . . . . . . . :
连接特定的 DNS 后缀 . . . . . . . :
C:\Users\Administrator>nslookup zhihu.com
服务器: UnKnown
Address: 172.16.0.1
非权威应答:
名称: zhihu.com
Address: 103.41.167.234
#703 Tornado HTTP 服务的 “ACK”
Tornado 2021-12-13- 一个请求会先到 A 服务,然后通过 HTTP 调用的方式传到 B 服务 (基于 Tornado)
- 面对突然涌来的大量请求,B 服务负载迅速升高,响应时间拉长
- A 服务的部分请求因为超时断开,然后重发
也就是说,在负载较高的时候,B 会收到一些重复请求。因为负载高的时候,B 其实已经接收过一遍,只是没有响应。
B 服务处理任务结束之后,会将请求加入幂等。但是在 B 服务正在处理的时候,还是会有重复处理的可能性。
如果是一些对数据可靠性有一定要求的场景,这样重复的处理就不能接受。
比较合适的设计应该是 A 和 B 之间通过 MQ 通讯,根本不可能有这样的情况发生,哪怕请求再多也可以按照自己的速度消费,使系统保持最佳状态运行。而且,服务之间解耦之后,可以避免相互影响。
但是,如果不能改变 A B 两个服务的现有设计(调用关系),可以做的事情:
- 通过请求的正常返回来当 ACK 机制 (本文原本想重点说的内容)
- 将请求的接收和处理拆开
- 请求收到,加入队列,然后就可以返回了,这个时间非常短,这个过程出现问题的可能性非常低
- 如果在处理请求之前,连接断开,那就结束流程,抛弃任务
- A 服务的重试机制延迟一个合适的时间(比如 3 分钟)处理,可以通过 MQ, DB, Redis 实现
两个方案都应该能大幅减小出现重复请求的情况,双管齐下效果会更好。
方案一, 如果引入 MQ 或 DB 的话,就会觉得为什么不在 A 服务做;如果不引入新组件的化,复杂是需要保证服务突然挂掉之后,队列数据的恢复。只能在启动服务时通过扫描日志来恢复数据。
方案二,无论是业务还是代码,影响范围比较小,易于实现。
Tornado 实现 ACK 机制
客户端在正常流程处理完成之前,断开连接,会触发 on_connection_close
调用,可以在这个里面做手脚。
class MainHandler(tornado.web.RequestHandler):
def post(self):
if self._finished:
return
# do something
def on_connection_close(self):
LOG.debug('connection closed')
self._finished = True
super().on_connection_close()
#702 转载:Java 判断是否为空
Java 2021-12-13不要用 xx != null && xx.length() > 0
来判空,可以使用 apache 的 commons 包。