首页 > 新闻 > 专家观点 >

许式伟:十一年逆流顺流,首席架构师到CEO

2014-11-21 14:24:50   作者:Gracia   来源:CTI论坛   评论:0  点击:


  技术人攻略:你这种不迷信权威,独立思考的思维方式,是从什么时候形成的?这种思维方式给你带来了哪些益处?

  从初中起,我就发现大人们有时也会做出不可理喻的决定,于是就开始有了独立思考的习惯。核心就是一句话:凡事都要问个为什么,要有打破沙锅问到底的精神,不可人云亦云。所以在学习的时候,我不喜欢简单地去记老师教的结论,而是用推演的方式,研究书上的公式和理论到底是怎么来的。

  进大学之后,接触到《理论物理》这门课,学到拉普拉斯方程,能解高中所有物理问题。这个方程给了我很深的触动,牛顿经典力学几个公式看起来并没有推导关系,但其背后却原来有非常自然的内在关联。

  另一门《现代数学》也让我受益很深,它对多维几何、群论、分形学、混沌理论比较现代化的数学分支都有涉猎。其中分形几何实际上是一面数学和计算机图形学的交叉学科,让我很想往深去挖,于是把图书馆所有关于分形和混沌的书都看了一遍,还写了一个程序,把接触过的分形模型都用计算机模拟了一遍。

  这两门课让我看到了许多事物从不相关到相关的内在联系,也推动了我去思考和探究背后的原因。长此以往,我发现从某种意义上看,这个世界没有学科之分,计算机、代数、物理,并没有非常明显的边界。

  这种思维方式对我后来的工作有很大影响,举个例子,蛮多人会认为,存储不就是把东西存到磁盘里吗,跟数学有什么关系呢?实际上往高深去做,存储系统和数学有非常紧密的关联。通常的存储服务要保证数据不丢,必须存多份,存多份就会增加存储成本,经典的3副本存储,冗余度是3。想用更低的成本去存,就要用到域代数。

  域代数遵循自然代数的加减乘除规律,但数据值控制在有限区域,不管怎么算,结果都在0到255这个域里面,所以叫域代数。存储文件可以认为是0到255的一个序列,举个例子,一个100K的文件拆成10份,每份是10K,存在10个地方,但文件仍然是一份。这时候用域代数里的加法(其实就是计算机中的异或操作),从这10份数据里取出一份校验数据,数据变成了11份,它的冗余度是1.1。这是一种基于校验码的存储方式,成本比较低,但效果和双副本差不多,其中任何一个数据丢了,都能恢复回去。

  利用域代数降低成本,在存储领域是发展的必然方向,七牛的存储2.0已经采用了这种方式。由此可以发现,任何一个方向的技术要做到顶峰,都必须横向地去理解,因为世界上所有的事情都有关联。想要对云存储理解得更透彻,你必须理解整个世界,而不光是云存储。所以学技术实际上是不能专精的,在专精的过程中遇到瓶颈,就要往广度方向去挖掘。

  技术人攻略:除了用域代数降低存储成本,存储的未来还会有哪些趋势?

  从降低存储成本的角度看,算数冗余已经在算法上做到了比较极致的状况,存储领域接下来的突破,应该发生在材料科学上。生活中各种东西都在电子化,现实世界会逐步映射到比特世界,如果以这种方式疯狂使用,必然会面临能源危机。如何能让存储系统在常温、不耗能的情况下运行,是接下来我们要面临的一个重要问题。

  可能大家会觉得七牛谈这件事有点奇怪,但我却认为未必。创业是一个不断降低不确定性的过程,刚开始创业的时候,充满了各种不确定性和不可控性,但不能停滞不前。这个过程中最麻烦的,是不能把自己看成必须怎样做,要完全放空,不从各种可能性上去限制自己。至少走一步,大不了发现错了回头,其实也不晚。

  如果七牛真要把存储做到极致,一定会往材料这个方向走,因为它关系到我们能不能把存储做长久。当然现阶段,材料不是我们首要的关注点,我们的重点是针对客户的诉求点,解决数据应用层面的问题。

  之前网盘一直在打存储配额战,但都停留在把用户的数据存下来,没把它们用起来,所以网盘的用户粘性很低,这也是我放弃做网盘产品的其中一个原因。直到现在我仍然看好个人云存储的市场潜力,但我相信最后的产品形态不会是网盘,应该是更加垂直化的、由场景驱动的、让数据流动起来的一种形态。

  存储领域真正的战争发生在应用层面,在数据量越来越大的情况下,所有公司都会面临数据管理的难题。数据一定要流动起来才会产生价值,如果仅仅解决存储,数据最终留在七牛的可能性不是特别高。七牛会对针对数据的使用场景,帮助客户做标准化处理,实现数据价值的最大化。例如目前存储最多的数据是图片,图片用户的典型使用场景,是需要不同尺寸的缩略图,我们提供了这样的功能,用户就省心多了,不用去重复去建设这个过程。

  技术人攻略:回顾一下你的过往经历,毕业后仅用2年时间,就成为WPS的首席架构师,这个过程是如何实现的?

  金山在管理上给员工较大的自由度,所以个人的成长空间也挺大。我2000年加入金山,实习期间参与了WPS Office 2001的开发。分配给我的任务,是软件的读盘和存盘模块。这个模块当时的重要性并不那么高,它看上去简单,但我发现其中有不少有意思的挑战。挑战之一,是要求你理解软件的所有功能,以及每个功能的数据表达方式。这让我无意中触及到一个软件系统最核心的东西——数据。顺着这条线索,我研究了微软Office各个功能模块的数据存储方式,并把一些有趣的实现方法分享给同事们,他们会吸收其中有益的部分,据此修改原有软件的设计。

  凑巧的是,一年之后,金山开始研发WPS 2002。新版本被称作“格式兼容之战”,为了实现对微软Office文件格式的兼容,I/O成了战略层面的技术,存盘功能从边缘模块,一下变成了整个WPS研发的核心模块。从2002年底,我领导WPS整体架构设计,开始了WPS 2005长达3年的研发。

  随着对存储更深入的理解,我们在软件架构层面做出了创新,引入了一个数据层,抽象出所有数据的存储过程。数据层诞生之前,传统的“撤销/重做”功能,通过对命令的反操作实现。这种做法非常笨重,所有新开发的功能,都必须考虑反操作怎么做。而数据层带来的好处,是让所有的数据天然可回滚,可以轻松支持多版本存盘、Undo/Redo(撤销/重做),以及各种异步操作。

  这个创新并不是对微软的简单模仿,其灵感来源于对增量存盘的思考。Office有个“快速存盘”概念,用户正在编辑的内容,如果已经存过了一次盘,修改过后再次存盘,只需要在原来基础上补加数据。相当于对同一个文件,存了两个版本的数据。我想既然可以做快速存盘,那么就不必关心用户到底做了几个操作,要实现撤销和重做功能,只需要基于数据状态做前进和回退即可。

  数据层的架构大大降低了研发的复杂度,在当时的金山起到了非常重要的作用。看上去,我像是很幸运,做的东西从边缘模块变成了核心模块。我相信之前很多人接触过存盘,但有多少人深入思考过其中的原理呢?我始终认为,任何一件事情,想要做到极致,必须把它当成一个学科来研究,把它琢磨透。假设这个东西很好玩,思考如果要把它做到极致,最终应该是什么样子。如果仅仅当成一个简单的任务完成,能取得的成果会很有限。

分享到: 收藏

专题