云计算和 Android 软件堆栈
简介: 开源的 Android 操作系统已经席卷全球,它允许您在任何位置运行复杂的云计算应用程序。它设计用于在电池供电设备(如 T-Mobile G1 智能电话)上高效工作,Android 本质上就是 Linux®,Android 编程模型有多个层,允许创建为云计算量身定做的安全应用程序。使用 Android 达到新的高度并体验前所未有的移动计算吧。
发布日期: 2009 年 4 月 29 日
在一个充斥着蹩脚比喻的行业,突然有人跳出来并抓住富有创造力的业务和 IT 人员的想象力,这一点也不奇怪。云计算 就是这样一种比喻,而且它已经(请允许我这样说)席卷了全球。但云计算到底是指什么呢?
当然,云是由许多水分子组成的,几乎有几亿个。云没有中央控制,基本上可以随风吹向各处。从这个角度来说,Internet 中无数个具有各种用途的客户机和服务器以及驱动其发展的控制实体就像是云。将这一概念与手机公司带给我们的无线数据革命结合后,我们似乎就处在一种无形的 “云” 计算力量中了。
自电子计算机诞生以来,就一直有人对计算机的 4 个主要功能部分进行明确的划分:
- 提供人机接口的输入/输出(I/O)设备
- 中央处理单元
- 易失性随机访问存储器(RAM)
- 非易失性存储器
前三个部分将 “计算” 功能植于计算机中。第 4 部分通常存储有价值的数据资产,这一部分将随着云计算的到来而发生翻天覆地的变化。有价值的数据驻留在非易失性存储器中,以免因为断电而丢失 — 不管这种断电是有意还是无意。非易失性存储设备一般为硬盘,但也可以是安全数字(SD)卡之类的固态设备,甚至可以是磁带设备(不过现在已经过时了)。但 是这些设备都有它们的局限性。
随着时间的流逝,技术也在不断进步,出现了计算机网络,在计算机网络上,企业中有价值的数据资产都集中在一台由多个终端共享的计算机中,而且定期对这些数据进行备份是一项基本的 IT 职能。这种模型(称为大型机模型)提供了许多优点 — 其中之一就是它减轻了每个终端位置的工作负载。仅具有一个微型终端(键盘、鼠标、显示器和 PC)的小型办公室可以访问 GB 级的企业数据,而无需提供大型机的处理能力 — 只要它们通过电缆连接在一起。
下一个巨大的范式转变来自于我们所熟知的 Internet,在其中,庞大的计算机系统(本地网络)可以为位于全世界任何可以使用卫星天线的位置的大量微型终端提供服务。这种配置的无线远程特点即被称为云。
随后出现了个人数字助理(PDA)、移动电话和智能手机,计算机的微型化已经发展到我们熟知的并非常喜爱的手持形式。一夜之间,智能终端已经成为无数高生产力人员的工具,它们以惊人的速度生成和消费着信息。
在 20 世纪 90 年代中期和末期,电子邮件和万维网(World Wide Web)是主导云的最流行应用程序。大多数人都使用 Web 浏览器与云进行交互并认识到 Internet 是一种比较简单的应用。随着 Yahoo! 和 Google 在商业方面的成功,TB 级服务器和网络连接取代本地硬盘成为首选的非易失性存储设备。就像许多具有超前思维的预见者所预言的那样,云已经成为了一种像水、电话和电那样不可缺少的 现代实用工具。通过将移动电话数字网络作为主要的 Internet 服务提供商(Internet Service Provider,ISP),云已经发展为使用几百万个微型手持设备作为显示服务器数据的主要工具。
就像云到处移动和随风变化那样,这些微型手持设备的操作模式也是如此 — 终端变得越来越小,功能越来越强,可移植性增强了许多,服务器的功能也越加强大,通过软件虚拟化并根据使用收费,能更好地满足用户的数据需求。
公司不再需要维护大型而昂贵的服务器 “集群”,现在有另一种成本更低的方法:通过 Google、Amazon 和 IBM® 之类的供应商实现服务外包。通过虚拟化,以前在定制环境中运行的应用程序现在可以被复制或 “映像化”,从而在供应商服务器的云中运行。通过恰当地对这些服务计费,公司就不需要在服务空闲期间支付高额费用。
在硬件技术不断进步的同时,软件技术也在不断发展,并且我们看到出现了很多新的应用程序。例如,基于位置的服务可确定接近手机讯号接收塔的企 业、内置全球定位系统(GPS)可以确定您的位置。出现了下载和测试有用程序和数据文件的新市场,比如用于购买和下载音乐的 Android Market 和 Amazon MP3 Market。毫无疑问,这些独特的新的云计算应用程序将进一步发展 — 例如,公司可以分类和选择区域联系人信息,然后在区域销售人员休息时自动将当天的促销电话列表发送到他们的基于 Android 的手机中。
云计算将可移植设备与强大的服务器互为补充,它需要一个能够让服务器架构师和程序员最大程度利用小型客户机机器的操作系统。Android 就是这样一种操作系统。
首先,Android 是一个用于移动设备的软件堆栈。这意味着优先级最高的事是保持电池电量和有效地管理有限的内存资源。Android 系统堆栈有 5 个不同的层:
- Acorn RISC Machine(ARM)Linux 内核构成了所有其他层所依赖的坚实基础。Linux 被证明是一种高可靠性的技术,而 ARM 处理器以能在非常低的电源需求下发挥高性能而著称。
- 库提供可重用的和可共享的低级代码,用于基本函数,如 codecs(用于编码和解码数字音频与视频的软件),以及用 于在小的显示器上表示丰富图形的函数、支持在云中加密 TCP/IP 流量的安全 shell,以及支持 Web 浏览(WebKit)的组件、SQL 数据库功能(SQLite)和可以在 Linux 系统中使用的标准 C 库功能。
- Dalvik 运行时字节码解释程序非常类似于 Java™ 语言的字节码解释程序,它添加了几个独特的特性,使用独特的方式定义了 Android 的安全和电力保持模型。例如,当前运行的每个应用程序都运行自己的用户 ID 和解释程序副本以严格区分进程,从而实现安全性和可靠性。
- Android 应用程序框架允许您使用和替换您认为适合的组件。这些高级 Java 类与定义 Android API 的组件紧密集成在一起。
- Android 核心应用程序包括 WebKit 浏览器、Google 日历、Gmail、Maps 应用程序、SMS messenger 和一个标准的电子邮件客户机等等。Android 应用程序是用 Java 编程语言编写的,您可以随时从 Android 市场下载更多的 Android 应用程序。
每个 Android 应用程序可以被进一步划分为不同的功能单元:
- 活动(Activities)
- 目的(Intents)
- 服务(Services)
- 安全模型(Security model)
活动 是 Android 应用程序的一个组件,它扩展 Activity
基类并定义一个由响应事件 的 视图(View)组成的接口。如果一个应用程序由 3 个窗口(例如,一个登录窗口、一个文本查看窗口和一个文件查看窗口)组成,那么每一个窗口通常用一个不同的 Activity
类来表示。
Android 维护每个从主页中运行的应用程序的历史堆栈,您可以单击 Back 按钮回滚这些活动的历史。
目的 与活动一样,是应用程序代码中的一个特殊类,定义应用程序要做的事情。目的添加了一个间接层来支持复杂组件的重用和替换。例如,某个应用程序可能提供了一个标签为 Clients 的按钮,单击该按钮时,会显示一个联系人列表,上面都是您的客户。然后就要使用间接层了:您不需要对这些联系人使用默认查看器;相反,可以使用一种不同的查看器。
对某些应用程序而言,这可能是一个非常强大的应用程序集成功能。对于特殊的显示,使用地形图或许要比使用默认地图的效果更好。
诸如 BroadcastReceiver
这样的类定义的代码将在外部事件触发它们时执行。定时器鸣叫或手机来电等事件可以以这种方式进行监视。通常,这类代码不显示窗口,但可以使用 NotificationManager
类来提醒用户需要注意某事。
服务 是在较低级别运行的一个应用程序,没有显示,也没有 UI。它通常是一个会在幕后运行很长时间的应用程序。一个很好的例子就是播放歌曲列表的媒体播放器程序。尽管媒体播放应用程序会显示一个 UI 来允许用户定义他们的播放列表,但是程序实际上是让服务来控制给定播放列表中的歌曲播放。
Android 的安全模型只允许程序有自己的数据。如果程序员想在几个不同程序之间共享数据,他们可以为此定义内容提供者。
android.provider
包定义一些允许应用程序读取大量内置 Android 数据库的类和接口。联系人、照片和歌曲等信息可以通过这些接口在不同应用程序之间轻松共享。
永远不要低估开放源代码的强大威力,就像不能低估自由的、有创造性的人们的能力一样。Android 平台不受专用 API 和经常影响软件工程进度的公司利益的束缚,它拥有一个非常活跃的大型开发人员社区,将许多人的才能结合起来确实实现了一加一大于二的效果。想拓展您的编程 职业生涯吗?那就学习 Android 平台编程吧,而且某一天,您将拥有包含几百万名移动电话用户的潜在市场 — 其中一些人可能需要使用您的程序。
Android 的核心是 ARM Linux。单凭这一点就可以对此平台的迅速发展抱有极大信心。Linux 是一?快速且安全的操作系统,有成千上万名的程序员对它都很熟悉。许多基于 Linux 的系统被连接到云中并服务请求,它们可以正常运行好多年 — 这充分证明了 linux 的可靠性。
考虑 Android 开发环境时,程序员们有多种选择。他们可以使用 Microsoft® Windows® XP 或 Windows Vista®、Macintosh OS X(V10.4.8 或更高版本,仅 x86)、Desktop Linux(首选 Ubuntu)。这些常用的操作系统都有可下载的软件开发工具包(SDK)。
您可以使用 Eclipse 或 Sun Microsystems 的 NetBeans 之类的 GUI IDE,也可以使用命令行方法和标准编辑器,您可以任意选择。
Android 社区鼓励相互交流,创建 Android 的公司也是如此,这些公司有 Google、HTC、T-Mobile 和开放手机联盟项目(Open Handset Alliance Project)的其他成员。开放 的真正含义就是开放人们(程序员、用户、销售人员等)之间的交流、开放协议和开放编程 API。
借助各种软件许可,组织也可以在 Android 上放置专用程序和数据。这不仅可以让组织不会脱离平台,而且也不会限制消费者的选择。这是一种双赢的组合。
任何对开发 Android 感兴趣的人所要做的第一件事就是下载并安装 Android SDK(请参阅 参考资料)。 然后开始准备编程。每个人的编程方式都不尽相同。一些人(包括我在内)喜欢在学习完所有内容后再开始编码。其他一些人则喜欢立即开始并练习完整 Android 文档给出的教程示例。但不管您喜欢什么样的方式,最终必须编写一些代码。在开始之前,请看一下 Android 针对经典的 Hello World 程序给出的编码(请参阅 参考资料,查看 “Hello Android” 示例应用程序)。
云中有大量的资源可用于 Android 开发,包括几个 wiki 和 Android 社区论坛,以及多个 Android 编程 blog。推出 Android 的主要公司 Google 实际上是一个通信公司,因此提供了几个有用的论坛(称为 Google Groups),供拥有不同技能集和才能的开发人员进行交流。
参考资料 部分中的 Android 链接并没有展示出 Android 领域的博大。云计算(特别是 Android)目前是非常热门的现象。
IBM 正致力于在 Research Triangle Park, N.C. 和东京创建两个大型云计算中心。要了解为您的定制云计算应用程序提供动力的服务,只需要访问中央 Web 站点并探究 IBM 所做的相应工作(请参阅 参考资料)。
您可以编写应用程序来利用云,云中的备份和恢复设施都是自动化的,经验丰富的工程师可以使您的构想变为现实。将 Android 手机想像成 IBM 集体式计算功能的一项扩展。当坐在咖啡店里细细酌饮时,您希望在手机上看到什么呢?现金流量图?还是呈上涨趋势的证券数据和图形?可能是来自 NASA 的最新图片,您昨天晚上曾在一个速度非常快的并行处理服务器上使用定制过滤程序进行过处理?可能是直接来自国家地震信息中心(National Earthquake Information Center)的最新地震数据,或者仅仅是昨晚谁赢了 NBA 冠军杯。数据 “是现成的”,处理能力也是:您只需要实现它。
时间会告诉我们未来将会创造出怎样的创新性云计算应用程序,那时每个人都将站在巨人们的肩膀上。
学习
- 了解有关 Android 的更多信息。
- 在 developerWorks 云计算空间 中了解云计算的重要性,如何开始学习云计算,以及从哪里可以获得更多云计算的信息。
- 在 Google Groups 中与 Android 开发人员进行交流。
- 有关云计算潜能的更多信息,请查看 “Architectural manifesto: An introduction to the possibilities (and risks) of cloud computing”。
- 有关 IBM 对云计算所做的努力的更多信息,请查看标题为 “IBM Invests Nearly $400 Million on Cloud Computing Centers in U.S. and Japan” 的新闻简报。
- 要收听关于软件开发人员的有趣访谈和讨论,请加入 developerWorks podcasts。
- 随时关注 developerWorks 技术活动和网络广播。
- 随时关注 developerWorks on Twitter。
- 查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动。
- 访问 developerWorks 开放源码专区,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。
- 查看免费的 developerWorks 演示中心 观看并了解 IBM 及开源技术和产品功能。
获得产品和技术
- 在 Amazon Elastic Compute Cloud(EC2)虚拟环境中访问 IBM 中间件产品 并立即开始开发自己的应用程序。
- 下载 Android SDK。
- 查看 Android 示例应用程序。
- 使用 IBM 试用软件 改进您的下一个开放源码开发项目。
- 下载 IBM 产品评估版 并开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
讨论
- 参与 developerWorks blogs 并加入 developerWorks 社区。
Bill Zimmerly 是一位知识工程师和专长于不同版本 UNIX 和 Microsoft® Windows® 软件的底层系统程序员,同时他也是一名崇尚逻辑至上的自由思想者。Bill 还被认为是一个非理性的人。这里所指的非理性引用自 “理性的人让自己适应世界。非理性的人却试图让世界适应自己。因此所有进步都依赖于那些非理性的人” (乔治·萧伯纳)。他热衷于创建新技术并撰写相关的文章。他住在 Missouri 的 Hillsboro 郊外,那里空气新鲜、景色怡人,并且都有上等的葡萄酿酒厂。没有什么能比得上一边用水晶般透明的杯子喝着 Stone Hill Blush,一边撰写着关于 UNIX shell 脚本的文章。