登录      注册 ,网站注册用户数1481
您知道吗?“SLDJL”是“森林的角落”的拼音首字母缩写。
您的位置: 首页 > 资讯 > 科技 > 一个建筑系的学生,单枪匹马,彻底改变了数据库行业

一个建筑系的学生,单枪匹马,彻底改变了数据库行业

2023年8月9日 来源:码农翻身

在数据库的世界,Redis 独具一格。

其他多种数据库的中心思想不是表格就是文件,但在Redis 里,你直接与链表(Linked List)、哈希(Hash)、集合(Set)等“低级”的数据结构打交道。

这正是Redis 作者Salvatore Sanfilippo(网名antirez)的独创设计。

在创造Redis 时,antirez 是数据库的门外汉,但也许就是他没经验,才能为数据库领域带来新想法。

多年后的今天,Redis 已成为主流,几乎所有网络服务背后都能见到它的踪影。

在Stack Overflow 的调查报告上,Redis 更是蝉联五年最受欢迎的数据库。

1 antirez 早年生活

antirez 在意大利西西里长大,小时候,他的父亲在一家石化公司工作,担任电工,借此接触工业自动化的问题。

80 年代,他父亲开始使用可编程逻辑控制器(PLC),并对这些控制器产生兴趣,于是他买了一块Z80 处理器的板子,开始在上面写程序。

news_20230809_1_yt.png

antirez 六岁时,家里买了第一台个人电脑,TI-99/4A。那是一台商业上不成功,但很有趣的电脑。

news_20230809_2.png

他父亲会那上面写了一些BASIC 程序,antirez 有样学样,小学一年级时就会打键盘、复制BASIC程序等。

到了14 岁,青少年时期的兴趣,像是摩托车、女孩子,接踵而至,写程序这个兴趣就被抛诸脑后。

直到18-19 岁时,antirez 才重拾对电脑的兴趣,用电脑玩3D 建模、游戏,也写一些简单的程序。

在巴勒摩大学建筑学院就读大学时,他会用BASIC 来画图。BASIC 是他儿时学过的编程语言,也是他当时唯一会的语言。

2 信息安全公司SECLAB

有一天,antirez 想买一张显示卡,却不小心买成了调制解调器(Modem,俗称猫),商家不肯退款,antirez 就顺其自然:「猫就猫吧!」

当时是90 年代,互联网逐渐平民化。他连上网络,安装了Linux,开始对信息安全产生兴趣。他买了一本C 语言的书,开始学习C 语言。

不久之后,他发现ping 程序有一个漏洞。

这个漏洞是这样的:在Unix 里通常有一个限制,如果你不是root,则无法快速在短时间内发送大量封包。但antirez 发现透过Unix 信号,可以绕过这个限制。

news_20230809_3.jpg

1998年4月,他在Bugtraq 邮件列表上发表了这个发现,Bugtraq可不一般,全球的信息专家都会在上面发布安全问题。

第二天,antirez 接到一通从米兰打来的长途电话,一家名叫SECLAB 的安全公司问他要不要来工作。

antirez 受宠若惊:「但我只是一个建筑系的大学生,我什么都不懂。」

但SECLAB 的老板还是鼓励他来米兰一趟,和他们聊聊。

antirez 去了米兰与他们见面,公司的老板告诉antirez:「你回去继续生活,但是读这十本书,读完再回来找我。」

这十本书都是关于网络的,如TCP/IP 协议、防火墙、应用程序安全、密码学等。1998 年夏天,antirez 就每天西西里岛的海边读这些书。

九月,antirez 回去找SECLAB,他们想聘请antirez。

休学后,antirez 搬到米兰工作。第一次开会时,antirez 完全听不懂同事在说什么,冒牌顶替症油然而生。

这也不能怪antirez,当时意大利一些厉害的黑客都在SECLAB 工作,不过在这充满强者的环境里,经过两个月的洗礼,antirez 也开始做出贡献。

首先,antirez 发明了一种名为Idle Scan的攻击手法。它至今仍是Nmap 的著名的攻击手法之一,仍被人们研究着。

SECLAB 的老板认为antirez 在开源社群的工作成果,比去应付客户有价值,就叫他不需烦恼客户,只要专心写开源软体,在安全领域研究攻击手法。

此外,antirez 还写了一个名叫hping的工具。它是一个可以让你传送客制TCP/IP 封包的命令列工具,它的作用类似ping,但它不一定要像ping 走ICMP 协定,所以hping 可以做到更多事。例如:测试防火墙规则、测试网路效能、绕过防火墙传输档案。

米兰这个大城市对一个21 岁的年轻人实在太多采多姿,自制力不好很容易迷惘其中,他开始晚睡,工作迟到。

在SECLAB 待了六个月之后,antirez 离开了。

虽然时间短,期间antirez 写了很多C 语言的程序,参与了很多项目,这六个月是antirez 职涯上很重要的转折点。

3 自创公司Merzia

2000 年,antirez 加入了Linuxcare意大利分部,公司业务是开源软件,他又在家远程工作,一切都很好——直到互联网泡沫破灭。

那一天公司发了一封邮件告诉员工:「我们要关闭18 个国家的业务,一个月后你们全部即将失业,晚安。」

2001 年,当时23 岁的antirez 有一个小孩,他需要养家活口。他开始写一些PHP,包办前后端,帮客户做小项目。

2005 年是Web 2.0 萌芽的年代,他跟朋友Fabio Pitrola 开了一间叫Merzia的公司,想在意大利市场做一些Web 2.0 的应用。

意大利电信(Telecom Italia)看到了他们做的东西,写了一封邮件,试图建立合作关系。意大利电信后来买下他们做两个网站:一个是社交新闻网站OKNOtizie,另一个是类似书签网站Delicious 的Segnalo。

4 Redis 的诞生

又过了几年,antirez 和他朋友决定专注一个新领域:网站分析

他们想为写博客的博主们打造一个工具,让他们可以看到访客的即时行为。例如:一个访客从Google 点进了这篇文章,回到首页,然后跳到某一页。

博主可借此改进网站的导航设计,这个工具名为LLOOGG,当时的网站首页上有几句介绍,说明它与Google Analytics 的不同之处。

LLOOGG 特别之处就在于它让网站管理员监看某个访客当下在网站上的活动,Google Analytics 一直到了2011 才有这个功能,而LLOOGG 创立在2007 年,可见之创新。

刚开始antirez 尝试使用MySQL,但马上就发现性能问题。

MySQL 每读写一笔数据,都要动用到硬盘,数据量一多,运算全卡在硬盘的读写,网站就动弹不得。

从现今眼光来看,有经验的后端工程师都会知道不应该选MySQL 来实现即时应用,但在2007 年这一切并不是这么显而易见。

antirez 认为使用内存可以解决这个问题,于是他先用Tcl编程语言写了一个内存数据库的原型(prototype),名叫LMDB(LLOOGG Memory Database),这就是Redis 的前身。

这个原型源码只有300 多行,但已足够让你一窥Redis 的大致样貌。

首先,这个原型已支持像是SET、GET、LPUSH、RPUSH 等基本指令,你可以在上面使用字符串(string)与列表(list)两种数据类型。

此外,服务器与客户端的通讯协定与Redis v1 一致,设计上要让人类可读(human readable)且可快速解析(fast to parse)。

Redis 预设的端口6379 也早已出现在Tcl 源码当中,6379这个数字很有意思,来源是Alessia Merz,一位意大利的模特儿。

news_20230809_4.png

Alessia Merz 在电视上常说一些不经大脑的话,逗乐antirez 和他的朋友们,在朋友间他们会说「那个很merz!」来形容某个事物很蠢、没意义。

在九宫格键盘上,MERZ对应的就是6379,于是就成了端口号。

news_20230809_5.png

merz这个词经过十几年的转变, 渐渐被他们用来形容看起来很蠢,但却有具有研究价值的东西,他们的公司名字Merzia 大概也是这么来的。

Tcl 源码的前几行,antirez 引用了一个包却没使用,只留了一行注解# For [fork]。当时他想要利用fork() 系统调用来实做持久化储存(persistence)——把数据写回硬盘的机制。

这至今仍是Redis RDB 的运作方式:利用fork() 创造出一个子进程,让子进程去将数据写到硬盘,父进程则继续做原来该做的事。

Tcl 源码没有真的用到fork(),antirez 只留了一行注解在那里,因为当时他理解到Tcl 已到了极限,是时候以C 语言改写了。

2009 年2 月,antirez 的朋友David Welton 帮他把Redis 在Hacker News 上公诸于世。

news_20230809_6.png

结果除了发文者之外,只有四个人回应他:三个人说已经其他类似的项目了,只有一个人给予正面回复,并提供帮助。

news_20230809_7.png

这个人就是Ezra Zygmuntowicz(不幸在2014 年去世,RIP),他当时在Ruby on Rails 社群已相当著名,是EngineYard 的共同创办人。

Ezra 为Redis 写了初版的Ruby 客户端redis-rb,至今还是Ruby 客户端的首选,也成为Redis 在Ruby 社群流行起来的重要推手。

五年来,Redis 帮LLOOGG 处理了二十亿次浏览量。在2014 年关站时,Redis 每秒处理350-400 个指令。而这整个系统仅是跑在一台每月150 美金的虚拟机器上。

5 创业公司都爱Redis

尽管Hacker News 上没有获得热烈回响,antirez 每天仍利用工作之余开发Redis,大概持续了一年,慢慢开始吸引用户。

当时他手上还有两个开源项目:hping 和Jim Interpreter,但Redis 是第一个让他觉得可以长期投资的项目。

他对信息安全失去兴趣后,就停止开发hping;他对Tcl 的走向失望,投入Ruby 的怀抱后,就停止开发Jim Interpreter。

但他很肯定他离不开数据库,所以antirez 就假设Redis 会成功,继续开发,因为就算不成功,至少他自己在往后几年都会继续使用这个数据库。

2009 年,与Redis 发布同年,一个叫GitHub 新创公司的CEO,Chris Wanstrath 利用Redis 写了一个队列系统Resque,用来跑GitHub 的后台任务。

在Rails 的世界,Resque 是当时最热门的工作队列系统。2012 年出现的一个后起之秀Sidekiq,也是建立在Redis 的基础上,是现在Rails 工程师的首选。

另一家新创公司Instagram,其中一个创办人Mike Krieger 在2010 年开始与antirez 通信,讨论该怎么利用Redis 打造Instagram。当时Instagram 和Redis 都是刚起步,Mike 和antirez 也互不相识。

Instagram 在最初几年是完全建造在Redis 之上的,所以如果没有Redis,很可能就不会有Instagram,或至少会晚点才问市。

2010 年,Twitter 也加入Redis 的行列。Twitter 邀请过antirez 到他们总部几次,讨论「时间轴」的新设计。有趣的是,antirez 在Redis 刚发表完没多久(2009 年3 月),就写了一个简单版的Twitter 叫Retwis,以展示如何使用Redis。

6 金主来了!

至此,Redis项目对antirez 来说还只是一个爱好,他无偿的改进Redis 并发布新版,直到有一天,VMware 打电话过来。

「我们想付钱赞助Redis,VMware 在意大利有分部,我们想聘请你,你想成为我们的员工吗?」

antirez 问:「那我需要为你们做什么?」

「不不不,你只要继续做你现在做的事,我们就会付你钱。你只需要在网站上写Redis 是由VMware 赞助的即可。」

redis.io 2010-11-27 的截图

news_20230809_8.png

就这样,Redis 有了一个金主,antirez 和VMware 合作开发Redis 好几年。VMware 后来与Pivotal 分拆,antirez 又转到了Pivotal。

随着用户愈来愈多,市场上出现了第一批提供Redis 顾问服务的公司,其中有一间来自以色列特拉维夫的公司叫Redis Labs。它本来的名字叫Garantia Data,一开始是数据库供应商,后来公司改名为Redis Labs,转型专注做Redis 相关的业务。

Pivotal 和Redis Labs 有一个共同投资人,某一天他告诉antirez:「你在VMware 干嘛?去Redis Labs 吧,那里才是你产品的支持中心。」

于是antirez 转到了Redis Labs,并在那边工作至今。2021 年8 月,Redis Labs 更正式改名为Redis,原本是项目网站的redis.io 变成了公司网站。

7 退出Redis开发

Redis 诞生后十年,2020 年1 月,antirez 在Redis Day 会议的讲台上,用他招牌的意大利腔英文介绍Redis 6.0 的新功能。在Twitter上还可以找到一些与会人员和antirez 的合照。

news_20230809_9.png

回顾Redis 这十年来的成长:

时间版本新功能
2009-2字符串、列表
2009-91集合、有序集合(sorted set)、持久化存储(RDB, AOF)等
2010-92哈希、发布订阅(pub/sub)、位图(bitmap)、Lua 脚本编程、HyperLogLog 等
2015-93集群(cluster)、地理数据系统
2017-74模块(modules):RediSearch、RedisJSON、RedisGraph 等
2018-105流(stream)
2020-16SSL、存取控制(ACL)等

同年6 月,antirez 在博客写了一篇文章告诉大家,他决定退出Redis 项目的开发及维护工作。

他仍然会在Redis Labs 担任顾问的角色,提供意见,但不直接参与开发。十年多来奉献在同一个项目上,让antirez 倦怠了。

对antirez 来说,写程序是一种表达自我的方式,是一种艺术。每一个字符、断行都要精雕细琢,仿佛是另外一种艺术形式——写作。

软件开发就像是在写一本书,它必须美观、优雅、容易理解。如果这个软件刚好是对其他人也实用,那也只是副作用罢了。

当然,antirez 也理解这个想法不切实际。当你的软件被大规模采用,你就必须做出许多妥协,让你的软件变得不那么完美,但却对大部分人实用。维护Redis 变得愈来愈具挑战性,让他在艺术和实用性之间陷入挣扎。

这使得antirez 感到疲惫与压力,开始渴望回归那个艺术家的身份,去创作更纯粹的程序艺术。

离开Redis 项目后,antirez 写了一本关于人工智能的科幻小说《Wohpe》,于2022 年7 月出版。同年4 月,Redis 团队发布了新版本7.0,这是antirez 退出项目后的第一个重大版本。

后记:

本文来自《Redis 与作者antirez 的故事》,原文地址:

https://blog.brachiosoft.com/posts/redis/

原文为繁体中文,我对其中一些计算机术语做了修改,以适应简体中文的习惯,并且添加了一些插图,一些的文字也稍有调整。

由于公众号文章不能加外链,原文中很多链接和参考资料没法展示,建议大家去看原文。

   

0/255

还没有评论,快来抢沙发吧!
为您推荐
薇诺娜
Copyright © 2014-2024 森林的角落 , All Rights Reserved