自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

转载 Spring Cloud详解(一)Eureka实现机制概览

在微服务架构中最核心的部分是服务治理,服务治理最基础的组件是注册中心。Spring Cloud支持Zookeeper,Consul和Euraka,官方推荐用Eureka做为注册中心。Eureka采用纯Java实现,除了实现注册中心基本的服务注册和发现之外,极大满足注册中心的可用性,即使只有一台服务器可用,也可以保证注册中心的可用性。Eureka的设计原则是AP,即可用性和分区容错性。它保证...

2020-01-31 19:14:29 828

转载 Kafka详解(十)高水位和Leader Epoch详解

1. 高水位1.1 高水位的作用在Kafka中,高水位的作用主要有两个定义消息可见性,即用来标识分区下的哪些消息是可以被消费者消费的。 帮助Kafka完成副本同步下面这张图展示了多个与高水位相关的 Kafka 术语。假设这是某个分区 Leader 副本的高水位图。首先,请注意图中的“已提交消息”和“未提交消息”。之前在讲到 Kafka 持久性保障的时候,特意对两者进行了区分...

2020-01-28 16:29:47 10800 4

转载 Kafka详解(九)控制器组件Controller

控制器组件(Controller),是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群。控制器是重度依赖 ZooKeeper的。集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。换句话说,每个正常运转的 Kafka 集群,在任意...

2020-01-28 15:44:08 571

转载 Kafka详解(八)消费者组重平衡全流程

消费者组的重平衡流程,它的作用是让组内所有的消费者实例就消费哪些主题分区达成一致。重平衡需要借助 Kafka Broker 端的 Coordinator 组件,在 Coordinator 的帮助下完成整个消费者组的分区重分配。今天我们就来详细说说这个流程。1. 触发条件消费者组重平衡触发的3个条件:组成员数量发生变化 订阅主题数量发生变化 订阅主题的分区数发生变化在实际生产环境中...

2020-01-28 15:15:02 1063

转载 Kafka详解(七)Purgatory

DelayedOperationPurgatory是用来缓存延时请求(Delayed Request)的。所谓延时请求,就是那些一时未满足条件不能立刻处理的请求。比如设置了 acks=all 的 PRODUCE 请求,一旦设置了 acks=all,那么该请求就必须等待 ISR 中所有副本都接收了消息后才能返回,此时处理该请求的 IO 线程就必须等待其他 Broker 的写入结果。当请求不能立刻处理...

2020-01-15 17:11:09 1116

转载 Kafka详解(六)服务端请求处理

1. 请求协议格式Kafka自定义了一组请求协议,用于实现各式各样的交互操作。比如常见的 PRODUCE 请求是用于生产消息的,FETCH 请求是用于消费消息的,METADATA 请求是用于请求 Kafka 集群元数据信息的。所有的请求都是通过TCP网络以Socket的方式进行通讯的。协议的基本结构如下:不同的API(PRODUCE,FETCH等),RequestBody和Resp...

2020-01-15 16:18:20 524

转载 Kafka详解(五)Kafka副本机制

所谓的副本机制(Replication),也可以称之为备份机制,通常是指分布式系统在多台网络互联的机器上保存有相同的数据拷贝。它的作用主要有以下几点:提供数据冗余。即使系统部分组件失效,系统依然能够继续运转,因而增加了整体可用性以及数据持久性。 提供高伸缩性。支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。 改善数据局部性。允许将数据放入与用户地理位置相近的地方,从...

2020-01-15 15:14:29 1148

转载 分布式事务(一)理论知识和解决方案

1. 相关概念1.1 分布式事务定义分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。1.2 XA协议X/Open...

2020-01-15 10:53:58 417

转载 Kafka详解(四)多线程消费者实践

1. Kafka Java Consumer设计原理Kafka Java Consumer采用的是双线程设计,即将用户主线程和心跳线程分开。所谓用户主线程,就是你启动 Consumer 应用程序 main 方法的那个线程,而新引入的心跳线程(Heartbeat Thread)只负责定期给对应的 Broker 机器发送心跳请求,以标识消费者应用的存活性(liveness)。引入这个心跳线程还...

2020-01-14 16:36:45 3882 1

转载 Kafka详解(三)客户端TCP链接管理机制

1. 生产者TCP链接管理1.1 Kafka生产者程序概览Kafka 的 Java 生产者 API 主要的对象就是 KafkaProducer。通常我们开发一个生产者的步骤有 4 步。构造生产者对象所需的参数对象。 利用第 1 步的参数对象,创建 KafkaProducer 对象实例。 使用 KafkaProducer 的 send 方法发送消息。 调用 KafkaProduce...

2020-01-14 16:10:07 2216 1

转载 Kafka详解(二)消费者实践及原理剖析

1. 消费者组概念Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。既然是一个组,那么组内必然可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的 ID,这个 ID 被称为 Group ID。组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)。当然,每个分区只能由同一...

2020-01-14 15:46:03 941

转载 Kafka详解(一)生产者实践及原理剖析

1. 消息分区机制原理剖析1.1 分区概念Kafka有主题(Topic)的概念,它是承载真实数据的逻辑容器,而在主题之下还分为若干个分区,也就是说Kafka的消息组织方式实际上是三级结构:主题-分区-消息。主题下的每一条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。官网上这张图非常清晰的展示了kafka的三级结构,如下图所示:1.2 分区的作用分区的作用就是提供负载...

2020-01-14 14:09:49 748

转载 SpringCloud实操(三)API网关整合OAuth2认证授权服务

1. 基本概念API网关将自己注册为Eureka服务治理下的应用,同时也从Eureka服务治理中获得所有其他微服务的实例信息。我们通过搭建独立的OAuth2认证授权服务,将微服务中冗余的登录校验、签名校验单独剥离出来,这些校验与微服务自己的业务并没有太大的关系,所以这些功能完全可以独立成一个单独的服务存在。只是独立出来之后,并不是给每个微服务调用,而是通过API网关进行统一调用,来对微服务接口...

2020-01-14 10:46:19 4917 2

转载 SpringCloud实操(一)搭建API网关服务器

1. 概念部分1.1 什么是API网关?api网关就是应用程序接口网关,在微服务架构中分布着许多微服务,这些微服务不直接给用户调用,而是通过一个api网关的url为用户提供一致的服务。1.2 为什么需要API网关?为了简化调用逻辑,api网关对外提供一致的调用接口,可以简化客户端调用的复杂度。api网关可以将多个微服务的调用逻辑进行聚合,减少客户端的请求次数,优化客户端的使用体验。...

2020-01-14 10:37:45 968

转载 SpringCloud实操(二)搭建OAuth2认证授权服务

1. 概念部分1.1 为什么需要做一个单独的认证授权服务为了保证服务对外的安全性,往往都会在服务接口采用权限校验机制,为了防止客户端在发起请求中途被篡改数据等安全方面的考虑,还会有一些签名校验的机制。在分布式微服务架构的系统中,我们把原本复杂的系统业务拆分成了若干个独立的微服务应用,我们不得不在每个微服务中都实这样一套校验逻辑,这样就会有很多的代码和功能冗余,随着服务的扩大和业务需...

2020-01-14 10:33:11 1858

转载 Kafka概述(二)进阶知识

1. 日志存储1.1 文件目录布局一个分区副本对应一个日志(Log),一个日志会分配成多个日志分段(LogSegment),Log在物理上以文件夹形式存储,而LogSegment对应磁盘上的一个日志文件和2个索引文件及可能的其他文件。 向Log追加消息时是顺序写入的,只有最后一个LogSegment才能执行写入,称为activeSegment,满足一定条件时,需要创建新的activeSe...

2020-01-13 16:35:47 918

转载 Kafka概述(一)基础知识

1. 基本概念1.1 体系架构Producer:生产者 Consumer:消费者 Broker:服务代理节点(kafka实例)1.2 消息存储主题(Topic)kafka消息以topic为单位进行归类,逻辑概念分区(Partition)Topic-Partition为一对多 分区在存储层面可看做是一个可追加的日志文件 消息在追加到分区时会分配一个特定的偏移量(...

2020-01-13 15:33:33 623

转载 Apollo配置中心(二)动态生效实现原理

1. Spring中的重要概念在了解Apollo配置中心实现原理之前,我们需要先熟悉一下Spring框架中的几个重要的概念:BeanDefinition用于描述Bean的配置信息,Bean配置一般有三种方式:XML配置文件 @Service,@Component等注解 Java Config方式对应的BeanDefinition实现类如下图,Spring容器启动时,会把所有的...

2020-01-10 11:07:06 6090

转载 Apollo配置中心(一)架构演进

笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关、服务器地址、接口地址、不同环境的一些配置文件不同,这些在每次发布不同环境、更新项目时都比较繁琐,后来学习微服务时接触到了Spring Cloud Config配置中心,用了一段时间发现比之前方便不少,但是还是比较繁琐和麻烦,而且功能还达不到生产级,只能小规模场景下使用,在中大规模企业场景下不建议采用。后来了解到携程Apo...

2020-01-10 10:04:10 494

转载 Redis详解(五)AOF持久化

上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)。对于数据完整性要求很严格的需求,怎么解决呢?本篇博客接着来介绍Redis的另一种持久化方式——AOF。1. AOF简介Redis的持久化方式之一RDB是通过保存数据库中的键值对来记录数据库的状态。而另一种持久化...

2020-01-08 17:18:11 298

转载 Redis详解(四)RDB持久化

前面我们说过,Redis 相对于Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。这几种丰富的数据类型我们花了两篇文章进行了详细的介绍,接下来我们要介绍 Redis 的另外一大优势——持久化。  由于 Redis 是一个内存数据库,所谓内存数据库,就是将数据库...

2020-01-08 16:58:39 263

转载 Redis详解(三)五大数据类型底层实现

前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis底层的六种数据结构。在Redis中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象系统也就是前面说的五大数据类型,每一种数据类型都至少用到了一种数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型判断一个对象是否可以执行给定的命令,而且可以针对不同的场...

2020-01-08 14:36:39 227

转载 Redis详解(二)底层数据结构

1. 简单动态字符串第一篇文章我们就说过 Redis 是用 C 语言写的,但是对于Redis的字符串,却不是 C 语言中的字符串(即以空字符’\0’结尾的字符数组),它是自己构建了一种名为 简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 作为 Redis的默认字符串表示。SDS 定义:struct sdshdr{ //记录buf...

2020-01-08 11:57:44 1056 1

转载 Redis详解(一)五大数据类型

我们说 Redis 相对于Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。本篇博客我们就将介绍这些数据类型的详细使用以及顺带介绍Redis系统的相关命令用法。注意:Redis的命令不区分大小写,但是key 严格区分大小写!!!1. string数据类型...

2020-01-08 11:28:30 205

转载 Java并发(六)ReentrantLock可重入锁深度分析

1. 概述ReentrantLock相当于是对synchronized的一个实现,他与synchronized一样是一个可重入锁并且是一个独占锁,但是synchronized是一个非公平锁,任何处于竞争队列的线程都有可能获取锁,而ReentrantLock既可以为公平锁,又可以为非公平锁。根据上面的源码我们可知,ReentrantLock实现了Lock接口,并且是并发编程大师Doug ...

2020-01-07 17:50:20 215 1

转载 Java并发(五)模版方法模式

1. 模版方法结构模板方法的本质其实就是类的继承,模板方法模式需要开发抽象类和具体子类的设计之间的协作,我们实际工作中应该有很多这样的场景,比如我们通常会在业务逻辑层定义好Service类的抽象方法,而实际的业务逻辑实现会交给ServiceImpl类。模板方法模式的类结构图大致如下:抽象模板(AbstractTemplate)角色有如下责任:定义了一个或多个抽象操作,以便让子类实现...

2020-01-07 17:25:15 174

转载 Java并发(四)AQS

1. AQS产生的背景通过JCP的JSR166规范,Jdk1.5开始引入了j.u.c包,这个包提供了一系列支持并发的组件。这些组件是一系列的同步器,这些同步器主要维护着以下几个功能:内部同步状态的管理(例如表示一个锁的状态是获取还是释放),同步状态的更新和检查操作,且至少有一个方法会导致调用线程在同步状态被获取时阻塞,以及在其他线程改变这个同步状态时解除线程的阻塞。上述的这些的实际例子包括:互...

2020-01-07 17:06:44 206

转载 Java并发(三)CAS

1. 并发编程三要素-原子性、可见性、有序性在讨论CAS前,我想先讨论一下并发编程的三要素,这个应该可以帮助理解CAS的作用等。其实上一篇提到的Java内存模型就是围绕着在并发过程中如何处理原子性、可见性和有序性这3个特征来建立的,所以我理解Java编程实现如果满足了这3个特性,就是线程安全的,可以支持并发访问。原子性:指的是一个操作不能再继续拆分,要么一次操作完成,要么就是不执行。在Ja...

2020-01-07 16:45:25 325

转载 Java并发(二)volatile

1. volatile的特性保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。(实现可见性) 禁止进行指令重排序。(实现有序性) volatile 只能保证对单次读/写的原子性。i++ 这种操作不能保证原子性。2. Java内存模型在Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)...

2020-01-07 16:37:34 111

转载 Java并发(一)synchronized

1. 定义synchronized可以将任意一个非NULL的对象当作锁。属于独占式的悲观锁,同时属于可重入锁。2. 作用范围作用于方法时,锁住的是对象的实例(this); 当作用于静态方法时,锁住的是Class实例,又因为Class的相关数据存储在永久带PermGen(jdk1.8则是metaspace),永久带是全局共享的,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线...

2020-01-07 16:16:42 152

转载 ZooKeeper实战(一)master选举

简介考虑7*24小时向外提供服务的系统,不能有单点故障,于是我们使用集群,采用的是Master+Slave。集群中有一台主机和多台备机,由主机向外提供服务,备机监听主机状态,一旦主机宕机,备机必需迅速接管主机继续向外提供服务。在这个过程中,从备机选出一台机作为主机的过程,就是Master选举。架构图左边是ZooKeeper集群,右边是3台工作服务器。工作服务器启动时,会去ZooKe...

2020-01-06 10:56:59 667

转载 ZooKeeper一致性协议Zab协议

什么是Zab协议Zab协议 的全称是Zookeeper Atomic Broadcast(Zookeeper原子广播)。Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性。 Zab协议是为分布式协调服务Zookeeper专门设计的一种 支持崩溃恢复 的 原子广播协议 ,是Zookeeper保证数据一致性的核心算法。Zab借鉴了Paxos算法,但又不像Paxos那样,...

2020-01-04 14:14:08 201

转载 ZooKeeper Paxos算法原理

从上一篇我们了解了2PC和3PC之后,我们可以发现,无论是二阶段提交还是三阶段提交都无法彻底解决分布式的一致性问题以及无法解决太过保守及容错性不好。Google Chubby的作者Mike Burrows说过,世上只有一种一致性算法,那就是Paxos,所有其他一致性算法都是Paxos算法的不完整版。Paxos算法是公认的晦涩,很难可能能将清楚,但是工程上也很难实现,所以有很多Paxos算法的工程实...

2020-01-04 13:50:57 186

转载 ZooKeeper请求处理流程详细

1. 会话创建请求Zookeeper服务端对于会话创建的处理,大体可以分为请求接收、会话创建、预处理、事务处理、事务应用和会话响应六大环节,其大体流程如下1.1 请求接收I/O层接收来自客户端的请求。NIOServerCnxn维护每一个客户端连接,客户端与服务器端的所有通信都是由NIOServerCnxn负责,其负责统一接收来自客户端的所有请求,并将请求内容从底层网络I/O中完整地...

2020-01-04 10:14:22 1694

转载 ZooKeeper入门

ZooKeeper是一种用于分布式应用系统的分布式开源协调服务中间件。主要是用来解决分布式应用中经常遇到的一些问题。官网地址:http://zookeeper.apache.org/doc/current/zookeeperOver.html设计目标简单的数据模型 高可靠 有序 高性能简单的数据模型zk允许各分布式应用通过一个共享的命名空间相互联系,该命名空间类似于一个标准...

2020-01-04 09:56:56 190

转载 zk选举的FastLeaderElection实现(一)

一个zookeeper集群中,有一个处于leader身份的节点,其他的节点都是flower状态。那么一个leader是怎么产生的呢?这就是zookeeper中的选举规则,默认的选举规则称为:FastLeaderELection(还有另外的选举算法,实际上它们的核心思想都是一样的)选举算法的中心思想这里我们使用一张过程图和文字相结合的方式对FastLeaderELection选举算法进行描述...

2020-01-04 09:56:42 206

转载 zk选举的FastLeaderElection实现(二)

1. 前言前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举。2. Leader选举2.1 关键变量2.1.1角色LOOKING:竞选者 OBSERVING:观察者 FOLLOWING:跟随者 LEADER:领导者2.1.2 投票信息logicalclock(electionE...

2020-01-04 09:56:25 188

转载 ZooKeeper通信模式

1. 通信架构在Zookeeper整个系统中,有3中角色的服务,client、Follower、leader。其中client负责发起应用的请求,Follower接受client发起的请求,参与事务的确认过程,在leader crash后的leader选择。而leader主要承担事务的协调,当然leader也可以承担接收客户请求的功能,为了方便描述,后面的描述都是client与Follower...

2020-01-04 09:54:19 469

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除