一篇文章带你快速理解springcloud微服务架构
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
SpringCloud微服务
微服务的模式和形式我在前面已经进行部分的提及,但是一直没落实到技术层面,这段时间我也在次研究了一下微服务,下面我先贴出SpringCloud整体涉及的结构:
上面展示的这些是SpringCloud整体的结构
先对这些空间做一个初步的介绍:
- Ribbon,客户端负载均衡,重试机制。
- Hystrix,客户端容错保护,服务熔断、请求缓存、请求合并、依赖隔离。
- Feign,声明式服务调用,本质上就是Ribbon+Hystrix(优化代码,避免直接使用RestTemplate的混乱)Bus,消息总线,配合Config仓库修改的一种Stream实现,独自启动不需要依赖其它组件。
- Eureka,服务注册中心,特性有失效剔除、服务保护。
- Dashboard,Hystrix仪表盘,监控集群模式和单点模式,其中集群模式需要收集器Turbine配合。Zuul,API服务网关,功能有路由分发和过滤。还有其它服务空间,包括configuration等等
那么什么是注册中心呢?
注册中心,是服务的提供者发布自己服务的地方,传统手写的restful接口提供的服务会涉及到服务发布者的端口IP等等,通过注册中心可以直接调用已经发布在上面的服务,只需要通过服务名即可
从图中可以看出,服务提供者将自己的服务发布到注册中心,消费者从注册中心取出服务,然后消费,这样生产者只需要关注自身的业务,将自己的服务发布到注册中心就行了,消费者无需关注生产者的内容,只需要从注册中心取出服务就行了,这样将生产者和消费者直接的耦合给断绝了
为什么使用Restful?
首先springcloud对比dubbo,最大的特点之一就是使用Restful的模式进行交互,dubbo是基于RPC进行通信的,而Restful是基于Http协议进行的,从协议的角度上来说Http和RPC都是基于TCP进行研发的协议,Http是最广泛的,不仅支持浏览器还支持各种APP通信,这么来说吧Http就是大家都在用的协议,而RPC是针对某一个平台某一个环节针对性开发的自定义协议,Http由于大众化,所以本身协议会有点笨重,解析起来自然也比RPC要慢,这也是RPC的优势之一,但是Http具有良好的跨平台性质,如下图:
SpringCloud服务的横向拓展
使用SpringCloud的另一个目的就是便于服务的横向拓展,大家都知道,当某一个服务由于访问压力变成瓶颈的时候,我们常常希望这个服务能进行负载均衡,分摊压力,以便于更好的向外界提供服务
我们可以在图片中看出,用户服务是具有两个实例的,但是消费者并不知道用户服务是具有两个实例,消费者只知道,当前有用户服务对外提供服务,所以消费者只需要知道服务名就行了,不用在意是哪个服务实例对其提供服务,这样也是进一步封装生产者对外提供服务,同时做了负载均衡,这样加入用户服务突然增加业务量,那么我们只需要再运行多个用户服务的实例即可
SpringCloud熔断机制
在开始熔断机制原理讲解之前,先理解一下什么是服务依赖
从图片上来看,第一行服务A是调用服务B,第二行服务A调用服务B,服务B调用服务C,这样就有一个服务链,A->B->C,假设现在由于网络动荡或者服务器奔溃的原因,服务C挂掉了,然而服务A的访问仍然很大,这样服务A继续请求服务B,而服务B由于无法调用服务C一直在等待,最后导致请求过多,服务B也被压垮了
熔断的原理
当C服务停止的时候,B自动调用写死的数据进行回复,从而避免因为请求过多导致A服务奔溃的情况.
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-07-12
本文作者:程序员麦冬
本文来自:“掘金”,了解相关信息可以关注“掘金”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
D语言 2.093.0 发布,改进 GC!
D语言是一个性能接近于 C++ 的现代风格编程语言,具有强大的语言表达力,语法简单的像 PHP,前面几个重要的版本中对苹果 ARM64 架构进行了支持,相信不久就可以看到基于D语言的游戏引擎运行于 iOS 平台之上!在服务端领域功能完备的 Hunt Framework 3.3.0 稳定版也即将发布!我们相信经过众多D语言开发者的不断努力即将看到 DLang 在全平台都可施展拳脚,其中包含 服务端、桌面端、iOS、Android、WebAssembly 以及嵌入式开发平台等。 D语言 2.093.0 版本主要改进包含: 共享变量初始化的预览; 模板实例化统计; install.sh 脚本更好的对 Windows 支持; 高精度的 GC 内存选项。 更多更细内容查看 Changelogs。 官方各种编译器最新版下载: https://dlang.org/download.html
- 下一篇
Apache IoTDB 系列教程-6:性能优化(0.8-0.10)
今天的内容包括建模优化、读写性能优化,会涉及一些简单的原理介绍。主要面向0.8 - 0.10 版本。 正文 3754 字,预计阅读时间 10分钟。 建模指南 关于存储组 现在每个存储组是一个相对独立的引擎,而且读写锁是存储组级别的。因此把存储组从1改到10,读写基本能增速8倍。单个 IoTDB 实例推荐设置 CPU 核数个存储组。存储组越多,并行度就越高。我们之后打算把锁粒度下放到设备层。 设备 设备这个概念没有在 SQL 语句里显示的定义出来,而是在服务器端处理时候默认将倒数第二层设置为设备,导致大家容易忽略这个概念。先说一下设备影响什么。 (1)区分顺序数据 和 乱序数据是以设备为粒度的。举个例子,假如一个设备在内存里写了时间戳 1-10 的数据(不论写哪些测点,时间戳都会算到这个设备头上),落盘了,再写时间戳<=10 的数据,这些数据就会被当做乱序数据缓存并落盘。 (2)设备粒度的时间范围索引。对于每个 TsFile 文件,会构造设备粒度的索引在内存里,假如所有设备都活跃,N 个 TsFile,D 个设备,就有 N*D 条索引。百万级设备的索引内存会吃不消。这个东西我们会在...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- MySQL8.0.19开启GTID主从同步CentOS8