随笔分类 - 微服务专题
微服务相关组件
摘要:高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指通过系统架构设计减少系统不能提供服务的时间。我们都知道单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”或者叫“冗余”,只有一个服务节点,
阅读全文
摘要:常见的限流算法 (1) 计数器 计数器限流算法是最简单的一种限流实现方式。其本质是通过维护一个单位时间内的计数器,每次请求计数器加1,当单位时间内计数器累加到大于设定的阈值,则之后的请求都被拒绝,直到单位时间已经过去,再将计数器重置为零 算法缺陷:当第十秒的时候已经接收了10个请求时,在下次重置之前
阅读全文
摘要:统一鉴权 内置的过滤器已经可以完成大部分的功能,但是对于企业开发的一些业务功能处理,还是需要我们自己编写过滤器来实现的,那么我们一起通过代码的形式自定义一个过滤器,去完成统一的权限校验。 鉴权逻辑 开发中的鉴权逻辑: 当客户端第一次请求服务时,服务端对用户进行信息认证(登录) 认证通过,将用户信息进
阅读全文
摘要:Spring Cloud Gateway除了具备请求路由功能之外,也支持对请求的过滤。通过Zuul网关类似,也是通过过滤器的形式来实现的。那么接下来我们一起来研究一下Gateway中的过滤器 过滤器基础 (1) 过滤器的生命周期 Spring Cloud Gateway 的 Filter 的生命周期
阅读全文
摘要:Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet;直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支持长连接)才发布,但 Spring Cloud 暂时还没有整合计划。Spring CloudGateway 比 Zuul 1.x 系
阅读全文
摘要:在Zuul中, 整个请求的过程是这样的,首先将请求给zuulservlet处理,zuulservlet中有一个zuulRunner对象,该对象中初始化了RequestContext:作为存储整个请求的一些数据,并被所有的zuulfifilter共享。zuulRunner中还有 FilterProce
阅读全文
摘要:通过之前的学习,我们得知Zuul它包含了两个核心功能:对请求的路由和过滤。其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础;而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。其实,路由功能在真正运行时,它的路由映射和请求转发同样也由几个
阅读全文
摘要:最直观的理解:“路由”是指根据请求URL,将请求分配到对应的处理程序。在微服务体系中,Zuul负责接收所有的请求。根据不同的URL匹配规则,将不同的请求转发到不同的微服务处理。 zuul: routes: product-service: # 这里是路由id,随意写 path: /product-s
阅读全文
摘要:Zuul简介 ZUUL是Netflflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的 核心是一系列的过滤器,这些过滤器可以完成以下功能: 动态路由:动态将请求路由到不同后端集群 压力测试:逐渐增加指向集群的流量,以了解性能 负载分配:为每一种负
阅读全文
摘要:Nginx介绍 正向/反向代理 (1)正向代理 正向代理,"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端
阅读全文
摘要:在学习完前面的知识后,微服务架构已经初具雏形。但还有一些问题:不同的微服务一般会有不同的网络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客户端方来说太复杂也难以维护。如下图: 如果让客户端直接与各个微服务通讯,可能会有很多问题: 客户端会请求多个不同的服务,需要维护不同的请求地址
阅读全文
摘要:第一章: 微服务网关概述 01 微服务网关概述 02 基于Nginx的网关实现 第二章: 微服务网关-Zuul 01 搭建Zuul网关服务器 02 Zuul中的路由转发 03 Zuul中的过滤器 04 服务网关Zuul的核心源码解析 第三章: 微服务网关-GateWay 01 GateWay入门案例
阅读全文
摘要:Sentinel 适配了 Feign 组件。如果想使用,除了引入 sentinel-starter 的依赖外还需要 2 个步骤: 配置文件打开 sentinel 对 feign 的支持: feign.sentinel.enabled=true 加入 openfeign starter 依赖使 sen
阅读全文
摘要:Spring Cloud Alibaba Sentinel 支持对 RestTemplate 的服务调用使用 Sentinel 进行保护,在构造RestTemplate bean的时候需要加上 @SentinelRestTemplate 注解。 @Bean @LoadBalanced @Sentin
阅读全文
摘要:通用资源保护 (1) 案例准备 复制工程 shop_service_order 并命名为 shop_service_order_rest_sentinel (2)引入依赖 需要注意SpringCloud-Alibaba与SpringCloud的版本关系 推荐使用的依赖关系版本 父工程引入alibab
阅读全文
摘要:下载并启动控制台: (1)获取 Sentinel 控制台 您可以从官方网站中下载最新版本的控制台 jar 包,下载地址如下: https://github.com/alibaba/Sentinel/releases/download/1.6.3/sentinel-dashboard-1.6.3.ja
阅读全文
摘要:服务熔断Hystrix的替换方案 18年底Netflflix官方宣布Hystrix 已经足够稳定,不再积极开发 Hystrix,该项目将处于维护模式。就目前来看Hystrix是比较稳定的,并且Hystrix只是停止开发新的版本,并不是完全停止维护,Bug什么的依然会维护的。因此短期内,Hystrix
阅读全文
摘要:Hystrix 底层基于 RxJava,RxJava 是响应式编程开发库,因此Hystrix的整个实现策略简单说即:把一个HystrixCommand封装成一个Observable(待观察者),针对自身要实现的核心功能,对Observable进行各种装饰,并在订阅各步装饰的Observable,以便
阅读全文
摘要:微服务使用Hystrix熔断器实现了服务的自动降级,让微服务具备自我保护的能力,提升了系统的稳定性,也较好的解决雪崩效应。其使用方式目前支持两种策略: 线程池隔离策略:使用一个线程池来存储当前的请求,线程池对请求作处理,设置任务返回处理超时时间,堆积的请求堆积入线程池队列。这种方式需要为每个依赖的服
阅读全文
摘要:熔断器有三个状态 CLOSED 、 OPEN 、 HALF_OPEN 熔断器默认关闭状态,当触发熔断后状态变更为OPEN ,在等待到指定的时间,Hystrix会放请求检测服务是否开启,这期间熔断器会变为 HALF_OPEN 半开启状态,熔断探测服务可用则继续变更为 CLOSED 关闭熔断器。 Clo
阅读全文