`
yanwt
  • 浏览: 98833 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
前两天发了一个招聘广告贴,结果之前的ID和帖子都被管理员删了,之前的一些资料都没了,真是服了,没办法又注册了一个原来的ID,结果等了两天才能发贴。
继续把之前的帖子重发一下。



说明:
Web负载均衡和应用负载均衡使用Nginx
Web服务器用Tomcat
应用服务器可选Jboss、glassfish、tomcat
数据库Mysql
Session缓存使用TokyoTyrant(需要持久化)
应用缓存使用Memcached
Web服务器通过Hessian远程调用访问应用服务器
Web层使用Spring3 MVC通过Hessian调用远程应用服务器的业务方法获取业务数据生成页面。各服务器之间的session存储在session缓存中。
应用层使用Spring3+Hibernate+Hessian,主要是提供业务service接口,在接口层进行事务控制,通过hessian生成远程调用接口供web层调用。通过AOP实现结果缓存减少数据库压力。
数据库做集群,这部分没有画在图上。

------------------------------------------------------------------------------------------
2010-09-21增加:
这个是新版本的软件结构:

改进:购物车数据保存在共享的memcached中,去掉session,增加身份认证服务。
  • 大小: 45.5 KB
  • 大小: 72.2 KB
分享到:
评论
66 楼 q364035622 2012-08-23  
为什么我没看到源码啊!我也想研究下!!
65 楼 zt1986mo 2012-06-13  
LZ 请问,这个图 您是用什么软件画的?谢谢
64 楼 yangrui19830323 2012-03-19  
请问下,我到svn上查看代码,说要输入用户名,密码,是啥呢,能给我们吗
63 楼 yanwt 2011-11-16  
yuanliyin 写道
谢谢你的回复!
请教个问题,我现在用的jboss seam做了个系统,公司内部使用,就一台应用服务器,装的jboss4,前台展现用jsf xhtml,绑定Java bean,用war方式打包,一个数据库服务器 oracle。

现在新开发另外一个系统,想重新架构下,主要想把应用展现和业务分开,比如部署一台web服务器(apache或nginx等)+应用服务器(jboss),问题是这个应用(war)如何部署,两台机器上都要部署吗同一个应用吗?

甚至还想过一种变态方案,干脆把应用服务器上部署一个提供rest服务的应用,然后weib服务器通过统一的调用实现分离,遐想了,呵呵


两个系统不要部署同一个应用,web服务器远程调用应用服务器的接口就行了,rest是一个很好的选择。
62 楼 yuanliyin 2011-11-16  
谢谢你的回复!
请教个问题,我现在用的jboss seam做了个系统,公司内部使用,就一台应用服务器,装的jboss4,前台展现用jsf xhtml,绑定Java bean,用war方式打包,一个数据库服务器 oracle。

现在新开发另外一个系统,想重新架构下,主要想把应用展现和业务分开,比如部署一台web服务器(apache或nginx等)+应用服务器(jboss),问题是这个应用(war)如何部署,两台机器上都要部署吗同一个应用吗?

甚至还想过一种变态方案,干脆把应用服务器上部署一个提供rest服务的应用,然后weib服务器通过统一的调用实现分离,遐想了,呵呵

61 楼 icanfly 2010-10-09  
还有一个问题是UUID作为cookie的防攻击性如何?
根据你提供的程序,如果我自己伪造一个类似的UUID的cookie传入系统,系统发现这个cookie系统中没有相应的session,则系统会对应这个cookie值(自己伪造的UUID)建立session,这样做有没有什么后果?如果我自己只创建一个长度为10或者更短的,系统也接受?


我的做法是:
1、在用户登录前获取时创建临时session,在只读取的情况下,不写入memcached,如果有临时信息写入才写入memcached.此时的sid(SessionID有可能是用户自己伪造传入的).
2、在用户登录过后重新生成新的UUID(ticket),使原来的cookie失效,产生新的cookie写回客户端,可以防止用户自己伪造UUID(cookie)。
3、此时如果用户再次伪造一个UUID cookie过来,系统会发现此UUID cookie在memcached中不存在,则会重复1、2两个步骤直至用户使用了系统分配的UUID。
60 楼 icanfly 2010-10-09  
SessionService.java:

public Map getSession(String id) {
MemCachedClient mc = this.getMemCachedClient();

Map session = (Map) mc.get(id);
if (session == null) {
session = new HashMap();
mc.add(id, session);
}
return session;
}
这只是获取session,如果session不存在,大可只返回空的hashMap,没有必要再mc.add(id, session);因为一旦你返回的hashMap中放入值的时候会自动调用saveSession,如果没有如果在获取session时发现没有session,将新建hashMap存入实际上没有任何意义还会浪费一次网络通信流量。因为你存入的空的session要么下次取还是取一个空hashMap回来,要么就会被一个新的有值的hashMap代替。总之第一次存入的空hashMap无用。这是我的见解!
59 楼 yanwt 2010-09-30  
<div class="quote_title">kakaluyi 写道</div><div class="quote_div"><p> 楼主,我看了源码,有些见解有几点觉得框架的sessionsna处理有些浪费性能 <br><br>1 HttpSessionSidWrapper.java </p>
<pre name="code" class="java">if (session != null) {
            Enumeration&lt;String&gt; enumeration = session.getAttributeNames();
            while (enumeration.hasMoreElements()) {
                String name = enumeration.nextElement();
                map.put(name, session.getAttribute(name));
            }
            SessionService.getInstance().saveSession(sid, map);
        }</pre>
<p> <br><br>每次请求,getsession方法都会遍历session,然后保存到缓存中,这种行为如果是必须,肯定会影响速度,不如用一个监听器比如 <br>利用HttpSessionAttributeListener监听httpsession的属性变化,同步到memecached中的sessionmap。 <br><br>Java代码</p>
<pre name="code" class="java">public void attributeAdded(HttpSessionBindingEvent event) {
或者attributeRemove </pre>
<p> <br>这样是更好的解决方法对吧? <br><br>2还有cookie的key用的是自动生成的uuid,其实不如用session.getId(),这个也是唯一的,而且还可以用来比较session.getId()和cookie中是否相同来判断前后是否是同一个session(该应用服务器是否crash) <br>暂时就这两个问题了,还会继续看源码,有问题到时候再沟通一下</p>
<p> </p></div><br/>使用UUID是想保持用户的一些状态,如果使用session.getId()的话,用户关闭浏览器,sessionid就会丢失。既然花了那么大的开销存储了session数据,肯定希望能使用的长久一些是吧。
58 楼 JavaLanguageFun 2010-09-30  
对这些不太懂 ,主要是做应用系统 ,LZ 能给个技术文档么 。不讲代码 ,就将思想 。那些地方用了什么技术,什么的。。
57 楼 kakaluyi 2010-09-29  
<p> 楼主,我看了源码,有些见解有几点觉得框架的sessionsna处理有些浪费性能 <br><br>1 HttpSessionSidWrapper.java </p>
<pre name="code" class="java">if (session != null) {
            Enumeration&lt;String&gt; enumeration = session.getAttributeNames();
            while (enumeration.hasMoreElements()) {
                String name = enumeration.nextElement();
                map.put(name, session.getAttribute(name));
            }
            SessionService.getInstance().saveSession(sid, map);
        }</pre>
<p> <br><br>每次请求,getsession方法都会遍历session,然后保存到缓存中,这种行为如果是必须,肯定会影响速度,不如用一个监听器比如 <br>利用HttpSessionAttributeListener监听httpsession的属性变化,同步到memecached中的sessionmap。 <br><br>Java代码</p>
<pre name="code" class="java">public void attributeAdded(HttpSessionBindingEvent event) {
或者attributeRemove </pre>
<p> <br>这样是更好的解决方法对吧? <br><br>2还有cookie的key用的是自动生成的uuid,其实不如用session.getId(),这个也是唯一的,而且还可以用来比较session.getId()和cookie中是否相同来判断前后是否是同一个session(该应用服务器是否crash) <br>暂时就这两个问题了,还会继续看源码,有问题到时候再沟通一下</p>
<p> </p>
56 楼 wmcoo 2010-09-25  
yanwt 写道
xchao 写道
赞赏一下!

感谢楼主的共享,不是代码层面的共享,而是设计思想层面的共享,我们需要更多这样共享来壮大我们的软件事业!




呵呵,这个是之前一版的架构了,现在版本有些改进,有时间整理一下发上来和大家讨论一下。

看着这个架构对小弟们学习有很大帮助,感谢楼主的分享精神.
还请楼主快些整理下新版中各个层面用的的技术(越祥细越好)  .
55 楼 onlysomeone 2010-09-23  
楼主啊,示例中“登录”不了,只是页面刷新了,
感觉是执行j_spring_security_check,验证了“验证码”之后就完了。楼主能否提供一下较为完整的登录功能的代码,谢谢了!
54 楼 yanwt 2010-09-21  
xchao 写道
赞赏一下!

感谢楼主的共享,不是代码层面的共享,而是设计思想层面的共享,我们需要更多这样共享来壮大我们的软件事业!




呵呵,这个是之前一版的架构了,现在版本有些改进,有时间整理一下发上来和大家讨论一下。
53 楼 yanwt 2010-09-21  
onlysomeone 写道
楼主项目所选用的不走寻常路,做的很好的,有几个问题想问问:
开发工具用的intellij idea,不用的Eclipse/Myeclips,用的spring MVC不用的Struts不知道是出于什么考虑?使用下来感觉怎么样,另外引入的jar文件那么多更新起了也太不容易了,更新的时候会不会容易发生冲突?spring 3.0.4较以前版本有了不少改进是否考虑更新呢?
谢谢!

选择intellij idea只是个人习惯而已,从5.0开始一直用到现在。使用了spring IOC首选就是spring mvc,而且集成也非常简单。整个架构结构比较简单,配置文件比较精简,新手可以很容易上手。jar文件管理起来确实是个头痛的问题,里面有一些是没用的,我也懒得去清理了,使用mvn管理应该是一个不错的方向,只是现在没时间去整理了。升级spring3.0.4是没有问题的,有兴趣的只要替换一下spring3的jar文件就可以了。
52 楼 xchao 2010-09-21  
赞赏一下!

感谢楼主的共享,不是代码层面的共享,而是设计思想层面的共享,我们需要更多这样共享来壮大我们的软件事业!


51 楼 onlysomeone 2010-09-20  
楼主项目所选用的不走寻常路,做的很好的,有几个问题想问问:
开发工具用的intellij idea,不用的Eclipse/Myeclips,用的spring MVC不用的Struts不知道是出于什么考虑?使用下来感觉怎么样,另外引入的jar文件那么多更新起了也太不容易了,更新的时候会不会容易发生冲突?spring 3.0.4较以前版本有了不少改进是否考虑更新呢?
谢谢!
50 楼 yanwt 2010-09-09  
peterwei 写道
给老yan投下精,最近我在研究memcached相关的东西,以后多向你请教。
1.后来整个架构有没有发生改变?
2.tomcat 的session那块最后是怎么处理的?我记得当时好像用到cookie了。
3.应用服务器用了memcached,为什么当时web server没有一起使用memcached?就我所知,memcached也可以处理集中式session,好像有个memcached-session-manager。


开始第一版是使用了共享session的,集中放在memcached里面。现在只是使用cookie记录一下用户的一个ID信息,用来验证用户身份,相当于一个用户一个ticket。购物车的ID也是存在cookie里面,具体的购物车数据是存在服务器端的memcached里面。基本上是这样了。
49 楼 kimmking 2010-09-08  
虽然有广告嫌疑,但是lz的工作如实的话,分享精神可嘉。
秒精~
48 楼 peterwei 2010-09-08  
给老yan投下精,最近我在研究memcached相关的东西,以后多向你请教。
1.后来整个架构有没有发生改变?
2.tomcat 的session那块最后是怎么处理的?我记得当时好像用到cookie了。
3.应用服务器用了memcached,为什么当时web server没有一起使用memcached?就我所知,memcached也可以处理集中式session,好像有个memcached-session-manager。
47 楼 yanwt 2009-12-23  
lianj_lee 写道
开源公司的项目,貌似职业道德不怎么高。

代码先收了,有机会研究研究!

只是把项目用到的架构开源,项目是不开源的。

相关推荐

    明日知道 JAVA WEB架构探索.zip

    明日知道 JAVA WEB架构探索

    java高手真经_系统架构卷:java.web系统设计与架构

    总的来说,《Java高手真经_系统架构卷:Java.Web系统设计与架构》是一本全面解析Java Web开发的指南,适合已经有一定Java基础,希望进一步提升技能,或者想要深入理解Java Web架构的专业人士阅读。通过学习,读者...

    架构探险-从零开始写Java Web框架-全书源码

    全书源码的提供,使得读者能够更加直观地理解并实践书中的理论知识,这对于学习和提升Java Web架构设计与实现能力具有极大的帮助。 在构建Java Web框架的过程中,我们首先会接触到的是基础概念,如HTTP协议、...

    java web了解软件架构

     一、了解软件架构  (一)基本概念  (二)软件架构的历史  (三)软件架构的目标  二、J2EE开发模型分析  (一)一层架构模式  (二)两层架构模式Model 1  (三)三层架构模式Model 2  (四)多层...

    Java Web架构 资产管理系统

    本系统是基于B/S的多层Web应用,在windows 7操作系统下,开发工具:MyEclipse +MySQL +Tomcat 6.0 此系统是公司固定资产管理系统,其中有两种角色可以登录并使用此系统.一是超级管理员,一是管理员。 资产管理,JSP,...

    java高手真经_系统架构卷java.web系统设计与架构

    #### 三、Java Web架构模式 1. **MVC(Model-View-Controller)模式**:这是最常用的架构模式之一,将应用程序分为三个核心部分:模型、视图和控制器。模型处理数据逻辑,视图负责展示数据,而控制器则接收用户的...

    开发者突击:Java Web主流框架整合开发.part07.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    开发者突击:Java Web主流框架整合开发.part12.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    高并发web架构完整1

    《高并发Web架构完整1》是一份关于优化和构建高性能Web站点的综合资源,共分为五个部分。在当今互联网行业中,随着用户数量的急剧增长,Web应用必须具备处理高并发请求的能力,才能确保服务的稳定性和用户体验。本...

    java web 2.0架构开发与项目实战 源代码01

    在本资源中,"java web 2.0架构开发与项目实战 源代码01",我们聚焦于Java Web应用程序的开发,特别是在Web 2.0时代的技术和实践。Web 2.0是一个概念,它强调互联网作为交互式平台,用户参与度更高,社交网络和富...

    开发者突击:Java Web主流框架整合开发.part09.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    开发者突击:Java Web主流框架整合开发.part04.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    开发者突击:Java Web主流框架整合开发.part11.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    [AddisonWesley]Performance_Analysis_For_Java_Web_Sites.zip

    2. **Java Web架构分析**:讨论了Java Web应用的常见架构模式,包括Servlet、JSP、Spring MVC等,以及它们对性能的影响。 3. **JVM优化**:深入讲解Java虚拟机(JVM)的内部工作原理,包括垃圾回收机制、类加载、...

    开发者突击:Java Web主流框架整合开发.part10.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    开发者突击:Java Web主流框架整合开发.part06.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    开发者突击:Java Web主流框架整合开发.part08.rar

     本书内容循序渐进,通俗易懂,覆盖了Java Web开发的最流行技术,无论对于Java Web架构设计还是软件开发,本书都是精通开发Java Web应用的必备的实用手册。  本书面向读者对象:Java和J2EE软件架构师与设计师、...

    Java Web三层架构的配置详解

    Java Web三层架构是一种常见的软件设计模式,用于构建可扩展、可维护且易于测试的Web应用程序。这个模式将应用逻辑划分为三个主要层次:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据...

    架构探险 从零开始写Java Web框架.pdf

    本书首先从一个简单的Web应用开始,让读者学会如何使用IDEA、Maven Git等开发工具搭建Java web应用:接着通过一个简单的应用场景,为该Web应用添加若干业务功能,从需求分析与系统设计开始,带领读者动手完成该Web...

Global site tag (gtag.js) - Google Analytics