袁隆平院士给妈妈的信《妈妈,稻子熟了》

稻子熟了,妈妈,我来看您了。

本来想一个人静静地陪您说会话,安江的乡亲们实在是太热情了,天这么热,他们还一直陪着,谢谢他们了。

妈妈,您在安江,我在长沙,隔得很远很远。我在梦里总是想着您,想着安江这个地方。

解决GitHub官网打不开问题

GitHub经常打不开,或者打开特别慢,一种解决方案是 找到官网IP地址、CDN域名IP地址、静态资源IP地址,然后配置本机hosts文件,刷新DNS缓存即可。

查询三个域名的IP:

添加获取的对应IP地址到本地hosts文件

MacOS或Linux环境hosts文件路径/etc/hosts ; Windows环境是C:\Windows\System32\drivers\etc

以下是在MacOS或Linux环境下:

% sudo cat <<EOF>>/etc/hosts
# github.com
140.82.113.3 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.109.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com
EOF

刷新DNS

% ipconfig /flushdns # in windows
% sudo systemctl restart network-manager # in Linux that use systemd as init
% sudo killall -HUP mDNSResponder # in MacOS

grpc-go: 客户端与服务器之间双向证书验证通信

  • 生成根证书(ca.key, ca.crt)
%> openssl genrsa -out ca.key 2048
%> openssl req -new -x509 -days 3650 \
     -subj "/C=CN/L=Shanghai/O=grpc/CN=grpc.me"
     -key ca.key -out ca.crt
  • 生成服务器证书(server.key, server.crt)
%> openssl genrsa -out server.key 2048

# 未使用CA签名的server.crt
%> openssl req -new -x509 -days 3650 \
     -subj "/C=CN/L=Shanghai/O=grpc-server/CN=server.grpc.me" \
     -key server.key -out server.crt
 
# 使用CA签名的server.crt
%> openssl req -new \
     -subj "/C=CN/L=Shanghai/O=grpc-server/CN=server.grpc.me" \
     -key server.key -out server.csr
%> openssl x509 -req -sha256 \
     -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 \
     -in server.csr -out server.crt

使用Dnsmasq 实现 hosts 泛解析

$> sudo dnf install dnsmasq -y # 安装 Dnsmasq 
$> sudo cp /etc/dnsmasq.conf{,bak} # 先把配置文件备份一份
$> sudo vim /etc/dnsmasq.conf
# 严格按照 resolv-file 文件中的顺序从上到下进行 DNS 解析, 直到第一个成功解析成功为止
strict-order

# 监听的 IP 地址
listen-address=127.0.0.1

# 设置缓存大小
cache-size=10240

# 泛域名解析,访问任何 baidu.com 域名都会被解析到 6.6.6.6
address=/baidu.com/6.6.6.6

域名解析默认读取 /etc/hosts 文件到本地域名配置文件(不支持泛域名)。

DNS 配置默认读取 /etc/resolv.conf 上游 DNS 配置文件,如果读取不到 /etc/hosts 的地址解析,就会转发给 resolv.conf 进行解析地址。

如何在Fedora 33命令行模式下禁止睡眠

切换启动模式:

%> systemctl get-default # 获取当前启动模式
%> systemctl set-default multi-user.target # 默认命令行模式启动
%> systemctl set-default graphical.target # 默认图形模式启动

笔记本进入睡眠状态后,很多服务不能远程连接使用,例如 SSH 会连接不上,需要修改一下配置:

%> systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target # 禁止睡眠

%> systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target # 启用睡眠
 
%> vi /etc/systemd/logind.conf # 配置盖子(笔记本)
 
找到该行#HandleLidSwitch=suspend,将该行更改为以下所需的设置之一:
#关闭盖子时关闭计算机
HandleLidSwitch=poweroff
#在合上盖子时到休眠计算机
HandleLidSwitch=hibernate
#关闭盖子时暂停计算机
HandleLidSwitch=suspend
#不执行任何操作
HandleLidSwitch=ignore
 
%> systemctl restart systemd-logind # 保存文件,然后重新启动服务
%> service systemd-logind restart # 同上

部署v1.20版的Kubernetes集群

主机环境预设

本示例中的Kubernetes集群部署将基于以下环境进行。

  • OS: Ubuntu 20.04.1
  • Kubernetes:v1.20
  • Container Runtime: Docker CE 20.10.0

测试环境说明

测试使用的Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成,这些主机可以是物理服务器,也可以运行于vmware、virtualbox或kvm等虚拟化平台上的虚拟机,甚至是公有云上的VPS主机。

本测试环境将由master01、node01、node02和node03四个独立的主机组成,它们分别拥有4核心的CPU及4G的内存资源,操作系统环境均为仅小化部署的Ubuntu Server 20.04.1 LTS,启用了SSH服务,域名为magedu.com。此外,各主机需要预设的系统环境如下:

(1)借助于chronyd服务(程序包名称chrony)设定各节点时间精确同步;

(2)通过DNS完成各节点的主机名称解析;

(3)各节点禁用所有的Swap设备;

(4)各节点禁用默认配置的iptables防火墙服务;

注意:为了便于操作,后面将在各节点直接以系统管理员root用户进行操作。若用户使用了普通用户,建议将如下各命令以sudo方式运行。

Uber’s Real-Time Push Platform

Uber builds multi-sided marketplaces handling millions of trips every day across the globe. We strive to build real-time experiences for all our users.

The nature of real time marketplaces make them very lively. Over the course of a trip, there are multiple participants that can modify and view the state of an ongoing trip and need real-time updates. This creates the need to keep all active participants and apps synced with real-time information, whether it’s through pickup time, arrival time, and route lines on the screen, or nearby drivers when you open the app.

A key dimension of growth was feature explosion in critical user screens and the need for developers across the company to build real-time mobile features in a decentralized way on a shared app screen.

This article describes how we went from polling for refreshing the app to a gRPC-based bi-directional streaming protocol to build our app experience.