hystrix

SpringCloud Feign 服务之间的请求

懵懂的女人 提交于 2020-09-30 17:43:56
对Spring Cloud Ribbon和Spring Cloud Hystrix在实践过程中,这两个框架的使用几乎是同时出现的,Spring Cloud Feign就是一个更高层次的封装来整合这两个基础工具以简化开发。它基于Netflix Feign实现,除了提供这两者的强大功能之外,它还提供了一种声明式的Web服务客户端定义的方式。Spring Cloud Feign在RestTemplate的封装基础上做了进一步封装,由它来帮助定义和实现依赖服务接口的定义,在Spring Cloud Feign的实现下,只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方接口的绑定。Spring Cloud Feign具备可插拔的注解支持,包括Feign注解和JAX-RS注解,为了适应Spring用户,它在Netflix Feign基础上扩展了对Spring MVC注解的支持。 1. 快速集成 Spring Cloud Feign 基础服务搭建 eureka-server工程:服务注册中心 hello-service工程:服务提供者 Spring Cloud Feign Client服务搭建 创建Spring Boot 工程 feign-consumer 添加依赖: spring-cloud-starter-eureka-server, spring-cloud-starter

京东高级工程师开发十年,编写出:“亿级流量网站架构核心技术”

坚强是说给别人听的谎言 提交于 2020-09-30 16:45:47
前言: 相信大家都知道,说起亿万流量网站高性框架的设计方案,就能想到关键的两点,那就是高可用和高并发。而要谈对高并发和高可用有多熟悉,京东的大佬们还是有一定发言权,而作为京东高级工程师更是大佬级别。 而今天分享的正是京东十年开发经验工程师编写的:“亿级流量网站架构核心技术”。 笔记作者: 京东高级工程师:张开涛 笔记特点: 条理清晰,含图像化,内容创新深奥却易懂。 笔记大致分为四部分∶ 概述、高可用原则、高并发原则、案例实战。 从负载均衡、限流、降级、隔离、超时与重试、回滚机制、压测与预案、缓存、池化、异步化、扩容、队列等多方面详细地介绍了亿级流量网站的架构核心技术,相信大家看完能快速在实践中加以运用。 话不啰嗦直上笔记: 特别说明:由于笔记内容过于详细,苦于篇幅有限,下面只能将这份文档的内容以图片的形式展现出来,如果你需要“高清完整的pdf版”,文末有免费领取方式 第1 部分 概述: 1. 交易型系统设计的一些原则 2. 高并发原则 无状态 拆分 服务化 消息队列 数据异构 缓存银弹 并发化 3. 高可用原则: 降级 限流 切流量 可回滚 4.业务设计原则: 防重设计 幂等设计 流程可定义 状态与状态机 后台系统操作可反馈 后台系统审批化 文档和注释 备份 第2 部分 高可用: 1.负载均衡与反向代理: upstream配置 负载均衡算法 失败重试 健康检查 其他配置 长连接 H

SpringCloud Feign 服务内部调用

江枫思渺然 提交于 2020-09-30 10:46:03
对Spring Cloud Ribbon和Spring Cloud Hystrix在实践过程中,这两个框架的使用几乎是同时出现的,Spring Cloud Feign就是一个更高层次的封装来整合这两个基础工具以简化开发。它基于Netflix Feign实现,除了提供这两者的强大功能之外,它还提供了一种声明式的Web服务客户端定义的方式。Spring Cloud Feign在RestTemplate的封装基础上做了进一步封装,由它来帮助定义和实现依赖服务接口的定义,在Spring Cloud Feign的实现下,只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方接口的绑定。Spring Cloud Feign具备可插拔的注解支持,包括Feign注解和JAX-RS注解,为了适应Spring用户,它在Netflix Feign基础上扩展了对Spring MVC注解的支持。 1. 快速集成 Spring Cloud Feign 基础服务搭建 eureka-server工程:服务注册中心 hello-service工程:服务提供者 Spring Cloud Feign Client服务搭建 创建Spring Boot 工程 feign-consumer 添加依赖: spring-cloud-starter-eureka-server, spring-cloud-starter

分布式事务解决方案常见误区与实用建议

ぐ巨炮叔叔 提交于 2020-09-30 06:41:34
前言 ​ 最近,工作中要为现在的老系统做拆分和升级,刚好遇到了分布式事务、幂等控制、异步消息乱序和补偿方案等问题,刚好基于实践结合个人的看法记录一下一些方案和思路。 分布式事务 首先,做系统拆分的时候几乎都会遇到分布式事务的问题,一个仿真的案例如下: 项目初期,由于用户体量不大,订单模块和钱包模块共库共应用(大war包时代),模块调用可以简化为本地事务操作,这样做只要不是程序本身的BUG,基本可以避免数据不一致。 后面因为用户体量越发增大,基于容错、性能、功能共享等考虑,把原来的应用拆分为订单微服务和钱包微服务,两个服务之间通过非本地事务操(这里可以是HTTP或者消息队列等)作进行数据同步,这个时候就很有可能由于异常场景出现数据不一致的情况。 事务中直接RPC调用达到强一致性 以上面的订单微服务请求钱包微服务进行扣款并更新订单状态为扣款这个调用过程为例,假设采用HTTP同步调用,项目如果由经验不足的开发者开发这个逻辑,可能会出现下面的伪代码: [订单微服务请求钱包微服务进行扣款并更新订单状态] 处理订单微服务请求钱包微服务进行扣款并更新订单状态方法(){ [开启事务] 1、查询订单 2、HTTP调用钱包微服务扣款 3、更新订单状态为扣款成功 [提交事务] } 这是一个从肉眼上看起来没有什么问题的解决方法,HTTP调用直接嵌入到事务代码块内部,猜想最初开发者的想法是

Spring Cloud面试题万字解析(2020面试必备)

余生颓废 提交于 2020-08-20 08:55:06
前言 关于Spring Cloud的知识总结了一个思维导图分享给大家 1、什么是 Spring Cloud ? Spring cloud 流应用程序启动器是 于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。 2、使用 Spring Cloud 有什么优势? 使用 Spring Boot 开发分布式微服务时,我们面临以下问题 (1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。 (2)服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。 (3)冗余-分布式系统中的冗余问题。 (4)负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。 (5)性能-问题 于各种运营开销导致的性能问题。 (6)部署复杂性 evops 技能的要求。 3、服务注册和发现是什么意思?Spring Cloud 如何实现? 当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化

缓存——使用场景及遇到的问题

*爱你&永不变心* 提交于 2020-08-20 06:33:47
缓存 缓存的作用: 高并发、高性能 高性能:查询速度快 高并发:缓存是走内存的,内存天然就支撑高并发 常见缓存问题: 缓存与数据库双写不一致 缓存雪崩、缓存穿透、缓存击穿 缓存并发竞争 如何保证缓存和数据库一致性: 使用串行化,即:将读请求和写请求放到一个内存队列中。 串行化可以保证缓存与数据库一直,但是会导致系统吞吐量大幅度降低。非严格要求,不要串行化。 经典缓存+DB读写模式 》读:先读缓存,没有读取DB,读出来放入缓存。 》更新:先更新DB,再 删除 缓存。 缓存雪崩 请求量大时,缓存此时也跌机了,导致大量请求直接请求DB,带着DB也跌机了。 缓存雪崩的事前事中事后的解决方案: 事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。 事后:Redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。 缓存穿透 缓存中查询不到,大量的请求直接查询DB. 解决方案: 每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 set -999 UNKNOWN 。然后设置一个过期时间,这样的话,下次有相同的 key 来访问的时候,在缓存失效之前,都可以直接从缓存中取数据。 缓存击穿 某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况

hystrix 所用到的数学统计知识

◇◆丶佛笑我妖孽 提交于 2020-08-20 06:30:36
hystrix 会统计用户延迟,并且对其进行直方分布统计: import org.HdrHistogram.Histogram ; import java.util.Random ; /** * @Classname Main * @Since 2020/7/3 17:55 * @Created by lizhifeng * @Desc * @see */ public class Main { public static void main (String[] args) { Histogram histogram = new Histogram( 3 ) ; for ( int i = 1 ; i< 2000 ; i++ ) { histogram.recordValue( new Random().nextInt( 1000 )) ; } for ( int i = 1 ; i< 8000 ; i++ ) { histogram.recordValue( new Random().nextInt( 100 )) ; } System. out .println(histogram.getMaxValue()) ; System. out .println(histogram.getMean()) ; System. out .println(histogram

记录一次Debug的调试过程

和自甴很熟 提交于 2020-08-20 05:12:07
开发联调阶段通过zuul网关给app提供接口。但调用接口时好时坏,有时抛出如下异常。 { "timestamp" : 1590461140265 , "status" : 500 , "error" : "Internal Server Error" , "exception" : "com.netflix.zuul.exception.ZuulException" , "message" : "TIMEOUT" } 只知道是TIMEOUT,有一定的概率发生,但具体是哪里超时无法确定。也只能让接口调用者先不停的retry。 zuul超时 ? ribbon超时 ? hystrix超时 ? 搜索timeout配置项毫无发现 抛出的堆栈信息包含重要信息。 以下是一些调试的技巧。 打断点: 选择一个地方作为入口。 逐行跟踪: Step Over , Step Into , Force Step Into , Step Out ,Drop Frame , Return to Cursor , Resume Frame 。 这是了解一个软件(插件) 内部执行逻辑最好的方法。只有一步步调试下去,一定能找到到底是哪里出错了。 其余一些捷径。 点击包名即可进入到包内。 包内进行搜索 timeout。 最终在hystrix包内检索到 execution.isolation.thread

Spring Cloud 微服务 分布式

人盡茶涼 提交于 2020-08-20 04:51:38
首先要知道的是Spring Cloud是微服务架构。 微服务架构是一种架构模式,它将单一的应用程序划分成一组很小的服务,服务之间相互协调、互相配合。每个服务都运行在独立的进程中,服务与服务间采用轻量级通信机制(通常是HTTP协议的RESTful API)。每个服务都有着自己的业务,并且能够被独立的部署到生产环境、类生产环境等,对于具体的一个服务而言,应该根据上下文,选择合适的语言、工具对其进行构建。 Spring Cloud中是一种微服务架构,项目案例:www.1b23.com,其中包含如下功能: 服务注册与发现、服务调用、服务熔断、负载均衡、服务降级、服务消息队列、配置中心管理、服务网关、服务监控、全链路追踪、自动化构建部署、服务定时任务。 但是在项目中一般只会用到如下几种: 服务注册与发现:EUREKA 服务负载与调用:NETFLIX OSS RIBBON、NETFLIX FEIGN 服务熔断降级:HYSTRIX 服务网关:NETFLIX Zuul 服务器分布式配置:Spring Coloud Config 服务开发:Spring Boot 下面来看下官方解析 Cloud 分布式系统的开发与一般的系统来说是具有挑战性的。服务之间的交流更为密切,Cloud把项目的工作重点由应用层移到了网络层。代码想要连接到Cloud服务需要12个因素,如配置文件,状态,日志,连接到后端的服务