GLB - GitHub Open Source Load Balancer
本文是 GLB 开源的公告,在之前刚出 Introduction 的时候我也有做过介绍,这篇文章给出了更多实现细节上的介绍。它设计的目标是:做负载均衡,使用 ECMA 路由保持 L4 层的连接,使用 Rendezvous Hashing 将连接分配到 L7 层的服务。它跟 LVS 的区别在于,GLB Director 不存储所有的 flow states,而只存储部分(使用哈希分布),这样可以在节点移除时结束 flow。它扩展了 UDP 协议,自己封装了一套 packet。
read moreIn Pursuit of Production Minimalism
本文讲述了一个观点:生产环境应当尽可能简单,最小化。这可以认为是 KISS 原则的推论。作者列出了 Heroku 系统设计的一些实践:
- Heroku 管理所有用户数据库元信息的那个数据库,最后也变成了一个 Heroku Postgres -- 也变成了被管理的那个数据库。 // 尽管我觉得加剧了全部死翘翘的风险?
- 底层技术的革新,可以让我们丢掉整个上层产品,例如因为 SNI 的引入,可以直接丢掉
ssl:ip
。 - 所有用 Scala 写的产品都废弃了,用尽可能少的语言写产品,系统更好维护,有更多人力可以维护。
- 合并一些 microservices,简化运维。
总结起来,有以下这些基本点:
- 废弃老技术
- 标准化,标准到一种数据库,一种语言,一种人物队列,一种webserver,一种反向代理。如果做不到,做到尽可能少。
- 系统中的啥东西都尽可能少。
- 刚发布的东西再观察观察。用那种发布了很多年的稳定软件。
- 能用别人写好的技术,尽可能不自己造车 …
Cloudflare 优化 Nginx 性能
本文是 Cloudflare 的博客,关于如何让 Nginx 接收更多流量。
- Nginx 使用 event loops 解决 c10k 问题 (epoll_wait)
read(epoll_fd)
如果遇到 EWOULDBLOCK 意味着 local read buffer 已经读完,Nginx 就停止从 socket 中读数据直到来更多数据。- 由于 disk I/O 不同于 network I/O, 不存在等数据来这么一回事,直接
read(epoll_fd)
直到读完即可。- 如果场景是读取静态文件,完全可以去掉处理 network I/O 的逻辑。配上 SSD 硬盘 …
使用工程的方法寻找哈希函数
本文作者的任务是找到一个性能最好的 hash function。稍微学过 CS 的人都知道 hash function 接受参数,返回 int 哈希值。我们希望这个返回值尽可能不碰撞,变一点值就会造成大量的 output bits 位翻转。作者不同于学院派,使用的方法是遍历尽可能多的组合,给一个组合打分,找到最优解。这就是他给 uint32_t 参数做哈希找到的最优解
uint32_t
prospector32(uint32_t x)
{
x ^= x >> 15;
x *= UINT32_C(0x2c1b3c6d);
x ^= x >> 12;
x *= UINT32_C(0x297a2d39);
x ^= x >> 15;
return x;
}
他给 uint64_t 找到的解跟目前正在 SplitMix64 …
read moreContainer best practices
本文对容器技术的实践做了不少总结,给出了一些最佳实践。
- multi stages: 删掉构建过程的文件
- clean up: 删掉构建过程的文件
- chaining method: 减少 image layer
- cattle v/s pet containers: kill 后启动可以自动恢复健康的容器叫 cattle,否则是 pet。一般来说,数据库这种 container 算 pet containers。
- 容器配置要注意的一些坑:
/etc/localtime
/etc/machine-id
可以 mount 进容器。 - 容器内应用启动有三种方式:直接启动应用,使用脚本包一层,或者使用 systemd 启动程序。直接启动适合非服务类应用。脚本启动适合稍微复杂一点的程序。systemd 比较适合服务类应用,缺点是会让 image …
Learn how to write a hash table in C
这个 Git 仓库教你如何用 C 实现 Open-addressed, double-hashed Hash table。涉及的话题包括:基本数据结构,哈希函数,哈希碰撞处理,增删改查,自动扩容缩容。我觉得从完成度来说,不输给教授数据结构的教材。
衍生思考:前一阵子在午休的时候花一个钟头从头实现了 linkedlist, 从头实现标准数据结构带给人很强烈的满足感。相关的数据结构还有树,集合,图,推荐大家有空的时候去写一写,看看能否做到 bug-free。
read more