1月份最新发布的《技术雷达》认为以下几个技术趋势越来越明显:对软件持续交付及其实现方法的关注;云端产品的多样性和深度;更高效地运用基本的互联网技术。 ThoughtWorks技术咨询委员会由Thought-Works内部的资深技术专家组成,他们经常聚在一起讨论全球技术战略和对行业有巨大影响的技术趋势。这就促成了《技术雷达》的编制目的——帮助决策者了解目前能够影响市场的新兴技术和趋势。 《技术雷达》总结了这些讨论的结果,为包括从CIO到企业开发人员在内的相关人员提供有价值的信息。本文中仅提供内容摘要,读者可以继续探索自己感兴趣的细节。我们尽量保持雷达的简洁明了,使读者能够快速了解。技术雷达用图解的形式,将所有项目分为技术、工具、语言和平台几大类。有些项目会同时属于多个类别,我们会将它归入最合适的某个类别。另外,根据这些项目目前所处的阶段,用不同的环将其进一步分组。这些阶段分为以下四个方面。
  • 保留阶段:该技术还在慎重的发展过程中。
  • 评估阶段:值得探索的技术,以了解其对公司的影响。
  • 试用阶段:值得应用的技术。公司有必要了解如何使用该技术,并且在风险可控的项目中试用。
  • 应用阶段:行业已经对该技术进行了试验,并找到了合适的使用方法;或者我们感到应用该技术的紧迫性,应该马上应用它,而不是逐渐部署。
详细介绍各类别时,我们将展示自上期《技术雷达》发布起,每项技术的动向。新的项目用三角形代表,上期已经提到的项目用圆形代表。在最近两期《技术雷达》中没有新动向的项目将不再列出,除非再有重大事件发生。

技术

企业全天候运行,但作出商业决策必需的信息,却还是在批处理模式下使用ETL作业,用过时的方法提供。随着企业转向全球市场,以及运营时间的延长,批处理的及时性更加无法满足要求。在企业做决策的那一刻,这些作业流程所提供的数据已经过时。在事务处理系统中,事件一发生,就应该被捕捉并送入数据仓库,这一点意义重大,可以让企业获得实时 商业智能(Real-time business intelligence)。 不断涌现的智能系统(Smart Systems),融合了现实世界和虚拟世界,而配备有GPS、相机和大屏幕的智能手机只是其中一种。智能系统上可能的应用包括像Google Goggles一样的增强现实应用、位置服务和智能网格等。 由于开发和运维之间的脱节越来越受到重视,DevOps也继续受到关注。DevOps能够促进开发和运维之间的协同工作以及共同责任。 DevOps为运维流程带来了更敏捷的实践,比如配置、变更管理和生产监控,也为开发带来了一类产品的思想、工具和环境。企业要实现应用程序的持续交付,DevOps是一个关键基础。 当成功完成向持续交付的转移后,数据库变化的部署也应该自动化,以便让依赖于这些变化的应用程序发布不必等待数据库变化的手动部署。 数据库部署自动化(Automated database deployment)使得应用程序和数据库变化这个完整周期实现了自动化。 有不少团队把重点放在story水平上的验收测试,但这会为维护测试带来很多困难,而且需要完成各个story而不是完整的功能。更加整体的考虑是将用户story组合成journey,然后对每个journey进行验收测试。一个系统中的journey是对用户和企业都有价值的一系列用户交互。起初,一个 journey的验收测试(Acceptance test of journeys)将只包括一个步骤,但当story完成后, journey扩大到包含每个用户的进展。一旦对journey的验收测试通过了,就意味着我们已经实现了真正的价值。 渐进增强(Progressive Enhancement)是一种网页设计策略,利用网络技术层,实现良好的用户体验。渐进增强重视可达性,允许使用任何浏览器访问基本内容。这种策略能使更多的内容被缓存,从而提高系统整体性能和可扩展性。 并发是一个越来越难以避开的难题。硬件的速度没有变快,但多核平台正在成为规范,连手机也开始应用双核或多核。 并发抽象和并发模式(Concurrency abstractions and patterns)并不是新鲜事物,但不那么广为人知,它们可以帮助解决这一领域的许多挑战。特别是在Clojure、Erlang、Retlang和事件模式中出现的模型,提供了一个比现有的线程、锁和信号量模型更具可测性和可靠性的方法。 对于我们构建软件时做出的妥协,技术债务是一个强大的、有效的比拟。不幸的是它已成为一个包罗万象的概念,包括了很多不同种类的问题和困难,从而导致了混乱和这个概念的“贬值”。处理这一问题的有效方法之一是对 技术债务的分类(Categorization of technical debt),用类似用户story的方式确定债务偿还的价值和优先次序。这有助于团队关注最重要的领域,并保持问题透明和可衡量。 [caption id="attachment_5804" align="aligncenter" width="654" caption="图一技术雷达图"]
图一技术雷达图
[/caption]

工具

在现代数据中心或云部署中,存在大量的主机和设备,手动安装和配置这些基础设施是不明智的。 基础设施即代码(Infrastructure as code)将基础设施的配置写成脚本或者用文件描述,并采用版本控制,配置的变化以受控的方式推送到数据中心。这和软件开发中使用的源代码控制和升级构建(build promotion)相类似,因此称为“基础设施即代码”。前端运行的两个基础设施自动化开源工具是Chef和Puppet。两者都使用textual DSL来编写自动化脚本。使用这种方法能实现一致且重复的环境改变,并能减少手动工作。在解决环境差异时,效果更加显著。 Vagrant工具能够方便地为团队分配使用便于版本控制的描述符构建的虚拟化开发环境。Vagrant有助于消除开发的环境差异,减少浪费在故障排除上的时间精力。 每个基础设施即服务(IaaS)云产品都提供了自己的API,用于执行常见任务。 Deltacloud的目的是将这些API抽象化,并提供REST方式的接口,用于执行常见云管理功能,从而使得在云之间迁移虚拟基础设施变为可能。 不同的企业向庞大的开发社区公开API时,产生的非功能性需求通常都是一样的。密钥管理、认证、访问控制、流量管理、缓存、跟踪和报告都是常用功能,可以跨应用程序和公司重复使用,无需修改。一些服务提供商已经发现这种趋势,并通过“软件即服务”提供 API管理(API management)。这个领域中,著名厂商包括Mashery和Apigee,它们都允许客户使用自己的基础设施部署服务。API管理服务也可能会引起企业客户的兴趣,这些企业正在使用网络作为内部SOA的平台技术,作为更轻量级的选择,以替代传统的SOA管理工具。 微软的 WCF HTTP API,尽管目前在发展初期,但发展很迅速,它对HTTP基本类型还有内容谈判和条件请求的惯例的支持已经让我们印象深刻。该API鼓励开发可测试性高、具有可明确分离的关注点的解决方案。让我们特别感兴趣的是该项目的开发方式,它立足于Codeplex上的开放源码社区。该社区引导.NET平台开发的能力曾经让这个项目进入之前的技术雷达。虽然现在的软件许可允许在产品中使用库,但面对目前该API的不确定性,不要在这个早期阶段依赖该API;在目前发布的版本中,我们欣赏的功能,比如说基于惯例优先原则的轻量型编程模型(attribute-light programming model),可能不会在正式的首发版本中出现。 应用程序日志既有好的一面,也有坏的一面。当产品出现问题时,我们可以求助于它,但实际上挖掘出有用的数据,通常需要用类似awk和sed的工具书写出代码,然后拼装在一起。 Splunk是一个优秀的解决方案,能快速分析许多标准的日志文件格式,比如IIS、Log4J和syslog,并且可以扩展自定义格式。它可以静态或实时地索引文件,生成模板化或自定义的报告。如果原始日志中没有提供你所需要的字段,使用一个正则表达式,就能简单地内联或定义一个新的字段,以获得需要的细节。很难用语言描述Splunk的强大功能,所以我们建议你下载并试用一下。 [caption id="attachment_5806" align="aligncenter" width="603" caption="图2工具雷达图"]
图2工具雷达图
[/caption]

语言

甲骨文公司收购了Sun以及它旗下的 Java资产,为Java的未来带来了不确定因素。甲骨文有关Java发展蓝图的公告让人喜忧参半,继续了这种不确定性。因此,本期技术雷达继续强调这一问题。我们建议观察,而不是立即抛弃Java平台。 在以前的技术雷达中,我们将两个基于JVM的函数式编程语言——Clojure和 Scala——归入评估阶段。我们曾经推崇过Clojure,因为这种语言更小、更集中。上期技术雷达我们也介绍了Scala更广泛的适用性,认为它更加适合于企业开发人员。我们还曾经目睹了采用Scala后带来的巨大成功。因此,我们将Scala归入了试用类别。如果它被引入一个新团队,请特别注意Scala的习惯用法,以避免“没有分号的Java”或Perl的样式。 CSS已经成为样式化网页的一种非常受欢迎的和有效的DSL(Domain-Specific Langu-ages,领域特定语言)。然而,它确实有一些局限性,因此,在CSS基础上诞生了一系列语言,让它更容易编写和修改。这些语言有 SASS、SCSS和 LESS,它们已经体现出了优势。 HAML语言允许我们使用缩进来布局HTML的结构。它不是普通的HTML替代品,它能够有效地聚焦标签的层次结构。 DSL是一种古老的技术,我们认为它的使用明显不足。我们希望Martin Fowler最新著作的出版,能鼓励更多人使用它。 [caption id="attachment_5807" align="aligncenter" width="604" caption="图3语言雷达图"]
图3语言雷达图
[/caption]

平台

OpenStack是一款新型云操作系统,提供了完全开源的解决方案。它是结构云控制器,充分利用现有的KVM等虚拟化技术,并结合其他虚拟化工具,如Xen和OpenVZ。OpenStack目前快速发展中,预计在2011年第二季度末将提供一个稳定的生产就绪解决方案。 vFabric是VMware开发的新PaaS平台。 建立在开源网络和信息平台Tomcat、Apache和RabbitMQ的增强版本的基础上,vFabric的目标是在多种云平台上建立一个基于Java的PaaS。 目前支持的平台包括VMware和force.com合作建立的 VMForce、Google的App Engine和Amazon的EC2。vFabric包括了GemFire公司的内存分布式数据管理平台和Hyperic公司的监控和管理工具,让它成为了Java开发者向云端移植时有用的技术集。 多年来JavaScript主要被用作客户端Web编程语言,但是作为一种轻量级语言,它可以很容易地嵌入不同的环境,包括服务器端。 Node.js允许开发人员编写客户端和服务器端的JavaScript应用程序。 大多数服务器花费大部分的时间等待I/O操作,Node.js的事件驱动无阻塞架构则可以非常有效地解决这个问题。不同于基于线程的解决方案,在处理传入请求时,Node.js不需要等待I/O操作完成。实现高性能的服务时,Node.js是一个很好的选择。 Heroku是一个很简单的PaaS平台,支持Ruby on Rails这样的兼容框架。其他语言的PaaS平台,往往需要一个特定的编程模型,从而限制了开发。相对于同类产品,Heroku中使用标准的Rails堆栈,甚至允许配合普通的Git push进行开发。 Heroku最近被Salesforce.com收购,它的服务获得了有力的支持。 移动网络(Mobile Web)在以前的技术雷达中处于评估阶段,但这次被分到试用阶段,因为通过iPhone、Android和平板电脑,移动网络的使用已经越来越多。许多设备可以提供近似桌面浏览器的经验,但为了向用户提供真正的最佳体验,我们建议,针对特殊移动设备的屏幕尺寸、显示和控制行为,对网站进行调整。渐进增强之类的技术,可以让一个网站同时适应桌面和移动浏览器。 [caption id="attachment_5808" align="aligncenter" width="570" caption="图4平台雷达图"]
图4平台雷达图
[/caption] 大屏幕移动设备,如Apple的iPad和Amazon的Kindle,为无处不在的计算提供了新模式。其电池寿命长、接口简单、易于连接,有可能改变我们与计算机交互的方式。Apple的新用户界面抛弃了Mac电脑1984年引入并一直使用的文件和文件夹这些熟悉的桌面比拟(Desktop metaphor)。 原文链接: http://www.thoughtworks.com/radar 译者:卞斌 (本文来自《程序员》杂志11年04期,更多精彩内容敬请关注04期杂志) 《程序员》11年04期精彩内容:HTML5来临! 《程序员》杂志订阅
Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐