Linux Primitives
这份 Presentation 文档在 High Level 纵览了 Linux 的诸多概念,很推荐阅读。
- Linux 就是一个 GNU user space,而程序则是和 GNU libc 与其它用户态的 libraries 交互的东西。当然,还有很多种 libc 的实现,我们可以选择一种 libc 的实现放在容器里面。
容器
本身不是内核的概念,它只是一组进程,有相同的 namespaces / cgroups 等等。- 进程 & 线程在内核中有相同的数据结构 task, 这货有千余个字段,大约 1k, 一般比较经常用到的是 user, pid, tgid 等字段。
- 至于用户和组,内核才不关心谁的名字是什么,说到底就是几个数字:ruid …
The joy of max
这篇文章给出了最近的一次 Linux 内核的 max()
宏的实现,我们可以看到它和我们在 C 语言教材上入门的实现有多大的区别。
- 这段代码视图解决的问题在这个的 Patch 中可以查看: PATCH v6 kernel.h: Retain constant expression output for max()/min(),简单来说,是想要让
max(a, b)
返回常量表达式,而非常量值。 - 关于 __builtin_choose_expr, 这是 GCC 的一个 builtin funcion,可以在
__builtin_choose_expr (const_exp, exp1, exp2)
的const_exp
值为 整型常量时返回exp1
,否则exp2
. - 评论区有人给出了 …
Bit - 一款管理 copy-paste 代码的工具
除了使用 npm 管理代码依赖,事实上程序员们也复制粘贴代码到仓库里,Bit 就是这么一款管理这种代码的工具。
- 使用 Bit 你不需要把组件从代码库中剥离出来,写一大堆 publish metadata,然后上传到包管理中心。
- 你要做的事情是
bit add src/your-components/*; bit export username.scopename
- 其它代码库想用这块代码
- 仍然可以用 npm install;
- 或者使用
import padLeft from '@bit/bit.examples.string.left-pad'
这样的方法导入; - 或者直接运行
bit import username.scopename
,参考 Importing Components
衍生思考:这门语言雄心很大,想成为通用的工具。目前这个工具只能支持 js …
read more分布式系统的特性 - Resilience
本文介绍了分布式系统的特性之一:Resilience。
- 有必要搞清楚 Fault v/s Failure 的区别:Fault 指的是系统错误,例如说存储层速度慢,内存泄漏,线程堵塞,依赖错误,错误数据等等;而 Failure 则是系统完全无法正常工作了,例如豆瓣开小差。Fault 可能会导致 Failure;Failure 会使系统的 uptime & availability 降低。一般而言,Failure 可能会导致向客户赔钱什么的(违反了 SLA)。
- 使系统 Resilience 有几个很困难的基本点:网络层是不可靠的,依赖总可能会失效,用户行为无法预测。但是基于一些原则,Resilience 是可以做到的。
- 少写代码!
- 在客户端配置 timeout,可以防止雪崩。一般 timeout 值可以设置成依赖的 99 …
Adaptive Concurrency Limits @ Netflix
本文是 Netflix 工程师团队产出的关于如何配置服务负载的博客,他们的产出是一个 Java 库 concurrent-limits。保障服务稳定的手段有:断路器,并发控制,Chaos 测试等等,本文关注自适应的并发控制(adaptive concurrency limits)。查看代码库。
- 理论储备:并发是在某个时间点系统能同时处理请求的能力,根据 Little's Law, 平均服务时间乘以平均服务调用率可以得到并发量。如果超量,要么进入队列等待,要么被拒绝访问。一个系统如果不设限制,这个队列将会不断增长直到所有请求都开始超时直到系统内存溢出到崩溃。这个系统的超时甚至可能引发整个系统的层叠崩溃(雪崩)。问题的核心在于这个限制该设置多少。
- Netflix 的做法是自动调整,limit = 在性能开始降级时的系统承受的并发量(inflight request,即 concurrency + queue)。如果手动调,一段时间内可能比较合理,但现实容易变。他们的预设目标是:无需人工干预,不需要询问别的服务,不需要对系统其它组件有了解,能根据系统流量适配变更 …
Warehouse: All New PyPI is now in beta
这则公告宣布了从 2018年4月起,所有 Python Package Index 将会由 pypi.org 中进行 Beta 测试(终于!)。
- 在此之前,我们使用的是 pypi.python.org。在古代,Python 界还没有 Web 框架的时候这个网站就上线了,经过了 N 年,现在我们有了新的代码库 pypa/warehouse,使用 docker 进行开发,部署在云上。
- 值得注意的变更:
- 不再推荐 setup.py upload, 而使用 twine 上传代码包。
- macOS/OS X users 需将 pip 升级到 9 …