分布式和云技术思维点滴

原创文章:未经许可,禁止转载 。PDF版地址:http://www.if9.cn/Documentation/2009总结——分布式.pdf

不是前沿的前言

微软的创始人,董事长比尔·盖茨在90年代就曾说:Net is computer(网络就是计算机),不可否认这位迄今为止最为强大的软件公司龙头的前瞻性,正是因为有了思维,所以我们才能在技术上有所突破。程序的生活是枯燥乏味,乏善可陈的,前一段时间,我很失落,到处看到山寨,随地可见Copy。直到深入了解到分布式和云技术,一个崭新的世界已经开始于我们的面前,而对于过去的世界,入门门槛低,同一性大,让我已经决定抛弃。

分布式和云技术思维点滴

——2009Web后端技术回顾

NoSQL运动与分布式技术的发展

NoSQL是指用非关系数据库的方式来存储数据,通常也指用key value方式存储。在2008年的时候,key value还是一个新鲜事物,当时比较早的key value存储产品之一Memcachedb发布时,JavaEyeRobin提到“第一眼看到Memcachedb,我就知道她是我寻觅良久的梦中情人”。

到了2009年,key value存储像雨后春笋般的冒出来,比较有名的有Tokyo CabinetRedisCassandra等,由于大部分Web应用的需求是基于主键查询,同时业务上又常常面临更改表结构字段的需求。如果将所有数据内容作为一个value字段存入,相对于SQL模式,使用更简洁,维护更方便。在性能上一些key value产品比传统的SQL在小数据访问写那个能上又个数量级的提升,因为Key value存储迅速的被业界接受及采用。

Key value存储有两种典型产品,一种是服务器软件本身是单机版,通常client调用时通过key的哈西来分布到多台服务器上最典型的产品如Tokyo Cabinet。另外一种在服务器端是分布式体现,并解决了容错、单点故障及负载均衡问题,分布式key value存储最典型的实现是Dunamo。目前市面上大部分分布式key value实现都是基于Dynamo的思想,如国内的豆瓣等。

 

LAMP架构,切分与App Engine

       LAMP是最典型的传统Web架构,它指用LinuxApacheMySQLPHP一起来构建Web架构。

       LAMP架构中,当访问量及数据量增大到单击不能承载时,最经典的解决方案是借鉴LiveJourmal模式进行纵向和横向的切分,比如将用户数据按用户ID不同切分到不同的服务器上,因此造成很多后端架构师认为设计“切分”就是架构设计,但是这种原始的手工切分方式存在很多弊端:

1、  每一个新的功能都需要架构师根据经验去进行重复的切分劳动。

2、  数据再增大时需要进行二次切分。

3、  存在单点故障,不能提供可靠服务,N个节点中任何一台发生故障会影响1/N的用户。

2009年之后,随着Google App Engine被更多的人使用,Google Big TableAmazon DynamoYahoo PNUTS等国外优秀论文的设计思想逐渐被更多人了解,架构师逐渐意识到App Engine是解决可扩展性、可靠性方面最理想的解决方案,而很多公司也在研发类似Google App Engline的技术,国内如新浪已推出支持PHP语言的App Engline

App Engline模式中,MYSQL作用存储服务器一种,另外还包括Memcached,以及分布式key value存储等。存储不再是软件,而是一种可靠的分布式服务。因此App Engline的需求也会带来分布式存储相关技术的繁荣。

    从使用角度来看,App Engline方式并不比LAMP复杂,但它的优势却很明显:

1、  不需要应用扩展及切分,系统具备自扩展能力,适应小到大规模的访问。

2、  具备快速开发能力,利用App Engine开发一个Web应用十分简单。

3、  容错及高可用性,由于App Engline是一个分布式服务,因此它相比独立部署的LAMP服务器具有单点故障容错能力以及高可用性。

Jonel Spolsky在《软件随想录》第22章提到,程序员如果不懂函数式语言编程就很难实现MapReduce这样的特性,而MapReduce防范是让Google可以无限大规模扩展的秘诀,因此在云计算时代,函数式编程相对于其他编程语言具有先天的优势。

目前最流行的函数式语言当属Erlang,在2009117-8日,国内Erlang爱好者在杭州举行了第四期Erlang全国开发者大会(CN erlounge IV),国内不少互联网及网游公司介绍了在函数式编程以及轻量级编程方面的实践。

在实现网络模型方面,实现高发并用的方式有多进程(如Apache)或者多线程(Tomcat)模式的缺点是占用系统资源较大,存在C10K问题,单服务器的并发线程很难超越1万个。单在函数式语言中,使用的是另外一种轻量级进程,单服务器可支持几十万并发。

轻量级进程其实也不是函数式语言专有的特性,目前流行的轻量级框架有C++Boost AsioGoogle新推出的Go余元的goroutinesJava/Scala中的Netty/Mina框架等。Boost Asio目前业界的共识是代码有雅兴以及可维护性欠佳,性能和其他方案相比也没有突出的优势。可关注后面几种方案,在Erlang大会上也了解到,国内有非常多的公司在实现自己的轻量级进程框架,在C++领域尤为广泛,

预测到了2010年底,函数式编程中Erilang会继续在小范围内流行,业界应用Erlang技术最大的障碍不是Erlang技术本身,而在于缺乏这方面专业人才,另一大函数式语言Scala由于构建在Java VM之上,具有成熟JVM及丰富的周边library库支持,在异构系统中集成也很容易,在新项目使用Scala风险相对较小,预测Scala在新一年的发展有较大优势。

 

Realtime特性成为WEB2.0不可或缺的元素

在访问新浪微博以及国外的FacebookTwitterWEB2.0网站时,即使不刷新浏览器也可以实时看到最新的Feed更新或者提醒,这标准着Web2.0应用更加realtime化,这一趋势在Google Wave上发挥到了极致。

2009529Google IO开发者大会Google Wave的发布,又一次改变了人们对实时Web应用的定义。Google即时输入,并在此基础上可以构建更多的实时交互应用,因此预测此实时方式将会被更多Web应用采用。

另外Facebook在收购了FriendFeed之后,也将其核心技术之一Tornado框架开源,Tornado是用Python语言实现高性能的Web服务器,相对于国内的开发者构建实时Web应用有非常大的借鉴作用,

由于Web实时趋势的发展,在技术层面HTML5WebSockets)及类似技术的具有更高的价值,但由于IE暂不支持HTML5HTML5无法一步到位,建议关注能解决HTML5以及旧版AJAX自适应的框架。

 

Cache中心化架构设计

在传统的LAMP架构中cache只是一个可选层,作用是将查询的SQL结果直接放到cache中,减少数据库操作,但是社交网络应用的发展对数据库访问的效率提出了更高的要求,大部分社交网络页面都需要聚合大量用户的结果才能生成;大部分页面所需聚合的数据随时都在发生变化。因此技术界流传一句名言,“Disk is the new TapeRam is the new Disk”。意思就是说传统的SQL存储已经像旧的磁带机一样成为应用的瓶颈,需要吧一切数据都放在内存里面才能满足新的应用需求。从FacebookTwitter的设计来看,cache已经从可选层成为核心层,cache设计的好坏直接决定架构的成败。

 

采用异步消息设计模式

消息队列是后端服务的一种设计模式,在分布式应用中,一个模块需要调用另一个模块时,并不直接调用对方并等待返回结构,而是将数据放到消息队列中并直接返回,比如Twitter的架构设计中就大量使用了消息队列模式,目前相关开源产品有MemcacheQTwitterKestrelRabbitMQApache ActiveMQ等,这些产品使用协议通常有MemcacheAMQPJMS等。一般的Web应用推荐使用MemcacheQ,使用简单,性能也不错。最新版本0.2.0增加了针对每个消息队列的统计,跨越式stats queue实时查看每个队列当前已处理的消息树以及队列的积压长度。浙科院帮助掌控经过队列应用数据流,从而方便应用统计和系统监控。

 

小结

2009年在Web后端技术是一个百家争鸣的时代,云计算的需求使相关后端分布式技术得到了迅猛发展,展望2010年,期待并祝福国内开发者同行们能够利用这些技术把握机会,开发出更优秀,更贴近生活的产品。

 

 

 

 

 

参考资料

1、   Dynamo

2、   分布式key value漫谈

3、   Tornado Web Server

4、   Friendfeed的开源实时Web框架

5、   Twitter的开源消息队列产品

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值