分布式事务概念及解决方案

微服务分布式架构中的分布式事务是一个技术难点,为了保证数据的一致的,必须要解决分布式事务问题。

分布式事务的两个基本理论是 CAP 和 BASE,为实现分布式解决方案提供了理论方向。实现分布式事务的解决方案主要有两种类型,一种是基于强一致性协议实现,另一种是柔性事务实现数据最终一致性。

阅读更多

数据结构与算法(四):二叉堆 和 优先队列

本篇是上篇 数据结构与算法(三):树 和 二叉树 的延续。

二叉堆 是一种特殊的堆,本质上是一种完全二叉树。二叉堆有两个类型:最大堆最小堆

优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。

阅读更多

数据结构与算法(三):树 和 二叉树

有些数据的逻辑关系并不是简单的线性关系,常常存在一对多,甚至多对多的情况。例如,一个家族的 “家谱”,企业的职级关系等、书本的目录章节等都可以用树型数据结构来描述。

是典型的非线性数据结构。本篇描述对 二叉树 的理解。

阅读更多

理解 Jdk Lock 的使用

JDK 1.5 新增了 ReentrantLock 类,可以实现线程之间的同步互斥,相比 synchronized ,在扩展功能上更加强大,在使用上更加灵活。

ReentrantLock 还具有嗅探锁定、多路分支通知等功能。

阅读更多

线程间通信-wait/notify/join/ThreadLocal/线程状态

  在将某一任务拆份成多个子任务,使用多线程执行这些子任,就涉及到线程通信,才能使用多子任变成一个整体。

  线程间通信后,系统之间的交互性会更强大,在提高 CPU 利用率时还有助于对各线程任务的把控和监督。

阅读更多

缓存应用之本地缓存-Guava Cache

缓存是高并发系统的三把利器之一(另两把是 限流、降级),可以说是必不可少的。缓存的主要目的是为了解决磁盘与内存速度差异问题,解决高并发下频繁访问数据库导致磁盘 I/O 压力和 CPU 负载过高问题。

这里所说的缓存是指业务系统的缓存,是将数据缓存在内存中,当下次有相同请求时就直接从内存中取数据返回。

缓存可以在服务端本地,也可以是远程独立的缓存系统,如 Redis,通常本地缓存和远程缓存配合使用。

本篇文章在 Spring 缓存体系上进行扩展和补充,更多可参考 Spring Boot 2实践系列(十):Spring 缓存体系Spring Boot 2实践系列(十一):Ehcache集成详解和使用Spring Boot 2实践系列(十二):Spring Data Redis 集成详解和使用官方:Spring Data Redis

阅读更多

微服务监控之Spring Boot Admin Web管理

在 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 官方文档

阅读更多