美丽的西西里岛的一位意大利帅哥程序员的创业成功之路.
你好呀,我是歪歪。
周五了,就不卷技术了。
带大家看看一位在美丽的西西里岛创业的意大利帅哥的成功之路。
这个意大利帅哥就是他:
他叫做 antirez,也是 Redis 的爸爸。
在数据库的世界,Redis 独具一格。
其他多种数据库的中心思想不是表格就是文件,但在 Redis 里,你直接与链表(Linked List)、哈希(Hash)、集合(Set)等“低级”的数据结构打交道。
这正是 Redis 作者 Salvatore Sanfilippo(网名antirez)的独创设计。
在创造 Redis 时,antirez 是数据库的门外汉,但也许就是他没经验,才能为数据库领域带来新想法。
多年后的今天,Redis 已成为主流,几乎所有网络服务背后都能见到它的踪影。
在 Stack Overflow 的调查报告上,Redis 更是蝉联五年最受欢迎的数据库。
antirez 早年生活
antirez 在意大利西西里长大,小时候,他的父亲在一家石化公司工作,担任电工,借此接触工业自动化的问题。
80 年代,他父亲开始使用可编程逻辑控制器(PLC),并对这些控制器产生兴趣,于是他买了一块Z80 处理器的板子,开始在上面写程序。
antirez 六岁时,家里买了第一台个人电脑,TI-99/4A。那是一台商业上不成功,但很有趣的电脑。
他父亲会那上面写了一些 BASIC 程序,antirez 有样学样,小学一年级时就会打键盘、复制BASIC程序等。
到了 14 岁,青少年时期的兴趣,像是摩托车、女孩子,接踵而至,写程序这个兴趣就被抛诸脑后。
直到 18-19 岁时,antirez 才重拾对电脑的兴趣,用电脑玩3D 建模、游戏,也写一些简单的程序。
在巴勒摩大学建筑学院就读大学时,他会用 BASIC 来画图。BASIC 是他儿时学过的编程语言,也是他当时唯一会的语言。
信息安全公司SECLAB
有一天,antirez 想买一张显示卡,却不小心买成了调制解调器(Modem,俗称猫),商家不肯退款,antirez 就顺其自然:「猫就猫吧!」
当时是 90 年代,互联网逐渐平民化。他连上网络,安装了 Linux,开始对信息安全产生兴趣。他买了一本 C 语言的书,开始学习 C 语言。
不久之后,他发现 ping 程序有一个漏洞。
这个漏洞是这样的:在 Unix 里通常有一个限制,如果你不是 root,则无法快速在短时间内发送大量封包。但 antirez 发现透过 Unix 信号,可以绕过这个限制。
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 职涯上很重要的转折点。
自创公司 Merzia
2000 年,antirez 加入了 Linuxcare 意大利分部,公司业务是开源软件,他又在家远程工作,一切都很好——直到互联网泡沫破灭。
那一天公司发了一封邮件告诉员工:「我们要关闭 18 个国家的业务,一个月后你们全部即将失业,晚安。」
2001 年,当时 23 岁的 antirez 有一个小孩,他需要养家活口。他开始写一些 PHP,包办前后端,帮客户做小项目。
2005 年是 Web 2.0 萌芽的年代,他跟朋友 Fabio Pitrola 开了一间叫 Merzia 的公司,想在意大利市场做一些 Web 2.0 的应用。
意大利电信(Telecom Italia)看到了他们做的东西,写了一封邮件,试图建立合作关系。意大利电信后来买下他们做两个网站:一个是社交新闻网站 OKNOtizie,另一个是类似书签网站 Delicious 的 Segnalo。
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,一位意大利的模特儿。
Alessia Merz 在电视上常说一些不经大脑的话,逗乐 antirez 和他的朋友们,在朋友间他们会说「那个很 merz!」来形容某个事物很蠢、没意义。
在九宫格键盘上,MERZ 对应的就是 6379,于是就成了端口号。
merz 这个词经过十几年的转变, 渐渐被他们用来形容看起来很蠢,但却有具有研究价值的东西,他们的公司名字 Merzia 大概也是这么来的。
Tcl 源码的前几行,antirez 引用了一个包却没使用,只留了一行注解 # For [fork]。当时他想要利用 fork() 系统调用来实做持久化储存(persistence)——把数据写回硬盘的机制。
这至今仍是 Redis RDB 的运作方式:利用 fork() 创造出一个子进程,让子进程去将数据写到硬盘,父进程则继续做原来该做的事。
Tcl 源码没有真的用到 fork(),antirez 只留了一行注解在那里,因为当时他理解到 Tcl 已到了极限,是时候以 C 语言改写了。
2009 年 2 月,antirez 的朋友 David Welton 帮他把 Redis 在 Hacker News 上公诸于世。
结果除了发文者之外,只有四个人回应他:三个人说已经其他类似的项目了,只有一个人给予正面回复,并提供帮助。
这个人就是 Ezra Zygmuntowicz(不幸在2014 年去世,RIP),他当时在 Ruby on Rails 社群已相当著名,是 EngineYard 的共同创办人。
Ezra 为 Redis 写了初版的 Ruby 客户端 redis-rb,至今还是 Ruby 客户端的首选,也成为 Redis 在 Ruby 社群流行起来的重要推手。
五年来,Redis 帮 LLOOGG 处理了二十亿次浏览量。在 2014 年关站时,Redis 每秒处理 350-400 个指令。而这整个系统仅是跑在一台每月 150 美金的虚拟机器上。
创业公司都爱 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。
金主来了!
至此,Redis 项目对 antirez 来说还只是一个爱好,他无偿的改进 Redis 并发布新版,直到有一天,VMware 打电话过来。
「我们想付钱赞助 Redis,VMware 在意大利有分部,我们想聘请你,你想成为我们的员工吗?」
antirez 问:「那我需要为你们做什么?」
「不不不,你只要继续做你现在做的事,我们就会付你钱。你只需要在网站上写 Redis 是由 VMware 赞助的即可。」
redis.io 2010-11-27 的截图就这样,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 变成了公司网站。
退出Redis开发
Redis 诞生后十年,2020 年 1 月,antirez 在 Redis Day 会议的讲台上,用他招牌的意大利腔英文介绍 Redis 6.0 的新功能。在 Twitter 上还可以找到一些与会人员和 antirez 的合照。
回顾 Redis 这十年来的成长:
同年 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/
原文为繁体中文,公众号“码农翻身”的号主对其中一些计算机术语做了修改,以适应简体中文的习惯,并且添加了一些插图,一些的文字也稍有调整。
这篇文章在 Hacker News 获得了不少的回应,包括 antirez 本人也回应了:
https://news.ycombinator.com/item?id=35893871
他甚至还指出了原文里面的一些错误和遗漏,
他真的,我哭死。
由于公众号文章不能加外链,原文中很多链接和参考资料没法展示,建议大家去看原文。
·············· END ··············
推荐👍 : 可拷,很刑!一种基于ChatGPT的高效吃瓜方式的探索和研究。
推荐👍 : 面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)
你好呀,我是歪歪。我没进过一线大厂,没创过业,也没写过书,更不是技术专家,所以也没有什么亮眼的title 。
当年高考,随缘调剂到了某二本院校计算机专业。 纯属误打误撞,进入程序员的行列,之后开始了运气爆棚的程序员之路。
说起程序员之路还是有点意思,可以 点击蓝字,查看我的程序员之路。