花钱的年华

--今天开始成为主站

用户操作
[即时聊天] [发私信] [加为好友]
江南白衣ID:calvinxiu
692186次访问,排名53好友0人,关注者39
calvinxiu的文章
原创 161 篇
翻译 0 篇
转载 0 篇
评论 646 篇
江南白衣的公告

肖桦,江南白衣,
开源项目SpringSide
春天的旁边
发起者

最近评论
calvinxiu:
发版本最痛苦的事情,就是刚发完之后忽然又有了一个比较重要的更新。

推荐大家下载3.0.3.1 (2mb)

1.简化了目录结构,感觉又清爽了不少。
2.消除了最后一块需要逐个Class写配置文件的地方(applicationContext.xml中的sessionFactory的mapping class)。
dreaming:恭喜~
hongyi:还是一头雾水,郁闷,为啥有这么多东东,叫人头大
suncheng_hong:用过appfuse,但springside还没有尝试过。
suncheng_hong:很想尝试一下。
文章分类
    收藏
      相册
      Blog用图
      Friends
      @_@
      Anders小明
      buaawhl
      cac
      canonical
      cctvx1
      david.turing
      femto
      g9
      JohnsonQu
      Michael Chen
      Raimundox
      robbin
      SimonLei
      totodo
      wuyu
      周爱民
      孟岩
      差沙
      庄表伟
      落魄的程序员
      透明
      郁也风
      铁手
      银狐999
      飞云小侠
      存档
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 设计美好的服务器(6)--SEDA架构笔记收藏

      新一篇: 08年的读书计划 | 旧一篇: 设计美好的服务器(5)--Shoal集群框架

      1.Overview

           SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stag,不同资源消耗的Stag使用不同数量的线程来处理,Stag间使用事件驱动的异步通信模式。

           更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务。

           在每个Stage的通常有如下组件:

      • Incoming Event Queue ,事件队列。
      • Admission Controller  阀门,拒绝服务。
      • Dynamically sized Thread Pool, 线程池。
      • Event Handler ,实际处理业务的Compinent。
      • Resource Controller ,控制Stage的参数。

      2.Web2.0+SOA环境下的SEDA应用

          Web2.0对架构师提出了新的挑战 ,  JavaEE 的同步调用机制(除JMS),有限的线程池与连接池(超出范围性能会下降),固定的定义在JNDI的资源对Web2.0/SOA的需求并不吻合。对BEEP,SCTP这些协议,必须依靠JCA另行编写模块来实现长连接模型。

          Java EE 迎合 Web 2.0(IBM DW) 提出,从统计学上看在系统总线程数固定的情况下,使用SEDA能获得较高的Throughput,阶段间的资源差异越大就越明显。
          比如处理一个Web 2.0常用Mashup请求,有如下几步:

      1. 接收用户请求(1单位时间)
      2. 数据库查询(4单位时间)
      3. 根据数据库查询结果,准备Web Service调用参数(1单位时间)
      4. 发起Web Service调用((16单位时间))
      5. 将结果渲染返回给用户(2单位时间)
           

           那么SEDA会使用一条线程处理1.接收用户请求、3.准备WebService、5.返回结果,两条线程处理2.数据库查询, 而5条线程处理耗时最多的4.WebService请求。
           结果表明,当远程调用所花时间不变,而本地操作得到优化时,系统通量也能获得明显提高。

      3. Mule 中的SEDA 实例

            Mule是SEDA架构的遵循者。每个Component间,用inbound->outBound的Queue异步相连,每个Component可以设置自己的线程池大小,队列长度。

            因此SEDA中的Stag间事件驱动异步链接,Stag内Incoming Event Queue,Thread Pool,Event Handler都有了。

      <mule-descriptor name="RadioCarUMO" implementation="radioCar">
      
          <threading-profile maxThreadsActive="5" maxThreadsIdle="10" poolExhaustedAction="WAIT" threadWaitTimeout="-1" id="component" doThreading="true"/>
          <queue-profile maxOutstandingMessages="6"/>
          <inbound-router>
              <endpoint address="RadioCarsQueue"/>
              <router className="org.mulefair.routing.BennyTheGatekeeper"/>
          </inbound-router>
          <outbound-router>
              <router className="org.mule.routing.outbound.OutboundPassThroughRouter">
                   <endpoint address="FairAreaQueue"/>
              </router>
          </outbound-router>
      </mule-descriptor>

         而例子中的InboundRouter BennyTheGatekeeper,则实现了administration controller的角色,本来poolExhaustedAction="WAIT",而administration controller可以通过计数器,直接refuse需求,将请求转发到alarm queue。

         整个Stag中唯一缺失是动态改变资源参数的Resource Controller,threadpool也不是Dynamically sized Thread Pool,但这似乎不重要了。

          再一次觉得Mule充当Service Container比ESB时还要称职。

        

      发表于 @ 2007年12月21日 00:37:00|评论(loading...)|收藏

      新一篇: 08年的读书计划 | 旧一篇: 设计美好的服务器(5)--Shoal集群框架

      评论

      #xf_wlt 发表于2008-02-12 14:05:16  IP: 219.139.190.*
      说的精辟!
      技术牛!!!!!!
      #yungang 发表于2008-03-08 22:32:17  IP: 123.54.16.*
      众里寻“江南白云”几遍 未找到
      点击JAVA专家老大 楷模就在这里
      #Henrik 发表于2008-07-23 10:18:41  IP: 123.114.67.*
      Stag应为Stage
      Event Handler ,实际处理业务的Compinent。疑似component
      2008-08-04 09:25:41作者回复
      谢谢勘误
      发表评论  


      登录
      Csdn Blog version 3.1a
      Copyright © 江南白衣