⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2372.txt

📁 很多RFC的中文文档
💻 TXT
📖 第 1 页 / 共 3 页
字号:
行代理处),但是别的结构也是可能的(如由一个非参与处理的第三方节点来扮演处理协调
者角色。]

8.  TIP处理的恢复

直到处理达到已准备状态,处理中的任何失败的结果将被废弃。一旦处理已经达到已准备状
态,假设此时一个错误发生,那么处理恢复必须被执行。对于上下两级TM来说,恢复行为
是不同的,其细节取决于处理(已提交或已废弃)的结果以及失败发生的确切位置。例如在
旅行代理处的应用,如果其到旅馆服务器的连接在旅馆服务器收到COMMIT指令之前
失败,那么(一旦连接被恢复):

   1) 上一级(旅行代理处)TM发送一个RECONNECT指令(传递下一级处理校验符(如果      
必须的话可以从处理中重新获得))。

   2) 下一级(旅馆)TM响应RECONNECTED(因为它从未收到COMMIT指令,仍然使处理为      
已准备态(假如在下一级TM响应COMMITTED之后失败发生,那么下一级的TM将已经忽略此
处理,并且对RECONNECT指令响应为NOTRECONNECTED))。

   3) 上一级TM发送一个COMMIT指令,下一级TM提交此处理并响应为COMMITTED。处理
现在已经被解析。

   4) 如果下一级TM在收到一个RECONNECT指令之前恢复和上一级TM的连接,那么它可能      
发送一个QUERY指令。这样的话,上一级TM将响应QUERIEDEXISTS,且下一级TM将等待上
一级发送RECONNECT指令。如果此处理已被废弃的话,那么上一级TM可能响应
QUERIEDNOTFOUND,这样,下一级TM将废弃此处理(注意上一级TM没有被迫为一个已废弃
的处理发送一个RECONNECT指令(也就是说,上一级TM能在发出ABORT指令后和在收到一
个ABORTED响应之前就废弃这个处理))。

如果客户应用(调用“提交”的应用)处在失败的环境中,将可能不会收到显示处理最
终结果的响应(即使这个处理本身已经被成功完成了)。这是一个普遍问题,并不是TIP
所特有的。在这样的环境中,直到查明处理的最终结果,应用才会终止(一个TIP TM可
以通过提供一些特殊机制的实现来使其更便利,如把结果写入一个用户日志)。
  
9.  TIP处理和应用信息连续

一个联系存在于TIP指令和应用信息之间:直到确定所有的参与者已经适当注册并且已
经完成此处理之前的工作之后,一个TIP处理才能被提交。因为TIP的双管道本性,这个
操作不是必要地要被TIP系统本身所强化(尽管在某些实现中是可能的)。所以使操作
正常是这个应用所担负的责任。通常来说,一个应用不能:

   1) 当它还有任何和处理联结在一起的请求仍然待处理时,调用它本地TM的“commit”
      函数。

   2) 对从一参与应用来的一个事务处理请求产生确定响应。这个应用和处理一起预先登
      记了它的本地TM。

10. TIP协议和本地操作

为了确保处理原子数能被恰当地保证,一个系统实现TIP就必须在协议交换里的某一点执
行一些别的本地操作。这些操作适合于创建和删除“日志记录”处理(失败中幸存的必要
信息,可以确保处理恢复的正确运行)。下列关于TIP协议和日志记载事件之间联系的信
息只是起参考作用,并非是定论(见[2]以获得更多主题相关讨论)。

   1) 在发送一个PREPARED响应之前,系统应该为处理创建一个准备好的恢复记录。

   2) 如果已经创建了一个准备好的恢复记录,则这个记录不应该被删除,除非:
      a.收到一个ABORT信息;或者
      b.收到一个COMMIT信息;或者
      c.收到一个QUERIEDNOTFOUND响应。

   3) 如果一个准备好的恢复记录存在的话,系统不应该发送一个COMMITTED或               
NOTRECONNECTED信息。

   4) 在为处理创建一个提交恢复记录之前,系统应该已经收到一个PREPARED响应。

   5) 处在已准备状态的系统在发送一个COMMIT之前,应该已经为处理创建了一个提交恢
      复记录。

   6) 如果已经创建了一个提交恢复记录,则这个记录不应该被删除,除非:
      a.收到一个COMMITTED信息;或者
      b.收到一个NOTRECONNECTED信息。

11. 安全考虑

这种被应用用来通信和执行分布式工作的方法超出了TIP协议的范围。这种在一个特定系
统上用做客户的鉴定和授权以获取节目和信息的机制,是应用通信协议和应用运行基层构
造的一部分。使用TIP协议不会影响这些考虑。

因为系统要求保护自己免遭未经授权的TIP指令或者一个可信任的参与TIP TM的模仿者的
干扰,所以安全是和TIP协议自身相关的。或许最糟糕的后果就是可能的无法探测的矛盾数
据导致妨碍了TIP协议的义务(例如,在一个TIP连接的ABORT指令位置注入了一个COMMIT
指令)。TIP采用传输层安全协议(TLS)[6]来限制仅仅被信任的参与者能够进入(即控制
从这些远处端点来的TIP处理将被接受,并且验证这些端点是否真实可信),并把TIP指令
译成密码。TLS的使用(或者不使用)是这些TIP TM参与者之间协定的。见[1]以得到更多
TIP使用TLS的细节。

TIP TM实现也可以提供本地化方法以得到间隔时间以及废弃那些没有在某些特定时间内完
成的处理(因此可以阻止由于有害内容引起的资源不可利用)。处理间隔时间也能作为一
种解决僵局的方法。

12. TIP要求

大多数的这些要求起源于最初把处理发展成一个无所不在的系统服务目的,能使所有的级
别的应用能使用它(正如TCP被假定为能到处使用)。通常这需要加入尽可能少的一些关于
TIP使用的限制(为了能使用处理,应用不应该被要求运行在某个“特殊”环境中),并且
保持协议简单高效。这样能让TIP在很多系统(运行起来很廉价)上得到广泛的实现(运作
起来很廉价)。

1) 应用通信协议独立

为了允许TIP能使用在和任何应用协议的联结中,TIP协议必须独立定义于用作转录应用数
据的通信协议之外。TIP协议必须可以使应用能使用任意的通信协议开始,结束,以及传播
TIP处理。

这意味着TIP协议施用了一个2-管道操作模型。这个模型要求分隔应用通信和处理协调为
两个离散的通信频道(管道)。这个分隔使处理协调协议(TIP)可以和任何应用通信协议
(如HTTP, ODBC, 无格式的TCP/UDP,等等)一起使用。

2) 支持处理语义

TIP协议必须提供事实上标准的、假定废弃的2-pc协议功能来保证甚至在失败事件中的处
理原子数。TIP应该就象提供提交和恢复函数一样来提供一种建造处理树的方法。

3) 应用处理传播和互用

为了能够推动协议的独立性,应用的互用性,以及提供一种传播TIP处理上下文的方法,
一种TIP处理上下文信息的标准表达方式是需要的(以一个URL的形式)。这个信息必须
包括TIP TM参与者的监听端点地址以及处理校验符信息。

4) 易于实现

TIP协议必须能够简单地实现。它应该只支持那些具有能提供必需的一个有用的,可执行
的2-pc协议特征的服务。此协议不应该以额外的优化来增加复杂性。

5) 适用于所有级别的应用

TIP协议应该是足够完整和强壮的,这不仅仅是因为internet网上的电子商务的需要,还
由于企业内部网和传统的跨越异种处理管理器环境的TP应用的需要。这个协议应该是可执
行的和有足够等级范围的以符合能力从低到高的应用需求。

   a. TIP协议应该支持单客户端处理参与者的概念(用做在低端平台上超轻量级的实现)。

   b. 既然一些客户端是不可靠的,那么TIP必须提供对授权处理协调的支持(一个更可靠
     (可信任的)的节点)。

   c. TIP协议必须在每个TCP连接上将1到n(>1)个并发处理分级。

   d. TIP指令应该能被连接(可管道连接的)。

   e. TIP应该和X/Open XA接口相适应。

6) 安全

TIP协议必须和现有的安全机制相适应,隐含加密,防火墙以及鉴别机制(如TLS可以用来
鉴别一个TIP指令的发送人,还可以用来给TIP指令加密)。协议定义没有任何东西可以阻
止TIP工作在任何安全环境中。


7) TIP协议传输独立

对于某些应用来说,允许TIP协议穿越不同的传输协议是有益的。益处在于当在为应用数
据使用不同的传输协议时,TIP 2-pc协议能采用同样的传输。所以TIP不必排除别的传输
协议的使用。

8) 恢复

恢复语义需要充分定义以避免任何类型通信传输失败事件中的模糊结果。

9) 可扩展性

TIP协议应该能够被扩展,同时保持和先前版本的兼容。

参考

   [1]  Lyon, J., Evans, K., and J. Klein, "The Transaction Internet
        Protocol Version 3.0", RFC 2371, July 1998.

   [2]  Transaction Processing: Concepts and Techniques.  Morgan
        Kaufmann Publishers. (ISBN 1-55860-190-2).  J. Gray, A. Reuter.

   [3]  X/Open CAE Specification, April 1995, Distributed Transaction
        Processing: The TX Specification. (ISBN 1-85912-094-6).

   [4]  X/Open Guide, November 1993, Distributed Transaction Processing:
        Reference Model Version 2. (ISBN 1-85912-019-9).

   [5]  X/Open CAE Specification, December 1991, Distributed Transaction
        Processing: The XA Specification.  (ISBN 1-872630-24-3).

   [6]  Dierks, T., et. al., "The TLS Protocol Version 1.0", Work in
        Progress.

作者的地址

   Keith Evans
   Tandem Computers Inc, LOC 252-30
   5425 Stevens Creek Blvd
   Santa Clara, CA 95051-7200, USA

   Phone: +1 (408) 285 5314
   Fax:   +1 (408) 285 5245
   EMail: Keith.Evans@Tandem.Com


   Johannes Klein
   Tandem Computers Inc.
   10555 Ridgeview Court
   Cupertino, CA 95014-0789, USA

   Phone: +1 (408) 285 0453
   Fax:   +1 (408) 285 9818
   EMail: Johannes.Klein@Tandem.Com


   Jim Lyon
   Microsoft Corporation
   One Microsoft Way
   Redmond, WA  98052-6399, USA

   Phone: +1 (206) 936 0867
   Fax:   +1 (206) 936 7329
   EMail: JimLyon@Microsoft.Com

评论

请将有关本文档的评论发到作者的信箱<JimLyon@Microsoft.Com>, 
<Keith.Evans@Tandem.Com>,<Johannes.Klein@Tandem.Com>,或者发到TIP邮件组
<Tip@Tandem.Com>。你可以通过发mail给<Listserv@Lists.Tandem.Com>来订阅TIP
邮件组,此mail内容中的某一行要注明 "subscribe tip <full name>"。

附录A.  一个TIP处理管理器API的实例

注意这个API是为了报告情况而被单独加入本文档,不是正式TIP的规范的一部分(用TIP
一致实现来定义可选择的API是不受限制的)。

1) tip_open() - 建立一个到一个TIP TM的连接

   概要
   int tip_open ([out] tip_handle_t *ptiptm)

   参数
   ptiptm [out]
   到这个TIP TM句柄的指针

   形容
   tip_open()建立了一个到一个TIP TM的连接。这个调用返回了一个鉴别此TIP TM的句
   柄。这个函数必须在任何工作被执行于一个TIP处理上之前被调用。

   返回值
   [TIPOK]
   连接已被成功建立。
   [TIPNOTCONNECTED]
   使用者已经被TIP TM断开。
   [TIPNOTCONFIGURED]
   TIP TM还没有被配置。
   [TIPTRANSIENT]
   太多的开始者,重试开始。
   [TIPERROR]
   一个不期望的错误发生。

2) tip_close() - 断开一个到一个TIP TM的连接

   概要
   int tip_close([in] tip_handle_t handle)

   参数
   handle [in]
   此TIP TM的句柄

   形容
   tip_close()断开一个到一个TIP TM的连接。所有和那个连接联结的待处理要求都被
   取消。

   返回值
   [TIPOK]

   连接已被成功断开。
   [TIPINVALIDPARM]
   无效的连接句柄指定。
   [TIPERROR]
   一个不期望的错误发生。

3) tip_push() - 输出一个本地处理到一个远端节点并返回一个TIP处理校验符给已联合
                的远处处理。

   概要
   int tip_push ([in] tip_handle_t TM,
                 [in] char *tm_url,
                 [in] void *plocal_xid,
                 [out] char *pxid_url,
                 [in] unsigned int url_length)

   参数
   TM [in]
   此TIP TM的句柄
   tm_url [in]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -