![](https://img-blog.csdnimg.cn/20201224090255441.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
微服务相关技术详解
文章平均质量分 92
微服务相关技术详解包括但不限于SpringCloud Netflix、SpringCloud Alibaba、携程分布式配置中心Apollo、点评调用链监控Cat等技术讲解,以及分布式技术原理和算法讲解
邋遢的流浪剑客
成长中的基础架构攻城狮
展开
-
Eureka核心源码解析(二):Eureka Server自我保护机制、失效剔除、Eureka Server集群复制
本文主要来解析Eureka应用实例下线、自我保护机制、失效剔除核心源码,基于1.9.8版本一、应用实例下线1、Eureka Client发起下线应用实例关闭时,Eureka Client向Eureka Server发起下线应用实例。需要满足如下条件才可发起:配置eureka.registration.enabled=true,应用实例开启注册开关。默认为false配置eureka.shouldUnregisterOnShutdown=true,应用实例开启关闭时下线开关。默认为truepub原创 2021-07-25 17:22:05 · 939 阅读 · 0 评论 -
Eureka核心源码解析(一):应用实例注册、续约、下线
本文主要来解析Eureka应用实例注册、续约的核心源码,基于1.9.8版本一、应用实例注册1、Eureka Client发起注册Eureka Client向Eureka Server发起注册应用实例需要符合如下条件:配置eureka.registration.enabled=true,Eureka Client向Eureka Server发起注册应用实例的开关InstanceInfo在Eureka Client和Eureka Server数据不一致每次InstanceInfo发生属性变化时,原创 2021-07-25 11:15:34 · 650 阅读 · 2 评论 -
Apollo核心源码解析(二):Apollo Client轮询配置(ConfigRepository与RemoteConfigLongPollService)、配置中心通用设计模型
本文接上文Apollo核心源码解析(一):Portal发布配置、Admin Service发送ReleaseMessage、Config Service通知客户端3、Apollo Client上图简要描述了Apollo客户端的实现原理:客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送(通过Http Long Polling实现)客户端还会定时从Apollo配置中心服务端拉取应用的最新配置这是一个fallback机制,为了防止推送机制失效导致配置不更新客户端定时拉取会上报.原创 2021-03-14 10:36:57 · 1531 阅读 · 1 评论 -
Apollo核心源码解析(一):Portal发布配置、Admin Service发送ReleaseMessage、Config Service通知客户端
1、Apollo架构设计Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口Client通过域名访问Meta Server获取Config Service原创 2021-03-13 15:02:53 · 1448 阅读 · 0 评论 -
Soul网关中的Http长轮询实现数据同步
前言Soul是一款异步的、高性能的、跨语言的、响应式的API网关,本文主要来解析Soul中基于Http长轮询同步数据的设计,下图展示了Soul数据同步的流程:Soul主要由soul-admin和soul-web两个核心模块组成,soul-admin是路由和其他信息配置的管理后台;soul-web是网关主体,用于实现路由转发等功能。soul-web实现了动态配置功能,会同步soul-admin中的路由和其他配置信息,为了提供更高的响应速度,soul-web所有的缓存配置都存在JVM的Concurrent原创 2021-02-22 07:39:55 · 428 阅读 · 0 评论 -
Zuul路由转发源码解析及动态路由实现
本文介绍Zuul路由的源码以及实现动态路由的几种方式,可以先阅读Zuul1.x核心源码解析了解路由源码流程本文基于spring-cloud-starter-zuul(SpringCloud版本为Edgware.SR3)1、源码解析1)、路由转发route类型的SimpleHostRoutingFilter、RibbonRoutingFilter负责实际的请求,核心代码如下:public class SimpleHostRoutingFilter extends ZuulFilter { @Ov原创 2021-01-31 18:05:20 · 1586 阅读 · 0 评论 -
Sentinel FlowSlot限流源码解析
本文主要来解析Sentinel限流核心源码,基于当前最新的release版本1.8.01、常见限流算法1)、计数器算法在指定周期内累加访问次数,当访问次数达到设定的阈值时,触发限流策略,当进入下一个时间周期清零访问次数如上图所示,限定了每一分钟能够处理的总请求数为100,在第一个一分钟内,一共请求了60次。接着到第二个一分钟,counter又从0开始计数,在一分半钟时,已经达到了最大限流的阈值,这个时候后续的所有请求都会被拒绝2)、滑动窗口算法滑动窗口算法的原理是在固定窗口中分割出多个小时间窗原创 2021-01-26 08:26:02 · 646 阅读 · 3 评论 -
Sentinel DegradeSlot熔断源码解析
本文主要来解析Sentinel熔断核心源码,基于当前最新的release版本1.8.01、Sentinel熔断机制的处理流程 达到熔断触发条件(假设触发条件为当接口每秒钟超过20%的处理产生异常,具体熔断规则由用户配置),便会开启熔断,在熔断状态下,X秒内所有该接口访问都会被Blocked快速失败(服务降级)X秒后,下一次请求接口,此时为半开状态如果请求接口成功,恢复到正常状态如果请求接口失败,回到熔断状态继续Blocked X秒2、源码解析Sentinel的熔断是由责任链中的最后一个D原创 2021-01-24 14:29:18 · 653 阅读 · 0 评论 -
Sentinel核心源码解析
本文主要来解析Sentinel的核心源码,当前最新的release版本1.8.0,如果你尚未了解Sentinel的核心功能,可以查看Sentinel的官方文档或者这篇文章Sentinel核心功能实战1、Sentinel案例解析 public UserOrder getUserOrderByUserId(Long userId) { ContextUtil.enter("UserService"); Entry entry = null; try {原创 2021-01-23 21:00:43 · 945 阅读 · 2 评论 -
Sentinel核心功能实战
一、Sentinel简介1、流量控制简介流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。在网络传输中,任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制2、熔断降级简介在调用系统的时候,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积,进而导致级联错误而熔断降级就可以解决这个问题,所谓的熔断降级就是当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让原创 2020-12-20 08:01:35 · 2782 阅读 · 2 评论 -
Hystrix工作原理及核心配置
1、熔断器模式服务的健康状况=请求失败数/请求总数熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定的阈值比较决定的1)当熔断器开关关闭时,请求被允许通过熔断器。如果当前健康状况高于设定阈值,开关继续保持关闭。如果当前健康状况低于设定阈值,开关则切换为打开状态2)当熔断器开关打开时,请求被禁止通过3)当熔断器开关处于打开状态,经过一段时间后,熔断器会自动进入半开状态,这时熔断器只允许一个请求通过。当该请求调用成功时,熔断器恢复到关闭状态。若该请求失败,熔断器继续保持打开状态,接下来的原创 2020-11-22 21:16:27 · 765 阅读 · 0 评论 -
Feign核心源码解析
注册BeanDefinition首先看一下Feign的开启注解@EnableFeignClients:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(FeignClientsRegistrar.class)public @interface EnableFeignClients {@Import导入了FeignClientsRegistrar,该类实现了ImportBeanDefin原创 2020-11-21 22:04:20 · 561 阅读 · 0 评论 -
Zuul实现Groovy加载动态Filter
一、什么是动态FilterZuul提供了一个能够对过滤器进行动态的加载、编译、运行的框架。这些过滤器是由Groovy写成,被放在Zuul Server上的特定目录下面。Zuul会按期轮询这些目录,修改过的过滤器会动态的加载到Zuul Server中。这样如果要对过滤器有改动,就不用进行网关的重新发布了,只需要把过滤器上传到指定目录即可下面我们就基于spring-cloud-starter-zuul(SpringCloud版本为Edgware.SR3)进行扩展,实现动态加载Filter的功能二、Zuul原创 2020-11-08 14:04:17 · 1256 阅读 · 6 评论 -
Zuul1.x核心源码解析
1、Zuul架构图如上图,Zuul网关分为三个部分:过滤器管理模块(绿色模块)、过滤器加载模块(粉红色模块)、过滤器运行时模块(蓝色模块)1)过滤器管理模块:让开发人员管理过滤器,过滤器管理主要是上传的动作和激活的动作。过滤器上传完是保存到数据库中的,开发人员可以通过界面管理过滤器的状态2)过滤器加载模块:是过滤器加载模块。定期的扫描过滤器,看看过滤器有没有变更。过滤器管理器会先将变更的过滤器拉到本地的过滤器目录当中。如果变更了,就会执行Filter Loader进行加载,加载到网关运行时的Filt原创 2020-11-07 14:15:33 · 382 阅读 · 0 评论 -
调用链监控Cat实战
1、Docker快速部署Cat下载Cat源码:git clone https://github.com/dianping/cat.git容器构建:cd dockerdocker-compose up使用官方的脚本启动报错:Creating cat-mysql ... doneCreating cat ... errorERROR: for cat Cannot create container for service cat: conflicting options:原创 2020-11-21 07:44:35 · 1468 阅读 · 0 评论 -
Netflix开源类库Archaius
1、Archaius是什么?Archaius实际上是对Apache Common Configuration Library的一个封装和扩展,提供了一组基于Java的配置API,主要的特性包括:配置可动态调整配置支持类型(Int、Long、Boolean等)高性能和线程安全提供一个拉(pulling)配置的框架,可以从配置源动态拉取变更的配置支持回调(callback)机制,在配置变更时自动调用支持JMX MBean,可以通过JConsole查看配置和修改配置Achaius的核心是一个原创 2020-11-07 21:51:39 · 873 阅读 · 0 评论 -
分布式配置中心Apollo详解(二):Apollo设计原理、将Config Service和Admin Service注册到自己的Eureka Server、Apollo配置信息加密
五、Apollo设计原理1、架构模块上图简要描述了Apollo的总体设计,从下往上看:Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中...原创 2019-07-20 17:12:29 · 8222 阅读 · 2 评论 -
分布式配置中心Apollo详解(一):简介、云服务器部署实践、SpringBoot集成、操作namespace和cluster
前言最近在回顾SpringCloud相关的知识点,有关于分布式配置中心这块还是决定总结一下携程开源的Apollo分布式配置中心。最初接触的时候是今年年初,当时刚到公司实习没多久,项目开始前培训框架的时候看技术架构介绍了解到新产品采用的分布式配置中心是Apollo,刚刚了解的时候就对这块很感兴趣,个人感觉比SpringCloud的ConfigServer要好用很多,自己做了一个简单的Demo,在毕...原创 2019-07-20 10:33:26 · 4676 阅读 · 0 评论 -
SpringCloud整合TX-LCN5.0.2使用LCN模式实现分布式事务
一、TM配置pom.xml文件中添加依赖: <dependency> <groupId>com.codingapi.txlcn</groupId> <artifactId>txlcn-tm</artifactId> <version>5....原创 2019-12-29 22:52:46 · 2019 阅读 · 5 评论 -
Eureka缓存机制
一、Eureka ServerEureka Server存在三个变量:(registry、readWriteCacheMap、readOnlyCacheMap)保存服务注册信息,默认情况下定时任务每30s将readWriteCacheMap同步至readOnlyCacheMap,每60s清理超过90s未续约的节点,Eureka Client每30s从readOnlyCacheMap更新服务注册...原创 2020-01-06 08:12:34 · 1262 阅读 · 0 评论 -
SpringCloud详解(六):分布式服务跟踪SpringCloud Sleuth与Zipkin2.x
1、快速入门1)、准备工作在引入Sleuth之前,先构建一些基础的设施和应用服务注册中心:eureka-server微服务应用:trace-1,实现一个REST接口/trace-1,调用该接口后将触发对trace-2应用的调用trace-1:@RestController@EnableDiscoveryClient@SpringBootApplicationpublic cl...原创 2019-07-23 07:49:53 · 843 阅读 · 0 评论 -
SpringCloud详解(五):API网关服务Zuul
SpringCloud中提供了基于Netflix Zuul实现的API网关组件SpringCloud Zuul对于路由规则与服务实例的维护问题、SpringCloud Zuul通过与SpringCloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得了所有其他微服务的实例信息,默认通过以服务名作为ContextPath的方式来创建路由映射对于类似签名...原创 2019-07-14 16:37:51 · 667 阅读 · 0 评论 -
SpringCloud详解(四):声明式服务调用Feign
SpringCloud Feign是一个声明式的Web服务客户端,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用SpringCloud Ribbon时自行封装服务调用客户端的开发量1、快速入门构建一个SpringBoot工程,命名为feign-consumer添加如下依赖: <dependency> ...原创 2019-07-13 21:23:52 · 427 阅读 · 0 评论 -
SpringCloud详解(三):服务容错保护Hystrix
在微服务架构中,存在着很多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,为了解决这样的问题,产生了断路器等一系列的服务保护机制当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延SpringCloud Hystrix具备服务...原创 2019-07-12 17:15:48 · 422 阅读 · 0 评论 -
SpringCloud详解(二):客户端负载均衡Ribbon
二、客户端负载均衡:Ribbon1、客户端负载均衡我们通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡硬件负载均衡主要通过在服务器节点之间安装专门用于负载均衡的设备,比如F5等;软件负载均衡则是通过在服务器上安装一些具有均衡负载功能或模块的软件来完成请求分发工作,比如Nginx等硬件负载均衡的设备或是软件负载均衡的软件模块都会维护一个下挂可用的服务端清单,通过...原创 2019-07-08 21:09:11 · 1105 阅读 · 0 评论 -
SpringCloud详解(一):服务治理Eureka
前言最近开始对SpringCloud这块内容进行一个整体的回顾,同时也将相关知识进行整理方便后续复习,最近主要是在看《SpringCloud 微服务实战》这本书,SpringCloud详解相关博客都统一使用SpringBoot 2.1.6.RELEASE版本,SpringCloud Greenwich.SR1版本。博客主要涉及的SpringCloud组件有Eureka、Ribbon、Hystri...原创 2019-06-29 15:20:48 · 876 阅读 · 0 评论 -
Spring Cloud原理
之前一直在看《Spring Cloud微服务实战》,最近又看了公众号石衫的架构笔记的《拜托!面试请不要再问我Spring Cloud底层原理》,对Spring Cloud的主要组件的原理有了更深的理解,特地做一下总结一、Spring Cloud核心组件:Eureka(1)Netflix Eureka1)、Eureka服务端:也称服务注册中心,同其他服务注册中心一样,支持高可用配置。如果Eur...原创 2019-01-19 15:16:25 · 7893 阅读 · 4 评论 -
Dubbo详解(二):Dubbo高级特性
三、Dubbo高级特性1、启动时检查Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check="true"可以通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动另外,如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否...原创 2019-08-24 22:04:48 · 1290 阅读 · 0 评论 -
Dubbo详解(一):Dubbo介绍和SpringBoot整合Dubbo+ZooKeeper
一、Dubbo介绍1、Dubbo是什么Dubbo是阿里巴巴开源的基于Java的高性能RPC(一种远程调用)分布式服务框架(SOA),致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案2、Dubbo架构节点角色说明节点角色说明Provider暴露服务的服务提供方Consumer调用远程服务的服务消费方Registry服务注册与发...原创 2019-08-23 15:24:43 · 3981 阅读 · 0 评论 -
下一代微服务架构Service Mesh
一、什么是Service Mesh1)、Service Mesh以轻量级的网络代理的方式与应用代码部署在一起,用于保证服务与服务之间调用的可靠性2)、Service Mesh主要解决的问题:跨语言服务调用云原生应用服务治理的需要,对业务代码无侵入的适合云原生应用的服务治理方式3)、Buoyant公司开发的第一代Service Mesh产品Linkerd。服务A要调用服务B,经过Lin...原创 2019-03-25 07:47:30 · 1291 阅读 · 0 评论 -
分布式全局唯一ID生成策略
转自:https://mp.weixin.qq.com/s/pxYEnrt6pKldqHXw3AGeBw“唯一ID”在应用程序中是一个很常见的需求,它用于唯一标识一个业务对象、一个资源、或者一个消息等等。在数据库中,唯一ID一般是用来作为一个数据的主键。看过前面介绍MySQL索引原理的文章的朋友应该知道,主键对于数据库的重要性不言而喻在单机场景下,要得到一个全局唯一的ID是非常容易的,你可以使...转载 2019-09-05 11:02:53 · 302 阅读 · 0 评论 -
幂等性设计
一、什么是幂等性HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同二、为什么需要幂等性在分布式架构体系里,服务间的调用可能会有三个状态,一个是成功,一个是失败,一个是超时。前两者都是明确的状态,而超时则是完全不知道是什么状态举几个例子:订单创建接口,第一次...原创 2019-09-26 21:55:22 · 265 阅读 · 0 评论 -
服务限流原理与实践
转自:https://tech.kujiale.com/ratelimiter-architecture/https://blog.csdn.net/qb170217/article/details/81290142https://blog.csdn.net/qq_36748414/article/details/81183402一、限流算法常见的限流算法有计数器算法、漏桶算法和令牌桶算...转载 2019-07-26 14:50:36 · 354 阅读 · 0 评论 -
Zookeeper和Eureka哪个更好?
zookeeper和eureka哪个更好?1、CAP理论一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求C:数据一致性:保证所有数据都要同步A:可用性:要保证任何时候请求数据都能够正常响应P:分区容错性:当网络通信发生故障时,集群仍然可用,不会因为某个节点挂了或者存在问题,而影响整个系统的正常运作对于分布式系统来说,出现网络分区是不可避免的,因此分区容错性是必须要...原创 2019-01-17 10:23:25 · 864 阅读 · 0 评论