相比其他行业,IT 技术由于信息流动便捷,新技术更新非常频繁。架构师经常面临新技术及传统方案选择的困惑。架构师应如何抓住本质构建新一代的应用?本文从几个方面提出一些思路供架构师参考。
编程语言
2009 年编程语言领域也发生了不少变化。虽然架构师通常都表示编程语言并不重要,但事实上每一次大的语言改进还是对业界产生非常大的影响,同时大部分技术团队也依赖某一两种编程语言。下面介绍几种值得架构师关注的语言及热点。
Erlang 近几年在并发编程与分布式领域比较受关注。2009 年 11 月 7~8 日在杭州举办了第四次 Erlang 全国开发者大会(CN Erlounge IV)。从会议主题及参会者的讨论来看,Erlang 在 2009 年在一些先行项目中取得了不错的效果,同时 Erlang 的并发编程思想也在其他语言得到了一些借鉴和应用。预计 2010 年 Erlang 会继续在小圈子内流行,目前业界应用 Erlang 技术最大的障碍不是 Erlang 技术本身,而在于缺乏这方面专业人才,与 C++/Java 相比,Erlang 暂时不具备大规模团队协同开发的条件。
Scala 也是一门和 Erlang 类似的函数式编程语言, 由于 Scala 是基于成熟 JVM 并具有丰富的周边 library,因此相比于 Erlang 切换成本和风险都低很多。尤其是 Java 团队如果希望利用函数式及并发编程优势的可以关注。
2009 年 11 月,Google 发布了一种新的语言 Go,它在系统编程领域具有很多优势,如支持 goroutine 并行编程模型,支持 GC,编译速度快等。很多系统程序员表示 Go 就是他们心中的“梦中情人”。但是由于刚推出不久的缘故,Go 还是不适合在生产环境使用,建议保持跟进。
在网页编程领域,PHP 仍然是 Web 页面编程语言首选。如 Facebook 谈到选择 PHP 的原因是“开发效率高,支持快速的产品迭代”。2010 年 2 月,Facebook 开源了 HipHop 框架,在 PHP 业界引起较大的轰动。它将 PHP 编译成 C++ 执行,可以提高性能 50%。据 Facebook 博客上的资料,HipHop 发布仅半年之后,Facebook 90% 的 Web 服务器都用上了 HipHop。据估算,Facebook 每月有 4000 亿页面访问,则 HipHop 承担了 3600 亿。如果节省 50% 服务器的开销,那将是非常大的节省。希望在 2010 年国内的 PHP 开发者也能充分利用 HipHop 的成果。
Ruby 由于具有快速的开发效率,近年来在 Web 开发领域异军突起。首届中国 Ruby 大会 2009 年 5 月 21 日上海召开,Ruby 创始人 Matz 也亲自来华做了主题演讲。从大会来看 Ruby 社区在国内已经比较蓬勃。预计在 2010 年 Ruby 会在企业应用和部分互联网 Web 应用中得到更广泛的使用。
存储:从 Cache、数据库到分布式文件系统
Web 2.0 的设计中,Cache 会成为一个中心元素。传统的 web 应用瓶颈通常在数据库或者应用程序上,但是最近 Twitter 的一篇技术博客的分析,Twitter 广为人知的“鲸鱼”故障的罪魁祸首竟然是 Memcached。因此最近技术界流传一句新的名言,“Disk is the new Tape,RAM is the new Disk。”意思就是说传统 SQL 存储已经像旧的磁带机一样成为应用的瓶颈,需要把一切数据都放在内存里面才能满足新的应用需求。另一 Web 2.0 应用巨头 Facebook 也广泛使用 Memcached,据称每秒访问量达 2 亿次以上。
在 2009 年数据库受到 NoSQL 运动的冲击。NoSQL 是指用非关系数据库的方式来存储数据,通常也指用 key value 方式存储。比较有名的有 Tokyo Cabinet, Redis, Cassandra 等。由于大部分 Web 应用的需求是基于主键查询,同时业务上又常常面临更改表结构字段的需求。如果将所有数据内容作为一个 value 字段存入,相对于 SQL 模式,使用更简洁,维护方便。在性能上一些 key value 产品比传统的 SQL 在小数据访问性能上有一个数量级的提升。因此 key value 存储迅速被业界接受及采用。
分布式文件存储也具有广泛需求,目前开源的解决方案有 HadoopFS,MogileFS 等。很多互联网公司目前也借鉴 GFS 来开发自己分布式存储产品。
可扩展架构:从手工切分到云服务
LAMP 是一种经典的 Web 架构设计,他指用 Linux, Apache,MySQL,PHP 来搭建 Web 架构。当 Web 请求量增大到单台服务器没法承载时典型解决方案是对应用服务器及数据库进行切分。目前切分大部分是借鉴 LiveJournal 模式,由于 LiveJournal 架构设计甚至大部分源代码都是公开的,因此在过去很多架构师设计 LAMP 扩展通常是在 LiveJournal 基础上作出改进。
从 2009 年开始,由于云计算的蓬勃发展,LAMP 发生了两大变化。首先,部分原先用数据库如 MySQL 的场合开始被 key value 存储代替。分布式的 key value 存储产品本身解决了扩展,负载均衡,复制,数据一致性等问题。无需架构师手工编写代码解决数据过大后的分表问题。
另外一个变化是 PHP/Python/Java 等语言可以运行在一个 App Engine 的容器上,这个容器可以托管一个几行代码的 hello world 项目,也可以承载上千万访问量的用户的大型项目。App Engine 自身具有可扩展性,容错性,负载均衡,用户可以自动访问最近的 IP 等特性。它对于需要架构师根据业务来切分的传统做法是一种全新体验。
在 2010 年,分布式存储及 App Engine 模式是架构师需要考虑的两大方向。
相关内容:淘宝网架构师岳旭强的年度展望。
个人简介:杨卫华,新浪产品事业部技术经理,目前工作以开发高并发的分布式应用为主。对互联网后端技术,分布式,网络编程,XMPP 即时通讯等领域感兴趣。曾组织多次广州及珠三角技术沙龙活动。个人blog 为: http://timyang.net/ 。
给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论