微服务架构SpringCloud的理解
微服务架构是什么?
微服务是一种架构思想,实际上以分布式系统方式开发。架构是为了解耦。该架构解决的是分布式中的四个问题:
一、客户端如何访问众多服务;
应用划分为众多服务以后,客户端需要如何访问?
通过统一的API网关入口解决,其作用如下:
•提供统一服务入口,让微服务对前台透明
•聚合后台的服务,节省流量,提升性能
•提供安全,过滤,流控等API管理功能
二、服务之间如何通信;
对内RPC,对外REST,kafka, 消息队列。
三、服务之间如何发现;
Eureka
四、服务挂了如何处理。
•重试机制 - 针对网络不可靠的问题
•限流 - 针对流量太大处理不过来
•熔断机制 - 一定时间无响应就不再连接
•负载均衡 - 针对高并发情况
•服务降级(本地缓存) - 保证核心服务可用,临时下线不必要的业务
微服务架构的优点和缺点有哪些?
一、优点
可用于解决复杂的业务问题;
独立部署,可持续集成;
方便扩展,提高可用性;
业务拆分,方便复用,适合多团队开发;
二、缺点:
运维复杂;
数据一致性难以保证;
服务拆分后,不同业务模块服务之间的通信增加了时延。
SpringCloud是什么?
SpringCloud它制定了微服务、分布式系统框架的规范,它集成了微服务落地需要的一系列框架,如配置管理、服务发现、熔断器、网关,负载均衡等。
它包含服务注册与发现:eureka,负载均衡:Ribbon,服务熔断器:hystrix,服务配置中心管理:spring cloud config,服务接口调用:Feign ,服务路由:Zuul等。
Eureka
当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注
册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。
Eureka自我保护机制
当eurekaserver短时间丢失了过多的实例连接(由于网络故障或者频繁地启动关闭客户端),那么eureka就是进入自我保护机制。一旦进入该模式,eureka就会保护服务注册表中的信息,不会删除任何服务注册表中的数据。这是一种应对网络异常的安全保护措施。
负载均衡如何起作用?
负载均衡就是有多台服务器,将外部请求均匀地分布到这些服务器上。这样便能合理均匀地管理负载!负载均衡的策略有随机策略,轮询策略,重试策略等。在服务消费者的RestTemplate加入注解@LoadBalanced,便可以使用负载均衡,提供Ribbon的支持。除了使用默认的负载均衡策略外,我们还可以使用自行选择负载均衡策略。
什么是 Hystrix?它如何实现容错?
Hystrix是服务熔断,相当于电力中的“断路器”。因为服务之间通过远程调用实现信息交互,那么当某个服务的响应太慢或者故障,又或者因为网络波动或故障,则会造成调用者延迟或调用失败,当大量请求到达,则会造成请求的堆积,导致调用者的线程挂起,从而引发调用者也无法响应,调用者也发生故障。
微服务架构中的熔断器,就是当被调用方没有响应,调用方直接返回一个错误响应即可,而不是长时间的等待,这样避免调用时因为等待而线程一直得不到释放,避免故障在分布式系统间蔓延。
Hystrix是一种服务保护机制,避免了单个调用的微服务导致全局”雪崩”。同时Hystrix 通过服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等方式容错处理。
Hystrix是引入在服务消费者中的。在服务消费者的入口类添加注解@EnableCircuitBreaker,开启断路器的功能。在调用远程服务的方法上添加注解:@HystrixCommand(fallbackMethod="error"),就能实现远程服务的服务熔断功能了。实际上我们也可以自定义服务熔断的方法。
Feign是什么?
Feign 整合了 Ribbon 和 Hystrix 两个组件,Spring Cloud Feign对 Ribbon 负载均衡、Hystrix 服务熔断进行简化,在其基础上进行了进一步的封装,不仅在配置上大大简化了开发工作,同时还提供了一种声明式的 Web 服务客户端定义方式。
分布式系统的CAP理论和BASE理论
CAP定理是什么?
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
一致性
更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
这里是强一致性,要不一起成功,要不一起失败!
可用性
服务一直可用,而且是正常响应时间。
分区容错性
分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
比如深圳机房和上海机房,上海机房无法使用的话深圳机房还可以用(这也叫异地多活)
BASE理论是什么?
BASE 理论是对 CAP 理论的延伸,支持大型分布式系统。核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性。
基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务(如取消注册服务、聊天服务)。这就是损失部分可用性的体现。
软状态(Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。MySQL Replication 的异步复制也是一种体现。
最终一致性(Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。
弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
微服务架构SpringCloud的理解的更多相关文章
- Go 微服务架构Micro相关概念理解
Micro是一个微服务框架(或者说是工具集):提供了各类组件,解决微服务架构中的不同问题,服务监控.服务发现.熔断机制,负载均衡等等,自己一个个解决这些问题几乎不可能,这时候就需要借助go-micro ...
- 微服务架构 - SpringCloud整合分布式服务跟踪zipkin
1.zipkin zipkin是Twitter的一个开源项目,它基于Google Dapper实现.我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们查询 ...
- SpringCloud微服务架构和SOA架构
1,传统的三层架构 在传统的架构中,SSH,SSM,主要分为web 控制层,业务逻辑层,数据库访问层,单点项目,项目没有拆分,所有的开发任务全部写在一个项目中,耦合度比价高,如果程序中的一个功能出现了 ...
- 微服务之SpringCloud基础
SpringCloud微服务基础 微服务架构--SpringCloud网站架构模式 单点应用/分布式系统面向于服务架构(SOA) /微服务架构web项目三层架构1.控制层2.业务逻辑层3.数据访问层传 ...
- 关于SpringCloud微服务架构概念的一点理解
目前微服务是非常火的架构或者说概念,也是在构建大型互联网项目时采用的架构方式. 1.单体架构单体架构,是指将开发好的项目打成war包,然后发布到tomcat等容器中的应用. 假设你正准备开发一款与Ub ...
- SpringCloud与Docker微服务架构实战笔记
一 微服务架构概述 1. 单体应用架构存在的问题 结合:https://www.cnblogs.com/jialanshun/p/10637454.html一起看,在该篇博客中搜索“单块架构的优缺点 ...
- SpringCloud学习--微服务架构
目录 微服务架构快速指南 SOA Dubbo Spring Cloud Dubbo与SpringCloud对比 微服务(Microservice)架构快速指南 什么是软件架构? 软件架构是一个包含各种 ...
- Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理
Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
- springCloud进阶(微服务架构&Eureka)
springCloud进阶(微服务架构&Eureka) 1. 微服务集群 1.1 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责 ...
随机推荐
- 实验5.OSPF配置实验
# 实验5.OSPF配置实验 配置ospf使全网联通 实验组 拓扑,路由器选择为AR2220,交换机为S5700 联通配置 给每台路由器的对应端口配置相应的ip,并启动ospf协议,可以看到此时5台设 ...
- Electron 的 安装
背景 因为搞嵌入式开发的时候,每次烧写不同版本的固件的时候,经常需要重命名,有时候烧错版本我也不知道: 因此我认为对固件的管理比较麻烦,所以我希望能够有一个比较好的工具来做管理,找了一圈没有发现合适的 ...
- Gmsh 和 FiPy 求解稳态圆柱绕流
本项目的源码保存在 github 仓库 https://github.com/cjyyx/CFD_Learning/tree/main/CFD软件学习/FiPy/cylinder.如果下载整个目录,可 ...
- Python使用Argparse读取命令参数
python编写的脚本需要通过命令参数来做一些参数配置.本文将介绍如何使用argparse来解析命令行参数.这种方法相对于sys.args的方式会简单很多. 通过以下的脚本来构建一个简单的配置解析器, ...
- python 转换PDF 到 EPS
from win32com.client.dynamic import ERRORS_BAD_CONTEXT as ebc from win32com.client import DispatchEx ...
- 2023年台州市初赛Misc
2023年台州市初赛Misc 这是神马 冰蝎流量,找到key <?php @error_reporting(0); session_start(); $key="144a6b22963 ...
- JSON 的了解?
1., JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.(为了和其他语言进行交互)2. 数据格式简单, 易于读写, 占用带宽小{'age':'12', ' ...
- Solo 开发者周刊 (第10期):Sora 之后,谁是被遗忘的?谁又是被仰望的?
这里会整合 Solo 社区每周推广内容.产品模块或活动投稿,每周五发布.在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解.本杂志开源,欢迎投稿. 好文推荐 Sol ...
- 24 年 “年薪百万” 的 Java 程序员,都要学什么?
大家好,我是程序员鱼皮.前几天我看了一篇由国外的 Java 架构师大佬分享的文章,主题是 "Java 架构师必会的 20 个技术". 光看这个标题,就知道在国外做 Java 开发, ...
- [oeasy]python0095_乔布斯求职_雅达利_atari_breakout_打砖块_布什内尔_游戏机_Jobs
编码进化 回忆上次内容 上次 我们回顾了 电子游戏的历史 从 电子游戏鼻祖 双人网球 到 视频游戏 PingPong 再到 街机游戏 Pong 雅达利 公司 来了 嬉皮士 捣乱? 布什内尔 会如何 应 ...