Ribbon

spring boot+spring cloud面试笔记

南楼画角 提交于 2020-12-19 07:52:07
什么是SpringBoot? 1、用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件) 2、创建独立的spring引用程序main方法运行 3、嵌入Tomcat无需部署war包,直接打成jar包nohup java -jar – & 启动就好 4、简化了maven的配置 4、自动配置spring添加对应的starter自动化配置 SpringBoot常用的starter: 1、spring-boot-starter-web(嵌入Tomcat和web开发需要的servlet和jsp支持) 2、spring-boot-starter-data-jpa(数据库支持) 3、spring-boot-starter-data-Redis(Redis支持) 4、spring-boot-starter-data-solr(solr搜索应用框架支持) 5、mybatis-spring-boot-starter(第三方mybatis集成starter) SpringBoot自动配置原理: 1、@EnableAutoConfiguration这个注解会"猜"你将如何配置spring,前提是你已经添加了jar依赖项,如果spring-boot-starter-web已经添加Tomcat和SpringMVC

Spring Cloud Feign 调用过程分析

隐身守侯 提交于 2020-12-15 08:48:56
前面已经学习了两个Spring Cloud 组件: Eureka:实现服务注册功能; Ribbon:提供基于RestTemplate的HTTP客户端并且支持服务负载均衡功能。 通过这两个组件我们暂时可以完成服务注册和可配置负载均衡的服务调用。今天我们要学习的是Feign,那么Feign解决了什么问题呢? 相对于Eureka,Ribbon来说,Feign的地位好像不是那么重要,Feign是一个声明式的REST客户端,它的目的就是让REST调用更加简单。通过提供HTTP请求模板,让Ribbon请求的书写更加简单和便捷。另外,在Feign中整合了Ribbon,从而不需要显式的声明Ribbon的jar包。 前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring

SpringCloud 学习总结(二)

谁都会走 提交于 2020-12-14 11:29:13
SpringCloud 学习总结(一) SpringCloud 学习总结(二) 服务容错保护Hystrix Hystix是Netflix开源的一个延迟和容错库,其中提供了基础的熔断功能,用于隔离访问远程服务、第三方库,防止出现级联失败。关于Hystrix更详细的原理,可以参考官方文档: https://github.com/Netflix/Hystrix/ 雪崩问题: 在微服务框架中,系统间都通过微服务进行调用,在微服务之间会存在这相互依赖关系。假设每个微服务运行在不同的进程中,依赖的调用只则需要使用远程调用方式。如果其中一个网络出现问题,或者延迟,此时,调用方式在不断的调用,后方的依赖会出现故障。当响应过多时,就可能出现雪崩效应,造成系统的崩溃。 下图中,我们可以看到微服务中,服务间复杂的调用关系,一个请求,可能需要调用多个微服务接口才能实现,会形成非常复杂的调用链路: 如图,一次业务请求,需要调用A、P、H、I四个服务,这四个服务又可能调用其它服务。如果此时,某个服务出现异常: 例如:微服务I发生异常,请求阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞: 服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,形成雪崩效应。 Hystix解决雪崩问题: 线程隔离(服务降级)

java架构之路-(微服务专题)nacos集群精讲实战

心不动则不痛 提交于 2020-12-13 01:23:11
上次回顾:   上次博客,我们主要说了微服务的发展历程和nacos集群单机的搭建,单机需要-m standalone启动,集群建议使用nginx做一下反向代理,自行保证mysql和ngxin的高可用。 本次定位:   一、nacos的内部概念   二、nacos的基本使用   三、为下次ribbon组件做准备 nacos的内部概念   上次我们搭建好了nacos集群,这次我们就在那个集群基础上来继续说,上次我们只说到了服务如何注册到我们的nacos,但是调用还没说,这次我们来说说各种调用吧(调用的负载均衡算法在ribbon去说)。   ①.调用,我们先来一个最简单的调用,用户系统去调用订单系统,查询订单。   建立两个springboot项目,加入注册中心配置。配置上次博客说过了,这里就不再赘述了,在订单服务内写一个方法。 @RestController public class OrderController { @GetMapping( "/getOrderData" ) public String getOrderData(){ return "获得订单服务的数据" ; } @GetMapping( "/getOrderData-B" ) public String getOrderDataB(){ return "获得订单服务的数据B" ; } }   我就简单写一个了

springcloud学习笔记

瘦欲@ 提交于 2020-12-13 00:51:13
一、什么是springcloud,有什么作用   Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 二、springcloud的基本使用   1.服务的注册与发现     ①创建一个parent maven项目springcloud,然后在该maven项目下面创建两个子项目eureka-server,eureka-client       Ⅰ、springcloud          < 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://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 </ modelVersion > < groupId > com.demo </ groupId > < artifactId >

Spring Cloud架构的各个组件的原理分析

坚强是说给别人听的谎言 提交于 2020-12-12 21:42:41
作者:白羽毛 来源:toutiao.com/i6888099913867985422/ 我们先认识一下SpringCloud的各个组件,然后知其所以然。 原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付” 扣减相应的商品库存 通知仓储中心,进行发货 给用户的这次购物增加相应的积分 如上,微服务的应用场景和核心竞争力: 降低耦合:每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。 独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。 选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,故需要对技术栈进行升级时所面临的风险就较低,甚至完全重构一个微服务也是可行的。 容错机制:当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下

原理解析 -Spring Cloud

感情迁移 提交于 2020-12-12 16:04:40
1.内置负载均衡规则 1.1 RoundRobinRule 直接 round robin 轮询,从一堆 server list 中,不断的轮询选择出来一个,每个 server 平摊到的请求,基本是平均的 1.2 AvailabiltyFileringRule 这个会考察服务器的可用性,如果3次链接失败,就会等待30秒后再次访问;如果不断失败,那么等待时间会不断变长,如果某个服务器的并发请求太高了,那么会绕过去,不再访问 1.3 WeightedResponseTimeRule 这个代表权重,每个服务器都可以有权重,权重高的优先访问,如果某个服务器响应时间比较长,那么权重就会降低,减少访问 1.4 ZoneAvoidanceRule 会根据区域和服务器来进行负责均衡,说白了就是机房的意思 1.5 BestAvailableRule 忽略那些连接失败的服务器,然后尽量找并发比较低的服务器来请求 1.6 RandomRule 随机找一个服务器 1.7 RetryRule 可以重试,就是通过 round robin 找到的服务器请求失败,会重新找一个服务器 2.基本整合原理 3.源码级别大体流程 4.@LoadBalanced 极简流程 首先通过 @loadBalanced注解,找到对应的相关配置类 LoadBalancerAutoConfiguration ,他还有一个负责异步调用的类

使用feign远程调用接口

早过忘川 提交于 2020-12-11 11:51:37
项目中开发中,经常会用到调用其他项目的接口 或者第三方接口的情况,以前经常使用的是spring 的restTemplate 或者httpClient,但是使用每次都需要写一些公共的调用代码,比较麻烦。 feign 则能够比较好的解决了这个问题,不是spring cloud 项目也可以使用。 一,是什么 feign 是Netflix 开发的声明式的http客户端,可以帮我们更加方便的调用http接口。在使用时候,就像调用本地方法一样,创建一个接口,然后在接口上添加一些注解,代码就可以完成了。spring Cloud 对feign进行了增强,使feign支持spring mvc 注解,并且整合了Ribbon 和Eureka,从而让Feign的使用更加的方便。 二,怎么用 1.添加pom引用 < dependency > < groupId > org . springframework . cloud < / groupId > < artifactId > spring - cloud - starter - feign < / artifactId > < / dependency > 2.启动类添加@EnableFeignClients @SpringBootApplication @EnableFeignClients public class DemoApplication

灰度发布浅析

╄→尐↘猪︶ㄣ 提交于 2020-12-08 09:57:25
定义 灰度发布就是已一种平滑过渡的方式来发布,通过切换线上新旧版本之间的路由权重,逐步从旧版本切换到新版本;比如要上线新功能,首先只是更新少量的服务节点,通过路由权重,让少部分用户体验新版本,如果没有什么问题,再更新所有服务节点;这样可以在出现问题把影响面降到最低,保证了系统的稳定性。 灰度发布 一个系统往往有接入层比如nginx(Openresty),网关层比如zuul,以及服务层比如各种rpc框架;在这几层都有路由功能,也就是说这几层都可以做灰度;接入层可以使用nginx+lua来实现灰度,网关层zuul可以结合ribbon来实现灰度,rpc框架如dubbo本身提供了路由功能可以直接做灰度处理;下面看看具体如何去实现; 接入层灰度 接入层我们这里使用功能更强大的Openresty,然后使用lua进行路由转发,相关的路由策略可以配置在分布式缓存redis里面,当然也可以持久化到数据库里面; 准备 准备一台Openresty,两台web服务器tomcat(端口分别是8081,8082),以及redis;为了方便模拟在redis里面配置白名单,如果在白名单里面就走8082,不在则走8081; Openresty配置 需要在Openresty中配置支持lua,以及相关路由的lua脚本,nginx.conf配置如下: http { ... lua_package_path "

真香!阿里、腾讯、百度、京东等多位架构师鼎力推荐SpringCloud笔记

老子叫甜甜 提交于 2020-12-05 15:14:19
前言 过去十几年里,广义的“微服务”架构以其小团队快速创建和迭代服务带来的架构弹性、扩展性、敏捷性,天然匹配了互联网业务快速发展和变化的特点,在各大互联网公司取得了巨大的成功。时至云原生应用时代,已不再是是否采用微服务架构的问题,而是何时采用以及如何在生产上实战的问题。 今天分享的这份学习资料:讲解将如何基于Spring Cloud生态体系进行微服务实战的方方面面的细节都涵盖了,从这个意义上来讲,确实做到了“重新定义”。 本书内容有3大特色: 足够广:详细讲解了Spring Cloud的核心常用组件以及Spring Cloud的增强生态,针对生产实践中常见问题给出可落地的&*佳实践方案,无论您是初学者还是开发人员,还是架构师,都能从此书获益。 有深度:本书对涉及的Spring Cloud组件按照从入门、进阶、实战、扩展增强的顺序循序渐进进行剖析和讲解,帮助作者知其然并知其所以然,授之以渔。 重实践:注重生产实践,通过案例驱动,给出优秀的生产实践方案和优秀的生产配置,帮助读者快速落地企业微服务架构。 本书大牛出版: 本书由Spring Cloud中国社区官方撰写,基于Spring Cloud的Finchley.RELEASE版本,基于Spring Cloud的Finchley.RELEASE版本,核心成员来自原阿里、蚂蚁金服、京东金融等互联网企业,经验丰富。 本书内容有3大特色