全球知名的IT咨询公司ThoughtWorks的技术咨询委员会定期讨论对软件产业可能产生显著影响的全球技术战略和趋势,从2010年1月开始发布“ThoughtWorks技术雷达白皮书”,有助于业界同仁了解新技术和趋势,更好地应对今天的市场变化。本文是该白皮书最新一期内容的摘译。完整版本请参看《程序员》杂志官网。 [caption id="attachment_5824" align="aligncenter" width="300" caption="雷达图"]
[/caption]
技术 企业级软件很少能够在不依赖于其他系统、没有运营团队的支持将系统部署到生产环境、不考虑企业的战略目标的情况下,完全独立开发。但是,根据我们帮助客户团队交付软件的长期经验,却常常看到开发和交付实践中忽视这些问题。 许多系统集成公司会采用一个公共数据库,通过数据库层在应用之间共享数据。许多情况下,这已经成为一种公认而且广泛接受的架构模式:基于数据库的集成(DatabaseBased Integration)1(编者注:数字上标对应图中的符号,其中三角表示新进入雷达范围的技术)。不过该方法存在副作用,会使应用之间的数据库Schema、发布进度、服务的性能和质量的耦合度增加。 DevOp4(编者注:开发与运营的合称)是一种新起的运动,目的是满足这样的业务需求:在保证生产环境稳定性的同时快速交付软件。它采用了两种方法:1. 促进开发团队与运营团队的合作;2. 将敏捷实践(协作、自动化、简单等)引入运营过程中,例如变更管理、生产监控等。DevOp涵盖文化、过程和工具。
敏捷软件开发的一个原则是“最后责任时刻”的概念。这个概念在传统的架构师中产生了较大争议。我们认为,如果有正确表述的原则和恰当的测试套件,架构可以不断演化,满足系统不断变更的需求,并且能在最后责任时刻做出架构决策而不损害系统的完整性。我们称这一方法为演化架构(Evolutionary Architecture)10。 跨多个项目的项目要求人员对组织的业务背景、运营模型和战略目标,以及会在计划和设计活动中处理的任何已有的技术、组织和过程限制都有了解。作为企业架构演化方法的一部分,我们采用业务能力建模(Capability Modeling)7为组织需求和目标中核心的业务功能创建轻量级层次模型。能力用目标(做什么)而不是实现细节(怎么做)描述组织的运营模型。 集成的业务流程通常需要横跨数个系统甚至数个企业。新问题出现了:如何协调这些流程?以我们的经验,集中式业务流程编排解决方案经常无法实现承诺,因为实现成本大,而且系统的维护由于需要考虑许多顾客的需求而变得难以扩展。这种情况下我们采用服务编排(Service Choreography)8, 其中独立的分布式的参与者按照某个应用协议来协作。基于Web平台,超媒体驱动的应用协议使我们可以实现更易于演化和扩展的集成业务流程。 我们强烈推荐软件交付公司采用自动化测试(Automated Technical Tests)6,它包括故障转移测试(Failover Testing)、性能测试(Performance Testing)与浸泡测试(Soak Testing)。这些测试可以开始于项目的生命周期初期,延续到维护阶段。 现在越来越多公司、政府部门与非营利组织开始使用位置服务(Location Based Services)60更有效地与顾客进行交流。随着越来越多地图服务供应商的出现,围绕地图服务的应用也将越来越多。
工具 如今所有新项目都需要与原有应用和服务进行整合。结合在系统边缘使用简单的消息总线和集成技术,我们成功应用Apache Camel24等小型库完成了在此类集成中常见的协议桥接、消息传递、消息路由等任务。Camel具有方便的Java接口、单元测试支持,而且多种不同的传递与消息格式都有连接器,可以在实现分布式应用时提供高效的反腐坏层等。 尽管苹果公司多次公开表示限制iPhone65和iPad61的跨平台开发20方案,但仍有很多完全合法的可选方案。PhoneGap和Appcelerator Titanium可以为所有主流移动平台的HTML+CSS+JS Web标准应用提供本地兼容层。 在分布式版本控制工具中,我们推荐Mercurial31和Git32。是对于那些愿意与开源社区进行合作的企业,我们推荐GitHub21。 对Google Web Toolkit(GWT)48我们仍然维持观望评级,但是欢迎讨论。 Puppet29是一款免费开源的数据中心自动化工具,它能管理生产与类生产环境的变更。利用Puppet可以对环境配置进行版本控制,以可控制、自动化的方式改变系统。采用像Puppet这样的自动化工具,可以减少人工操作,将更多精力集中于更高优先级的任务。 NoSQL26在大规模数据集、云数据、社交网络数据等方面的处理优于传统SQL数据库。解释何为NoSQL以及建议你是否该选择使用NoSQL是件很困难的事情,因为它包含太广泛的技术:键-值对、列、对象存储以及文档、图和XML数据库等。 使用Intentional19软件公司的Intentional DomainWorkbench最近有少量真实生产环境中的应用,这让我们感到很激动。他们的技术与当前传统软件开发方法有根本区别。现在可以开始探索如何应用他们的技术了。
语言 JavaScript45的可维护性、可测试性、可读性等显著特点使开发团队能够方便地开发基于Web的应用程序和网站。JavaScript已经完全足以视为第一类语言了。当然使用时需要应用与其他语言一样的工具(例如单元测试)和方法(例如重构)。V8及其他JavaScript引擎使其性能得到了提升,而在需要富客户端式的体验的领域,Flash和Silverlight在HTML5 + JavaScript面前已经逐渐失去优势。 F#37、Clojure39、Scala38等函数式语言仍处于评估阶段,但已经相对成熟和可用。函数式语言的两大特性备受瞩目:并行中的不变性及函数作为第一类对象。尽管C#引入了闭包,在后一特性方面具备了部分功能,但不变性才是函数式语言的标志。 F#基于OCaml,现已被Visual Studio工具集完整支持。F#在函数式语言构造之外还非常自然地增加了对象支持及命令式构造。Scala类似于F#,亦糅合了对象和函数式编程方式,但它的语法更像Java。Clojure起初作为JVM64语言,如今也可以用于.NET CLR。这三种语言存在很多相似之处,但我们认为相较于Scala,F#和Clojure更值得大多数组织评估。
平台 HTML5仍是复杂Web应用程序开发的首选,重要的特性包括增强的音频与视频内容整合能力、客户端存储、更好的文档结构、Web套接字和离线功能。 RDFa59是往HTML内容中添加有语义词汇的机制,现正快速而广泛地被内容提供商所接受。这是语义网概念中第一个成为主流的。RDFa支持各种工具,从自定义点集成到使Google爬虫更全面地理解网站内容。如果你想自己的内容能够以简单、廉价、基于标准的方式向大量集成方案开放,建议使用RDFa。我们在看好RDFa的同时,对RDF三元组存储(RDF triple store23)却保留意见。领先的三元组存储在能力、容量、性能等方面差异很大。如果尝试使用三元组存储,必须进行一系列全面的测试,确认是否符合需要。 另一个Web基础技术平台是Atom68,它是一种可扩展的数据聚合格式,几乎所有语言都有支持工具。Atom与Atom发布协议相结合,可以组成一个轻量级的、高服务质量保证的信息发布和使用平台。但Atom方案的伸缩性是以延迟为代价的,因此Atom不适用于要求低延迟的方案中。 OAuth58是基于Web的授权协议,它允许一个应用访问另一应用中用户的受保护资源而无须共享私密安全凭证。OAuth目前已经是RFC标准,显著提高了Web浏览器和计算机访问分布的Web资源的私密性与安全性。OAuth 2.0将于2010年底发布。由于不能向下兼容OAuth 1.0,而且1.0版本的实现仍然困难,因此我们将OAuth放在评估阶段。 AWS(亚马逊网络服务)是当前最成熟、最广泛的云服务,提供了可扩展的计算服务(EC262)、存储服务(S362和SBS)、数据库服务(SimpleDB和RDS)、消息服务(SQS和SNS)等。AWS提供的服务列表还在迅速扩展,几乎每月都有新功能上线。AWS平台的优势是否能充分发挥,取决于应用程序。 iPhone改变了移动电话的面貌。iPad则有可能彻底改变用户与基于Web的资源和应用的交互方式,将催生类似平板设备的大量出现。iOS4增加了无线应用发布,使其他公司也能不通过App Store而安全地托管和发布内部应用。iOS4多任务特性打开了企业级应用的可能性,不过这是以增加电池消耗为代价的。 有一类问题如果用增加更多传统硬件的方式解决将非常昂贵,将GPU用于计算为此提供了更好的效率和性能。适合SIMD(单指令流多数据流)处理模型的问题能从该方案获得显著改善,但代价是专门API学习起来比较困难。OpenCL、NVidia的CUDA和微软的DirectCompute都为开发者提供了GPGPU56(GPU通用计算)的可能。 (本文来自《程序员》杂志2010年11期,更多精彩内容敬请关注2011年04期杂志)
《程序员》11年04期精彩内容:HTML5来临!
《程序员》杂志订阅