摘要: 前言 我们从设计模式的6中原则和3种分类从整体认识下业界关注最多的23种设计模式。 设计模式是什么? 设计模式(Design,DP)是软件界的先辈四人帮(The Gang of Four:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)总结 阅读全文
posted @ 2023-04-05 20:28 我有八千部下 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 前言 本文分析多种分布式事务的解决方案2PC、3PC TCC、可靠消息服务、最大努力通知,事务消息等。讲述其执行流程、优缺点、适用场景以及引文具体实战例子。 名词解释 TM(transaction manager) 事务协调者 RM(resource manager) 资源管理者/事务参与者/业务服 阅读全文
posted @ 2023-04-05 20:25 我有八千部下 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 前言 本文讲述 ZooKeeper 集群架构特点、数据结构、事务ID、选主和ZAB协议具体执行过程。 服务保证 ZooKeeper 非常快速且非常简单。由于它的目标是构建更复杂的服务(如同步)的基础,因此它提供了一组保证: 【顺序一致性】来自客户端的更新将按发送顺序执行,因为只有唯一的主节点负责写请 阅读全文
posted @ 2023-04-05 20:15 我有八千部下 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 前言 TX-LCN 是一款国产分布式事务协调框架,框架其本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。 本文讲解如何使用 Springboot 作为基础,来配置使用 TX-LCN。 需要 MySQL 和 Redis。 名词解释 TM (Tx-Manager / Transactio 阅读全文
posted @ 2023-04-05 20:12 我有八千部下 阅读(210) 评论(0) 推荐(1) 编辑
摘要: 前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata 配置非常灵活,支持多种注册中心、配置来源(配置中心)和持久化方式。本文选择 eurek 阅读全文
posted @ 2023-04-05 20:10 我有八千部下 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 前言 参考这一篇 在Linux部署Apollo配置中心 可以搭建出一套Apollo配置中心服务,我们在这里重点看看Springboot如何整合Apollo,将配置交给配置中心管理,并在修改后及时生效到服务上。 我们模拟工作中的开发(development,DEV)和生产(production,PRO 阅读全文
posted @ 2023-04-05 20:02 我有八千部下 阅读(1317) 评论(0) 推荐(0) 编辑
摘要: 前言 ElasticJob-Lite是集群环境下应用(比如SpringCloud微服务)任务调度的解决方案。 集群部署的时候,一个定时任务会有多个进程执行,如果不进行任何处理,会导致任务触发的时候每个进程重复执行一次。 解决办法有两种:一种是加锁,保证同时只有一个进程执行任务,比如用分布式锁,或者用 阅读全文
posted @ 2023-04-05 19:54 我有八千部下 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 前言 这篇是ShardingSphere-JDBC+Springboot+MybatisPlus+Druid分库分表的简单例子,我们用一个订单表为例,通过简单配置实现数据分片到多个数据库的多个表中。 主要配置和代码已经在文中给出,完整例子可以参考 GitHub - fruitbasket-litch 阅读全文
posted @ 2023-04-05 19:51 我有八千部下 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 前言 公司游戏项目服务端运行过程中,依赖 Redis 保存游戏过程数据。与客户端一次交互会对 Redis 进行大量的操作,在内网开发环境下测试,一次操作开销在 1-2 ms,建立连接和网络开销累积在一起大大降低了响应速度,这种场景下可以使用 Redis Pipeline 进行优化。 Redis Pi 阅读全文
posted @ 2023-04-05 19:47 我有八千部下 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 前言 本问阐述 Redis 主从同步、哨兵监控和故障迁移的过程,并通过各个服务日志加以验证。 准备工作 主从和哨兵安装见 安装过程。 为了方便通过日志观察同步过程,你可以在每个 Redis 和 Sentinel 配置文件中修改下面参数,实现前台运行并将日志输出到控制台。 # 这两个配置是为了实现前台 阅读全文
posted @ 2023-04-05 19:45 我有八千部下 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 前言 数据分片是指将数据按某种方式存储到不同的服务上来解决单机服务容量不足的问题。 本文围绕 Redis 讲述逻辑拆分、随机分配、哈希取模、一致性哈希等分片算法原理和使用场景。并在此基础上对比客户端分片、代理(Proxy) 和 Redis Cluster 各自的优缺点。 客户端分片 三种普通方式 逻 阅读全文
posted @ 2023-04-05 19:40 我有八千部下 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 前言 本文讲述 Redis 两种持久化方式 RDB 和 AOF 优缺点以及原理。 为何需要持久化? Redis 是基于内存操作的,进程终止、服务器宕机后内存数据会丢失,但是在很多使用场景中我们希望数据不丢失,服务重启之后数据还能恢复到停机前的状态,特别是使用 Redis 做数据库的情况。 Redis 阅读全文
posted @ 2023-04-05 19:37 我有八千部下 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 前言 本文讲述布隆过滤器 (RedisBloom) 的基本原理和安装使用。 RedisBloom是什么? RedisBloom 是 Redis 中过滤器模块,可以用来判断值是否存在,常用来解决缓存穿透问题。 查询数据时,先用 RedisBloom 判断数据是否存在,不存在则直接返回,存在则从缓存 / 阅读全文
posted @ 2023-04-05 19:35 我有八千部下 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 前言 本篇主要是对MySQL锁的实现的分析和总结。中间很长一段是各种查询情况下的加锁分析,并搭配了完整的脚本和图例,有兴趣可以按文章内步骤验证,其实总结下来内容并不太多,耐心看完一起消除MySQL锁原理的迷雾。 锁分类 下面对InnoDB的锁从不同的角度进行分类,每种锁模式(lock mode)都有 阅读全文
posted @ 2023-04-05 19:32 我有八千部下 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 前言 Kafka中ACKS三种策略,LSO、LEO、LW、HW、AR、ISR、OSR解析。 名称解释 ACKS(Acknowledgments)确认、回执 LW(Low watermark)低水位、LSO(Log start offset)起始偏移量 HW(High watermark)高水位 LE 阅读全文
posted @ 2023-04-05 19:25 我有八千部下 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 前言 从整体浅析Kafka集群结构、和Zookeeper之间的关系、长轮询机制、消息生产和消费以及顺序消费等。 名词解释 Broker(Kafka服务) Controller(唯一充当控制器的Kafka服务) Topic(消息主题,一个主题包含多个) Partition(消息分区),Replica( 阅读全文
posted @ 2023-04-05 19:23 我有八千部下 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 前言 以kafka_2.13-2.8.0为例,分析Kafka消息在磁盘上的存储结构、配置以及如何通过索引找到具体的消息数据。 分区目录 一个分区(Partition)有1到多个副本(Replica),是主从结构,主(Leader)负责处理读写请求,从(Follower)只负责同步数据并在主宕机的时候 阅读全文
posted @ 2023-04-05 19:20 我有八千部下 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 前言 这篇内容是保证 Kafka 消息可靠性的相关配置,内容主要来自《Kafka权威指南》这本书,再根据 Apache - Kafka文档2.8 总结出来的。文中每个配置项是个超链接,可以定位到配置的官方文档。代码例子可以访问 GitHub - fruitbasket-litchi-kafka Br 阅读全文
posted @ 2023-04-05 19:16 我有八千部下 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 警告Cgroup Driver不一致 节点加入集群会警告 docker 和 kubelet 的 Cgroup Driver 不一致,但是暂未发现影响,如图: 解决办法:修改 docker 的 Cgroup Driver 为 systemd vim /etc/docker/daemon.json 加下 阅读全文
posted @ 2023-04-05 19:13 我有八千部下 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 前言 GC(Garbage collection)频繁和堆内存溢出原因简单来说是对象占用堆空间难以回收,新对象无法分配触发GC或者直接导致内存溢出,最终进程结束。 排查思路是先查看进程各种类型对象占用空间大小和比例,锁定占用空间较多的对象后再分析相关的程序是否有使用不当的地方。下文的侧重点是通过多种 阅读全文
posted @ 2023-04-05 19:05 我有八千部下 阅读(160) 评论(0) 推荐(0) 编辑