![](https://img-blog.csdnimg.cn/20200910213403346.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
16 SringCloud 微服务架构
文章平均质量分 90
从浅入深精通SpringCloud 微服务架构
一角残叶
人生如逆旅,我亦是行人
展开
-
SpringCloud 微服务架构(29)- Zipkin
1 ZipkinZipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。 我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的 API 接口之外,它也提供了方便的 UI 组件来帮助我们直观的搜索跟踪信息和分析请求链原创 2021-02-08 15:12:16 · 179 阅读 · 2 评论 -
SpringCloud 微服务架构(28)- Spring Cloud GateWay(4)- 网关高可用、链路追踪
1 网关高可用高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。...原创 2021-02-08 10:39:01 · 656 阅读 · 2 评论 -
SpringCloud 微服务架构(27)- Spring Cloud GateWay(3)- 网关限流
1 Spring Cloud GateWay1.1 网关限流1.1.1 常见的限流算法计数器计数器限流算法是最简单的一种限流实现方式。其本质是通过维护一个单位时间内的计数器,每次请求计数器加1,当单位时间内计数器累加到大于设定的阈值,则之后的请求都被拒绝,直到单位时间已经过去,再将计数器重置为零漏桶算法漏桶算法可以很好地限制容量池的大小,从而防止流量暴增。漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。 在网络中,漏桶算法可以控制端口的流原创 2021-01-12 10:57:18 · 203 阅读 · 0 评论 -
SpringCloud 微服务架构(26)- Spring Cloud GateWay(2)- 过滤器
1 Spring Cloud GateWay1.1 过滤器Spring Cloud Gateway除了具备请求路由功能之外,也支持对请求的过滤。通过Zuul网关类似,也是通过过滤器的形式来实现的。1.1.1 过滤器的生命周期Spring Cloud Gateway 的 Filter 的生命周期不像 Zuul 的那么丰富,它只有两个:“pre” 和 “post”。PRE: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。POST:这种过原创 2021-01-11 16:47:55 · 195 阅读 · 0 评论 -
SpringCloud 微服务架构(25)- Spring Cloud GateWay(1)
1 Zuul网关存在的问题性能问题Zuul1x版本本质上就是一个同步Servlet,采用多线程阻塞模型进行请求转发。简单讲,每来一个请求,Servlet容器要为该请求分配一个线程专门负责处理这个请求,直到响应返回客户端这个线程才会被释放返回容器线程池。如果后台服务调用比较耗时,那么这个线程就会被阻塞,阻塞期间线程资源被占用,不能干其它事情。我们知道Servlet容器线程池的大小是有限制的,当前端请求量大,而后台慢服务比较多时,很容易耗尽容器线程池内的线程,造成容器无法接受新的请求。不支持任何长连接,原创 2021-01-11 15:51:30 · 352 阅读 · 0 评论 -
SpringCloud 微服务架构(24)- zuul过滤
1 过滤器Zuul它包含了两个核心功能:对请求的路由和过滤。其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础;而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。其实,路由功能在真正运行时,它的路由映射和请求转发同样也由几个不同的过滤器完成的。所以,过滤器可以说是Zuul实现API网关功能最为核心的部件,每一个进入Zuul的HTTP请求都会经过一系列的过滤器处理链得到请求响应并返回给客户端。1.1 ZuulFilter简介Zuul 中的过原创 2020-11-25 21:07:46 · 170 阅读 · 0 评论 -
SpringCloud 微服务架构(23)- 面向服务的路由配置
1 面向服务的路由配置微服务一般是由几十、上百个服务组成,对于一个URL请求,最终会确认一个服务实例进行处理。如果对每个服务实例手动指定一个唯一访问地址,然后根据URL去手动实现请求匹配,这样做显然就不合理。Zuul支持与Eureka整合开发,根据ServiceID自动的从注册中心中获取服务地址并转发请求,这样做的好处不仅可以通过单个端点来访问应用的所有服务,而且在添加或移除服务实例的时候不用修改Zuul的路由配置。添加Eureka客户端依赖(zuul工程)<dependencies>原创 2020-11-22 12:38:23 · 237 阅读 · 0 评论 -
SpringCloud 微服务架构(22)- 网关
1 回顾2 网关不同的微服务一般会有不同的网络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客户端方来说太复杂也难以维护。如果让客户端直接与各个微服务通讯,可能会有很多问题:客户端会请求多个不同的服务,需要维护不同的请求地址,增加开发难度在某些场景下存在跨域请求的问题加大身份认证的难度,每个微服务需要独立认证因此,我们需要一个微服务网关,介于客户端与服务器之间的中间层,所有的外部请求都会先经过微服务网关。客户端只需要与网关交互,只知道一个网关地址即可,这样简化了开原创 2020-11-22 11:34:59 · 301 阅读 · 2 评论 -
SpringCloud 微服务架构(21)- sentinel - 对RestTemplate的支持
1 对RestTemplate的支持全局@SentinelRestTemplate 注解的属性支持限流( blockHandler , blockHandlerClass )和降级( fallback , fallbackClass )的处理。其中 blockHandler 或 fallback 属性对应的方法必须是对应 blockHandlerClass 或fallbackClass 属性中的静态方法。该方法的参数跟返回值跟org.springframework.http.client.C原创 2020-11-07 17:46:03 · 734 阅读 · 0 评论 -
SpringCloud 微服务架构(20)- 通用资源保护
1 通用资源保护package com.tzb.restorder.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;import com.tzb.restorder.entity.Product;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annota原创 2020-11-07 16:51:19 · 219 阅读 · 0 评论 -
SpringCloud 微服务架构(19)- 服务熔断 hystrix 的替换方案
1 服务熔断Hystrix的替换方案18年底Netflix官方宣布Hystrix 已经足够稳定,不再积极开发 Hystrix,该项目将处于维护模式。就目前来看Hystrix是比较稳定的,并且Hystrix只是停止开发新的版本,并不是完全停止维护,Bug什么的依然会维护的。因此短期内,Hystrix依然是继续使用的1.1 Sentinel阿里巴巴开源的一款断路器实现,目前在Spring Cloud的孵化器项目Spring Cloud Alibaba中的一员Sentinel本身在阿里内部已经被大规模采原创 2020-11-07 16:03:12 · 1049 阅读 · 0 评论 -
SpringCloud 微服务架构(18)- hystrix 隔离政策
1 断路器的隔离策略微服务使用Hystrix熔断器实现了服务的自动降级,让微服务具备自我保护的能力,提升了系统的稳定性,也较好的解决雪崩效应。其使用方式目前支持两种策略:线程池隔离策略:使用一个线程池来存储当前的请求,线程池对请求作处理,设置任务返回处理超时时间,堆积的请求堆积入线程池队列。这种方式需要为每个依赖的服务申请线程池,有一定的资源消耗,好处是可以应对突发流量(流量洪峰来临时,处理不完可将数据存储到线程池队里慢慢处理)信号量隔离策略:使用一个原子计数器(或信号量)来记录当前有多少个线程在原创 2020-11-02 22:06:49 · 178 阅读 · 1 评论 -
SpringCloud 微服务架构(17)- hystrix断路器的工作状态
1 hystrix断路器的工作状态原创 2020-11-02 21:51:38 · 788 阅读 · 0 评论 -
SpringCloud 微服务架构(16)- hystrix:通过Actuator 获取 hystrix的监控数据
1 hystrix 的超时时间在之前的案例中,请求在超过1秒后都会返回错误信息,这是因为Hystix的默认超时时长为1,我们可以通过配置修改这个值:2 Hystrix 监控平台当请求失败,被拒绝,超时的时候,都会进入到降级方法中。但进入降级方法并不意味着断路器已经被打开。那么如何才能了解断路器中的状态呢?除了实现容错功能,Hystrix还提供了近乎实时的监控,HystrixCommand和HystrixObservableCommand在执行时,会生成执行结果和运行指标。比如每秒的请求数量,成功原创 2020-10-25 11:35:29 · 434 阅读 · 1 评论 -
SpringCloud 微服务架构(15)- 基于 Feign的熔断配置
1 基于 Feign的熔断配置SpringCloud Fegin默认已为Feign整合了hystrix,所以添加Feign依赖后就不用在添加hystri1.1 案例IProductFeignClientpackage com.tzb.order.feign;import com.tzb.order.entity.Product;import org.springframework.cloud.openfeign.FeignClient;import org.springframew原创 2020-10-24 22:56:39 · 542 阅读 · 0 评论 -
SpringCloud 微服务架构(14)- 基于 RestTemplate的熔断配置
1 基于 RestTemplate的熔断配置1.1 案例appliation.ymlserver: port: 8083spring: application: name: service-order #服务名称 datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/springcloud_shop?us原创 2020-09-17 21:48:23 · 1456 阅读 · 0 评论 -
SpringCloud 微服务架构(13)- 服务容错核心知识
1 雪崩效应在微服务架构中,一个请求需要调用多个服务是非常常见的。如客户端访问A服务,而A服务需要调用B服务,B服务需要调用C服务,由于网络原因或者自身的原因,如果B服务或者C服务不能及时响应,A服务将处于阻塞状态,直到B服务C服务响应。此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。雪崩是系统中的蝴蝶效应导致其发生的原因多种多样,有不合理的容量设计,或者是高并发下某原创 2020-09-17 21:01:44 · 215 阅读 · 0 评论 -
SpringCloud 微服务架构(12)- 线程池隔离的方式处理请求积压
1 线程池隔离的方式处理请求积压Order 模块<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-metrics-event-stream</artifactId> <version>1.5.12</version></dependency><dependency>原创 2020-09-14 23:06:22 · 1129 阅读 · 0 评论 -
SpringCloud 微服务架构(11)- jmetter 模拟高负载
1 jmetter 模拟高负载此时,浏览器再去访问订单服务,发现数据加载缓慢原创 2020-09-14 22:49:44 · 103 阅读 · 0 评论 -
SpringCloud 微服务架构(10)- 服务调用 Feign
1 FeignFeign是Netflix开发的声明式,模板化的HTTP客户端,其灵感来自Retrofit,JAXRS-2.0以及WebSocket.Feign可帮助我们更加便捷,优雅的调用HTTP API。在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eure原创 2020-09-14 22:21:38 · 306 阅读 · 0 评论 -
SpringCloud 微服务架构(9)- Eureka替换方案Consul
1 Eureka 闭源在Euraka的GitHub上,宣布Eureka 2.x闭源。近这意味着如果开发者继续使用作为 2.x 分支上现有工作repo 一部分发布的代码库和工件,则将自负风险。1.1 Eureka的替换方案1.1.1 ZookeeperZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。1原创 2020-09-13 22:58:37 · 948 阅读 · 0 评论 -
SpringCloud 微服务架构(8)- Ribbon 调用
1 Ribbon是 Netflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中,Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务1.1 Ribbon的主要作用原创 2020-09-13 15:50:35 · 216 阅读 · 0 评论 -
SpringCloud 微服务架构(7)- Eureka源码解析
1 SpringBoot 自动装载原创 2020-09-13 11:14:00 · 112 阅读 · 0 评论 -
SpringCloud 微服务架构(6)- Eureka Server 高可用集群
1 Eureka Server 高可用启动第一个注册中心# 模拟2个EurekaServer,# 端口:8000,9000# 两个server 需要相互注册spring: application: name: eureka-serverserver: port: 8000# 配置 eureka servereureka: client: #register-with-eureka: false #是否将自己注册到注册中心原创 2020-09-12 13:06:16 · 114 阅读 · 0 评论 -
SpringCloud 微服务架构(5)- 注册中心
1 微服务的注册中心注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。1.1 注册中心的主要作用服务注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:服务发现:服务注册/反注册:保存服务提供者和服务调用者的信息服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能服务路由(可选原创 2020-09-12 00:14:41 · 1143 阅读 · 0 评论 -
SpringCloud 微服务架构(4)- 案例(3)
1 新建 order 子模块 <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependen原创 2020-09-11 22:48:56 · 193 阅读 · 0 评论 -
SpringCloud 微服务架构(3)- 案例(2)
1 子模块package com.tzb.product.entity;import lombok.Data;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;import java.math.BigDecimal;@Data@Entity@Table(name = "tb_product")public class Product { @原创 2020-09-11 20:58:11 · 113 阅读 · 0 评论 -
SpringCloud 微服务架构(2)- 案例
1 创建一个聚合工程1.1 创建父工程<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://m原创 2020-09-10 23:37:22 · 134 阅读 · 0 评论 -
SpringCloud 微服务架构(1)- 入门介绍
1 系统架构的演变1.1 SOASOA 全称为 Service-Oriented Architecture,即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进程中。站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。通过上面的描述可以发现 SOA 有如下几个特点:分布式、可重用、扩展灵活、松耦合原创 2020-09-10 22:16:17 · 126 阅读 · 0 评论