19

MySQL 也要删“blacklist”,万万没想到技术术语能有沦为技术债的一天

 3 years ago
source link: https://www.infoq.cn/article/gCL78qophcVjbVbNtum2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

7 月 1 日,MySQL 官方博客 发文称 ,计划在数据库源代码和文档中停止使用 master、 slave、 blacklist(黑名单) 和 whitelist(白名单) 等术语,并使用 source、replica、blocklist 和 allowlist 等新术语替换现有术语。

MySQL 是广受欢迎的开源数据库,在 DB-Engine 数据库排行榜中一直稳居第二。2000 年,MySQL 3.23.15 正式引入了 MySQL 副本功能,随后,副本功能得到了广泛应用,几乎所有的 MySQL 数据库都在使用副本功能来实现高可用性、灾难恢复、读取扩展等等。

而在副本功能包含有这样一些名词,“主(master)”、“从(slave)”等等,MySQL 团队表示将调整这些术语表达:

IVzmaiY.jpg!web

据了解,MySQL 最新版本已经使用 Primary/Secondary 定义服务器在数据库架构中扮演的不同角色:

  • MySQL Group Replication
  • MySQL InnoDB Cluster
  • MySQL InnoDB ReplicaSet

为什么要改为“source”呢?MySQL 解释称:“MySQL 异步副本代表一条变更流,其中每一项副本配置都对应一个来源,且并不表示服务器在整体数据库架构中应扮演哪种角色。这样,之前的主从关系并不能适用,尤其是利用副本构建数据库架构拓扑中的双向副本、多层副本甚至是循环副本时,其角色定义更不应如此简单粗暴。”

目前,MySQL 8.0 说明文档中已经发布了术语变更的第一阶段内容,培训与认证以及后续即将推出的 MySQL 产品版本,也会逐步对相关术语做出修改。

多家公司和开源项目都在修改技术名词

虽然 MySQL 团队在博客中没有表明修改术语的原因,但是此前已经有多家公司和开源项目也从代码库和文档中删除了相似的术语,理由是这些术语可能会导致种族偏见。

弗洛伊德事件发生之后,消除种族偏见的呼声迎来新高,并蔓延到了软件领域,微软程序员兼教育家 Scott Hanselman 发文呼吁消除编程中常见的“主 - 从(master-slave)”表述:“互联网工程任务组(IEFT)认为主 - 从(master-slave)是一种压迫性的比喻,这种表述背后是深刻的历史烙印。因此无论是从技术层面还是立足历史角度,都不应该使用这样一种冒犯性的比喻。”

因此,我们看到不仅是 MySQL,多家公司和开源项目都在删除相似的术语:

  • 谷歌从最终用户可见的所有位置删除了“blacklist”和“whitelist”, 分别用“blocklist”和“allowlist”代替,Chromium 将 components/blacklist 目录中的类名称重命名为 components/blocklist;
  • Pivotal 的 LicenseFinder 将“whitelist(白名单)”替换为“permitted licenses(授权许可)”;
  • GitHub Desktop 软件在 2019 年就完成了相似术语的替换,GitHub CLI 也在不久前将“master(主)”替换为“trunk(主干)”;
  • Twitter 也表示将替换删除 9 个术语,其中包括 whitelist、blacklist、 master/slave。

除此之外,还有一些公司和开源项目是公开表示有调整技术术语的计划,例如 Microsoft、LinkedIn、Ansible、Splunk、Android、Go、PHPUnit、Curl、OpenZFS、OpenSSL、JP Morgan 等。

技术术语变技术债?

修改技术术语,说起来简单做起来难,相信很多人都没有想到,有一天技术术语也会沦为技术债:一是需要替换的技术术语的数量可能会非常多;二是想要完全把代码中的术语都替换掉,过程可能非常复杂,尤其是当某些项目发展很多年,代码积累很多的时候;三是某些术语在替换之后可能会导致系统奔溃。

根据 相关报道 ,Google 有超过 2000 个与“blacklist”相关的术语将被替换掉。虽然替换“blacklist”这个单词的过程不会很复杂,把“blacklist”中的第三个字母“a”替换成“Blocklist 的“o”即可,但是如果数量很多的话,也会成为一个问题。

2MbEjya.png!web

谷歌 Chrome 浏览器的程序人员给出的移除“blacklist”以及“whitelist”等用语的建议和步骤

另外,技术术语的替换也是需要一定的时间。以 MySQL 团队的实践为例,虽然 MySQL 部分语法的调整可以通过为现有命令添加别名的方式实现,例如将 SHOW SLAVE STATUS 变更为 SHOW REPLICA STATUS。但这还远远不够,仍有很多命令会在返回的结果列名称中包含文本“主”与“从”表达。

要完全消除这些技术术语,是一项非常艰巨的工作。为了保持向下兼容,MySQL 团队需要首先弃用其中某些术语,而后再行删除。相较于单纯“替换”原有语法,最重要的无疑是尽快开发出新的推荐语法,例如 SHOW REPLICA STATUS 。

而且,MySQL 无法单靠一个发行版就删除所有引用。为了继续支持数百万套 MySQL 部署方案,需要通过多次迭代逐步从语法、协议、错误消息以及源代码中弃用及 / 或删除这些术语表达。

GitHub 开发人员 Brian Golson 也表示:“修改技术术语这项工作强度非常大,不可能凭一己之力完成。”同时他还指出了修改术语可能导致系统奔溃:“如果我们对 buildin/init-db.c 直接进行逐行修改,那么大概会引发 304 项测试失败,约占总体测试失败数量的三分之一。”

对于 MySQL 及其它项目修改“blacklist”等技术术语,你们是怎么看的呢?欢迎在评论里留言哦!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK