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

]]>
- Java Service Request Broker?/title>http://www.aygfsteel.com/zhugf000/archive/2007/12/12/167098.htmlW笨W笨Tue, 11 Dec 2007 16:15:00 GMThttp://www.aygfsteel.com/zhugf000/archive/2007/12/12/167098.htmlhttp://www.aygfsteel.com/zhugf000/comments/167098.htmlhttp://www.aygfsteel.com/zhugf000/archive/2007/12/12/167098.html#Feedback0http://www.aygfsteel.com/zhugf000/comments/commentRss/167098.htmlhttp://www.aygfsteel.com/zhugf000/services/trackbacks/167098.htmlJava Service Request Broker ?/h1>
Java Service Request Broker(JSRB)是一?Java/C/C++ 的开源项?br />
Project URL http://jsrb.sourceforge.net
目目标按照优先序依次?
1 高效,透明的通讯框架,屏蔽本地/q程|络架构的复杂?高效来源于基于poll/epoll的NIO通讯框架,透明来源于多个JSRB Server之间的动态联机?.
2 高效?E_的服务请求处理机?高效来源于服务端为C语言实现,E_来源于对服务q程的不间断监控和自动重启动机制)
3 分布式事务处理能?JSRB 作ؓ分布式事务管理器,初步实现了DTP XA协议,q在开发过E中).
4 客户端语a中立(语言无关通讯协议,客户端提供Java或C API?.
JSRB 大致架构如下:

JSRB SERVICE Ҏ?讉K方式
1 SERVICE 无状?通过二进制数据传递输入输出数?br />
2 q行?可以有多个SERVICE实现q程, JSRB会^衡调度这些进E?
SERVICE支持同步/异步两种讉K方式:
SERVICE之间也支持forward和嵌套调用两U方?br />
同步讉KSERVICE:
Response Data = JsrbConection.syncCall("SERVICE NAME",Request Data);
当客L从syncCall中返回时,它已l获得SERVICE的返回数?br />

异步讉KSERVICE
long key = JsrbConnection.asyncCall("SERVICE",Request Data);
...
Response Data = JsrbConnection.fetchReply(key);
客户端可以提交服务请求后,q一D|间再d试获取数? 便衣客户端同时提交多个服务请?增加q发?

SERVICE FORWARD
客户端访问SVC1, SVC1完成后将该请求forward到SVC2, SVC2完成后直接返回客L数据.

SERVICE的嵌套调?br />
SVC1 调用SVC2 q获得SVC2的返回数?

一般问?
1 Z么会选择用Java 实现Service Request Broker
{? Java跟C语言相比, 代码执行速度其实q不? 我们一般感觉J2EE 应用?主要是由于IO(特别是socket和JDBC)慢造成?
Java 在多U程~程, 开发的方便性方面比C/C++?
JSRB在实现过E中,自行定义和实C一套NIO框架, 增加了对于Linux epoll(Edge Triggered Mode)的支? 同时Z实现与Cq程的高效通讯,自行实现了Sysv IPC和创建子q程斚w的Native代码.
2 Z么要用C实现业务代码,作ؓService的实现语a.
从企业端的应用来? 企业应用必定要跟数据库打交道, 实际上C语言讉K数据库要比Java讉K数据库快1C个数量. 甚至可以? J2EE应用响应的大部分的gq时间都耗费在JDBC?
从大型项目的实施l验来看, 这部分代码攑֜Cq程? 管要多付出通讯斚w的代?Mq是要比UJava的方案快得多.
3 Z么分布式事务的优先最?br />
从大型项目的实施l验来看, 分布式事务由于运行代仯? 业务pȝ中用到的概览很小(直接用数据库的事?. 对于CICS/TUXEDO应用而言,首先q是CICS/TUXEDO 作ؓ一个高?E_的通讯和服务请求处理排队框架来?
如果真要有分布式的交易的需?一般采用流水对?冲正处理方式解决.
4 Z么选择无状态方式实现SERVICE
无状态是提高q发效率, 实现透明故障q移的最x? Server端资源有?为ƈ发的成千上万个用户同时维护状态是非常困难?q样也会造成集群实现的困?
׃Client端是有状态的,所以这在实C其实问题不大.
今后得空q会慢慢写更多文介lJSRB的一些组件的实现方式和特?

]]> - 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

]]>
վ֩ģ壺
|
|
|
|
ƽң|
踽|
|
˳|
|
|
|
Ʊ|
̨|
|
Ž|
|
|
Ӷ|
|
|
|
³ɽ|
Ȫ|
|
ͨ|
|
|
ƽ|
|
|
|
|
ƺ|
֣|
|
|
|
³|
|
|
Զ|