分布式中间件实践之路
文章平均质量分 95
本专栏是我从事中间件研发的经验总结,来自实践,服务于实践。主要包括分布式缓存、分布式锁、分布式消息队列三大部分内容,涉及 Redis、Etcd、Kafka、RocketMQ 等众多主流开源软件的使用方案。不仅提供关键源代码供读者快速实践,而且阐明其中原理并给出踩坑案例和调优分析,致力于授读者以渔。
Jin_Kwok
QS TOP100 硕士研究生学历,CSDN博客专家,曾在阿里、微软等公司重要项目中担任技术负责人或核心研发成员。
展开
-
开篇词:从中间件开始学习分布式
课程背景谈及“分布式系统”,初学者的第一感觉多半是“高大上”和“深不可测”,犹如武林绝学——飞鸟投林、踏浪行波,行走江湖,即便没有见过,也应听过其名。盛名之下无虚士,分布式系统凭借其高吞吐、高并发、低延迟和负载均衡的特点,迎合了互联网飞速发展背后的巨大承载量需求,民间和官方都有忠实粉丝为其著书立说,然而,大多倾向于理论,对于初学者有一定难度。鉴于此,我期望通过本课程中的系列文章,用理论与实践结...原创 2020-10-28 16:06:02 · 769 阅读 · 0 评论 -
第01课:走进分布式中间件(课前必读)
关于“分布式系统”的定义,《分布式系统原理和范型》一书中是这样阐述的:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统”。本文作为《分布式中间件实践之路》的开篇,概述以kafka为代表的分布式消息队列,以Redis为代表的分布式缓存,以及以etcd为代表的分布式锁。原创 2020-10-28 16:06:03 · 1835 阅读 · 1 评论 -
第02课:主流分布式缓存方案的解读及比较
分布式缓存一般被定义为一个数据集合,它将数据分布(或分区)于任意数目的集群节点上。集群中的一个具体节点负责缓存中的一部分数据,整体对外提供统一的访问接口。分布式缓存一般基于冗余备份机制实现数据高可用,又被称为内存数据网格(IMDG,In-Memory Data Grid)。在云平台飞速发展的今天,作为提升应用性能的重要手段,分布式缓存技术在工业界得到了越来越广泛的关注和研发投入 。本文将介绍三种分...原创 2020-10-28 16:06:03 · 1500 阅读 · 0 评论 -
第03课:分布式一致性协议 Gossip 和 Redis 集群原理解析
Redis 是一个开源的、高性能的 Key-Value 数据库。基于 Redis 的分布式缓存已经有很多成功的商业应用,其中就包括阿里 ApsaraDB,阿里 Tair 中的 RDB 引擎,美团 MOS 以及腾讯云 CRS。本文我将着重介绍 Redis Cluster 原理、类 Codis 分布式方案以及分布式信息一致性协议 Gossip,以帮助大家深入理解 Redis。1. Redis 单机模...原创 2020-10-28 16:06:04 · 1582 阅读 · 1 评论 -
第04课:基于 Redis 的分布式缓存实现及加固策略
本文将从 Redis-Cluster 搭建切入,详解集群的创建原理和加固策略。之后,分析集群所存在的几种可靠性问题并给出解决方案,最后,介绍一个集群运维软件的实现方案。1. Redis-Cluster 搭建本节将介绍基于 Redis 和 Lettuce 搭建一个分布式缓存集群的方法。为了生动地呈现集群创建过程,我没有采用 Redis 集群管理工具 redis-trib,而是基于 Lettuce...原创 2020-10-28 16:06:05 · 404 阅读 · 0 评论 -
第05课:Redis 实际应用中的异常场景及其根因分析和解决方案
上一篇较为详细地介绍了基于 Redis 的分布式缓存实现方案,解决了 “怎么用” 的问题。但是,在实际应用中,异常场景时有出现,作为一名攻城狮,仅仅“会用”是不够的,还需要能够定位、解决实际应用中出现的异常问题。本文将介绍一组 Redis 实际应用中遇到的异常场景,如 Redis 进程无法拉起、故障倒换失败、Slot 指派失败等,并针对这些异常场景给出根因分析和可供参考的解决方案。1. red...原创 2020-10-28 16:06:06 · 377 阅读 · 0 评论 -
第06课:Redis-Cluster 故障倒换调优原理分析
Redis-Cluster 是 Redis 官方推出的集群方案,其分布式一致性协议基于 Gossip 算法(第03课中已经详细介绍)。当 Redis-Cluster 出现主节点故障后,集群会经历故障检测、选举、故障倒换三大步骤,在此期间 Redis-Cluster 是不能提供服务的,鉴于此,优化这三个步骤的耗时,便是保障集群可用性、提升性能的关键点之一。需要说明的是,优化耗时并没有普适性的方案,...原创 2020-10-28 16:06:06 · 294 阅读 · 0 评论 -
第07课:基于 Redis 的分布式锁实现及其踩坑案例
分布式锁的实现,目前常用的方案有以下三类:数据库乐观锁;基于分布式缓存实现的锁服务,典型代表有 Redis 和基于 Redis 的 RedLock;基于分布式一致性算法实现的锁服务,典型代表有 ZooKeeper、Chubby 和 ETCD。 基于 Redis 实现分布式锁,网上可以查到很多相关资料,我最初也借鉴了这些资料,但是,在分布式锁的实现和使用过程中意识到这些资料普遍存在问...原创 2020-10-28 16:06:07 · 296 阅读 · 0 评论 -
第08课:分布式一致性算法 Raft 和 Etcd 原理解析
“工欲善其事,必先利其器。”懂得原理方能触类旁通,立于不败之地。本文首先详细解读了著名的分布式一致性算法 Raft,在此基础上,介绍了 Etcd 的架构和典型应用场景。本文内容是学习下一篇 “基于 Etcd 的分布式锁”的基础。1. Raft 算法简介1.1 Raft 背景在分布式系统中,一致性算法至关重要。在所有一致性算法中,Paxos 最负盛名,它由莱斯利·兰伯特(Leslie Lamp...原创 2020-10-28 16:06:07 · 426 阅读 · 0 评论 -
第09课:基于 Etcd 的分布式锁实现原理及方案
Etcd 最新版本已经提供了支持分布式锁的基础接口(可见官网说明),但本文并不局限于此。本文将介绍两条实现分布式锁的技术路线:从分布式锁的原理出发,结合 Etcd 的特性,洞见分布式锁的实现细节;基于 Etcd 提供的分布式锁基础接口进行封装,实现分布式锁。两条路线差距甚远,建议读者先看路线 1,以便了解 Etcd 实现分布式锁的细节。1. 为什么选择 Etcd据官网介绍,Etcd...原创 2020-10-28 16:06:08 · 1222 阅读 · 0 评论 -
第10课:主流的分布式消息队列方案解读及比较
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。它可以实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。消息队列在电商系统、消息通讯、日志收集等应用中扮演着关键作用,以阿里为例,其研发的消息队列(RocketMQ)在历次天猫 “双十一” 活动中支撑了万亿级的数据洪峰,为大规模交易提供了有力保障。作为提升应用性能的重要手段,分布式消...原创 2020-10-28 16:06:08 · 930 阅读 · 0 评论 -
第11课:搭建基于 Kafka 和 ZooKeeper 的分布式消息队列
“纸上得来终觉浅,绝知此事要躬行”,本文将详细介绍基于 Kafka 和 ZooKeeper 的分布式消息队列的搭建方法,并给出 Producer 和 Consumer 代码供读者测试,以便读者对分布式消息队列形成一个整体的认识。在第 12 课中,我将详细介绍基于 Kafka 和 ZooKeeper 的分布式消息队列的原理。1. ZooKeeper集群搭建Kafka 将元数据信息保存在 ZooK...原创 2020-10-28 16:06:09 · 313 阅读 · 0 评论 -
第12课:深入解读基于 Kafka 和 ZooKeeper 的分布式消息队列原理
分布式消息队列是互联网领域广泛应用的中间件,在上一课中,我已经介绍了基于 Kafka、ZooKeeper 的分布式消息队列系统的搭建步骤,以及 Java 客户端的使用方法。对于商业级消息中间件来说,可靠性至关重要,那么,Kafka 是如何确保消息生产、传输、存储及消费过程中的可靠性的呢?本文将从 Kafka 的架构切入,解读 Kafka 基本原理,并对其存储机制、复制原理、同步原理、可靠性和持久...原创 2020-10-28 16:06:10 · 476 阅读 · 0 评论 -
第13课:深入浅出解读 Kafka 的可靠性机制
1. 副本机制在分布式系统中,为了提高可靠性,最常用、最有效的策略是“副本机制”,Kafka 也不例外。Kafka 为每个 Partition 维护了一个 AR(Assigned Replicas)列表,由 ISR(In-Sync Replicas,与 Leader 数据同步的 Replica)和 OSR(Outof-Sync Replicas,与 Leader 数据不同步的 Replica)...原创 2020-10-28 16:06:11 · 275 阅读 · 0 评论