本文是从此网址学习后自己整理的文档结果,原文见此处:https://mp.weixin.qq.com/s/kBUJlAp9LLMX_L_q2ab0iA

采用三W原则学习法,一步步深入理解SpringCloud的各种组件并理解其作用,,注:本文不涉及具体编码教学:

WHAT-定义:

集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)

分布式:一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)

分布式集群:一个业务分拆多个子业务,部署在不同的服务器上,然后再将每个子业务分别部署在多个服务器上。

• C:数据一致性(consistency)
 所有节点拥有数据的最新版本
• A:可用性(availability)
 数据具备高可用性
• P:分区容错性(partition-tolerance)
 容忍网络出现分区,分区之间网络不可达。

CAP理论定义的其实是在容忍网络分区的条件下P,
“强一致性C”和“极致可用性A”无法同时达到。

基础知识:
SpringCloud的基础功能:
• 服务治理: Spring Cloud Eureka
• 客户端负载均衡: Spring Cloud Ribbon
• 服务容错保护: Spring Cloud Hystrix
• 声明式服务调用: Spring Cloud Feign
• API网关服务:Spring Cloud Zuul
• 分布式配置中心: Spring Cloud Config
SpringCloud的高级功能(本文不讲):
• 消息总线: Spring Cloud Bus
• 消息驱动的微服务: Spring Cloud Stream
• 分布式服务跟踪: Spring Cloud Sleuth

WHY

把一大的项目,分解成多个小的模块。将其组合起来,完成功能。
但拆分出多个模块后,会出现各种各样的问题,而SpringCloud提供了一整套的解决方案!
• 注:这些模块是独立成一个子系统的(不同主机)。

HOW

# Eureka:
问题1:
子系统之间的通讯问题-远程调用:
现在有A、B、C、D四个服务,它们之间会互相调用(而且IP地址很可能会发生变化),一旦某个服务的IP地址变了,那服务中的代码要跟着变,手动维护这些静态配置(IP)非常麻烦!
解决:Eureka原理:1.

  1. # Eureka治理机制:

WHAT:

# RestTemplate和Ribbon:
RestTemplate:通过服务名来获取具体的服务实例的位置进行调用。
// 传统的方式,直接显示写死IP是不好的!
//private static final String REST_URL_PREFIX = “http://localhost:8001”;

// 服务实例名
private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";/*** 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,* ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。*/
@Autowired
private RestTemplate restTemplate;@RequestMapping(value = "/consumer/dept/add")
public boolean add(Dept dept) {return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
}

# Ribbon:客户端的负载均衡

# Hystrix:

WHY:

问题2调用多个远程服务时,某个服务出现延迟,会怎么样:

HOW:

解决:
Spring Cloud Hystrix实现了断路器、线程隔离等一系列服务保护功能。
• Fallback(失败快速返回):当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝), 向调用方返回一个错误响应, 而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。
• 资源/依赖隔离(线程池隔离):它会为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响, 而不会拖慢其他的依赖服务。

Hystrix提供几个熔断关键参数:滑动窗口大小(20)、 熔断器开关间隔(5s)、错误率(50%)
• 每当20个请求中,有50%失败时,熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。
• 直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开。
优点:帮助我们快速发现系统中存在的问题,从而及时地采取应对措施。

WHAT:

# Feign:
整合了 Spring Cloud Ribbon 与 Spring Cloud Hystrix, 除了整合这两者的强大功能之外,它还供了声明式的服务调用(不再通过RestTemplate)。
实现方法:服务绑定->Feign中使用熔断器->调用

WHY:

# ZUUL:
问题:路由规则与服务实例的维护间题+签名校验、 登录校验冗余问题

HOW:

解决:API网关:Spring Cloud Zuul组件
1.与eureka整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得了所有其他微服务的实例信息。
2. 在API网关服务上进行统一调用来对微服务接口做前置过滤,以实现对微服务接口的拦截和校验。
3. Zuul天生就拥有线程隔离和断路器的自我保护功能,以及对服务调用的客户端负载均衡功能。也就是说:Zuul也是支持Hystrix和Ribbon。

# SpringCloud Config
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。
• 简单来说,使用Spring Cloud Config就是将配置文件放到统一的位置管理(比如GitHub),客户端通过接口去获取这些配置文件。
• 在GitHub上修改了某个配置文件,应用加载的就是修改后的配置文件。

2019.07.23--运用三W法则初步学习SpringCloud基础知识相关推荐

  1. 三 计算机知识的重要性分析,学习计算机基础知识对中专学生的重要性分析

    学习计算机基础知识对中专学生的重要性分析 [摘 要]本文主要介绍了计算机基础知识的内容,阐述了学习计算机基础知识对中专学生的作用,并且通过对计算机基础操作的学习,提高中专学生的计算机应用水平.希望本文 ...

  2. 密码学系列(三):区块链+密码学基础知识

    密码学系列(三):区块链+密码学基础知识 一.区块链的概念 区块链概述 区块链的特点 区块链变化 市场现状 二.区块链政策与标准 区块链的特点与发展 三.区块链的定义 区块链的价值 四.区块链开发语言 ...

  3. 总工会招聘计算机及答案,2019 年事业单位工会系统招聘考试《工会基础知识》 真题库及答案【2019版】.pdf...

    [各省.市.县事业单位考试真题,有答案解析] [内部考试重点资料,可打印] 2019 年事业单位工会系统招聘考试<工会基础知识> 真题库及答案[2019 版] 一.单选题 1 . 基层工会 ...

  4. 【2019.07.23 Python每日一题】答案—— 企业发放的奖金根据利润提成

    https://www.runoob.com/python/python-exercise-example2.html 题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10% ...

  5. 计算机专业技能测试为什么考美术,河北工艺美术职业学院2019年单独招生考试职业适应性测试(计算机基础知识和实践技能)考试大纲...

    2021年高职单招升学一对一咨询高职单招林老师:18623075867(微信) 2019年河北省高职单招考试十类 和对口电子电工类.计算机类联考 职业适应性测试(计算机基础知识和实践技能) 考试大纲 ...

  6. web前端开发三个阶段和三要素,学前端必备基础知识

    web前端开发三个阶段和三要素是什么?下面就跟着小编一起来看看吧! Web前端市场前景广阔,吸引了很多人涌入学习,但无论是零基础小白,亦或是想要进阶深造的程序员,前端开发三个阶段和三要素都是他们必学的 ...

  7. 【微信小程序丨第三篇】小程序的基础知识储备

    前言 微信小程序在无论在功能.文档及相关支持方面,都是优于前面几种微信账号类型,它提供了很多原生程序才有的接口,使得我们的小程序在很多方面突破H5页面应用的限制,更加接近原生程序的功能,因此微信小程序 ...

  8. 【每日早报】2019/07/23

    今日看点 ✦ 小米首进世界500强,雷军赠予每位员工1000股小米股票 ✦ 官方宣布:华为Mate 20 X 5G版将于7月26日正式发布 ✦ 瑞幸和Americana集团达成战略合作,计划进军大中东 ...

  9. java面向对象程序设计第三版耿祥义pdf_java基础知识干货——封装

    很多java初学者,在学到Java面向对象方面的知识点的时候,会觉得这块的知识点真的蛮绕的,一个知识点一个知识点的往外冒,对于初学者来说区分构造器和方法就花费了一整天的时间.现在小编带大家重新过一遍知 ...

  10. python基础网易_十年Python大牛花了三天总结出来的python基础知识实例,超详细!...

    1.在Python 语言中,对象是通过引用传递的. 2.多元赋值,其实就是元组赋值 3.编写模块 4.时刻记住一个事实 5.动态类型 6.变量在内存中是通过引用计数来跟踪管理的 7.异常处理 8.所有 ...

最新文章

  1. 第三天:创建型模式--建造者模式
  2. 《正则表达式必知必会》读书笔记
  3. pyqt5 子线程更新ui
  4. Optional 详解 Java
  5. Netflix混沌工程手册Part 2:混沌工程原则
  6. 常用决策树集成模型Random Forest、Adaboost、GBDT详解
  7. python根据数据生成图像_从三个numpy数组生成图像数据
  8. 蒙特卡洛能解决啥_用蒙特卡洛方法解决“无法解决”的问题
  9. Java 并发编程之 CopyOnWriteArrayList
  10. apply和call的区别
  11. 使用ffmpeg合并.h264文件
  12. 使用百度开发者工具 4.0 搭建专属的小程序 IDE
  13. 恍恍惚惚,哈哈,35. Search Insert Position
  14. 服务器连接无线键盘,【罗技 K375s 无线蓝牙键盘使用总结】连接|手感_摘要频道_什么值得买...
  15. 独立站推广引流的8个渠道
  16. 微信发位置提示服务器,微信发原图容易泄露位置信息?确实会泄露但也有简单的解决办法-...
  17. object标签属性详解
  18. 关于学生课程分数的SQL查询
  19. 重磅!全球Top 1000计算机科学家公布:张宏江居大陆科学家之首
  20. 微信中做302跳转时跳转不过去的问题

热门文章

  1. 如何去掉now函数时间中的汉字
  2. 函数式编程Haskell初探
  3. 【C语言】输出“*”菱形图案
  4. Ubuntu系统下python编程入门
  5. MATLAB如何配平化学方程,【如何配平化学方程式】作业帮
  6. STM32Cube 应用指南
  7. Enable Cube
  8. repo sync repo reset: error: entry ‘comand.py ‘ not uptodate . cannot merge
  9. Chrome Edge与Safari书签同步
  10. 【Unity好项目分享】如何制作如游戏蔚蓝般极佳的操作手感