SpringCloud与Eureka、Ribbon、Hystrix、Fegin、Gateway

一、概念

微服务框架的一站式解决方案,集成多个Netflix公司开发组件,如Hystrix,Eureka、Zuul等。

二、作用(优点)

1.服务内部关联性强。各服务松耦合,可独立开发、部署
2.业务逻辑简化易于理解,开发难度降低
3.每个服务可用不同语言开发
4.每个服务可有自己的数据库,也可整个微服务使用同一个数据库

三、缺点

1.运维成本增加

四、核心组件

1、网关

		常见组件:
			Netflix Zuul
			Spring Cloud Gateway(Spring官方基于Spring5.0,Springboot2.0开发的高性能网关,逐渐取代了Zuul)
		作用:
			①鉴权校验
			②路由转发
			③限流熔断
			④API监控

2、注册中心

		1.常见组件:
			Zookeeper
			Netflix Eureka
			Alibaba Nacos
		2.作用:
		3.其他:
			1.CAP理论

3、负载均衡

		常见组件:
			Netflix Ribbon
			Nignx
		作用:

4、远程调用

		常见组件:
			Netflix Fegin
			Alibaba Dubbo的Rpc
		作用:

5、熔断器

		1.常见组件
			Netflix Hystrix
		2.概念:在微服务、分布式等多服务模式的系统中,用于容错、故障处理。通过资源隔离、熔断、降级回退、限流、实时监控等方式预防因依赖服务故障而招致的级联故障(也称,雪崩效应)。
		3.作用:防止级联故障。
		4.使用实现:
			1.添加依赖
				<dependency>
		            <groupId>org.springframework.cloud</groupId>
		            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
		        </dependency>
			2.启动类加@EnableCircuitBreaker或@EnableHystrix(此注解包含@EnableCircuitBreaker,都是用于启动Hystrix断路器的作用,区别在于@EnableCircuitBreaker还可以启动其他的断路器,例如Resilience4j)
			3.在Controller层的方法上,使用@HystrixCommand注解进行配置功能(具体看下面5.3.1-4降级策略)。或者直接在配置文件进行配置(具体看下面5.3.5配置文件)
		5.服务降级
			1.概念:当访问依赖系统发生请求失败、超时、拒绝等情况,会根据会进入定义的回退方法中,返回相对友好的错误提示或者备用应答逻辑。
			2.作用:防止级联故障,返回友好提示。
			3.降级策略:
				参考链接:https://blog.csdn.net/qq_34561892/article/details/128022263
				注:@HystrixCommand的注解配置优先级高于配置文件
				1.熔断降级
					    /**
					      * circuitBreaker.enabled:是否开启断路器,默认true
					      *
					      * circuitBreaker.requestVolumeThreshold:请求数量的阈值,默认20
					      *
					      * circuitBreaker.errorThresholdPercentage:失败的比例阈值,默认50
					      *
					      * circuitBreaker.sleepWindowInMilliseconds:熔断的时长,默认5000
					      *
					      * metrics.rollingStats.timeInMilliseconds:统计请求数量的时间段长短,默认10000
					      * 
					      * @return
					      * /
				    @HystrixCommand(
			            fallbackMethod = "circuitBreakerFallback",
			            commandProperties = {
			                @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ENABLED, value = "true"),
			                @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "20"),
			                @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "50"),
			                @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "20000"),
			                @HystrixProperty(name = HystrixPropertiesManager.METRICS_ROLLING_STATS_TIME_IN_MILLISECONDS, value = "5000")
			    		}
		    		)
				2.超时降级
					    /**
					     * execution.timeout.enabled:是否开启请求超时,默认true
					     *
					     * execution.isolation.thread.timeoutInMilliseconds:请求的超时时间,默认10000
					     *
					     * execution.isolation.thread.interruptOnTimeout:当请求超时时,是否中断线程,默认true
					     *
					     * @return
					     */
					    @HystrixCommand(
					            fallbackMethod = "timeoutFallback",
					            commandProperties = {
					                @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_TIMEOUT_ENABLED, value = "true"),
					                @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "5000"),
					                @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT, value = "true"),
					            }
					    )
				3.线程池隔离
					    /**
					     * execution.isolation.strategy:资源隔离策略,支持THREAD、SEMAPHORE。默认THREAD
					     *
					     * coreSize:线程池的核心线程数,默认10
					     *
					     * maximumSize:线程池的最大线程数,默认10(实际在操作中无法识别该属性,待后期版本验证)
					     *
					     * allowMaximumSizeToDivergeFromCoreSize:是否使maximumSize参数生效,默认false(实际在操作中无法识别该属性,待后期版本验证)
					     *
					     * maxQueueSize:默认-1(如果是-1,则线程池的内部的队列使用SynchronousQueue,否则使用LinkedBlockingQueue)
					     *
					     * keepAliveTimeMinutes:线程池中的线程的生存时间(单位:分钟),默认1
					     *
					     * queueSizeRejectionThreshold:线程池中的队列长度达到多少就可以拒绝添加任务,即使队列长度没有达到 maxQueueSize。因为阻塞队列的maxQueueSize不能动态调整,所以引用这个参数来动态调整拒绝任务时的队列长度。默认5。
					     *
					     * @return
					     */
					    @HystrixCommand(
					            fallbackMethod = "isolationThreadPoolFallback",
					            commandProperties = {
					                    @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "THREAD")
					            },
					            threadPoolProperties = {
					                    @HystrixProperty(name = HystrixPropertiesManager.CORE_SIZE, value = "1"),
					                    @HystrixProperty(name = HystrixPropertiesManager.MAX_QUEUE_SIZE, value = "-1"),
					                    @HystrixProperty(name = HystrixPropertiesManager.QUEUE_SIZE_REJECTION_THRESHOLD, value = "1"),
					                    @HystrixProperty(name = HystrixPropertiesManager.KEEP_ALIVE_TIME_MINUTES, value = "1")
					            }
					    )
				4.信号量隔离(3、4统称,资源隔离)
					    /**
					     * execution.isolation.strategy:资源隔离策略,支持THREAD、SEMAPHORE。默认THREAD
					     *
					     * execution.isolation.semaphore.maxConcurrentRequests:信号量隔离中的最大并发请求数,默认10
					     *
					     * @return
					     */
					    @HystrixCommand(
					            fallbackMethod = "isolationSemaphoreFallback",
					            commandProperties = {
					                    @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "SEMAPHORE"),
					                    @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS, value = "2")
					            }
					    )
				5.配置文件
					hystrix:
					    command:
					        default:
					            circuitBreaker:
					                enabled: true
					                requestVolumeThreshold: 20
					                errorThresholdPercentage: 50
					                sleepWindowInMilliseconds: 5000
					            execution:
					                timeout:
					                    enabled: true
					                isolation:
					                    thread:
					                        timeoutInMilliseconds: 2000
					                        interruptOnTimeout: true
					                    semaphore:
					                        maxConcurrentRequests: 10
					                    strategy: THREAD
					            metrics:
					                rollingStats:
					                    timeInMilliseconds: 10000
					    threadpool:
					        default:
					            coreSize: 10
					            maximumSize: 19
					            allowMaximumSizeToDivergeFromCoreSize: false
					            keepAliveTimeMinutes: 1
					            maxQueueSize: -1
					            queueSizeRejectionThreshold: 5

		6.监控服务
			参考链接:https://blog.csdn.net/qq_39826207/article/details/130116691
			1.Actuator服务监控
				1.背景:是Spring Boot提供的一个专门用于监控应用程序的starter启动器
				2.使用实现
					1.添加依赖
				        <dependency>
				            <groupId>org.springframework.cloud</groupId>
				            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
				        </dependency>
				        <dependency>
				            <groupId>org.springframework.boot</groupId>
				            <artifactId>spring-boot-starter-actuator</artifactId>
				        </dependency>
					2.配置文件
						management:
						  endpoints:
						    web:
						      exposure:
						        include: hystrix.stream # 开放Hystrix监控访问的端口
						  endpoint:
						    hystrix:
						      stream:
						        enable: true # 再次声明,开放Hystrix监控端口							
			2.DashBoard 单一仪表盘
				1.使用实现
					1.添加依赖
				        <dependency>
				            <groupId>org.springframework.cloud</groupId>
				            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
				        </dependency>
				        <dependency>
				            <groupId>org.springframework.cloud</groupId>
				            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
				        </dependency>
				        <dependency>
				            <groupId>org.springframework.boot</groupId>
				            <artifactId>spring-boot-starter-actuator</artifactId>
				        </dependency>
					2.启动类加@EnableHystrixDashboard注解
					3.配置文件
						hystrix:
						  dashboard:
						    proxy-stream-allow-list: localhost
						management:
						  endpoints:
						    web:
						      exposure:
						        include: hystrix.stream # 开放Hystrix监控访问的端口
						  endpoint:
						    hystrix:
						      stream:
						        enable: true # 再次声明,开放Hystrix监控端口
			3.Turbine 聚合仪表盘(多个服务一起查看)
				1.添加依赖
				2.启动类添加
				3.配置文件
		7.其他
			1.级联故障
				概念:分布式系统中,某服务发生故障Down掉,导致其他依赖此服务的其他服务一起Down掉,久而久之会导致整个系统一起瘫痪。
				原因:分布式或微服务间的相互调用采用的是HTTP、RPC,一般都会设置请求超时、失败重试等机制,为了保证调用成功。再未设置熔断机制时,就会导致调用故障服务的其他服务发生请求堆积,不断消耗内存、CPU,慢慢Down掉,以此类推。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值