| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring Cloud -> 正文阅读 |
|
[Java知识库]Spring Cloud |
一.什么是Spring Cloud? Spring Cloud是微服务架构一站式解决方案,在平时构建项目时需要用到服务发现注册,负载均衡,断路器,数据监控,配置中心,消息总线等操作,而 Spring Cloud 为我们提供了一套简易的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务项目的构建。 二.Spring Cloud 的服务发现框架——Eureka总的来说, 举一个生活中的例子,就比如我们平时租房子找中介的事情。 在没有中介的时候我们需要一个一个去寻找是否有房屋要出租的房东,这显然会非常的费力,凭一个人的能力是找不到很多房源供你选择,再者你也懒得这么找下去(找了这么久,没有合适的只能将就)。这里的我们就相当于微服务中的 但是如果只是租客和房东之间进行寻找的话,他们的效率是很低的,房东找不到租客赚不到钱,租客找不到房东住不了房。所以,后来房东肯定就想到了广播自己的房源信息(比如在街边贴贴小广告),这样对于房东来说已经完成他的任务(将房源公布出去),但是有两个问题就出现了。第一、其他不是租客的都能收到这种租房消息,这在现实世界没什么,但是在计算机的世界中就会出现 资源消耗 的问题了。第二、租客这样还是很难找到你,试想一下我需要租房,我还需要东一个西一个地去找街边小广告,麻不麻烦? 那怎么办呢?我们当然不会那么傻乎乎的,第一时间就是去找?中介?呀,它为我们提供了统一房源的地方,我们消费者只需要跑到它那里去找就行了。而对于房东来说,他们也只需要把房源在中介那里发布就行了。 但是,这个时候还会出现一些问题。 1.房东注册之后如果不想卖房子了怎么办?我们是不是需要让房东?定期续约??如果房东不进行续约是不是要将他们从中介那里的注册列表中?移除?。 2.租客是不是也要进行?注册?呢?不然合同乙方怎么来呢? 3.中介可不可以做?连锁店?呢?如果这一个店因为某些不可抗力因素而无法使用,那么我们是否可以换一个连锁店呢? 针对上面的问题我们来重新构建一下上面的模式图 服务发现:其实就是一个“中介”,整个过程中有三个角色:服务提供者(出租房子的)、服务消费者(租客)、服务中介(房屋中介)。 服务提供者: 就是提供一些自己能够执行的一些服务给外界。 服务消费者: 就是需要使用一些服务的“用户”。 服务中介: 其实就是服务提供者和服务消费者之间的“桥梁”,服务提供者可以把自己注册到服务中介那里,而服务消费者如需要消费一些服务(使用一些功能)就可以在服务中介中寻找注册在服务中介的服务提供者。 服务注册 Register: 官方解释:当? 结合中介理解:房东 (提供者? 服务续约 Renew: 官方解释: 结合中介理解:房东 (提供者? 获取注册列表信息 Fetch Registries: 官方解释: 结合中介理解:租客(消费者? 服务下线 Cancel: 官方解释:Eureka 客户端在程序关闭时向 Eureka 服务器发送取消请求。 发送请求后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容: 结合中介理解:房东 (提供者? 服务剔除 Eviction: 官方解释:在默认的情况下,当 Eureka 客户端连续 90 秒(3 个续约周期)没有向 Eureka 服务器发送服务续约,即心跳,Eureka 服务器会将该服务实例从服务注册列表删除,即服务剔除。 结合中介理解:房东(提供者? 三.负载均衡之Ribbon假如一个订单服务只分布在一台服务器上,那么用户的请求都从这台服务器走,这样显然当某一时刻大量访问时造成服务器崩溃,因此考虑到高可用,可以采用集群的方式,就是把一个服务分布在多台机器上,这样就能减小服务器压力,在用户请求时,“太闲”的服务器给用户响应请求,“太忙”的服务器说明此时正在被其他大量用户访问,自己都忙不过来,那么就会叫其他服务器接待,这个过程就是负载均衡。其工作原理就是? 四. Nginx 和 Ribbon 的对比提到?负载均衡?就不得不提到大名鼎鼎的? 我们可以看到? 请注意? 五.Ribbon 的几种负载均衡算法负载均衡,不管?
六.?Hystrix 之熔断和降级所谓?熔断?就是服务雪崩的一种有效解决方案。当指定时间窗内的请求失败率达到设定阈值时,系统将通过?断路器?直接将此请求链路断开。 降级是为了更好的用户体验,当一个方法调用异常时,通过执行另一种代码逻辑来给用户友好的回复。这也就对应着?
那么什么是 熔断和降级 呢?再举个例子,此时我们整个微服务系统是这样的。服务 A 调用了服务 B,服务 B 再调用了服务 C,但是因为某些原因,服务 C 顶不住了,这个时候大量请求会在服务 C 阻塞。?服务 C 阻塞了还好,毕竟只是一个系统崩溃了。但是请注意这个时候因为服务 C 不能返回响应,那么服务 B 调用服务 C 的的请求就会阻塞,同理服务 B 阻塞了,那么服务 A 也会阻塞崩溃。(为什么阻塞会崩溃。因为这些请求会消耗占用系统的线程、IO 等资源,消耗完你这个系统服务器不就崩了么。) ?七.微服务网关——ZuulZuul 的路由功能首先,
然后在启动类上加入? 统一前缀 这个很简单,就是我们可以在前面加一个统一的前缀,比如我们刚刚调用的是?
这样我们就需要通过? 路由策略配置 你会发现前面的访问方式(直接使用服务名),需要将微服务名称暴露给用户,会存在安全性问题。所以,可以自定义路径来替代微服务名称,即自定义路由策略。
这个时候你就可以使用 ``localhost:9000/zuul/FrancisQ1/studentInfo/update` 进行访问了。? 服务名屏蔽 这个时候你别以为你好了,你可以试试,在你配置完路由策略之后使用微服务名称还是可以访问的,这个时候你需要将服务名屏蔽。
路径屏蔽
这样关于 auto 的请求我们就可以过滤掉了。 ?Zuul 的过滤功能 如果说,路由功能是? 过滤器类型: 令牌桶限流? 首先我们会有个桶,如果里面没有满那么就会以一定?固定的速率?会往里面放令牌,一个请求过来首先要从桶中获取令牌,如果没有获取到,那么这个请求就拒绝,如果获取到那么就放行 下面我们就通过?
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:08:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |