论道WP(三):应用程序栏
作者通过具体翔实的例子介绍了Winodws Phone 7中应用程序栏的使用方式。
该内容已经被标记书签!
标记书签错误,请重试!

作者 马国耀 发布于 2012年2月7日
云计算是一种新型的计算模式。其显著优势之一是云计算用户可以随时随地的使用来自互联网的服务,并且按使用量付费。在需要增加(或减少)计算能力时,可立即获得(或释放)资源,而在传统数据中心(非私有云环境)中,用户却需要采购硬件,安装配置操作系统和中间件软件,再部署应用。两种方式在运维工作上的差异一目了然,这正是云计算能够受到业界热捧和追逐的主要原因之一。那么,云计算是完美无缺的么?不尽然如此。在云计算的世界里,运维工作不再由云计算用户承担,转而交给虚拟化和自动化技术以及云计算提供商来承担。同时,云计算用户在享受弹性资源扩张或收缩的同时,也在一定程度上失去了对其使用资源的控制权,而如果云服务供应商的服务出现故障,或者云服务供应商由于商业运作的失败或其他原因而关门倒闭时,云计算用户就可能会面临巨大的风险。
2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。据Amazon官方网站称,受影响最严重的网站中有Reddit, Foursquare和Quora等。此事件发生后,人们一时陷入慌乱,对云计算可用性的担心骤然升温。同时,也有人乘机夸大云计算的弊端,并宣称“云计算已死”(这让笔者想起当年关于“SOA已死”的论战)。炒作行为是可以理解的,我们自然不用去理会。但是,作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。
Amazon将其基础设施划分为“区域(Region)”,这些区域好比一个个数据中心。例如,US-East-1是Amazon位于北弗吉尼亚的数据中心,而US-West-1则是位于硅谷的数据中心。每个数据中心又被划分成多个可用分区(后简称为AZ),AZ就好比资源池,它由一组物理和逻辑资源组成。
Amazon的提供的虚拟机是EC2(Elastic Compute Cloud)。而其存储服务是EBS(Elastic Block Storage)。EBS是基于网络高性能且高可用的块(block)级别的持久化存储服务。EBS可以挂接到某一个EC2实例上作为其文件系统使用。
当用户获得一个EC2分区实例时,同时会得到一块存储区。不过,该存取区是透明的,而且其生存周期与EC2实例是同步的。当EC2实例销毁时,该存储区也一同销毁,基于此,需要持久化的用户数据是不应该放在该存储上。
一般而言,运行网站和产品的云计算用户至少需要申请一个EC2实例和一个EBS存储。在EC2上运行应用和数据库,而数据则存储在EBS中。但是,若要将EBS存储挂接到EC2实例上,二者必须在同一AZ中(如图1.a所示)。用户也可以直接使用Amazon提供的RDS(Relational Database Service),它是一个运行着MySQL的EC2实例,此时应用和数据就可分别位于不同的AZ中(如图1.b所示)。当然,将应用和存储分开还有其他方法,本文不再赘述。

“4-21”事故中,位于US-East-1区域的EBS存储和Amazon RDS服务都出现了问题。表现出来的现象是:不在US-East-1区域的用户未受影响,未使用EBS和RDS的用户不受影响。一般情况下,使用EBS或RDS是非常普遍的现象,因为大多数软件或网站都依赖于数据存储,所以,即便运行应用的EC2未受影响,也会由于应用需要访问已出现问题的ESB或RDS上的数据,仍然会导致服务不可用或服务变慢的问题。
Amazon事故的的发生加速了人们对云可用性的思考,也进一步凸显了好的应用架构的优势,多家企业纷纷通过博客分享了他们使用Amaozon AWS的经验,对云计算用户端架构的建议。接下来,我们看看他们是怎么做的。
早在2010年12月,在线影片租赁提供商NetFlix的技术博客上就发表了文章《使用AWS的5大经验》。在这篇文章中,他们给出了以下5条建议:
许多传统数据中心的应用部署和运维经验在云中不再适用,所以不能用传统的解决方法去解决云中出现的问题。比如,在自己的数据中心里,使用基于内存的session管理就是很好的方法,因为每个硬件实例出现故障的可能性微乎其微。然而,AWS实例的出错率却高很多,所以需要不同高可用方案。
在云环境中设计面向用户的软件时,主要工作是降低整体上响应的延时。由于AWS是基于资源(硬件、网络、存储等)共享模式构建的,共租会引起各个层次上吞吐量的波动。或者你放弃任何特殊的操作,或者在AWS里管理好资源,这等于放弃了共租。
Netflix的技术人员喜欢将自己的软件架构称之为兰博架构,不论在何种情况下,每个系统必须靠自己存活。他们在设计分布式系统时考虑了其所依赖的其他系统的故障并且能够容忍故障。
他们在AWS中创建了一个被称为“捣乱猴”的系统。该“捣乱猴”的任务就是随意杀死软件架构中的任意实例和服务。他们的原则是,即便局部出错了,他们的系统和架构仍然要整体上保持正确,只有这样,才能躲过预料之外的故障。
在完全依靠AWS之前,他们就使用真实数据对AWS上的系统做测试。他们模拟所有发往数据中心的请求,然后发送到AWS做实测。
测试能够发现架构的瓶颈,有些架构决定和设计决定,在图纸上看似完美,但是一旦应用到大规模的实际情形,就不那么奏效了。
你会碰到许多问题!毕竟云计算的发展也没有几年,许多方面仍在不断完善之中。用户需要改变过去的观念,放弃过去的固定模式。关键是要保持坚忍不拔地战胜一切困难的意志力,坚定对胜利的信念。
Coding Horror博主Jeff Atwood非常赞同“捣乱猴”的思路。他在博文中分享了他的团队花好几个月解决一个诡异问题的经历。为了跟踪该问题,他们分析和尝试了可能导致该问题的所有原因,但是仍然未找到其根本原因。每隔几天,就会有服务器(不知道是那台)从网络中脱离,他们称此现象为“捣乱猴”又发怒了。他们被此问题困扰数月之久,团队曾陷入崩溃,但是即便在最困难的时期,他们仍然采取了积极的行动:
SmugMug也分享了他们的经验,他们网站未受影响的原因在于以下四点:
此外,对于100%纯度的云应用,作者给出以下建议:
结合上文对Amazon事件的分析以及众多来自一线工作人员的经验和分享。我们不难看出,对于云计算用户来说,单纯地祈祷云计算供应商提供100%可靠的云服务不是解决问题的根本所在。相反,云计算用户应该从其应用和架构本身寻找解决问题的根本方法。简单总结如下:
云计算是当前的Bizzword,但是我们需要清楚的认识,和当年的SOA一样,云计算也不是银弹,不能解决所有问题。它的好处多,坏处也不少(除了本文提到的可用性不可控之外,还有许多不好的地方,如数据的安全性、云端应用整合的复杂性等),只有清楚地地认识它,还能更好地避开其劣势,发扬其优势。本文结合Amazon“4-21”事故,谈到了如何从架构的角度思考云端应用,解决因所使用云服务的可用性问题导致云端应用不可用的问题,以期即享受云计算带来弹性扩展、自动供应等优势,又避免因云服务不可用而导致的用户体验的下降。希望能给读者带来一些参考,也欢迎读者给出批评建议。
感谢金明对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
精益软件开发方法因其对市场和交付的重视和在各种场景下体现出的适应能力正在获得广泛的关注。特别是在精益创业(Lean Startup)渐渐兴起和技术日新月异的今天,其"极端"的思想也变得越来越必要和可行。 InfoQ就此主题对他做了深入的采访。
3 条回复
关注此讨论 回复