📝 Today I Learned

我们在不断的学习新知识,这个仓库用来把这些碎片化的内容记录下来。

TILs are short Markdown documents (a few sentences + example code) explaining concepts, bits of syntax, commands, or tips we've recently learned.

Inspired from @thoughtbot/til

内容说明

领域分类

  • 计算机科学 Computer Science
  • 编程语言 Programming Language
  • 软件工程 Software Engineer

在线阅读:https://lonexw.github.io/til

版权说明

Each file included in this repository is licensed under the CC BY License.

Networking

Http Proxy

Pingora:Cloudflare 使用 Rust 构建的 HTTP 代理

Nginx 的核心架构

Nginx 带来的生产环境问题

最关键的问题是糟糕的连接重用。我们的机器与原始服务器建立 TCP 连接,以代理 HTTP 请求。连接重用通过重用之前从连接池建立的连接,跳过新连接所需的 TCP 和 TLS 握手,来加快请求的 TTFB(首字节时间)。

但是,NGINX 连接池与单个 worker 相对应。当请求到达某个 worker 时,它只能重用该 worker 内的连接。当我们添加更多 NGINX worker 以进行扩展时,我们的连接重用率会变得更差,因为连接分散在所有进程的更多孤立的池中。这导致更慢的 TTFB 以及需要维护更多连接,进而消耗我们和客户的资源(和金钱)。

Cloudflare 做的连接优化及 Pingora 的优势

  • http2 优化: https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
  • QUIC: https://blog.cloudflare.com/the-road-to-quic/

Pingora 的设计决策:

  • 选择用 Rust 为项目语言,不影响性能的情况下以内存安全的方式完成 C 语言可以做的事情
  • 工作负载调度系统: 选择多线程而不是多处理,以便轻松共享资源,尤其是连接池。Work-Stealing, Tokio 异步运行时
  • 跨所有线程共享连接: 意味着更好的连接重用率,在 TCP 和 TLS 握手上花费的时间更少。
  • 添加 HTTP/2 上游支持, gPRC, 及更多功能
  • 消耗的 CPU 和内存大幅度减少(减少了新的连接。与仅通过已建立的连接发送和接收数据相比,TLS 握手成本显然更为高昂。)
  • Rust 的内存安全语义保护我们免受未定义行为的影响,并让我们相信我们的服务将正确运行。

Source:Pingora 的构建方式

Rust Language

Compiler

Faster compilation with the parallel

编译过程

The compiler is split into two halves: the front-end and the back-end.

The front-end does many things, including:

  • parsing / type checking / borrow checking.
  • It uses Rayon to perform compilation tasks using fine-grained parallelism.

The back-end performs code generation:

  • It generates code in chunks called "codegen units" and then LLVM processes these in parallel.
  • This is a form of coarse-grained parallelism

Rust compilation has long benefited from interprocess parallelism, via Cargo, and from intraprocess parallelism in the back-end. It can now also benefit from intraprocess parallelism in the front-end

The compiler uses the jobserver protocol to limit the number of threads it creates.

How to use

# 安装最新 nightly 版本:rustc 1.75.0-nightly 以上
rustup default nightly 

RUSTFLAGS="-Z threads=8" cargo build --release

或增加到配置文件:config.toml:

[build]
rustflags = ["-Z", "threads=8"]

SingleRAN:华为在无线通信技术领域的封神之战

iPhone + AppStore + 乔布斯

手机从通信工具转变为改变人类的超级终端

从语音时代道数据时代,无线通信行业需要更好的解决方案:3G 基站。

  • 2G 是纯语音电路交换技术
  • 3G 是语音/数据融合 IP 包交互技术

这里的商业困境是什么:

  • 3G 频谱的许可费用和基础设施资本投入开支巨大
  • 用户一直都没有迁移过来
  • 2G/3G 迁移建设模式的难度很大

不只是硬件设备,更需要一种网络建设方案 🛜:投入少、客户体验少、又能够平滑演进。

华为必须要走的路

当时面临的竞争态势:

  • 国内市场竞争激烈(市场份额少的可怜)
  • 海外市场没有品牌(联合绞杀、骗子公司)
  • 创新压力大(标准、专利问题)、研发效率低

余承东:必须做,不做就永远超不过爱立信。

2008,SingRAN:华为第四代多模基站,石破天惊,等同于核武器般的意义。

  • 可以帮助运营商减少 30% 的 TCO(总拥有成本)
  • 突破海外市场,3 年做到新增市场份额第一
  • 在国内市场实现弯道超车
  • 根本性的提升了品牌战略,保持持续的研发效率和价格优势

为什么做对了

  • 在一线客户身边,洞察客户需求,做出人无我有的旗舰产品
  • 最大化旗舰产品的客户价值,死磕关键价值需求: TCO,2G 到 3G
  • 最大化旗舰产品的竞争价值,产业链布局和创新,持续创新
    • 流程性组织、构建组织保障、确保价值需求击穿、说到做到
  • 三代战略:构建战略控制点,支撑旗舰产品从优势到胜势,支撑旗舰产品持续盈利
    • 成熟商用一代 / 开发一代 / 技术储备一代

  • Source:https://mp.weixin.qq.com/s/azVkj69EsvzncSgrYmDEkg

关于 TMT 的一些洞察

TMT 指的是 科技(Technology)、媒体(Media)和电信(Telecom) 这三个产业。

它们有一些共同点:

  • 很高的固定成本投入
  • 边际成本非常低,增加一个新用户,几乎不带来额外的成本
  • 至少缩小或改变了一个现实维度

正是由于这个经济共性,这三个产业逐渐融合发展在一起是毫不奇怪的,而且这三个行业在供应链上面也非常紧密。


  • Source: https://capitalgains.thediff.co/p/tmt