《深入剖析Kubernetes》学习笔记(一):容器技术

Docker & Kubernetes 背景

  • 传统 Paas 项目如 Cloud Foundry 最核心的组件就是一套应用的打包和分发机制。Cloud Foundry 为每种主流编程语言都定义了一种打包格式,用户把应用的可执行文件和启动脚本打进一个压缩包内上传后交给服务商通过调度器选择一个可以运行这个应用的虚拟机,然后通知这个机器上的 Agent 把应用压缩包下载下来启动。
  • Docker 镜像是直接由一个完整操作系统的所有文件和目录构成的,所以这个压缩包里的内容跟你本地开发和测试环境用的操作系统是完全一样的。这种机制直接打包了应用运行所需要的整个操作系统,从而保证了本地环境和云端环境的高度一致,避免了用户通过「试错」来匹配两种不同运行环境之间差异的痛苦过程。
  • 「编排」(Orchestration)在云计算行业里不算是新词汇,它主要是指用户如何通过某些工具或者配置来完成一组虚拟机以及关联资源的定义、配置、创建、删除等工作,然后由云计算平台按照这些指定的逻辑来完成的过程。容器时代,「编排」显然就是对 Docker 容器的一系列定义、配置和创建动作的管理。
……

《功利主义》读书笔记

译者序 第 III 页
现代西方社会思潮的主流是自由主义,而在自由主义的内部,一般认为又可分为三大派别,即自由平等主义、自由至上主义与功利主义。不过在笔者看来,从方法论的角度说,最有影响的思想流派只有两个,一个是发源于古代自然法学的契约论学派,而另一个就是功利主义学派。 当代自由主义契约论学派的基本观点是,合乎道德的行为或制度应当符合正义的原则,而所谓正义,简要地说就是尊重或者不侵犯个人的基本人权。如果要问其理由或根据,那么这个学派的基本方法论依据是,处于平等地位的人们会一致同意这一点,或者人的天启理性会告诉你这一点;换言之,因为人的理性都是相同的,所以我们可以诉诸每个人的同意,而诉诸人们的一致同意差不多也就相当于诉诸人的理性。如果再要追根究底,那么还可以顺着天启理性追溯到自然法或上帝那儿。


译者序 第 V 页
功利主义之所以对当代的人类思想具有更大的影响,不仅是因为其伦理学的基本观点极其简单,并且符合常人的理性——合乎道德的行为或制度应当能够促进“最大多数人的最大幸福”,更主要的是因为,通过“最大多数人的最大幸福”这一概念的不同解释或表述,如“公众幸福”、“社会功利”、“社会繁荣”乃至表示“效率”的各种标准如“帕雷托最优”、“GDP、“生产可能性边界”等等,功利主义不仅在政治领域构造了一种足以与自由主义契约论学派相抗衡的政治哲学和法哲学,而且在经济领域排除了所有其他的伦理学说而独自成为主流经济学的伦理框架。我们或许可以说,在现有的伦理学说中,功利主义是唯一能够奠定各门社会科学的伦理基础,从而为它们指明方向的伦理学说。

……

年度播客单集推荐(2021)

从 2016 年接触播客至今已经快 6 个年头,毫无疑问我从播客这个媒介中汲取了太多养分。看着 Pocket Casts 里日积月累的收听记录,想到可以每年做一次个人年度播客推荐。一方面可以让自己回顾一整年播客内容消费的心路历程,更重要的是为各位刚接触播客 / 播客重度听众推荐一些制作精良、题材新颖广泛的节目单集。

节目排名不分先后,分类粒度也比较粗,各位可以按话题分类或单集简介挑选收听。本页快速播放控件均由 listennote 提供(除非节目未被 listennote 收录),如不能播放或打开,请使用正确的上网方式进行访问。

你也可以直接访问我在 listennote 建立的播放列表:「年度播客单集推荐-2021」

……

PHP数组取交集的方法对比及性能测试

PHP 作为世界上最好的语言,怎么可能有不完美的地方呢?最近因为业务上的一个需求,遇到了一个求几个大数组交集的场景。在实现的过程中,毫不意外地遭遇了性能问题。这里记录一下关于 PHP 取数组交集的性能优化思考。

不想看过程的可以直接跳到文末看结论。

……

《Redis深度历险》学习笔记:管道&事务

管道

  • Redis 的管道特性由 Redis 客户端提供,客户端通过改变了读写的顺序带来性能的巨大提升。
  • Redis 的管道命令让客户端通过对管道中的指令列表改变读写顺序就可以大幅节省 IO 时间。
  • 管道中指令越多,效果越好。
  • 管道的本质:操作系统内核从为套接字分配的缓冲区(发送缓冲 send buffer / 接收缓冲 recv buffer)中读写数据。
  • 执行命令时,系统会调用 write 和 read 进行 IO 操作:
    • write 操作只负责将数据写到本地操作系统内核的发送缓冲,如果发送缓冲满了,则等待缓冲相应就是写操作 IO 操作的真正耗时。
    • read 操作只负责将数据从本地操作系统内核的接收缓冲中取出,如果接收缓冲是空的,则等待数据到来就是读操作 IO 操作的真正耗时。
  • 对于管道来说,连续的 write 操作根本就没有耗时,之后第一个 read 操作会等待一个网络的来回开销,然后所有的响应消息就都已经回送到内核的读缓冲了,后续的 read 操作直接就可以从缓冲拿到结果,瞬间返回。
  • 管道不仅减少了 RTT,同时也减少了 IO 调用次数(IO 调用涉及到用户态到内核态之间的切换)

传统请求相应模式
(Source: 被遗忘的站点)

……