SpringOne 大会今年首次落户中国,大会结合了 Spring 和 Cloud Foundry 大热门技术,将会针对于 Spring 的最新发展、Spring 在移动、大数据领域的应用等做主题分享。InfoQ 就 POJO 以及诸如 Spring 和 Hibernate 等框架构建企业级 Java 应用程序等话题采访到了《POJOs in Action》作者 Chris Richardson 。
InfoQ: 这些年来,企业级 Java 应用开发领域发生了很多变化,你觉得有哪些是比较重大的变化?
Chris: 过去的几年中,涌现出了一大批影响企业开发者的技术。首先,大数据的崛起和 Apache Hadoop 的日益流行。企业在生产并存储大量完全不同的数据,他们使用 Apache Hadoop 这样的技术来分析数据,以此驱动业务决策。
其次,这几年里出现了一批 NoSQL 数据库,它们是传统关系型数据库之外的选择。对于一些应用程序而言,NoSQL 数据库提供了更好的可扩展性和性能,还有更丰富、更灵活的数据模型。还有一种不断增长的趋势是混合持久化存储,即应用程序充分利用多种 SQL 和 NoSQL 数据库的优势。在 SpringOne 北京大会上,会有好几个 NoSQL 的主题,我会做一个与混合持久化存储有关的演讲。
再次,云计算在过去的几年里风光无限。云计算不仅提供了更加敏捷的方式来部署应用程序,还改变了我们架构应用程序的方式。
- 云计算鼓励开发模块化、多语言的应用程序,这些应用程序由一组多种语言技术构建出来的服务组成。每个服务都能独立开发、部署并扩展。实际上,这是我在 SpringOne 北京上要分享的一个主题。
- 应用程序很可能是基于云的 Web 服务 API 生态环境的一部分。应用程序使用第三方提供的 Web 服务 API,也暴露出一些 API 给其他人使用。
- 云也意味着一些企业应用程序要从定制化单租户架构向基于云的、SaaS 风格的多租户架构演化。
- 最后,复杂的基于 SOAP/XML 的 Web 服务也在向更简单的 RESTful/JSON API 迁移。
最后,过去的几年中移动应用程序的开发领域也有快速发展,因为越来越多的人在使用智能手机和平板。其结果就是应用程序除了要支持桌面浏览器,还要支持移动设备浏览器和本地应用程序,这一点变得越来越重要了。
我很高兴,通过 Spring Data 和 Spring Mobile 这样的子项目,Spring 在这些领域都发挥了关键作用。
此外,过去几年中企业级开发领域发生的另一个主要变化是引入了敏捷方法论。像 Cloud Foundry 这样的云平台极好地匹配了敏捷开发的实践。Cloud Foundry 实现了很多在构建高可扩展、高可用应用程序时要用到的东西,包括负载均衡和健康检测这些你可能要自己实现的东西。这让开发者能更专注于创造业务价值而非构建基础设施。同时,Cloud Foundry 能很方便地运行一个应用程序实例进行测试,这也是敏捷开发的重要部分。
InfoQ: 使用 RDBMS 时,Hibernate 是 Spring 的好搭档,现在 NoSQL 越来越多地被运用到实际项目中,Spring 是如何应对这一变化的?Spring Data 在其中发挥怎样的作用?
Chirs:Spring Data 是一组项目的集合,让人们在使用 Spring 构建应用程序时能更方便地使用新的数据访问技术,比如 NoSQL 数据库、map-reduce 框架和基于云的数据服务,还提供了改进过的关系型数据库支持。特别是 Spring Data 为 NoSQL 数据库领域提供了很多 Spring 的好处和相似点,比如简单性和强大的能力。
InfoQ: 在需求变化越来越快的今天,应用程序如何在保持高可扩展、高可用的前提下响应需求变化?云计算平台是如何帮助应用程序做到这一步的?
Chirs:Cloud Foundry 这样的云计算平台通过多种途径来应对这个问题。第一,云计算平台实现了很多在构建高可扩展、高可用应用程序时要用到的东西,包括负载均衡和健康检测这些你可能要自己实现的东西。这让开发者能更专注于创造业务价值而非构建基础设施。
第二,PaaS 让应用程序的测试更方便了。有了 Cloud Foundry,部署应用程序实例及其需要的服务就易如反掌了。一旦创建了描述应用程序及其所需服务的说明文件,就能通过一条命令来部署应用程序了。只需几秒就能拥有一个应用程序的副本用来进行测试。
第三,PaaS 让你能在生产环境中轻松可靠地部署新版本的应用程序。在传统的、非云环境中,你有一组固定的服务集合需要更新。PaaS 给你了更多的灵活性。例如,你可以在运行应用程序老版本的同时运行新版本,负载均衡会在两者间进行调度的。如果没有发现问题,那么就能关闭旧版本,如果有问题,则能让流量只导向旧版本。
最后,云计算平台鼓励进行模块化、多语言应用程序的开发。这些应用程序包含了一组服务或微应用。每个微应用都能独立进行开发、部署及扩展。每个微应用都很简单,因此便于理解,可以很快改正确。这种架构能让开发者快速引用新的改进过的技术。
InfoQ: 应用程序运行在云端与自己的服务器上有何区别?我们的开发框架和平台,比如 Spring 和 Cloud Foundry 都做了哪些优化,让应用程序在云端运行的更加流畅?
Chris: 自己管理的服务器环境由一组固定的物理机或虚拟机构成。一方面,自己管理的环境面临了很多挑战。首先,你要对所管理的技术栈中每个组件负责,从 OS 开始。这项工作工程浩大,而且和应用程序没有直接的关系。其次,你需要精心计划以便确保开发、测试和生产环境都能拥有足够的资源。其中也存在重大灾难的风险:不期而至的高峰冲垮你的服务器。
另一方面,开发运行在这种静态环境中的应用程序,无需考虑让它能够向上或向下伸缩。而且,应用程序的配置管理也更加简单,因为服务的主机名与端口都是固定的,比方说数据库。
对比之下 ,像 Cloud Foundry 这样的云计算平台是一个动态的环境,把你和虚拟机及物理机隔离开来。你不需要负责安装、配置和管理服务器、应用服务器或者是数据库这样的基础服务。取而代之的基本单元是应用程序:Cloud Foundry 会负责管理你的应用程序和它所要求的服务。Cloud Foundry 是有弹性的:你可以轻松地根据流量向上或者向下进行伸缩。而且,为测试部署应用程序的副本也是相当容易的。Cloud Foundry 让你能专注于应用程序本身,不再被无谓的事情打扰!
开发这类环境中的应用程序也面临了一些挑战。你的应用程序理所应当地要架构为能进行向上和向下伸缩的系统。它需要能在云环境的限制下运行,通常这样的环境不支持组播这样的特性。此外,应用程序配置更具挑战性,因为应用程序服务和数据库服务器这样的平台服务都是动态划拨的。IP 地址及端口号无法合并到应用程序里。
Spring 框架最让人惊喜的是它能和 Cloud Foundry 紧密搭配在一起。运用 Cloud Foundry 服务的机制是 Spring 的依赖注入机制的天然扩展。实际上,Cloud Foundry 运行时能动态地重新配置一个未经修改的 Spring 应用程序,让它能运行在 Cloud Foundry 环境里。此外,Spring 3.1 提供了 Profile 机制,很容易就能写出在云和非云环境(比如开发者的桌面)中迁移的应用程序。
InfoQ: 多租户是大家共同面临的问题,Spring 做了哪些努力帮助开发者更优雅地处理这个问题?
Chirs: 多租户是个有趣的话题。对于一个全新的应用程序来说,挑战可能会小一些。例如,我开发了一个应用程序,其领域模型包含了用户和组织(或者账户)的概念,使用 Spring Security 来处理领域对象授权问题。
更大的挑战是将定制化的单租户应用程序迁移到多租户 SaaS 解决方案上。一种做法是试探性地利用 Cloud Foundry 这样的云计算平台的能力,运行应用程序的多个实例,每个实例对应一个租户。随后可以增量地将应用程序重构为多租户、模块化、多语言的架构,比如我在 SpringOne 演讲里描述的架构。
我很愿意与你和读者朋友讨论多租户所面临的挑战,探索 Spring 如何为大家提供帮助。
InfoQ: 在你看来,未来的框架应该具备哪些特性才能满足云端快速开发的需求?
Chirs: 我们认为有了像 Spring 框架、与 Spring 有关的子项目以及 Cloud Foundry,开发者就拥有了很棒的工具集,能快速开发出健壮的、可扩展的云应用程序。我们也很愿意与你和读者朋友一同讨论 Spring 该如何解决云应用程序开发所面临的挑战。
评论