分布式缓存问题请教
但是具体分布式缓存技术如何实现,我不是很清楚,EJB也没有用过,只是在理论上了解一些。
懂的老师,麻烦讲详细具体点,因为如果讲得太抽象,我可能不明白,呵呵,谢谢了。
这里多个web服务器,多个应用服务器,),memecache分布式缓存服务器 物理上都是分开的三类服务器吗。 另外web服务器是类似apache的WEB服务器多个吗。 多个应用服务器是多个tomcat/jboss这样的服务器吗。 因为我们以前一直是只有一个tomcat服务器。没有其他服务器了。能否把你说的画一个逻辑架构视图给我看看,或者物理架构视图也行。谢谢。
分布式缓存放的是对象,对象不只是数据,是聚合体,是一个对象群,并时刻能在多台服务器内存中维持自身的统一性,就像你们兄弟俩一起闯江湖,不论到哪块服务器内存中,你们兄弟俩都会彼此照顾。数据就不会彼此照顾,都是死的东西。
数据的一致性很重要,这个维持动作必须由对象自身来完成,如果你分布式缓存中放的不是对象,而是数据,那么难免出现一些数据在这台服务器,有些数据在另外一台服务器,不是同进同出的,没有共同生命周期,如果要进行数据一致性维护,改了一个数据再改另外一个数据,又要依赖数据库操作。
建议楼主学习一下Evans DDD,对你系统架构有帮助,不掌握业务建模设计技巧,纯粹地就技术架构论技术架构,没有意义,每个公司的技术架构都不一样,因为他们根据自己的业务特点进行了优化,这也是核心价值,否则,你用memchaed,别人也用,反正花钱就能买来,但是要跟自己业务结合,就不是三天两天的事情,也不是请比尔盖茨来就能解决的,虽然不一定请得动他。
[该贴被banq于2009-04-30 09:57修改过]
比如我就遇到很多问题,如果将对象封装的好一点,尽量实现一个富模型,那么这个对象持久化的时候就很头疼,尤其是在对象之间的关系比较多的时候,聚合里面有很多子对象的时候。这个时候采用hibernate等ORM,如果要保存或者修改聚合根的话会很头疼,因为简单的操作,hibernate会生成很多的sql。做这种头疼的事情,我想谁都不愿意,所以为了减轻这种痛苦,我会选择缓存,因为从缓存里取出来的对象是完整的,是个血肉丰富的对象,我可以直接调用我设计好的操作,更重要的是这些操作都是不会破坏聚合的不变量约束的,同时这些操作也是满足相应的后验条件的。只有调用这些操作,我们才不会破坏聚合。而如果用业务对象缓存的话,那么我每次就要把这些对象保存到数据库,这样很头疼。以前本来要进行10次操作数据库的操作,而用了缓存之后,也许就只有1次,2次了,减轻了对象和数据库之间的不匹配带来的痛苦。
总之,如果没有设计好业务对象模型的话,就算你缓存了,你也没有办法控制并发情况下,缓存对象的状态,所以还不如不缓存。
[该贴被xmuzyu于2009-04-30 15:34修改过]
这个问题,我想用过Hibernate的都会有体会的,确实很头疼。