restful初探&事务

251 阅读2分钟

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

REST设计风格

是一种风格,不是规范或协议。 什么是REST

  1. 作者:Roy Thomas Fielding
  2. Representational State Transfer 表征状态转移
  3. REST实际上是HTT(Hypertext Transfer)的进一步抽象

一个具体的事例来解释REST:

如我们正在浏览器上浏览一篇文章。

  • 资源:这篇文章的内容就是资源。

  • 表征:这篇文章此时是以HTML格式展现的,也可以是别的形式如PDF、Md等等。表征就是信息与用户交互时的表现形式。

  • 状态:当这篇这篇文章读完了之后,想要读“下一篇”文章,但这个“下一篇文章”依赖于当前读的是哪一篇文章,所以状态就是就是在特定的语境中才能产生的上下文信息。对服务端来说,如果要完成“下一篇”的请求,需要记录下“当前阅读的文章”这一状态,服务端记住用户的状态称为有状态,客户端记住用户的状态称为无状态。

  • 转移:把“当前阅读的文章”转变成“下一篇文章”,称为表征状态转移。

  • 同一接口

  • 超文本驱动

  • 自描述信息

一套理想的、完全满足REST风格应具备的六大原则

  1. 客户端与服务端分离
  2. 无状态
  3. 可缓存
  4. 分层系统
  5. 同一接口
  6. 按需代码

REST的基本思想:面向资源抽象问题。

事物

A(原子性)D(持久性)I(隔离性)是手段 C(一致性)是目的

当一个服务只有一个数据源时,内部一致性

一个服务有多个数据源时,外部一致性(很难使用AID来解决)

1.本地事务(/局部事务)

指仅操作单一事务资源的、不需要全局事务管理器进行协调的事务。

只使用单个服务使用单个数据源的情况。

2.全局事务

适用于单个服务多个数据源场景。

两段式提交

为了解决编程式事务的问题,XA提出两段式提交

  1. 准备阶段
  2. 提交阶段

缺点:

  1. 单点问题

协调者一旦宕机,所有参与者都会收到影响

  1. 性能问题

所有参与者都要经过两次远程服务调用

  1. 一致性问题

两段式成功的前提是:网络稳定性和宕机的恢复能力

\

为了解决两段式的缺陷,后续又发展出三段式提交(3PC),但是性能更差了。

\

3.共享事务

多个服务共用一个数据源。(注意数据源与数据库的区别)