??xml version="1.0" encoding="utf-8" standalone="yes"?>九色视频在线播放,欧美日本亚洲视频,久久亚洲高清http://www.aygfsteel.com/zhugf000/category/20696.html零碎片断Q杂七杂八?/description>zh-cnSat, 22 Dec 2007 03:08:52 GMTSat, 22 Dec 2007 03:08:52 GMT60JSRB设计思想Q无状态的,_粒度的SERVICEhttp://www.aygfsteel.com/zhugf000/archive/2007/12/20/168346.htmlW笨W笨Thu, 20 Dec 2007 06:23:00 GMThttp://www.aygfsteel.com/zhugf000/archive/2007/12/20/168346.htmlhttp://www.aygfsteel.com/zhugf000/comments/168346.htmlhttp://www.aygfsteel.com/zhugf000/archive/2007/12/20/168346.html#Feedback2http://www.aygfsteel.com/zhugf000/comments/commentRss/168346.htmlhttp://www.aygfsteel.com/zhugf000/services/trackbacks/168346.htmlJSRB设计思想Q无状态的,_粒度的SERVICE Z提高性能和负载均衡实现的考虑QJSRB 采取了无状态的Q粗_度的SERVICEh和响应机制?br /> 该思想与有状态的ORB(如CORBA或EJB Container)的设计思想截然相反.本文详q原?


JSRB定位与想要解决的问题

JSRB定位于传l的SERVICE REQUEST BROKERC,是原始意义上的中间件的位置: 负责大量客L(N千或N?的请?排队到几十或几百个的h处理q程(U程)?最优化的用系l资?从而达到吞吐量最大化的目?
从这个角度来? EJB Container和CORBA ORB是标准的中间? Java Web Container׃内徏了线E池,也算是中间g(前端协议HTTP,后端协议是JDBC).

无状态vs有状?q程调用的选择.

有状态要求服务器在远E调用之间保存对应客L的Session数据,q种设计思想会简化程序代?有助于将分布式的E序写得?strong>?/span>非分布式E序.

但是在某些情况下,q种设计会带来严重的性能问题.在金融的在线交易pȝ?业务pȝ需要处理十万至千万U别的用户信?例如|银pȝ),而中间g服务器较为合适的session池数量不q万.要在中间件服务器的JVM内存中处理如此巨量的数据,肯定会将pȝ撑爆; 而如果存储大部分数据到硬?钝化技?来应?则就会面临IO性能q不?RDBMS 的窘? RDBMS 在目前阶D始l是最快速的数据存储Ҏ.

当业务系l面临大数据量的问题?需要采用应用相关的解决Ҏ(数据分区,存储q程{等)解决.问题推l应用服务器固然方便,但是却会带来pȝ的性能和可扩展性的问题.q程调用的代h来就很大,不必要让ORB再承担session数据的重担了.与之相反,无状态的q程调用在可扩展性和负蝲均衡斚w的实现要单得?也没有sessionq移的问?


SERVICE的粒度问?/h2> SERVICEq程调用的粒度需要粗一?在保证SERVICE可重用的前提?应该量减少SERVICE的调用次? 因ؓSERVICE的调用开销非常?一般的q程调用都是以毫U记,而普通方法的执行旉是以微秒或纳Uؓ单位?.
有状态SERVICE的一个副作用是Ҏ出现q细_度的设?同时׃Stub/Skeleton的生成很方便,q种设计更加容易出C),D交互ơ数q多,会严重降低业务系l的性能.

q方面一个鲜明的Ҏ是大型机的智能终端和telnet协议.l端只有{到用户填充完一个表单ƈ认发送后,才会请求数据发送到L,q且自行解释和显CZ回的数据(非常像Broswer/HTTP), 而telnet协议则将每个按键事g发送到L,L处理保存有所有的session数据. L可以毫不费劲的处理N万个q发的客L,而UNIXL在连接了几千个telnet客户端后,自n的正常运行都会出问题?

Z说一? cM? 从个人项目经历来? ׃ Hibernate 隐藏JDBC调用很成?查询或更新数据库非常方便, E序员就很容易滥? 有可能导致程序从逻辑上来看毫无问? 但是q行h却出现性能低下, q且q种性能问题q很难改?性能低下是由于数据库查询q多引v?要调整的代码遍布整个目).


其它

  1. 本文的一些思想来源于MidWay(midway.sourceforge.net)和个人的目l验,仅ؓ一家之a.
  2. 大型目(企业U?和小目(部门U?的区别主要就在于,大项目在各个阶段都要非功能性的要求(性能,定w,恢复,分布?响应旉,事务{等)攑֜设计/实现/试首要考虑的位|?而小目则几乎无需考虑q样的问?
  3. 本文和JSRB主要集中在真正的中间? Service/Object Request Broker/EJB Container).




W笨 2007-12-20 14:23 发表评论
]]>
Java Service Request Broker?/title><link>http://www.aygfsteel.com/zhugf000/archive/2007/12/12/167098.html</link><dc:creator>W笨</dc:creator><author>W笨</author><pubDate>Tue, 11 Dec 2007 16:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhugf000/archive/2007/12/12/167098.html</guid><wfw:comment>http://www.aygfsteel.com/zhugf000/comments/167098.html</wfw:comment><comments>http://www.aygfsteel.com/zhugf000/archive/2007/12/12/167098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhugf000/comments/commentRss/167098.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhugf000/services/trackbacks/167098.html</trackback:ping><description><![CDATA[<h1>Java Service Request Broker ?/h1> Java Service Request Broker(JSRB)是一?Java/C/C++ 的开源项?br /> Project URL http://jsrb.sourceforge.net<br /> <br /> 目目标按照优先序依次?<br /> 1 高效,透明的通讯框架,屏蔽本地/q程|络架构的复杂?高效来源于基于poll/epoll的NIO通讯框架,透明来源于多个JSRB Server之间的动态联机?.<br /> 2 高效?E_的服务请求处理机?高效来源于服务端为C语言实现,E_来源于对服务q程的不间断监控和自动重启动机制)<br /> 3 分布式事务处理能?JSRB 作ؓ分布式事务管理器,初步实现了DTP XA协议,q在开发过E中).<br /> 4 客户端语a中立(语言无关通讯协议,客户端提供Java或C API?.<br /> <br /> JSRB 大致架构如下:<br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/zhugf000/jsrb/jsrb_overview.gif" height="543" width="796" /><br /> <br /> <br /> <h2>JSRB SERVICE Ҏ?讉K方式</h2> 1 SERVICE 无状?通过二进制数据传递输入输出数?br /> 2 q行?可以有多个SERVICE实现q程, JSRB会^衡调度这些进E?<br /> <br /> SERVICE支持同步/异步两种讉K方式:<br /> SERVICE之间也支持forward和嵌套调用两U方?br /> <br /> 同步讉KSERVICE: <br /> <em><span style="font-family: Courier;">Response Data = JsrbConection.syncCall("SERVICE NAME",Request Data);</span></em><br /> 当客L从syncCall中返回时,它已l获得SERVICE的返回数?br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/zhugf000/jsrb/jsrb_call_svc.gif" height="310" width="412" /><br /> <br /> <br /> 异步讉KSERVICE<br /> <em><span style="font-family: Courier;">long key = JsrbConnection.asyncCall("SERVICE",Request Data);<br /> ...<br /> Response Data = JsrbConnection.fetchReply(key);<br /> </span></em>客户端可以提交服务请求后,q一D|间再d试获取数? 便衣客户端同时提交多个服务请?增加q发?<br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/zhugf000/jsrb/jsrb_acall_svc.gif" height="310" width="412" /><br /> <br /> <br /> <br /> SERVICE FORWARD<br /> 客户端访问SVC1, SVC1完成后将该请求forward到SVC2, SVC2完成后直接返回客L数据.<br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/zhugf000/jsrb/jsrb_forward_svc.gif" height="310" width="412" /><br /> <br /> <br /> SERVICE的嵌套调?br /> SVC1 调用SVC2 q获得SVC2的返回数?<br /> <img alt="" src="http://www.aygfsteel.com/images/blogjava_net/zhugf000/jsrb/jsrb_nest_svc.gif" height="310" width="668" /><br /> <br /> <br /> <br /> <br /> <br /> <br /> 一般问?<br /> 1 Z么会选择用Java 实现Service Request Broker<br /> {? Java跟C语言相比, 代码执行速度其实q不? 我们一般感觉J2EE 应用?主要是由于IO(特别是socket和JDBC)慢造成?<br /> Java 在多U程~程, 开发的方便性方面比C/C++?<br /> JSRB在实现过E中,自行定义和实C一套NIO框架, 增加了对于Linux epoll(Edge Triggered Mode)的支? 同时Z实现与Cq程的高效通讯,自行实现了Sysv IPC和创建子q程斚w的Native代码.<br /> <br /> <br /> 2 Z么要用C实现业务代码,作ؓService的实现语a.<br /> 从企业端的应用来? 企业应用必定要跟数据库打交道, 实际上C语言讉K数据库要比Java讉K数据库快1C个数量. 甚至可以? J2EE应用响应的大部分的gq时间都耗费在JDBC? <br /> 从大型项目的实施l验来看, 这部分代码攑֜Cq程? 管要多付出通讯斚w的代?Mq是要比UJava的方案快得多.<br /> <br /> <br /> 3 Z么分布式事务的优先最?br /> 从大型项目的实施l验来看, 分布式事务由于运行代仯? 业务pȝ中用到的概览很小(直接用数据库的事?. 对于CICS/TUXEDO应用而言,首先q是CICS/TUXEDO 作ؓ一个高?E_的通讯和服务请求处理排队框架来?<br /> 如果真要有分布式的交易的需?一般采用流水对?冲正处理方式解决.<br /> <br /> <br /> 4 Z么选择无状态方式实现SERVICE<br /> 无状态是提高q发效率, 实现透明故障q移的最x? Server端资源有?为ƈ发的成千上万个用户同时维护状态是非常困难?q样也会造成集群实现的困?<br /> ׃Client端是有状态的,所以这在实C其实问题不大.<br /> <br /> <br /> <br /> 今后得空q会慢慢写更多文介lJSRB的一些组件的实现方式和特?<br /> <br /> <br /> <img src ="http://www.aygfsteel.com/zhugf000/aggbug/167098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhugf000/" target="_blank">W笨</a> 2007-12-12 00:15 <a href="http://www.aygfsteel.com/zhugf000/archive/2007/12/12/167098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DTP/XA 规范及XA API调用研究http://www.aygfsteel.com/zhugf000/archive/2007/12/06/165645.htmlW笨W笨Thu, 06 Dec 2007 06:07:00 GMThttp://www.aygfsteel.com/zhugf000/archive/2007/12/06/165645.htmlhttp://www.aygfsteel.com/zhugf000/comments/165645.htmlhttp://www.aygfsteel.com/zhugf000/archive/2007/12/06/165645.html#Feedback1http://www.aygfsteel.com/zhugf000/comments/commentRss/165645.htmlhttp://www.aygfsteel.com/zhugf000/services/trackbacks/165645.html
分布式事?Distributed Transaction Processing/XA)规范是一个业界标准规范,它定义了分布式事务中各方角色和标准两阶段提交的协议规?XA Protocol)Q该规范为广Z界所支持(CICS/TUXEDO/EnicaQ后来的OTS/JTS规范以及微Y的MTS的莫不源于此?br />
XA规范中关键角色简q如?br /> AP: 客户应用E序Q负责连接TM,RMQ用RM的提供的API讉K和更Ҏ据,声明分布式事务的开始和l束阶段?Transaction Demarcation)?br /> TM: 事务理器,负责理、协调、准备和提交分布式事务,对AP的接口标准ؓTX接口, q所有的 TM 实现都遵循这个标? 但是都会提供cM的接口函?
RM: 资源理器,在AP讉K数据Ӟ兌事务相关的数据修改,q根据TM的命令提交或回滚数据修改Q通常为数据库, IBM MQSeries实现了RM接口?br /> RM分ؓ静态和动态两U?静态RM需要TM明确调用xa_start/xa_end兌事务与RM的联p? 动态RM在数据发生更Ҏ,会自动回调TM提供的ax_reg/ax_unreg函数,动态关联到当前zd的分布式事务?



XA API中定义的xa_****和ax_****函数?br /> ax_reg      向事务管理器注册资源理器?br /> ax_unreg     向事务管理器取消注册资源理器?br /> xa_close     l止应用E序对资源管理器的用?br /> xa_commit     通知资源理器提交事务分支?br /> xa_complete     试异步 xa 操作是否完成?br /> xa_end     取消U程与事务分支的兌?br /> xa_forget     允许资源理器丢弃启发完成的事务分支的信息?br /> xa_open     初始化资源管理器Q供应用E序使用?br /> xa_prepare     h资源理器准备提交事务分支?br /> xa_recover     获取资源理器已准备或启发完成的事务标识W?(XID) 列表?br /> xa_rollback     通知资源理器回滚事务分支?br /> xa_start     启动或恢复事务分支;?XID 与资源管理器hU程的未来工作关联?br />
ax_ 例程可让资源理器调用事务管理器Q所有事务管理器必须提供q些例程。在 DTP 环境中操作时Qxa_ 例程p源管理器提供Qƈ׃务管理器调用。当应用E序调用事务理器以启动全局事务Ӟ事务理器可以?xa_ 接口通知事务分支的资源管理器?br />
分布式事务各个阶D늛关API调用如下Q?br /> 1 AP 通知TM打开RMq接Q?AP-->TM tx_open()
TM 会在该函C调用RM提供的xa_open函数Q打开到RM的连接?br /> 在TUXEDO SERVICE中,需要在tpsvrinit()函数中调用tpopen()函数完成q项工作?br />
2 AP 声明事务开?AP-->TM tx_begin()
在声明后Q该U程后箋对RM的所有访问和更新均属于该事务?br /> 对于static RM, TM 需要调用xa_start() 明确兌事务和RM?br />
在TUXEDO SERVICE/CLIENT中,tpbegin()函数完成cM工作.
当TUXEDO SERVICE被调用时, 如果已经处于事务? TUXEDO 会自动调用与SERVICE兌的RM的xa_start()函数(只对?static RM).

3 AP讉KRMQ用RM规定的API讉KQXA规范未作定义?br /> 对于dynamic RM, 如果讉K时发生了数据更改,例如提交一个UPDATE SQL 语句,  RM会自动回调TM的ax_reg函数兌到当前事?

4 AP声明事务分支l束
在TUXEDO SERVICE调用完成? 自动调用 RM 的xa_end()函数(对于static RM和未调用ax_unreg的dynamic RM)?br />
说明: Ҏ业务需?上述2-4步骤会在不同的进E?TUXEDO SERVICE)中重复出? 只要事务ID( Global XID )相同,q多个事务分?Branch) 均被认ؓ属于同一个事?

5 AP 要求提交或回滚事?TM tx_commit/tx_rollback )
AP要求提交事务? TM 需要检查事务状? 定事务q未标记为MARKED_ROLLBACK(只能回滚),否则会回滚ƈ报告错误.

TUXEDO CLIENT/SERVICE 调用 tpcommit/tpabort 提交或回滚事?
在TUXEDO?׃实现的原?所有xa_prepare/xa_commit/xa_rollback都是由单独的TMSq程发v调用? TUXEDO SERVICE q程不会发v相关调用.
TUXEDO配置文g?每个TUXEDO SERVICE GROUP可以兌一个RM和多个TMS,每个GROUP内的SERVICE q程和TMSq程启动旉会用相同的 XA OpenInfo String打开到RM的连?


标准两阶D事务提交过E?
1 (准备)更改事务状态ؓPREPARING, 依次调用事务兌RM的xa_prepare(), LRMq回错误则进入回滚过E? RM都PREPARE完成事务状态改变ؓPREPARED.
2 (提交)更改事务状态ؓCOMMITTING, 记录事务日志到硬盘中, 依次调用RM的xa_commitҎ,再更C务日? 更改事务状态ؓCOMMITTED.事务提交完成.
3 (回滚)更改事务状态ؓROLLING_BACK, 依次调用事务兌RM的的xa_rollback,更改事务状态ؓROLLED_BACK

化一阶段事务提交q程:
1 (提交)更改事务状态ؓCOMMITTING, 记录事务日志到硬盘中, 调用RM的xa_commit(TMONEPHASE)Ҏ,再更C务日? 更改事务状态ؓCOMMITTED.事务提交完成.

启发式事务提交和回滚:
部分RM支持启发式提交或回滚, xa_commit/xa_rollback q回?可能会返回XA_HEUR***的? 表明RM执行了启发式优化.
此时TM需要后l调用RM的xa_forget(), 让RMd释放该事务相关的资源.


目前JSRB(Java Service Request Broker)已经部分实现上述TM的功? 目l箋q展?..: http://jsrb.sourceforge.net

参考资料:
Distributed Transaction Processing_ The XA Specification

IBM WebSphere 开发者技术期? 在中间g环境中配|和使用 XA
http://www.ibm.com/developerworks/cn/websphere/techjournal/0704_sood/0704_sood.html

XA接口的一阶段提交与两阶段提交有何区别Q?
http://www-1.ibm.com/support/docview.wss?uid=csc148256d65004dc82448256d65004276f0



W笨 2007-12-06 14:07 发表评论
]]>
վ֩ģ壺 | | | | ƽң| | | ˳| | | | Ʊ| ̨| ޶| Ž| | | Ӷ| | | | ³ɽ| Ȫ| | ͨ| | | ƽ| | | | | ƺ| ֣| | | | ³| | | Զ|