分布式事务概念及解决方案
微服务分布式架构中的分布式事务是一个技术难点,为了保证数据的一致的,必须要解决分布式事务问题。
分布式事务的两个基本理论是 CAP 和 BASE,为实现分布式解决方案提供了理论方向。实现分布式事务的解决方案主要有两种类型,一种是基于强一致性协议实现,另一种是柔性事务实现数据最终一致性。
微服务分布式架构中的分布式事务是一个技术难点,为了保证数据的一致的,必须要解决分布式事务问题。
分布式事务的两个基本理论是 CAP 和 BASE,为实现分布式解决方案提供了理论方向。实现分布式事务的解决方案主要有两种类型,一种是基于强一致性协议实现,另一种是柔性事务实现数据最终一致性。
本篇是上篇 数据结构与算法(三):树 和 二叉树 的延续。
二叉堆 是一种特殊的堆,本质上是一种完全二叉树。二叉堆有两个类型:最大堆 和 最小堆。
优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。
有些数据的逻辑关系并不是简单的线性关系,常常存在一对多,甚至多对多的情况。例如,一个家族的 “家谱”,企业的职级关系等、书本的目录章节等都可以用树型数据结构来描述。
树 和 图 是典型的非线性数据结构。本篇描述对 树 和 二叉树 的理解。
栈 和 队列 也是常见的数据结构。Java 里面的方法栈,消息队列 是 栈 和 队列 数据结构的实际应用。
数组、链表、栈和队列、散列表是基础数据结构,几乎所有的高级开发语言都会涉及到这些数据结构,一些更复杂的数据结构也是基于基础数据结构的扩展。
基础数据结构是数据存储的基础理论,有必要彻底理解它。
JDK 1.5 新增了 ReentrantLock 类,可以实现线程之间的同步互斥,相比 synchronized ,在扩展功能上更加强大,在使用上更加灵活。
ReentrantLock 还具有嗅探锁定、多路分支通知等功能。
在将某一任务拆份成多个子任务,使用多线程执行这些子任,就涉及到线程通信,才能使用多子任变成一个整体。
线程间通信后,系统之间的交互性会更强大,在提高 CPU 利用率时还有助于对各线程任务的把控和监督。
缓存已是系统架构中非常重要的组件,特别是在高并发的系统中几乎是不可或缺的。
由于缓存的特性和功能,在某些场景上会存在一些问题,主要是 缓存穿透、缓存雪崩 和 缓存击穿。
缓存是高并发系统的三把利器之一(另两把是 限流、降级),可以说是必不可少的。缓存的主要目的是为了解决磁盘与内存速度差异问题,解决高并发下频繁访问数据库导致磁盘 I/O 压力和 CPU 负载过高问题。
这里所说的缓存是指业务系统的缓存,是将数据缓存在内存中,当下次有相同请求时就直接从内存中取数据返回。
缓存可以在服务端本地,也可以是远程独立的缓存系统,如 Redis,通常本地缓存和远程缓存配合使用。
本篇文章在 Spring 缓存体系上进行扩展和补充,更多可参考 Spring Boot 2实践系列(十):Spring 缓存体系、Spring Boot 2实践系列(十一):Ehcache集成详解和使用、Spring Boot 2实践系列(十二):Spring Data Redis 集成详解和使用 ,官方:Spring Data Redis 。
在 Spring Cloud 微服务架构中,使用 Spring Boot Admin 对微服务进行监控和管理。
关于 Spring Boot Admin 的基本应用,可参考 Spring Boot 2实践系列(十六):Spring Boot Admin - Actuator 监控管理 Web 框架 ,Spring Boot Actuator 可参考 Spring Boot 2实践系列(六):应用监控模块 Actuator 详解和集成 ,Spring Boot Admin 2.14 官方文档。