- 主题:[转载]为什么现代软件让我悲伤
etcd 是一个使用 raft 一致算法的 KV 数据库,产生于 2013 年。最早是为 CoreOS 开发的,但本文不关心这个烂货,它已经完蛋了。本文的主角,它的副产物 etcd 使用更广泛。etcd 提供了简洁的 HTTP API, 多年以来,我已经使用 etcd 开发了多个工具。
2015 年的时候,又诞生了另外一个与之没有关系的 Kubernetes 项目,很多人称它为 k8s. 在我看来,这是继 systemd 之后系统管理领域的最大灾难。它号称要简化集群管理,为大众带来 Google borg 集群管理软件的体验。但实际上:
1. 为你的软件添加了几百种出错的模式。
2. 把编写可移植的软件配置变成 k8s 专有的 YAML 配置文件。
3. 让你陷入容器化和软件定义网络这些可疑的设计模式里面。
如果真运行的是一个真正复杂的系统,那 k8s 可能是适合你的工具。但对 99.9% 的人来说,k8s 除了增加额外的复杂度,并没有带来真正的价值。
今天想讲的是 etcd,离题了对吗?很不幸的是,两个软件产生了联系。k8s 很快地决定用 etcd 作为它的状态存储,开始了 etcd 的快速堕落。
随着大量 k8s 用户的影响,一群 Xooglers[1] 决定给 etcd 带来 Google 的技术,正如它们以前经常干的。etcd 的简单HTTP API 被 gRPC 所代替[2],简单内部数据结构被租约、锁、事务等大量非正交的数据模型所代替。etcd 3.2 又在 gRPC 网关之上加回了 HTTP API, 但只实现了最初版本的小部分功能,不足以支撑以前基于原始 API 编写的应用。v2 API 一直存活至今天,但上游总是威胁要在新版本里面删除这个 API. 估计早晚有一天真的会完全删除它。
这就是今天要讲的故事。现代流行软件总是被来自于大公司的“专家”所控制,极端优化各种特殊场景。这就是今天的世界。小而优雅的软件被那些想要建造大而笨拙软件的“专家”所终结,加上各种大公司所需要的特性集。软件开发者使用几个 G 大的 ElectronJS 开发上千个依赖的 JAVA 程序,调用难以操作的系统上各种笨拙的 API. 不愿意使用更简洁和更好的平台,软件质量,已经是正在死亡的艺术。
[1] 这个 Xooglers 是什么意思?Google 的前员工?还是一家公司的名字?译者问。
[2] gRPC 是被项目的最初作者 Xiang Li 所加入的。但这并不能说明这不是来自于山景城的坏主意,或者没有受到这些 Xooglers 项目的影响。
https://www.roguelazer.com/2020/07/etcd-or-why-modern-software-makes-me-sad/
--
FROM 112.47.122.*
这听起来很有前途。。j2ee 统治了 JAVA 社区好几年呢。
【 在 ilovecpp (cpp) 的大作中提到: 】
: k8s is the new j2ee.
--
FROM 112.47.122.*
如果软件采用的是 GPL 协议,就不会被这些大公司所控制了。
【 在 ilovecpp (cpp) 的大作中提到: 】
: 这篇文章的重点倒不是k8s好不好,而是k8s这样的集成系统太成功之后,使得它依赖的工具(如etcd)失去了独立性。etcd的开发会向k8s的需求倾斜,而直接调用etcd api的应用也越来越少。结果是把etcd作为独立的工具来使用会变得越来越难。
: systemd也有类似问题。systemd整合了原本独立的很多软件,使得要开发一个新的init变得更难了。
: 这个问题我觉得除了“悲伤”之外,没有什么办法,也只能fork了。人民热爱集成,你不喜欢,你算老几...
: ...................
--
FROM 125.78.67.*
gRPC 的依赖项比较多。而且看文章风格,这个作者估计是 c/c++ 后端程序员,讨厌 gRPC 很正常。
这篇文章的最后还提到很多程序员用着 js 写的 IDE 开发出依赖非常多的软件,同时还指出那个编程语言是 Java. 这句话喷的是 vs code 对吧。。
这篇文章可能把本版所有人都给喷了,哈哈。。
【 在 lalula (Twin●泰山) 的大作中提到: 】
: 不觉得etcd作为独立工具来使用越来越难
: 文中提到,etcd使用gRPC替代http api,其实挺好的。
--
修改:hgoldfish FROM 125.78.67.*
FROM 125.78.67.*
易写可不对。。每个 key 都要加双引号,不然会报错的。
【 在 No1 () No1 () 的大作中提到: 】
: json做配置、传数据都很好
: 易读易写易解析,数据格式不多不少正合适
--
FROM 125.78.67.*
vs code 本身就是用 js 写的。用 json 比较奇怪,为啥不直接用 js 算了。
【 在 No1 () No1 () 的大作中提到: 】
: vscode就用的json;我看也有直接用.js文件的,比如Hyper
--
FROM 125.78.67.*
名字都带 code 了,显然没有程序员之外的用户会用。
【 在 No1 () No1 () 的大作中提到: 】
: 因为vscode虽然是用js(ts)写的,但配置文件主要是面向用户,用户可不全是js程序员,
: 所以用json显然是更好的选择
--
FROM 125.78.67.*
其实 json 真的很不方便。我以前用过一个软件就是用的 JSON,一来规则很严格,key 要带双引号,最后一个KEY之后不能有逗号,二来不允许注释。
【 在 No1 () No1 () 的大作中提到: 】
: 逻辑:是程序员,但不全是js程序员
: 对于非js程序员来说,json显然是更简单的一个规则
--
FROM 125.78.67.*
你乱扯什么啊。。
注释一般是软件作者写的。比如:
### Set OS Info in BMC/Service Processor ###
# Name: SET_OS_INFO
# Description: Set OS Name, Version and Hostname in the Service Processor (BMC)
# Default: yes
SET_OS_INFO="yes"
有上面那段注释,改的时候就不用到处查文档了。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 我看不支持注释挺好的,否则某些变态可能把一切逻辑都包装成JSON塞进去,制造垃圾代码
: JSON的卖点是简单对象,如果需要复杂的对象模型,比如GUI,那也不该用JSON了
--
FROM 125.78.67.*
我没说 JSON 要带注释啊。。我说的是别用 JSON
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 我强烈反对JSON带有注释
: 这么说吧,需要注释才能看懂的JSON格式,加了注释你也不一定能懂,且大概率有其他问题
: 既然用了JSON,就应该把结构简化到一目了然的程度。不符合这个条件的应该考虑XML等其他格式,而不要自造或者自己扩展。
: ...................
--
FROM 125.78.67.*