提升自己
VMware 提供培训和认证,助力您的职业发展。
了解更多(2009年10月15日更新) 从里程碑 M5 开始,dm Server 2.0 采用 区域 来将内核与用户应用程序隔离开来。这意味着内核实现对应用程序和应用程序管理来说几乎完全不可见。
同样在里程碑 M5 中,对克隆的支持被完全移除。区域隔离及其之间的范围计划为克隆旨在解决的最常见问题提供了大大简化且更易于管理的解决方案。
在接下来的两节中,我将概述这些变更以及我们进行这些变更的原因。
dm Kernel 创建了一个单一的 用户区域 用于运行应用程序,并且所有应用程序(包括 dm Server 提供的——Splash、Admin、Web 和 Hosted Repository)都部署到 用户区域 中。
Kernel bundles 未安装在用户区域中(除了少数区域管理所需的)。支持内核的必要功能在 OSGi 框架中运行,但用户区域的应用程序无法看到它,除非是正常提供的服务。应用程序与内核实现是隔离的。
这种隔离有很多好处:例如,内核和用户应用程序不再需要使用相同版本的 Spring Framework。(事实上,内核没有安装全部的 Spring Framework——它也不需要。)如果内核更新,应用程序需要升级或调整来适应它的可能性会大大降低。因此,内核实现更加稳定和有弹性,并且应用程序更有可能在版本之间的内核升级中存活下来。
例如,共享带有静态状态的 bundles 可能不是理想的,而能够拥有这样一个 bundle 的副本(克隆)意味着不同的应用程序可以使用不同的克隆(应用程序作用域机制允许我们在框架中以不同的名称安装多个副本)。在另一种情况下,当下层 bundle 通过一个共同的中间件(通常是 Spring Framework 的一部分)被依赖锁定(pinned)时,克隆这个中间件允许克隆依赖于不同的下层 bundle,从而使克隆能够满足原始中间件无法满足的传递性约束。
在 dm Server 2.0 的里程碑版本(直到 M4)中,克隆支持(包括手动和自动)一直可用。我们从这个实现中收到了很多反馈和经验,并且作为一项实验,它证明是富有成效的。然而,时间和经验表明,这还没有准备好用于生产环境,因此克隆已从 M5 中移除,并且不会是最终 2.0 版本的一部分。区域隔离结合范围计划,可以用来管理克隆旨在解决的最常见问题。这些解决方案更容易理解,并且在生产环境中大大更容易支持。
手动克隆相对稳定,但即使是手动克隆也存在问题。
最后,克隆实现必须将 Spring 依赖作为特例包含进来才能高效工作。Spring DM extender 也引入了特例:这些对于其他 extender 和其他库完全没有通用性。它太过于特定于 Spring 了。
总的来说,尽管克隆和自动克隆的一些成果令人印象深刻,但这项功能在现场根本不够稳定,因此为了整体质量和稳定性而被移除。
最重要的问题可以通过区域隔离和显式作用域来解决。
锁定(pinning)问题几乎都产生于 Spring Framework,因此用户区域的隔离为解决这些问题提供了解决方案。
其他常见情况可以通过适当使用范围应用程序来解决,这实际上是管理服务器中安装构件的一种更可控、更易于支持的方式。范围计划使得创建所需的作用域变得容易,并且在框架上下文更改时,解析布线在生产过程中保持稳定。