微服务架构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 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责 ...
随机推荐
- springcloud之FeignClient访问微服务接口缓慢
springcloud之FeignClient访问微服务接口缓慢查询服务日志报错如下:Caused by: java.net.SocketTimeoutException: Read timed ou ...
- java8 lambda Predicate示例
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Pr ...
- mac brew install Error: No available formula with the name “*“的解决办法
背景 在mac上使用brew安装软件发生错误 解决办法 执行以下命令即可 rm -rf /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core ...
- 12-CentOS7安装与管理数据库mariadb
关于Mariadb Mariadb和MySQL是同一个制作团队,命令几乎一样. 在centos中安装 yum -y install mariadb mariadb-server firewall-cm ...
- 【动手学深度学习】第三章笔记:线性回归、SoftMax 回归、交叉熵损失
这章感觉没什么需要特别记住的东西,感觉忘了回来翻一翻代码就好. 3.1 线性回归 3.1.1 线性回归的基本元素 1. 线性模型 \(\boldsymbol{x}^{(i)}\) 是一个列向量,表示第 ...
- 探索Semantic Kernel内置插件:深入了解HttpPlugin的应用
前言 上一章我们熟悉了Semantic Kernel中的内置插件和对ConversationSummaryPlugin插件进行了实战,本章我们讲解一下另一个常用的内置插件HttpPlugin的应用. ...
- Cython编译报错“numpy/arrayobject.h: No such file or directory”解决方案
问题背景 Cython是用来加速Python程序性能的一个工具,其基本使用逻辑就是将类Python代码(*.pyx扩展格式)编译成\(*.c,*.so\)动态链接库文件,然后就可以在正常的Python ...
- 最新扣子(Coze)实战案例:扣子卡片的制作及使用,完全免费教程
♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用. ☘️ 本文是<AI应用开发系列教程之扣子(Coze)实战教程>,完全免费学习. 关注斜杠君,可获取完整版教程. 如果想学习AI应用 ...
- 是什么导致了客户端TCP连不上服务器?
这几年做了很多基于 GGTalk开源即时通讯系统 的定制开发项目,经常会碰到如下两个问题,分享出来,应该对大家会有所帮助: (1)定制开发完成后,在给客户部署GGTalk即时通讯服务端到正式的服务 ...
- mysql语句大全-工作中常用整理(欢迎大家在评论区继续补充)
1.NOT EXISTS 和 NOT IN SELECT COUNT(ca.aaa) FROM xx ca WHERE NOT EXISTS( SELECT label.* FROM xxx labe ...