verydeed
verydeed
2009-01-12 13:23

请教系统可伸缩性的架构和技术方向

  • 企业应用

在java方面,我算个新手。目前需要设计一个系统,需要较好的可伸缩性,因此咨询一下可以采取怎样的框架和技术。

对于架构方向:
一种是ejb,通常系统的可伸缩性总和分布式计算有关了,这是ejb的目标。但我不清楚使用ejb来实现web应用的可伸缩性是否会代价太大,太复杂。

另一种可选择的主流架构就是ssh了

对于技术方向,我的理解
web框架,对伸缩性的影响看来不大。struts, spring mvc等应该都可以吧

我对数据访问层的疑问最大。如果数据的存储是分布式的,又想对领域层或其他更上层透明。ejb的实现我完全不了解,但hibernate好象就很困难。有一个hibernate.sharding的项目,是google贡献的,但查了一下资料,应该不是很成熟。通常数据的分布存储是需要手工制定策略的,现在看起来sharding对领域层的影响是比较大的。

我曾经看到一种我认为比较极端的方案,将关系数据库只做为存储,所有业务层所需要的数据都以领域对象的形式存在于内存中,业务层通过统一的数据管理组件来获取数据。但我觉得这样的数据管理组件的开发应该会很复杂,感觉上比hibernate这一类的都要复杂得多。

我很想知道,有没有比较成熟的解决方案。只要能提供一个方向即可。如果能更进一步地说明方案所涉及的大的技术,将不胜感激。

[b]问题补充:[/b]
@ 1楼 bohemia

谢谢回答。

这倒的确可行,将伸缩性都交给第3方应用。但这样的方案应该还没有达到高度的伸缩性,只是提高了一定的程度。从已知的大多数高负载web应用来看,比如myspace,alibaba等,都应该是从应用程序架构上直接入手。

虽然从应用程序上考虑伸缩性,一定会带来复杂性,但我想业界应该在这一方面已有所努力,我问题中提到的hibernate.sharding就是其一。我所想了解的也的确是在应用程序范围内考虑伸缩性所需要的技术。
[b]问题补充:[/b]
谢谢各位的回答,让我了解了很多知识,给了我很多帮助。

基本同意各位的观点,考虑到大型系统的独特性,我也觉得如果从应用程序的架构考虑,那么架构师的经验应该是成败的关键因素之一了。我对.net相对熟悉,在java领域并不是很熟悉,本意是想也是想知道在java中是否会有较成熟的通用方案。

@ 3楼 lewhwa

google的分布式应用是挺多的

@ 4楼 Lucas Lee

您很注重投入产出比,赞一个。

@ 5,6楼 sdh5724

很赞同您的观点。多谢您提供的一些数据。

帖子看了,大的原则基本了解,无论.net或java,这些基本原则肯定是一致的,与平台应该没什么太大的关系,

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

6条回答

为你推荐