Tag Archives: Python

从 Reddit 学到的经验

最近有一些比较有价值的文章似乎没引起太多人注意,比如 Steve Huffman 分享创建 Reddit 过程中的经验这篇文章,在 Twitter 上的中文技术圈子似乎没有被提及。150px-Reddit_logo.svg.png

作为社会化新闻站点,国内似乎关注 Reddit 的人并不多,我只知道少数 Geek 是其死忠粉丝。Reddit 在 2005 年 6 月由 Steve Huffman 与 Alexis Ohanian 创建,之后在 2007 年被 Condé Nast 收购。到现在看 Alexa 排名在 300 名之内。

根据维基百科的介绍(refer):Reddit 最早是用 Common Lisp 开发,随之用 Python 进行了重写(2005年底完成)。著名的Python 框架 Web.py 就是 Reddit 当时的员工 Aaron Swartz 开发的,现在 Reddit 的 Web 框架则使用了 Pylons 。在 2009 年 11 月,Reddit 迁移到 Amazon 的云计算平台。前端框架现在用的是 jQuery。或许你早就知道,Reddit 网站程序现在已经开源,如果你感兴趣的话,不妨下载研究。

严格来说,Steve 的这个演讲其实并没有涉及多深入的技术信息,只是这几条经验的确可以作为通用规则与大家分享。

  • 宕机是家常便饭(Crash Often)
    可能很多人会认为一些 Startup 的创建人都是天才,其实也未必。两个22岁的初出茅庐的大学毕业生写的程序会好到哪里?网站起步的时候,频繁的宕机让他们吃尽了苦头。其实 Twitter 以及最近热火的 FourSquare 在初期的稳定性也不怎么样,但是仍然能对用户产生足够的吸引力。这是很多创业者需要细思量之处。
  • 服务分离( Separation of Services)
    现在已经超过 20 台数据库,每个数据库只处理一种特定类型的数据,原因无他,更为简化。另外,Reddit 得到的一个经验是不要使用 Python 的线程,而是用多进程的方式。
  • 开放 Schema(Open Schema)
    个人觉得,应该叫 Key-Value 更恰当。
  • 无状态处理请求(Keep it Stateless)
    “无状态”意味着横向扩展更为容易。单节点服务器向多台扩展,或许这是第一个要考虑的问题。否则,背的包袱就会越来越重。
  • Memcached
    除了尽可能的利用 Memcached 加速用户对数据的访问速度,在 Memcached 中存储了大量预生成的页面内容,另外,也在适当的场景使用了 MemcacheDB 以满足数据持久化的需要。
  • 存储冗余数据(Store Redundant Data)
    让站点变得更慢的一个”好办法”就是遵循范式设计数据库。除了在 RDBMS 中存储数据外,在上一条提到的 MemcacheDB 中也存储了大量数据,和收益相比,冗余的成本并不高。前提是数据一致性要能得到有效保证。
  • 脱机工作(Work Offline)
    尽可能的异步处理用户操作,对计算量比较大的功能利用离线计算的模式。消息队列用用 RabbitMQ(Rabbit Technologies Ltd.已经被 SpringSource 收购) ,采用了 AMQP 协议。

或许还有意犹未尽之处,各位自己顺着文章来源分析吧。Reddit 就像一个技术标本,仔细琢磨下去还会有很多有趣的地方,相信也会对你有帮助。

EOF

《Python源码剖析》推荐序

看了博文视点编辑的这篇《让我们做的更好》》,我也把之前给这本《Python源码剖析》写的序翻了出来,贴一下。也希望对关注 Python 的朋友能多多支持支持原创,有的时候多几分欣赏,少一点点苛求,软件书籍的出版环境就会更好一些。


Python.gif

非常高兴看到又一本原创 Python 图书的出版。

说起来,我和 Python 还算有一点缘分。在 2000 年的时候,非常偶然的一次机会接触 到Python,当时网上资料非常之少,不知天高地厚的我竟冒失地接手了国内第一本引进 Python 图书的合作翻译工作,往事不堪回首。记得当时经常有人问我 Python 能用来做什么…而能举出来的例子的确寥寥可数。

历经数年的发展,Python 已今非昔比,各领域都不乏 Python 成功案例。就拿 Web 方面来说,正如 PHP 给 Yahoo! 带来的巨大动力,Python 在新一代互联网霸主 Google 内部早就充当着重要角色,是排名第三的”官方语言”。而就在几天前,Google 革命性的 App Engine 产品一经推出即引起莫大关注,其首选开发语言就是 Python。

纵观国内技术环境,Python 语言仍处于慢热的状态,应用仍然不算广泛。不过我们也已经有称得上比较成功的实现案例,比如著名的 Web 2.0 的代表站点豆瓣网即是用 Python 开发,创始人杨勃对 Python 的效率、优雅赞誉有加。(Refer)

Python 也是权威机构 TIOBE 评出的 2007 年度编程语言,这些”利好”消息也将进而带动新一轮的技术走向,预示着 Python 更大规模流行时代即将到来。

话说回来,”开放平台”在未来几年一定是个不可避免的技术趋势,而跟着大厂商的平台亦步亦趋,照猫画虎,想必也能开发出来繁多的周边应用,但开放未必对所有人都是个好事情,久而久之开发者难免有盲人摸象之感,很难掌握全局、关键架构技术,故深入研究 Python 基础技术仍不可少。这本 《Python源码剖析》的出版恰是好时机,弥补了国内图书在这方面的空白,此外,作者在 Python 领域的精耕细作研究精神亦值得学习。

研读、分析源代码乃是提高编程技能的一条捷径,庖丁解牛方能游刃有余,夯实基础,方可构建坚实大厦。

读这本书《Python源码剖析》就像一次探险之旅,祝愿朋友们能够获得一次愉悦的阅读体验。

EOF