知识大全 改善Java企业级应用的可用性

Posted 环境

篇首语:人生必须的知识就是引人向光明方面的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 改善Java企业级应用的可用性相关的知识,希望对你有一定的参考价值。

改善Java企业级应用的可用性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

对一个在线商务站点来说 需要 * 的服务时间 这就是说对商务网站来说保证不间断的运行是最重要的事 任何差错都会导致客户不能访问商务站点提供的信息和服务 而这又会导致收入的损失和客户的报怨   改善应用可用性的关键在于将应用放在专为高可用性设计的工作环境中 在基础框架中高可用性通常是通过各个级别的冗余来取得的 但为了更好的利用环境中内建的可用性能 应用设计者需要考虑事先考虑高可用性问题 需要注意的是一些应用设计上的选择可能在简单的环境中正常运行但在高可用环境中却是低效的 例如对一些不会布署在高可用性环境中的应用来说 某些设计方式可能会改善其性能   本文主要讨论HA(高可用性)环境中的特性 然后会讨论一些专门针对HA环境的设计方案 最后介绍一些应用级(即使应用不会布署在HA环境中)的改善可用性的最佳实践 HA环境  下面是两个典型的代表极端HA基础架构的主机环境示例 图 显示了一个完全布署在一个服务器上完整的J EE环境

  

  Figure Single server hosting environment  在这种环境中 HTTP/J EE/RDBM服务器完全共存于同一台物理机器上 这可能是最低效的J EE环境了 而且也是最少容错的 因为可能只因为潜在的单点错误导致整个环境不可用 另一种情况如图 显示

  

  Figure High availability hosting environment Click on thumbnail to view full sized image   这个布署环境由多个数据中心组成 通常在不同的地理位置 但是保持一致的软硬件兼容 几乎所有的服务都是冗余的 在这个环境中 每一个组件都驻留在分离的容错硬件上 这种地理上分离的数据下发环境依赖于数据和群集来同步所有的数据传送   两个HA环境最重要的特性是    无单点错误 通过在环境中增加冗余避免单点错误 这个原则应用应用到所有软硬件层次    容错 在发生错误时 通过负载均衡动态地恢复服务到可用的服务器上 设计利用基础架构中高可用性的应用  拥有HA基础架构并不意味着拥有高可用性的应用 如果应用没有考虑到利用基础架构中的高可用性 是不会拥有高可用性的 对这些类型环境的应用设计需要在设计和实现上作额外的考虑   例如 如何在多个数据下发中心间共享会话信息或者如何同步到复制数据库中来提高终端用户的体验 下面的关于设计和实现的最佳实践将有益于利用HA基础架构和增加应用的可用性   ·使用只读JVM缓存 在典型的HA配置中 应用的几个实例同时运行在不同的应用服务器上 每一个服务器都有自己的JVM 因此在你更新本地缓存的数据时 更新只能被当前JVM知道 其他应用的实例不关心这次更新 这就是为什么你应该将JVM级的缓存作为只读的 但在存在跨越多个JVM的分布式缓存时是个例外 取决于你的应用服务器 你可以有不同的解决方案或者实现自己的RMI方案   ·考虑分布式HTTP会话 为了解决HTTP协议无状态的问题 应用需要靠HttpSession API来存储会话信息 在群集环境中 应用的多个实例运行在不同珠服务器上 在使用HttpSession时需要考虑下面几点   o   实时地复制会话数据 既然你不知道哪个实例会处理会话中的下一个请求 会话数据应该实时地同步到群集中的所有服务器 这可以通过存储会话数据在数据库中并实现数据库级别的复制就可以了 一些应用服务器如WebSphere WebLogic提供了更快的内存会话复制特性 如果你使用这类应用服务器 你就可以考虑一下了   o   序列化会话对象 存储在分布式会话中的对象需要实现java io Serializable接口 实现这个接口确保数据可以被无线地传送到群集中的每一个服务器实例了 一个好的方法是强制使用自定义方法如addObjectToSession(String key Serializable value)来代替HttpSession setAttribute (String key Object value) 区别在于如果你调用addObjectToSession()方法时传递了非序列化对象 你会得到一个编译时错误 而你尝试复制保存在会话中的非序列化对象时 你得到的是运行时错误 而这会影响用户体验   o   实现容错性 让应用知道冗余基础架构资源的存在 如果需要的话建议通过动态运行时切换来实现 例如 如果应用使用消息服务器而且每一个数据中心有一个消息服务器 让给定的数据中心上运行的应用知道在另一个数据中心上的服务器可以作为错误的备份   o    在测试时要有创造性 通常你会在与布署环境一致的环境中测试应用 但在实际中 一个HA产品环境需要比测试环境更多地时间来建立 因此 完全地镜像产品环境是代价高的 在这种情况下 你可以通过创造性的测试来弥补相应环境的缺少 你可以使用两台工作站来模拟HA环境 然后你应该考虑下面的测试场景 在你关闭一个数据库时应用是否正常? 在一台本地机没有响应时应用是否能成功从另一台机器连接LDAP服务器?这些类型的测试可以协助测试应用的容错性 在应用级的改善可用性的最佳实践  到目前 我们主要还是强调可用性的重要性及如何使基础架构具有更好的可用性 及如何在HA环境下考虑应用的设计 接下来 我们会讲一些在应用级别的改善可用性的设计技巧   自主的应用资源管理  避免在应用中硬编码外部资源是一个通用的实践 通常 外部资源是在应用启动时加载到内存中并作为只读资源被应用使用 外部资源的典型例子如应用的属性文件(包含可翻译的文字串)或者是与应用相关的配置信息   通常 外部资源的改变并不会反映到应用的内存中 只有重启应用才能使被改变的外部资源生效 而这会临时中断应用的服务 在这种情况下 应用的可用性与他的外部资源的更新频率直接相关   一个有效的改善应用的可用性的方式是自动重新加载外部资源 而不需要重启应用 下面是自动应用资源管理工具的主要特性及其相关设计和实现的指引   资源管理器    周期地检查外部资源并在其修改时重新加载 检查的周期依赖于业务需求    提供一种类似用户初始化式的显式加载 这可以通过浏览器触发 例如重新加载servlet可以处理这个需要并进行重新加载资源    使用线程安全的重新加载来确保应用即使在重新加载的过程中再次获取当前配置数据 记住访问正在被重载的资源可能导致数据的不一致性    支持各种资源类型 如属性文件和XML文件   可以使用开源工具 如Quartz Scheduler和Apache Commons Configuration 一种资源管理的样例设计是保存两份资源内容 在一份资源正在更新内存时 应用依旧可以查询到任何需要的信息 这保证了应用的可用性 图 是这种设计的图例

  

cha138/Article/program/Java/hx/201311/27184

相关参考

知识大全 JAVA开放源码项目与工具在企业应用开发中的运用

JAVA开放源码项目与工具在企业应用开发中的运用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 java性能优化-之三

  Java使得复杂应用的开发变得相对简单毫无疑问它的这种易用性对Java的大范围流行功不可没然而这种易用性实际上是一把双刃剑一个设计良好的Java程序性能表现往往不如一个同样设计良好的C++程序在J

知识大全 JCA: Java步入应用集成时代

JCA:Java步入应用集成时代  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java企业版(

知识大全 Java运行时监控,第1部分: Java运行时性能和可用性监控

Java运行时监控,第1部分:Java运行时性能和可用性监控  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 透过 Java 参数来改善 Java 效能

透过Java参数来改善Java效能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  透过Java参

知识大全 八个改善Java遗留系统的技巧

八个改善Java遗留系统的技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  你没看错就是这个题

知识大全 三步教你改善Java代码质量

三步教你改善Java代码质量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文讨论了如何以递进

知识大全 我是计算机网络专业的学生 快毕业啦 我想多学点实用性的知识

我是计算机网络专业的学生快毕业啦我想多学点实用性的知识C语言程序设计,JAVA程序设计,计算机基础,网页设计与制作,数据结构,数据库原理与应用,网络操作系统及应用,网络安装与设计,信息系统分析与设计实

知识大全 零基础学习电脑书

零基础学习电脑书这个可以参考一下,具体还要看个人的情况。我觉得应该根据你的工作需要或者说你的发展方向而定。基本上两大类吧:C/C++和Java。比如,如果你要做企业级应用的你应该学习Java和C#;如

股票认购的具体程序

股票认购的具体程序员工向企业(如组成持股会则向企业工会)提出购股申请;企业或企业工会审查员工持股资格;根据员工股份认购方案确定个人持股额度并公告员工持股额度;员工缴付购股资金,一般应用现金支付,也可用