「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
REST设计风格
是一种风格,不是规范或协议。 什么是REST
- 作者:Roy Thomas Fielding
- Representational State Transfer 表征状态转移
- REST实际上是HTT(Hypertext Transfer)的进一步抽象
一个具体的事例来解释REST:
如我们正在浏览器上浏览一篇文章。
-
资源:这篇文章的内容就是资源。
-
表征:这篇文章此时是以HTML格式展现的,也可以是别的形式如PDF、Md等等。表征就是信息与用户交互时的表现形式。
-
状态:当这篇这篇文章读完了之后,想要读“下一篇”文章,但这个“下一篇文章”依赖于当前读的是哪一篇文章,所以状态就是就是在特定的语境中才能产生的上下文信息。对服务端来说,如果要完成“下一篇”的请求,需要记录下“当前阅读的文章”这一状态,服务端记住用户的状态称为有状态,客户端记住用户的状态称为无状态。
-
转移:把“当前阅读的文章”转变成“下一篇文章”,称为表征状态转移。
-
同一接口
-
超文本驱动
-
自描述信息
一套理想的、完全满足REST风格应具备的六大原则
- 客户端与服务端分离
- 无状态
- 可缓存
- 分层系统
- 同一接口
- 按需代码
REST的基本思想:面向资源抽象问题。
事物
A(原子性)D(持久性)I(隔离性)是手段 C(一致性)是目的
当一个服务只有一个数据源时,内部一致性
一个服务有多个数据源时,外部一致性(很难使用AID来解决)
1.本地事务(/局部事务)
指仅操作单一事务资源的、不需要全局事务管理器进行协调的事务。
只使用单个服务使用单个数据源的情况。
2.全局事务
适用于单个服务多个数据源场景。
两段式提交
为了解决编程式事务的问题,XA提出两段式提交
- 准备阶段
- 提交阶段
缺点:
- 单点问题
协调者一旦宕机,所有参与者都会收到影响
- 性能问题
所有参与者都要经过两次远程服务调用
- 一致性问题
两段式成功的前提是:网络稳定性和宕机的恢复能力
\
为了解决两段式的缺陷,后续又发展出三段式提交(3PC),但是性能更差了。
\
3.共享事务
多个服务共用一个数据源。(注意数据源与数据库的区别)