微服务/分布式
文章平均质量分 72
学习微服务/分布式相关的知识点及总结
思维的深度
这个作者很懒,什么都没留下…
展开
-
spring cloud gateway常用配置
Spring Cloud Gateway常用的请求相关的配置项以下配置项均省略spring.cloud.gateway前缀配置项 说明 示例 httpclient.connect-timeout 全局的http客户端连接超时时间,单位ms 1000 httpclient.response-timeout 全局的http客户端响应超时时间, time.Duration 5s httpclient.compression 是否进行压缩 fals原创 2022-04-15 15:26:46 · 2661 阅读 · 0 评论 -
Spriing Cloud Config Server工作原理
说明:本文使用的源码基于Spring Cloud Config Server 3.0.5版本在 Spring Cloud Config 中,针对服务器端和客户端组件分别构建了 spring-cloud-config-server 和 spring-cloud-config-client 这两个代码工程。我们今天主要来看Spring Cloud Config Server的工作机制。Spring Cloud Config Server工作机制Spring Cloud Config Serv..原创 2021-11-08 19:29:09 · 786 阅读 · 0 评论 -
Spring Cloud Config Client工作原理
说明:本版本的Spring Cloud Config Client的版本为3.0.5Spring Cloud Config Client实现的依赖关系图大致如下:接下来我们一同探讨Spring Cloud Config Client的实现原理ConfigServiceBootstrapConfiguration类的自动装配在spring-cloud-config-client-3.0.5.jar包中的META-INF的spring.factories文件中包含# Boo.原创 2021-11-08 19:21:41 · 656 阅读 · 2 评论 -
Spirng Cloud Config Server使用
在 Spring Cloud 中,自研了一个 Spring Cloud Config 框架来构建配置中心,并同时提供了配置服务器和多种配置仓库实现方案。引入maven依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId></dependen...原创 2021-11-08 19:12:03 · 471 阅读 · 0 评论 -
Spring Cloud Hystrix实现原理
Hystrix实现原理在了解hystrix的工作原理之前,我们先来了解一下命令模式命令模式命令模式的定义:将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,以及支持可撤销和恢复的功能。命令模式常用的对象Command:请求封装成的对象,该对象是命令模式的主角。也就是说将请求方法封装成一个命令对象,通过操作命令对象来操作请求方法。在命令模式是有若干个请求的,需要将这些请求封装成一条条命令对象,客户端只需要调用不同的命令就可以达到将请求参数化的目的。将一条条请求封装成一条条.原创 2021-11-08 19:02:32 · 550 阅读 · 0 评论 -
Spring Cloud Hystrix使用
@EnableCircuitBreaker注解使用@EnableCircuitBreaker注解开启断路器功能,另外@SpringCloudApplication注解也包含@EnableCircuitBreaker注解,以下为@SpringCloudApplication注解的源码@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootApplication@E原创 2021-10-13 19:45:22 · 191 阅读 · 0 评论 -
Hystrix实现原理
Hystrix实现原理在了解hystrix的工作原理之前,我们先来了解一下命令模式命令模式命令模式的定义:将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,以及支持可撤销和恢复的功能。命令模式常用的对象Command:请求封装成的对象,该对象是命令模式的主角。也就是说将请求方法封装成一个命令对象,通过操作命令对象来操作请求方法。在命令模式是有若干个请求的,需要将这些请求封装成一条条命令对象,客户端只需要调用不同的命令就可以达到将请求参数化的目的。将一条条请求封装成一条条.原创 2021-10-13 19:38:59 · 4226 阅读 · 0 评论 -
服务治理(图)
原创 2021-10-13 19:20:58 · 117 阅读 · 0 评论 -
理解服务容错
服务容错为了防止出现服务雪崩效应,降低服务消费者受已失败的服务提供者的影响,服务容错的常见实现模式包括集群容错、服务隔离、服务熔断和服务回退等。集群容错集群容错的基本要素就是要做到冗余,即某一个服务应该构建多个实例,这样当一个服务实例出现问题时可以重试其他实例。一个集群中的服务本身就是冗余的。而针对不同的重试方式就诞生了一批集群容错策略,常见的包括 Failover(失效转移)、Failback(失败通知)、Failsafe(失败安全)和 Failfas...原创 2021-10-06 19:29:15 · 330 阅读 · 0 评论 -
Spring Cloud Ribbon源码分析
一、ILoadBalancerRibbon实现负载均衡的核心接口为ILoadBalancerpublic interface ILoadBalancer { //添加后端服务 public void addServers(List<Server> newServers); //选择一个后端服务 public Server chooseServer(Object key); //标记一个服务不可用 public void markServerDown(Serv...原创 2021-10-06 16:29:12 · 142 阅读 · 0 评论 -
Spring Cloud Ribbon使用
Spring Cloud Ribbon提供客户端负载均衡,可以自动根据内置的负载均衡算法去调用服务实例,默认采用轮询的负载均衡算法。也可以自定义负载均衡算法。Spring Cloud Ribbon的基于Netflix Ribbon组件上进一步封装和集成。Ribbon常用原理图如下:引入ribbon<dependency> <groupId>org.springframework.cloud</groupId> <art...原创 2021-10-06 16:13:29 · 328 阅读 · 2 评论 -
Eureka客户端源码分析
启动Eureka客户端主要做了两件事:在应用主类中配置了@EnableDiscoveryClient注解。 在 application.properties 中用 eureka .client.serviceUrl.defaultZone参数指定了服务注册中心的位置。@EnableDiscoveryClient注解@EnableDiscoveryClient注解如下:@Target(ElementType.TYPE)@Retention(RetentionPo...原创 2021-10-06 15:33:30 · 353 阅读 · 0 评论 -
API网关Zuul配置详解(这一篇就够了)
zuul常用配置主机相关配置配置项 说明 默认值 zuul.host.connect-timeout-millis 连接主机的超时时间,默认单位ms 2000 zuul.host.max-per-route-connections 每个路由的连接数 20 zuul.host.max-total-connections 总连接数 200 zuul.host.connection-request-timeout-millis 连接请求原创 2021-09-06 18:11:15 · 4630 阅读 · 0 评论 -
基于Golang实现eureka client
github地址:https://github.com/skh2015java/eurekago说明基于spring cloud eureka使用Go语言实现的eureka client。实现了eureka server提供的restful接口,实现功能包括注册实例,注销实例,自动维持心跳,自动重连,根据应用名称或服务名称查询注册中心的实例列表等。eureka server对外提供REST API接口,可参考:https://skaygo.blog.csdn.net/article/deta原创 2021-05-24 18:30:46 · 1288 阅读 · 2 评论 -
Spring Cloud Eureka Server REST接口
Eureka由Netflix公司实现并开源,Negflix Eureka的原始REST API接口可以参考:https://github.com/Netflix/eureka/wiki/Eureka-REST-operationsSpring Cloud集成Netflix Eureka之后,其对外提供的REST API与原始Neflix对外提供的API有一点点差别,即将请求路径中的{version}值去掉。例如:注册某个实例到eureka server:原始Netflix Eureka提供的接口原创 2021-05-24 17:57:15 · 933 阅读 · 0 评论 -
Spring Boot和Spring cloud版本对应关系
Spring Boot和Spring Cloud版本之间有对应关系,如果版本不匹配很可能项目会出现错误。版本对应关系如下:详细请参考:https://www.bejson.com/explore/index_new/原创 2021-05-14 18:01:18 · 209 阅读 · 0 评论 -
Eureka常用配置项说明
Eureka常用的配置Eureka Client常用配置项配置项 说明 默认值 eureka.client.eureka-connection-idle-timeout-seconds 配置与eureka服务器的HTTP连接在关闭之前可以保持空闲状态的时间(以秒为单位)。 30s eureka.client.eureka-server-connect-timeout-seconds 配置连接eureka服务器的等待超时时间 5s eureka.clie原创 2021-04-29 20:07:08 · 326 阅读 · 0 评论 -
Kafka如何保证高可用
管理学上有一个木桶理论,一只水桶能装多少水取决于它最短的那块木板,这个理论推广到分布式系统的可用性上,就是系统整体的可用性取决于系统中最容易出现故障,或者性能最低的组件。系统中的各个组件都要进行高可用设计,防止单点故障,消息队列也不例外,这一课时一起来看一下消息中间件的高可用设计。消息队列高可用手段一般来说,分布式系统的高可用依赖副本技术,副本的引入,使得分布式系统可以更好地进行扩展,当出现某个节点宕机时,由于副本的存在,也能够快速地进行替换,提升系统整体可靠性,防止数据丢失。...原创 2021-03-11 18:33:35 · 1209 阅读 · 0 评论 -
理解缓存穿透、缓存击穿、缓存雪崩常见的缓存设计问题
缓存常见的分类有:前端缓存、网络传输缓存、服务端缓存和数据库缓存等。网络传输缓常见的有CDN缓存和负载均衡缓存。缓存在实际场景中容易出现的问题1.缓存穿透缓存穿透:指业务请求穿过了缓存层,落到持久化存储上。在大多数场景下,我们应用缓存是为了承载前端业务请求,缓存被击穿以后,如果请求量比较大,则会导致数据库出现风险。哪些场景下可能会引起缓存穿透不合理的缓存失效策略 缓存失效策略如果设置不合理,比如设置了大量缓存在同一时间点失效,那么将导致大量缓存数据在同一时刻发生...原创 2021-02-25 18:23:55 · 430 阅读 · 0 评论 -
经典的缓存过期策略
页面置换算法页面置换算法是操作系统的调度算法在操作系统中,文件的读取会先分配一定的页面空间,也就是我们说的 Page,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话,则直接拿出来;否则就先查询,页面空间没有满,就把新页面缓存起来,如果页面空间满了,就删除部分页面,方便新的页面插入。在操作系统的页面空间中,对应淘汰旧页面的机制不同,所以会有不同页面调度方法,常见的有 FIFO、LRU、LFU 过期策略:FIFO(First In First Out,先进先出),根据缓存被存储的时间原创 2021-02-25 18:18:22 · 1288 阅读 · 0 评论 -
MySQL实现XA规范
XA规范 XA 是由 X/Open 组织提出的分布式事务规范,XA 规范主要定义了事务协调者(Transaction Manager)和资源管理器(Resource Manager)之间的接口。事务协调者(Transaction Manager),因为 XA 事务是基于两阶段提交协议的,所以需要有一个协调者,来保证所有的事务参与者都完成了准备工作,也就是 2PC 的第一阶段。如果事务协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交,也就是 2PC 的第二阶段。...原创 2021-02-25 18:15:32 · 289 阅读 · 2 评论 -
Kafka实现高性能的方法
Kafka由于具有高性能,所以Kafka 被广泛运用于大数据处理、流式计算、各类日志监控等需要处理海量数据的场景。下面我从 Kafka 的磁盘读写、批量优化、零拷贝等方面,对 Kafka 的高性能特性进行分析。1.磁盘顺序读写数据存储在硬盘上,而硬盘有机械硬盘和固态硬盘之分。机械硬盘成本低、容量大,但每次读写都会寻址,再写入数据(在机械硬盘上,寻址是一个物理动作,耗时最大);SSD 固态硬盘性能很高,有着非常低的寻道时间和存取时间,但成本也特别高。消息队列对外提供的主要方法是生产和消费,不涉及数原创 2021-02-25 18:14:00 · 395 阅读 · 0 评论 -
Java实现LRU Cache
146. LRU Cache运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到..原创 2021-02-25 18:12:13 · 460 阅读 · 0 评论 -
Golang实现LRU Cache
146. LRU Cache运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到.原创 2021-02-25 18:09:09 · 641 阅读 · 0 评论 -
分布式锁详细理解及常用的实现方式
分布式锁1.理解分布式锁编程语言往往都会提供锁来保证线程并发访问共享变量,比如,Java 语言给我们提供了线程锁,开放了处理锁机制的 API,比如 Synchronized、Lock 等。当一个锁被某个线程持有的时候,另一个线程尝试去获取这个锁会失败或者阻塞,直到持有锁的线程释放了该锁。在单台服务器内部,可以通过线程加锁的方式来同步。但是在分布式场景下就需要分布式锁来保证多实例并发安全访问共享变量。分布式场景下解决并发问题,需要应用分布式锁技术。如上图所示,分布式锁的目的是保证在分.原创 2021-02-18 18:40:07 · 972 阅读 · 0 评论 -
分布式事务常用的解决方案
事务的基本要素(ACID)1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务.原创 2021-02-18 18:29:30 · 248 阅读 · 0 评论 -
分布式事务理解
一、分布式事务分布式事务就是一个业务操作,是由多个细分操作完成的,而这些细分操作又分布在不同的服务器上;事务,就是这些操作要么全部成功执行,要么全部不执行。二、数据库事务数据库事务的特性包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durabilily),简称 ACID。在数据库执行中,多个并发执行的事务如果涉及到同一份数据的读写就容易出现数据不一致的情况,不一致的异常现象有以下几种。脏读,是指一个事务中访问到了另外..原创 2021-02-18 18:22:44 · 378 阅读 · 2 评论 -
分布式之Paxos算法
在了解Quorum机制之前,先回顾一下数据一致性强一致性:在任意时刻,从任意不同副本取出的值都是一样的。弱一致性:有时泛指最终一致性,是指在任意时刻,可能由于网络延迟或者设备异常等原因,不同副本中的值可能会不一样,但经过一段时间后,最终会变成一样。WARO协议WARO(Write All Read One)是一种简单的副本控制协议,当 Client 请求向某副本写数据时(更新数据),只有当所有的副本都更新成功之后,这次写操作才算成功,否则视为失败。这样的话,只需要读任何一个副本...原创 2021-02-18 18:18:54 · 423 阅读 · 0 评论 -
分布式系统之Quorum机制
在了解Quorum机制之前,先回顾一下数据一致性强一致性:在任意时刻,从任意不同副本取出的值都是一样的。弱一致性:有时泛指最终一致性,是指在任意时刻,可能由于网络延迟或者设备异常等原因,不同副本中的值可能会不一样,但经过一段时间后,最终会变成一样。WARO协议WARO(Write All Read One)是一种简单的副本控制协议,当 Client 请求向某副本写数据时(更新数据),只有当所有的副本都更新成功之后,这次写操作才算成功,否则视为失败。这样的话,只需要读任何一个副本上的数..原创 2021-02-18 18:15:50 · 672 阅读 · 0 评论 -
分布式中的CAP及Base理论
一、CAP理论CAP 理论可以表述为,一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三项中的两项。一致性:某些操作之后(比如新增或更新操作),所有节点在同一时间的数据完全一致。可用性:服务一直保持正常运行,并且可以正常响应用户的请求,即任何时候,读写都是成功。分区容忍性: 大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容忍性指系统容忍网...原创 2021-02-18 18:13:15 · 525 阅读 · 1 评论 -
分布式技术原理与实战课程学习
推荐课程《分布式技术原理与实战》课程学习,主要是分布式相关技术理论课程,如果想学习分布式相关的知识推荐学习。课程框架图可以微信扫码学习原创 2021-02-18 18:04:42 · 310 阅读 · 0 评论 -
Golang基于consul实现服务注册与发现
前提搭建consul集群,至少需要一个consul agentconsul服务注册与发现相关文档见官网:consul apihttps://www.consul.io/api-docs/agent/service服务注册服务注销服务发现https://www.consul.io/api-docs/health代码实现服务注册与发现discovery/discovery_client.go实现服务注册、服务注销和服务发现的通用...原创 2020-12-17 18:29:28 · 2640 阅读 · 0 评论 -
Golang基于etcd实现服务注册和发现功能
windows安装etcd:https://skaygo.blog.csdn.net/article/details/80712214linux安装etcd:https://skaygo.blog.csdn.net/article/details/80714661etcd是一个分布式的,一致的 key-value 存储,主要用途是共享配置和服务发现。Etcd 已经在很多分布式系统中得到广泛的使用。etcd实现服务注册与发现功能,主要使用key-value存储,租约(lease)以及watc.原创 2020-12-17 18:22:00 · 1497 阅读 · 2 评论 -
golang实现一致性哈希算法
package mainimport ( "crypto/sha1" "sync" "math" "sort" "strconv" "fmt")const ( node1 = "192.168.1.1" node2 = "192.168.1.2" node3 = "192.168.1.3")const ( //DefaultVirualSpots default virual spots DefaultVirualSpots = 400)//节点信息typ.原创 2020-12-12 15:03:14 · 701 阅读 · 0 评论 -
图解一致性哈希算法的基本原理
一致性哈希的基本原理一致性哈希算法是将每个Node节点映射到同一个圆上。将各Node的key采用hash计算,可得到一个整数数组。将该数组排序后,首尾相连即是一个圆。如下图所示简单来说,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-2^32-1(即哈希值是一个32位无符号整形),整个哈希环如下:整个空间按顺时针方向组织,圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、5、6……直到2^32-1,也就是说0点左侧..原创 2020-12-12 14:48:05 · 1276 阅读 · 0 评论 -
常用的负载均衡算法
负载均衡的作用是将用户请求分发给不同的服务实例,既可以提高系统的吞吐量,也可以避免因为单一服务实例宕机导致整个系统不可用的情况。负载均衡算法定义了如何将请求分散到服务实例的规则,优秀的负载均衡算法能够有效提高系统的吞吐量,使服务集群中各服务的负载处于高效稳定的状态。常见的负载均衡算法如下:1.随机法 该算法是随机从可用服务列表中选取一个服务实例来分发请求。它的实现非常h简单,一定程度上保证了请求的分散性,但是无法顾及请求分配是否与服务实例的负载能力相符合2.轮询法或者加权轮询...原创 2020-12-07 18:49:28 · 801 阅读 · 0 评论 -
Golang使用断路器hystrix
断路器的相关原理可参考:https://skaygo.blog.csdn.net/article/details/110442898hystrix-go的源码地址:https://github.com/afex/hystrix-go下载:go get github.com/afex/hystrix-go/hystrix开启一个简单的http服务svc请求 /hello 会返回 hello,world相关代码如下(svc.go):package mainimport ( .原创 2020-12-04 18:11:33 · 619 阅读 · 0 评论 -
服务熔断之Google SRE弹性熔断算法
一、熔断介绍在分布式系统中,一次完整的请求可能需要经过多个服务模块的调用,请求在多个服务中传递,服务对服务的调用会产生新的请求,这些请求共同组成了这次请求的调用链。当调用链中的某个环节,特别是下游服务不可用时,将会导致上游服务调用方不可用,最终将这种不可用的影响扩大到整个系统,导致整个分布式的不可用,引起服务雪崩现象。为了避免这种情况,在下游服务不可用时,保护上游服务的可用性显得极其重要。对此我们可以通过熔断的方式,通过及时熔断服务调用方和服务提供方的调用链,保护服务调用方资源,防止服务雪崩现象的出原创 2020-12-01 18:17:43 · 1834 阅读 · 0 评论 -
服务熔断之断路器模式
一、熔断介绍在分布式系统中,一次完整的请求可能需要经过多个服务模块的调用,请求在多个服务中传递,服务对服务的调用会产生新的请求,这些请求共同组成了这次请求的调用链。当调用链中的某个环节,特别是下游服务不可用时,将会导致上游服务调用方不可用,最终将这种不可用的影响扩大到整个系统,导致整个分布式的不可用,引起服务雪崩现象。为了避免这种情况,在下游服务不可用时,保护上游服务的可用性显得极其重要。对此我们可以通过熔断的方式,通过及时熔断服务调用方和服务提供方的调用链,保护服务调用方资源,防止服务雪崩现象的出原创 2020-12-01 18:13:39 · 859 阅读 · 0 评论 -
Golang限流器rate使用
rate包是Google基于令牌桶的算法实现的限流器,可以在服务的限流中使用。我们通过一个例子来使用ratepackage mainimport ( "fmt" "time" "context" "golang.org/x/time/rate")func main() { //初始化 limiter 每秒10个令牌,令牌桶容量为20 limiter := rate.NewLimiter(rate.Every(time.Millisecond*100),20) f.原创 2020-11-27 18:36:11 · 3555 阅读 · 0 评论