#734 Bing 打不开了
互联网 Bing 搜索引擎 2021-12-17Bing 是我的默认搜索引擎。但是今天早上发现 Bing 打不开了,只有通过特殊手段才行。
- 应监管部门要求,Bing 需要在 30 天内对搜索框的建议功能做出整改,看到很多网友贴出了公告。
- https://www4.bing.com 目前可用 (随时会挂)
- 切换到谷歌 DNS 之后,Bing 可以正常访问
Update @ 2021-12-19: 必应搜索恢复正常访问(持续时间大约 2 天)。
coding in a complicated world
Bing 是我的默认搜索引擎。但是今天早上发现 Bing 打不开了,只有通过特殊手段才行。
Update @ 2021-12-19: 必应搜索恢复正常访问(持续时间大约 2 天)。
Kubernetes (K8S) 可以通过以下方式判断每个容器需要的资源情况,然后据此进行调度:
可以根据容器所需资源情况调度:
K8S 采用主从架构,主要由控制平面(Control Plane)和工作节点(Worker Nodes)构成,这种架构设计使得系统具有良好的可扩展性和稳定性。
在 K8S 中,一切皆为资源对象,通过操作这些对象来管理应用。
本质是计算机资源的隔离和管理,单技术原理和应用场景有显著差异:
维度 | KVM/OpenStack 虚拟化生态 | K8S 容器编排 |
---|---|---|
资源抽象层级 | 基于硬件虚拟化(CPU、内存、磁盘),抽象出虚拟机(VM) | 基于操作系统级虚拟化,抽象出容器(Container) |
隔离粒度 | 操作系统级隔离(每个 VM 有独立内核) | 进程级隔离(共享宿主机内核) |
核心目标 | 实现物理服务器资源的池化与虚拟机管理,支持传统应用迁移 | 解决容器化应用的规模化部署与微服务管理 |
典型场景 | 企业传统应用上云、虚拟机集群管理、私有云基础设施建设 | 云原生应用开发、微服务架构、弹性伸缩场景 |
虚拟化生态(KVM/OpenStack)
KVM(Kernel-based Virtual Machine)
OpenStack
K8S 与容器技术
资源占用与性能
隔离性与安全性
部署与管理复杂度
应用迁移与兼容性
推荐使用虚拟化(KVM/OpenStack)的场景:
推荐使用 K8S + 容器的场景:
K8S 与虚拟化并非对立,而是常以混合形态存在:
K8S 运行在虚拟机上:
容器与 VM 的互补场景:
新型技术融合:
2020 年 10 月发布的 6.1,结果到现在,已经一年多过去了,6.2 还没有见到。
Update @ 2022-04-28: 又过去了小半年,6.2 还是没有影子。
从 GitHub 提交频率图上明显可以看到 Tornado 的活跃度大幅下滑,2020 年的提交已然不多,2021 年更加惨不忍睹。
官方协程框架 AsyncIO 的诞生,标志着 Tornado 的历史使命已经完成。
是时候带着对 Tornado 的回忆,全面转投原生协程生态了。
Fedora 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 倍的提升我不知道,但是感觉好像确实快。挺好!
CentOS Stream 9 已于月初发布,基于 Fedora 34,这就是 RHEL 9 未来的发展方向。
CentOS Stream 的稳定性应该是比 Fedora 更好,如果我想选择改用 Fedora 当桌面环境,为什么不试试 CentOS Stream 呢?
这里就开始调研一下。
Node 包都存储在 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
~
匹配最近的小版本, eg: ~1.2.3
会匹配 1.2.x
^
匹配最新的大版本,eg: ^1.2.3
会匹配所有 1.x.x
*
永远最新版本DNS_PROBE_FINISHED_NXDOMAIN
。172.16.0.1
。223.5.5.5
, 223.6.6.6
之后就好了。我应该在出现问题的时候先尝试 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
也就是说,在负载较高的时候,B 会收到一些重复请求。因为负载高的时候,B 其实已经接收过一遍,只是没有响应。
B 服务处理任务结束之后,会将请求加入幂等。但是在 B 服务正在处理的时候,还是会有重复处理的可能性。
如果是一些对数据可靠性有一定要求的场景,这样重复的处理就不能接受。
比较合适的设计应该是 A 和 B 之间通过 MQ 通讯,根本不可能有这样的情况发生,哪怕请求再多也可以按照自己的速度消费,使系统保持最佳状态运行。而且,服务之间解耦之后,可以避免相互影响。
但是,如果不能改变 A B 两个服务的现有设计(调用关系),可以做的事情:
两个方案都应该能大幅减小出现重复请求的情况,双管齐下效果会更好。
方案一, 如果引入 MQ 或 DB 的话,就会觉得为什么不在 A 服务做;如果不引入新组件的化,复杂是需要保证服务突然挂掉之后,队列数据的恢复。只能在启动服务时通过扫描日志来恢复数据。
方案二,无论是业务还是代码,影响范围比较小,易于实现。
客户端在正常流程处理完成之前,断开连接,会触发 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()
不要用 xx != null && xx.length() > 0
来判空,可以使用 apache 的 commons 包。
interface{}
to any
Golang GitHub 仓库上的 Issue 49884 all: rewrite interface{}
to any
值得吃瓜。
由于新的泛型机制中引入了 any
关键字, 有人提议将代码中的所有 interface{}
替换为 any
。
相关连接:all: gofmt -w -r 'interface{} -> any' src
目前这个 Issue 还是 Open 状态。