详细的讲一下微服务框架--SpringCloud
一:微服务架构?
1.为什么需要微服务架构
大家都知道,最开始开发系统就是单机模式(only one computer)。但是随着网络的不断发展,数据不断的增加,业务不断的增加,之前在一台机器上实现的服务现在性能上更不上了,所以很需要一种模式来解决这个问题---微服务架构由此诞生。
2.微服务架构是什么
大白话讲一下就是:把一个大型的单个应用程序和服务拆分为多个的支持微服务,各自都有对应的业务。个人认为就是按照业务来划分成不同的微服务。
3.其相对于之前的单机模式的优势:
其处理复杂的系统时表现出高性能,易维护,好协调等好处
(1)通过分解各个微服务,以及各大组件技术,使得服务更好流畅的执行,分工明确。比如说之前饭店有10个人,每个人既要跑堂,又要记账,又要做饭;这很麻烦;然而使用微服务架构后每个人都有了i明确的分工,自然就搞笑了很多,责任也好追查。
(2)微服务架构模式是每个微服务独立的部署。开发者不再需要协调其它服务部署对本服务的影响。这种改变可以加快部署速度。UI团队可以采用AB测试,快速的部署变化。微服务架构模式使得持续化部署成为可能。
(3)这种架构使得每个微服务都可以有专门开发团队来开发。开发者可以自由选择开发技术,提供API服务。这种自由意味着开发者不需要被迫使用某项目开始时采用的过时技术,他们可以选择现在的技术。甚至于,因为服务都是相对简单,即使用现在技术重写以前代码也不是很困难的事情。
二:当今最流行的微服务框架---Spring Cloud
Spring Cloud整体核心架构只有一点:Rest服务。也就是这一点与其他所有的微服务框架都不同,其他都可以算是PRC框架,而SpringCloud是基于Restful实现的服务调用。而且其社区牛逼,技术更新相比很快。还有一点就是该框架提供的是全家桶服务;不像Dubbo这些框架缺少很多组件,就采用其他组件来弄,搞得像是个杂牌机一样;不过也正如Doubbo的一位负责人说的,Dubbo他的目的和SpringCloud不一样,其旨在解决各个微服务的性能,管理等。接下来我们主要讲各大组件技术。
1.Eureka(注册中心)
就是在服务的调用和被调用之间加了一个中间件。这个Rureka主要分为服务器和客户端。
服务生产者把服务注册到Eureka;服务消费者在Eureka中找到想要的服务API,并进行调用。Eureka大多都是用集群,其保证的是AP原则。就是可用性和分区容错性。
2.Ribbon,Feign(多业务端的负载均衡)
SpringCloud Ribbon 是一个基于Netflix Ribbion实现的的客户端负载工具。主要功能是提供客户端的软件负载均衡算法。通过SpringCloud的封装,可以让我们轻松的将面向服务的REST服务请求自动转换为客户端负载均衡的服务调用。服务提供者只需要启动多个服务实力示例并注册到一个注册中心或是多个相关联的服务注册中心。服务消费者直接通过调用@LoadBalanced注解修饰过的RestTemplate来实现面向服务接口调用。
大白话时刻:就是将LB逻辑集成到消费方,消费方从注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
Feign是一个声明式WebService端。使用Feign能够让编写WebService客户端更加简单,他的使用方法是定义一个接口,然后在其上面添加注解,其与Rureka和Ribbon组合使用以支持负载均衡。
Feign集成了Ribbon:利用Ribbon某个微服务维护了服务列表信息,通过集成IRule这个接口,可以实现不同的LB算法。而与Ribbon不同的是通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。
3.Hystrix熔断处理
Hystrix主要是处理分布式系统的延迟和容错的开源库。通常在分布式系统中会出现服务A依赖服务B,服务B有依赖服务C(这种情况叫做扇出);而只要B断开或出问题的话,时间一长会导致所有的服务都卡在这里就会出现系统崩溃。那么Hystrix能够保证在一个微服务出现问题了,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
而把其称之为断路器,也是在一个服务单元发生故障后,通过故障检测(类似熔断保险丝),向调用方返回一个符合预期,可处理的备选响应(Fallback),而不是长时间的等待或者抛出调用方无法处理的异常。这样就保证了服务调用方的线程不会被长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
其能够完成服务降级,服务熔断,服务限流,接近实时的监控。其实和前面说的意思差不多。
4.ZUUL网关代理。
Zuul服务器也是会注册进Eureka中,提供代理,路由,过滤三大功能呢。
Zuul注册进Eureka中,同时也会从Eureka的服务列表中获得其他的微服务信息。即以后的微服务都是通过Zuul跳转后获得的。
5.SpringCloud Config分布式配置中心
这个理解起来就很简单了。就是把每一个微服务提供者的配置文件统一管理。可以放到Git上,或者其他服务器利用SVN来管理。
三:总结
SpringCloud是一个提供全家桶的微服务架构。下面是常用的组件架构图。
详细的讲一下微服务框架--SpringCloud的更多相关文章
- 微服务框架——SpringCloud
1.SpringCloud微服务框架 a.概念:SpringCloud是基于SpringBoot的微服务框架 b.五大神兽:Eureka(服务发现).Ribbon(客服端负载均衡).Hystrix(断 ...
- 微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现
eureka-server eureka服务端,提供服务的注册与发现,类似于zookeeper 新建spring-boot工程,pom依赖: <dependency> <groupI ...
- 微服务框架SpringCloud与Dubbo
#v1.0.0# 1.背景 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点.阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm捐赠给 ...
- 微服务框架——SpringCloud(三)
1.Zuul服务网关 作用:路由转发和过滤,将请求转发到微服务或拦截请求.Zuul默认集成了负载均衡功能. 2.Zuul实现路由 a.新建springboot项目,依赖选择 Eureka Discov ...
- 微服务框架——SpringCloud(二)
1.Feign声明式服务调用(负载均衡+熔断器) a.概念:Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单.Feign整合了Ribbon和Hys ...
- 微服务框架——SpringCloud(四)
1.Spring Cloud Config 分布式配置 a.Config服务器 ①新建springboot项目,依赖选择Config Server ②pom文件关键依赖 <parent> ...
- 基于Spring-Cloud的微服务框架设计
基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍
- SpringCloud微服务框架复习笔记
SpringCloud微服务框架复习笔记 什么是微服务架构? 微服务是一种软件开发技术,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进 ...
- java框架之SpringCloud(1)-微服务及SpringCloud介绍
微服务概述 是什么 业界大牛 Martin Fowler 这样描述微服务: 参考[微服务(Microservices)-微服务原作者Martin Flower博客翻译]. 下面是关于上述博客中的部分重 ...
- 微服务框架Dubbo与Springcloud的区别
微服务框架Dubbo与Springcloud的区别 微服务主要的优势如下: 1.降低复杂度 将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累.每一个微服务专注于单一功能,并通过定 ...
随机推荐
- (完美解决)chatGPT登陆正常却无法发送消息
这几天要写关于项目的文字性材料,登陆上chatgpt,结果发现登陆正常,各方面都正常,但是点击发送消息就会不停转圈圈,无法发送出去,然后联想到之前看到朋友圈有人说chatGPT崩了,就没多在意,结果今 ...
- vscode 合并分支 举例 master merge dev
举例 将 dev 开发线 合并到 master 1 确定你在dev线,将dev代码改动全部提交 2 切换master,确定是最新代码,不确定就pull下,选择合并分支,见上图 3 在下拉的提示框中选择 ...
- K8s中Labels(标签)和Annotations(注解)对比
在Kubernetes中,Labels(标签)和Annotations(注解)都是用于为资源对象添加元数据的机制,但它们在用途.选择能力以及数据形式上存在一些关键的区别. 首先,Labels主要用于标 ...
- arch安装xfce4的时候,出现无法设置开机启动的问题
sudo systemctl enable lightdm Failed to enable unit: File /etc/systemd/system/display-manager.serv ...
- Python isinstance() 函数含义及用法解析
描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关 ...
- Performance Improvements in .NET 8 & 7 & 6 -- String【翻译】
原文:https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/#strings-arrays-and-spans ...
- linux权限、特殊权限、ACL控制
Linux基本权限 1.权限基本概述 1.什么是权限? 我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用 ...
- 记录mysql order by xxx limit xxx数据重复的问题
引用 http://vsalw.com/9768.html 记录mysql排序字段有重复值,分页数据错乱问题,下面2个sql 除了分页limit外,其他都一样, 但是第三页的结果却包含部分第二页的数据 ...
- 在 .NET 中使用 OPC UA 协议
目录 什么是 OPC UA UaExpert 的使用 下载 UaExpert 首次启动 添加 OPC UA 服务器 连接 OPC UA 服务器 查看 PLC 数据 使用 C# 读写 OPC UA 数据 ...
- Kingbase 函数查询返回结果集
数据库使用过成中,时常会遇到需要返回一个结果集的情况,如何返回一个结果集,以及如何选择一个合适的方式返回结果集,是现场经常需要考虑的问题. 下面介绍KingbaseES中各种返回结果集的方式. 1.通 ...