第一章
缘起开源
第一节
写了个好玩的东西叫Codis
我记得是有一天下午在喝咖啡的时候,同一个小组里的伙伴随口聊到的这个想法,这里面其实有一个特别创新的点,解决了一个大量用户并发访问情况下数据的无痛迁移问题。所以当时它就是一个动机,非常随机的一个动机。而且Codis从开始写到发布,第一个版本一共用了不到两个礼拜的时间。
——黄东旭,PingCAP联合创始人,CTO
2013年,还在豌豆荚当工程师的黄东旭遇到了一个挑战:由于业务量的急剧增长,有些服务器的缓存告急。如果缓存耗尽,就会造成用户在使用豌豆荚的服务比如搜索或浏览功能时,出现服务器性能急剧下降的问题,甚至完全失去响应,这显然是用户不能接受的。豌豆荚当时的一个设计理念,就是尽可能地把数据全都放在缓存里面,因为这样访问速度会更快,也才能保证更顺畅的用户体验。不用缓存的话,用户每次访问可能就需要花费100毫秒甚至更长的时间;如果希望只用1毫秒访问的内容就显示出来,那就只能用缓存技术。
但在当时,缓存服务只有单机版,而要解决这个问题,必须能够把缓存做成一种弹性水平扩展的分布式服务。这么一来,如果一台服务器不够就可以加一台或多台,直到缓存够用为止。
和所有的软件工程师一样,刘奇和黄东旭花了不到两个礼拜的时间,写了个叫Codis的软件,实现了这样的服务,彻底解决了这个业务问题。但和大部分软件工程师不一样的是,他们没有止步于此。黄东旭发现,Codis属于基础软件的范畴。因为缓存问题并不是只有豌豆荚的某个具体业务,而是所有业务都会或多或少、或早或晚遇到的问题,所以,他们做出了一个与众不同,但非常重要的决定:
把Codis开源。
Codis是第一天就开源了的,它的成功其实是我们后面事业的基础,因为Codis在开源以后,成为全中国能叫出名字的互联网公司都在用的东西。但它其实是我们花了一两个礼拜做的。这么快的时间,也没做任何推广,就因为它确实是刚需。
——黄东旭,PingCAP联合创始人,CTO
Codis在开源一年以后,已经红遍大江南北;传播范围之广,连原作者都始料未及。时间来到八九年后的今天,黄东旭还经常在各种技术会议上被问及Codis的各种技术细节的问题。“有时和会议主题一点关系也没有,而且这个项目也早已不再由我作为主要的维护者了,但是真的经常还是会有人问我关于Codis的事情,因为他们还在使用,很多都是用户自己根据需求在维护。”黄东旭说到这里的时候,在无奈中又透着些许自豪。
开源的力量,就是以这样的方式给黄东旭以极其强烈的冲击。仅仅因为自己对某个需求的理解更深入一些,并给出了一个通用的、能够满足现实世界中人们的需求的解决方案,他的影响力就不胫而走,因而他无须花费巨大的人力和财力,用户就会主动而热情地选择他的产品,这简直是一种魔力!
也许,Codis的诞生过程的一个更加重要的意义在于,它让三个后来成为事业合伙人的豌豆荚工程师结合成了一个团队。黄东旭当然是其中一员,另外两人,就是刘奇和崔秋(见图1.1)。
Codis并不是从零开始做起的,而是建立在当时最流行的单机版缓存服务Redis的基础上的。最简单的理解就是:Codis利用了Redis已有的接口协议,但没有改造Redis本身,而是在其上层架设一套设施,把缓存服务做成分布式的。也就是说,在每一台服务器上,缓存服务还是由Redis来完成,但是将缓存中的数据从一台服务器扩展到更多的服务器上,以及这些服务器之间缓存数据的转移和同步,则是Codis实现的了。应用程序在使用Codis时,可以采用和单机版Redis几乎一样的方式,只是它面对的是一个“容量无限”的Redis缓存服务。可想而知,这样的服务会给应用程序的性能带来多大的提升,并且还几乎不需要对应用程序做任何的改动!难怪Codis一经推出,就会受到非常热烈的欢迎。