摘要:微服务的复杂度框架知识服务于服务通信服务与服务之间相互依赖。服务的部署可选用。指服务的可用性。微服务系统通常是一个系统,即同时满足了可用性和分区容错。两阶段提交,将事务分成两部分能够大大提高分布式事务成功的概率。
主要体现在如下方面。
微服务的复杂度(框架知识、服务于服务通信、服务与服务之间相互依赖)。
分布式事务(重点)。
服务的划分(业务场景划分边界,最好无耦合,都能多带带运行和替换)。
服务的部署(可选用Docker、DevOps)。
多带带说下分布式事务,其余就不多做解释
1.3.1 分布式事物微服务架构所设计的系统是分布式系统。分布式系统有一个著名的 CAP 理论,即同时满足“一致性”“可用性”和“分区容错”是一件不可能的事。
Consistency:指数据的强一致性。如果写入某个数据成功,之后读取,读到的都是新写入的数据:如果写入失败,之后读取的都不是写入失败的数据。
Availability:指服务的可用性。
Partition-tolerance:指分区容错。
在分布式系统中,P 是基本要求,而单体服务是 CA 系统。 微服务系统通常是一个 AP系统,即同时满足了可用性和分区容错。这就有了一个难题:在分布式系统中如何保证数据的一致性?这就是大 家经常讨论的分布式事务。
在微服务系统中,每个服务都是独立的进程单元, 每个服务都有自己的数据库。 通常情况下,只有关系型数据库在特定的数据引擎下才支持事务,而大多数非关 系型数据库是不支持事务的,例如 MongDB 是不支持事 务的,而 Redis是支持事务的。 在微服务架构中,分布 式事务一直都是一个难以解决的问题,业界给出的解决 办法通常是两阶段提交。
网上购物在日常生活中是一个非常普通的场最,假设我在淘宝上购买了一部手机,需要从我的账户中扣除 1000 元钱,同时手机的库存数量需要减 1。当然需要在卖方的账户中加 1000 元钱,为了使案例简单化,暂时不用考虑。
如果这是一个单体应用,并且使用支持事务的 MySQL 数据库 ClnnoDB 数据库引擎才支 持事务),我们可能这样写代码:
@Transactional public void update () throws RuntimeException( updateAccountTable (); 11更新账户表 updateGoodsTable (); 11更新商品表 }
如果是微服务架构,账户是一个服务,而商品是一个服务,这时不能用数据库自带的事务,因为这两个数据表不在一个数据库中。因此常常用到两阶段提交,两阶段提交的过程
第一阶段, service-account 发起一个分布式事务,交给事务协调器 TC 处理,事务协调器 TC 向所有参与的事务的节点发送处理事务操作的准备操作。 所有的参与节点执行准备操作, 将 Undo 和 Redo 信息写进日志,并向事务管理器返回准备操作是否成功。
第二阶段,事务管理器收集所有节点的准备操作是否成功,如果都成功,则通知所有的节 点执行提交操作;如果有一个失败,则执行回滚操作。
两阶段提交,将事务分成两部分能够大大提高分布式事务成功的概率。如果在第一阶段都 成功了,而执行第二阶段的某一个节点失败,仍然导致数据的不准确,这时一般需要人工去处 理,这就是当初在第一步记录日志的原因。另外,如果分布式事务涉及的节点很多,某一个节 点的网络出现异常会导致整个事务处于阻塞状态,大大降低数据库的性能。所以一般情况下, 尽量少用分布式事务。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69710.html
摘要:单体架构简介经典的层模型,即表示层业务逻辑层和数据访问层。口数据访问层用于操作数据库,用户在表示层会产生大量的数据,通过数据访问层对数据库进行读写操作。 1.1.1 单体架构简介 经典的 3 层模型,即表示层、业务逻辑层和数据访问层。 口 表示层: 用于直接和用户交互,也称为交互层,通常是网页、 UI 等。 口 业务逻辑层:即业务逻辑处理层,例如用户输入的信息要经过业务逻辑层的处理...
摘要:微服务的设计原则软件设计每一个版本都在变化,所以软件设计应该是渐进式发展。在微服务设计时,一定要考虑清楚这三个难题,从而选择合适的框架。目前比较流行的微服务框架有社区的公司的等。微服务应该具备的功能。 微服务的设计原则 软件设计每一个版本都在变化,所以软件设计应该是渐进式发展。 软件从一开始就不应该被设计成微服务架构,微服务架构固然有优势,但是它需要更多的资源,包括服务器资源、技术人员...
摘要:负载均衡组件是一个负载均衡组件,它通常和配合使用。和配合,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实例中。和配合,在消费服务时能够做到负载均衡。在默认的情况下,和相结合,能够做到负载均衡智能路由。 2.2.1 简介 Spring Cloud 是基于 Spring Boot 的。 Spring Boot 是由 Pivotal 团队提供的全新 Web 框架, 它主要的特点...
摘要:口服务的负载均衡。服务的注册与发现接口管理服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息如服务名地址等告知服务注册中心。服务注册中心会提供服务的健康检查方案,检查被注册的服务是否可用。服务降级的功能。 微服务具有以下的特点。 口 按照业务来划分服务,单个服务代码量小,业务单一,易于维护。 口 每个微服务都有自己独立的基础组件,例如数据库、 缓存等,且运行在独立...
摘要:熔断机制为了防止雪崩效应事件的发生,分布式系统采用了熔断机制。为了解决这一难题,微服务架构引入了熔断机制。由于微服务系统是分布式系统,服务与服务之间没有任何的祸合。 1.2.1 什么是微服务 按业务划分为一个独立运行的程序,即服务单元。 服务之间通过 HTTP 协议相互通信。 自动化部署。 可以用不同的编程语言。 可以用不同的存储技术。 服务集中化管理。 微服务是一个分布式系统。 ...
阅读 2331·2021-11-24 10:27
阅读 3576·2019-08-30 15:55
阅读 3340·2019-08-30 15:53
阅读 2341·2019-08-29 17:27
阅读 1427·2019-08-26 13:47
阅读 3547·2019-08-26 10:28
阅读 912·2019-08-23 15:59
阅读 2849·2019-08-23 15:19