Java 企业版(JEE)架构是基于组件的,拥有可以高效管理应用程序事务和有状态性、多线程和资源池的特性。即使是复杂的需求,JEE 应用程序也很容易实现,因为业务逻辑是以可重用的组件组织的,并且服务器为各种组件(以
容器 的形式)提供了底层服务 。
我们认为,可以通过增加一些云计算的强大概念 — 即并行性、灵活性、多租户和安全性 — 给 JEE 的容器服务概念增加更多的功能,这是一种全新的概念。本文将介绍给 JEE 容器和应用程序扩展一些云计算特性的策略和模式。其中包括:
- 概括介绍我们整合的每一种云特征。
- JEE 应用程序的现有特征的布局。
- 介绍我们用于将 JEE 容器扩展到云上的方法。
- 提出关于这种类型迁移的一种设计策略,它包含并行、同步、存储、灵活、多租赁和安全等概念。
云计算的特征
图 1 说明了云是什么,以及各种不同的云部署模型。
图 1. 云服务模型及其组件的俯视图 云协议的最基础部分是 Infrastructure as a Service(IaaS)。这些基础架构已经转移到云环境中了,并且云环境现在能够支持包括业务应用程序在内的软件部署。然而,IaaS 并没有一个应用程序开发环境或者测试服务。如图所示,抽象的顶部是灵活性、自动部署和实用计算。
Platform as a Service (PaaS) 层提供了应用程序软件创建、部署和维护的环境。PaaS 提供者必须提供基本的生命周期服务,如编译、部署、测试和构建块服务,如状态管理、事务和安全性,以及运行时的资源管理服务。
Software as a Service (SaaS) 层为最终用户提供了访问和使用应用程序的环境。
应用程序需要支持的基本云特征有灵活性和多租户。其他特征,如分配和自动化,是通过应用程序服务器的部署特性支持的,并且对代码没有太大的影响。并行性、分布式存储需求和安全性增强是作为一些实现灵活性和多租户的辅助特征。
现在让我们详细了解每一种特征。
灵活性
灵活性 是指根据需要自动向上和向下扩展基础架构。在负载峰值期间,集群会增加更多的实例,而当负载下降时,实例的数量也会下降。这是以动态方式实现的。这个功能是由支持动态集群技术的应用程序服务器的特性实现的。
灵活性并不只是应用程序服务器的解决方案;应用程序本身也应该支持灵活性。这意味着应用程序的设计需要能够处理那些用于支持并发性的资源。设计或定制一个应用程序来支持灵活性,意味着您还需要在应用程序中实现并行性、无状态性和事务支持。
设计策略部分描述了如何实现所有资源都支持运行时无状态性的灵活性和并行性。
多租户
多租户 表示您的应用程序以一个应用程序实例来支持多个客户;这意味着如果有 5 位客户同时使用内容管理服务,那么所有 5 个客户都可以使用同一个应用程序实例,数据和执行参数适当分离。为了支持多租赁,您的应用程序需要实现分布式存储、并行性、安全性和松耦合性。
支持多租赁的方法有两种:
- 为所有用户提供一种物理存储方式。
- 为多个用户提供多种物理存储资源。
并行性和事务支持
在本文的内容中,并行性 指的是能够并行执行多个请求或者将大数据量任务划分成多个并行执行的子任务。这有利于提高资源使用效率。引入并行性会对吞吐量和性能产生积极影响。事务支持 是通过保证任何资源的状态变化都是同步的,从而保证可靠性。这两个概念属于两个对立面 —— 如果您在一方面做得更好,那么另一方面就会受到影响。
适当混合并行性和事务支持对于平衡这些相对立的特征是非常重要的。本文的策略部分将介绍四种策略,两种针对于并行性,另外两种针对于事务支持:
- 并行性的同步和异步支持。
- 用于事务支持的一种线程完成(thread-completion)和数据到达(data-arrival)同步方法。
所提出的移植策略采用了非功能性方法来实现并行性,但是其中一些需要进行功能修改。如 Google 框架 MapReduce;MR 描述了一种使用 Map
功能实现并行性的方法,它将大型数据分割成多个键-值对。(见 参考资料 中关于 MapReduce 和云的文章。)
松耦合性与无状态性
松耦合性 保证服务的每一个调用都是通过一个标准接口发起的;这使得被调用的组件和调用组件能够独立修改,彼此互不影响。松耦合是通过一个发起调用的代理引入的。无状态性 是松耦合的一种特性,其中服务的每一个调用都不依赖前一个调用。这是通过在一个持久化存储中管理状态变化而实现的。
这两种策略是使系统调用与依赖条件更加独立的辅助特征。
分布式存储
分布式存储 是一种存储数据的方法,这样数据的位置就会变得不重要。它也意味着同一块数据可能会存储在不同的位置。这个特征能够提高灵活性和无状态性,但是会对事务支持产生负面影响,所以它们需要进行一些平衡考虑。
分布式存储包括 4 种策略:
- 复制节点:数据存在于不同的节点上,能够快速地复制到其他节点。
- 随需复制:定义了触发器来触发数据的手动复制或自动复制。
- 单向故障恢复复制:从主节点到子节点的复制计划;当主节点出现故障时,复制任务会交由一个特定子节点完成。
- 文件系统共享:当复制开销像其他文件系统资源一样时使用。
安全性
云应用程序安全性会对特定的特征产生重大影响:多租户、并行性和松耦合性都会增加安全性需求。而且,如果您的应用程序以混合模式部署(例如,云组件与本地系统组件),那么您需要实现一种跨域的单点登录功能,而这会对安全性造成额外的影响。
分布式存储、并行性和传输也有一些安全性问题。
现在您已经熟悉了云应用程序的特征,现在让我们了解一下 Java EE 的容器结构。
回页首
Java EE 容器应用程序特征