微服务架构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 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责 ...
随机推荐
- python根据文件目录批量过滤空行
import shutil import os path = "E:\\in\\" #文件夹操作目录 path2 = "E:\\out\\" #文件夹输出目录 ...
- JS常用的工具方法
记录一些经常使用的JS通用工具方法,代码来自互联网,佛性更新 空字符串校验 /** * 判断字符串是不是NULL或空串或空格组成 * @param str 被判断的字符串 * @return {boo ...
- Win10下载纯净版ISO镜像
进入windows官网下载页面 1.F12 进入开发者模式->选择浏览模式为手机->机型设置为Ipad Air ->刷新页面->下载选项出现 下图第二步选择完成后,需要刷新一下 ...
- 微信小程序自动化分析_包含执行设备及对应的微信版本
背景介绍: 微信小程序是基于腾讯自研 X5 内核,不是谷歌原生 webview. 实现方式: 1.小程序自动化sdk,使用自动化sdk,需要有小程序的开发者权限,以及参考的资料较少,2.选择采用app ...
- Linux 下使用Java连接MySQL数据库,并且实现插入、删除、选择操作
实验环境: OS : CentOS5.5 (Linux) IDE : Eclipse DBMS : MySQL 准备工作: 1.安装 MySql . 详见http://www.cnblogs.com/ ...
- python爬虫-bs4基础
# 下面的一段HTML代码将作为例子被多次用到.这是 爱丽丝梦游仙境的 的一段内容(以后内容中简称为 爱丽丝 的文档): html_doc = """ <html& ...
- 移动web布局方法
继续更新移动端的一个布局,这也是经典中的经典,当初只知道个rem和vwvh适配,其实这里面还有很多的门道不只是一个适配这么简单 一.前置 1.背景缩放 我们都知道做移动端,给的图都是二倍图,你拿来用直 ...
- QChart 移动 缩放 加速
qchart 和 qchartview 的运用的例子 qchart 存在一些问题 一般用在2000个点以下的场景,点多了,就会卡. 解决的办法就是 开启opengl加速. 但这时,对qchartvie ...
- 虚拟 DOM 的优缺点?
什么是虚拟dom用js模拟一颗dom树,放在浏览器内存中.当你要变更时,虚拟dom使用diff算法进行新旧虚拟dom的比较,将变更放到变更队列中, 反应到实际的dom树,减少了dom操作. 虚拟DOM ...
- git将某个开发分支最近的提交合并成一个提交
你可以使用 `git merge --squash` 命令将某个开发分支最近的提交合并成一个提交. 具体步骤如下: 1. 切换到你想要合并的分支上,比如 `develop` 分支: `git chec ...