📝 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"]
- Source:https://blog.rust-lang.org/2023/11/09/parallel-rustc.html
- Samply: Command-line sampling profiler for macOS and Linux
- Rayon is a data-parallelism library for Rust
- jobserver protocol
- Amdahl's law
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