基础系统软件的价值

标签: 基础 系统软件 价值 | 发表时间:2011-07-22 09:52 | 作者:风轻扬 吴羽
出处:http://wangyuanzju.blog.163.com
盛大推出云计算服务,看起来想做类似于Amazon AWS的IaaS。看了一下,结构化数据管理的功能很弱,只有最简单的Key-Value服务,只有GET/PUT/DEL,没有条件更新没有锁,没有扫描,这让我觉得很不靠谱。结构化数据管理是99.9%的应用都需要的,而基于盛大云这样简单Key-Value来开发应用是很麻烦的事。比如:
1、如果把多个实体属性拼起来,没法索引,效率也不高;如果分开,那经常得用很多个GET;
2、没有索引和扫描,各种数据列表都不容易,比如按时间/阅读次数/评论次数排序的文章列表,你要用一个KV来维护ID列表,这会涉及复杂逻辑(比如按阅读次数排序的列表就不好搞),而且还会数据不一致;
3、刚说到阅读次数,好把,基于盛大云要维护一个会被并发更新的准确的计数是不容易,很不容易,简单到文章阅读次数,评论次数,好友个数等等。因为没有条件更新和并发控制,你把值读出来,+1再存回去,一并发就错了。

总之,这种最简单的Key-Value系统,我一直认为是对系统实现者来说是福音,但对系统使用者来说是绝对坑到祖宗的玩意。如果盛大云就只有这把刷子,没几个开发者愿意用。还好盛大云据说会推出MongoDB服务,这还算有点靠谱。

我越来越觉得这不是正确的做事方式。我觉得做基础系统软件,是希望能够让用户(也就是基于这些基础软件来做应用的人)能够很简单的做出正确、稳定并且高效的应用。很简单的做出应用是指开发效率高;系统不出错并且稳定,这几点是最重要的,高效是在满足前面这几点之后再追求的。系统常出错或不稳定,性能再高也没用,这点可能不用多说。但开发效率的重要性,是工作之后再深刻的体会到的。

做了5年系统,有一件事最失败。我们在DDB里支持了Master/Slave读写分离,希望对数据实时性要求不高的查询去访问slave。这样系统好伸缩,撑不住了加个slave就行了。唯一的缺点是slave上读不到实时的最新数据,可能晚个几秒。我们想几秒有啥关系呢,我写了篇博客,其他人过几秒钟才看到,这有毛关系?但这个功能作了两三年了,几乎没人用。开发者说,要用这个,代码得多很多判断逻辑,每个Dao都要加个参数标明能不能访问slave。这得增加多少开发成本,多出多少bug啊。进度这么紧张,系统正确性这么重要,你好意思再让他们用吗?后来我们被逼上绝路,硬是基于复制实现了系统的准在线扩容,这次大家都满意。这才是帕累托改进!

之前看Codd的图灵奖获奖感言,把关系数据库跟生产力扯到一起,觉得这哥们比较虚,上纲上线。Dijistra多实在,那么大成就,说是humble programer。这几年,看了不少真实的数据库应用,感觉Codd所言不虚。如果没有关系数据库,如果没有陈述式的SQL,没有ACID,开发应用不知道会复杂多少,系统bug不知道会多多少,开发人力成本不知道会增加多少。看基于RDBMS开发的应用,Service调Dao,Dao操作数据库基本上就一两条SQL,业务逻辑清晰无比。要是换成盛大云那样的简单Key-Value,复杂可想而见,基本类同Python和C的开发效率差别。

基础系统软件跟产品一样,首先要考虑的是用户的感受,而不是实现的难易或技术的先进。用户最需要的就是系统用起来爽,只要写几行业务逻辑代码,剩下的基础系统软件都帮他搞定。这样,开发效率才能上去,系统质量才能上去,在互联网领域竞争中才能领先。反之,即使基础系统软件稳定、可靠、性能高效,但用户在此基础之上没法直接写业务逻辑,得重复干系统层应该干的事,开发效率和系统质量都没法保证。像网易这样规模的公司,如果没有DDB、DFS,让开发者像用一个单机数据库和文件系统那样简单,那每个产品都要自己来分库、分表、分存储、搞索引,一大堆烦杂的事,花气力也一定搞不好。

搞系统的人喜欢做性能优化。性能优化了,自然是好的,但一定要明白系统的性能是个整体。如果为了让底层系统好实现,好优化,把底层系统的功能弱化,则底层系统的性能是高了,但却导致上层做了更多的系统性工作,反而导致系统整体来看更复杂,性能更差。这些工作,总是要做的。要么在底层系统做,由更专业的人做一次;要么在上层做,由不专业的人来做多次。哪种好一目了然,基础系统应该做多点。

所以一直对很多NoSQL系统、最终一致性不太感冒。虽然可伸缩性没问题了,但系统功能退步了,应用开发难了,这样的系统不会有主流市场。
NoSQL只有功能不断丰富到可与RDBMS相比、数据保证强一致性,我觉得才有戏。目前只有Google Megastore还凑合,开源的还都不行。选Key-Value/Entity不选关系模型和SQL、选最终一致性不选ACID,总感觉是做基础系统的人推脱责任。当然可以以此起步,千万不可以此为目标。那些吼吓ACID一定性能和可伸缩性不行的人,就相当于吼吓Java性能不行一定得用汇编,我觉得是主次不分。

相关 [基础 系统软件 价值] 推荐:

基础系统软件的价值

- 吴羽 - 风轻扬
盛大推出云计算服务,看起来想做类似于Amazon AWS的IaaS. 看了一下,结构化数据管理的功能很弱,只有最简单的Key-Value服务,只有GET/PUT/DEL,没有条件更新没有锁,没有扫描,这让我觉得很不靠谱. 结构化数据管理是99.9%的应用都需要的,而基于盛大云这样简单Key-Value来开发应用是很麻烦的事.

Piriform 公司系统软件四剑客

- tom - 第二天空 · 冰界 & 泥塘
Piriform 是一家电脑软件开发公司,他们致力于帮助大伙儿把电脑整的更安全更干净. Piriform 开发的四款系统软件都是在业界非常知名的且完全免费的. 最牛逼的也是名气最大的就要数 CCleaner 了. CCleaner 不仅仅是一款非常全面的系统垃圾清理工具,它还可以用来清理系统中所装大部分软件所生成的垃圾文件.

对大宋下一代系统软件架构师的七个期望

- joyoner - 弯曲评论
有诗云:人之老,其言真;人之去;其行善. 系统软件设计是软件系统的皇冠中的宝石. 在系统软件,特别是通信系统软件的设计上,有没有一些可以提炼的方法论. 今身处幽州(北平),心在大宋. 谈谈我对大宋年轻一代的系统软件工程师的期望. 年轻人都以为有些事情需要粗,有些事情需要厚. 系统软件一定要越细越好;越薄越好.

一个系统软件工程师开发iPhone App的一些感想

- hanyu - 弯曲评论
过去5个月,从头到尾,做了一个基于iPhone的SNS 系统,Client端是iPhone XCode的Object-C,Backend是LAMP(Linux+Apache+MySQL+PHP). 现在基本上可以说:可以在自己的技能里加一项了--ios app研发工程师. --基于SmallTalk演变而来的Object C貌似很容易,但有些缺陷.

HTTP基础

- - ITeye博客
HTTP的结构主要包括下面几个要点:. HTTP的版本主要有1.0,1.1 和更高版本.    1.1 及以上版本允许在一个TCP连接上传送多个HTTP协议,1.0能 .    1.1 及以上版本多个请求和响应可以重叠,1.0不能.    1.1 增加了很多的请求头和响应头.     一个请求行,若干小心头,以及实体内容,其中的一些消息头和实体内容是可选的,消息头和实体内容需要空行隔开.

Git基础

- Wolf - 潘魏增
上个月末在公司内部作了一次《Git基础》的主题分享. 这里把分享内容公布出来,希望对一些朋友有用. 如果之前没有接触过Git,wikipedia上面已经有非常好的介绍. pdf格式:http://panweizeng.com/download/git-basics-meituan.pdf. keynote格式:http://panweizeng.com/download/git-basics-meituan.key.

JavaScript 基础

- - CSDN博客推荐文章
JavaScript可以出现在HTML的任意地方,甚至在之前插入也不成问题,使用标签. 不过要在框架网页中插入的话,就一定要在之前插入,否则不会运行. JavaScript对数据类型要求不严格,一般来说,声明变量的时候不需要声明类型,而且就算声明了类型,在使用过程中也可以给变量赋予其他类型的值,声明变量使用var关键字.

CSS基础

- - CSDN博客Web前端推荐文章
1、引入CSS的四种方式. 行内样式、内嵌样式、链接样式、导入样式. 基本选择器:标签选择器,ID选择器,类选择器,通用选择器. 通用选择器:*{css代码}. 通用选择器作用:对整个网页中所有HTML标签进行样式定义. 常见用法:定义*{margin:0;padding:0}通用样式,并置于CSS文件最顶端,用于对HTML内所有的标签进行重置以保证页面能兼容多种浏览器.

ifttt的价值

- tiger - 月光博客
  ifttt是一款新兴的互联网工具型应用,正如他们给自己的介绍“If This Then That”,让用户可以根据他们设计的流程设计一些小程序,例如你可以让它帮忙监视女朋友的Twitter,当Tweet内容中出现“出差”这个词的时候,自动在Google Calendar里面添加一个晚上的聚会晚餐,并且在Facebook发表一条消息开始呼朋唤友.

拉的价值

- zhangv - 36氪
是什么让Email, Facebook 和 Google 这么有价值. 答:人们访问他们大都是自发的,是你大脑中的神经元告诉你该检查Email,该看你的Facebook了. 人们主动去拉内容,而不是等着内容被推、或者强加过来. 拉是一个用户主动的行为,而推是用户被动的接受由销售或是网站提供的东西. 所有那些想通过广告、电子邮件或其他营销手段让用户访问他们的网站而获取流量都属于推的范畴.