01-springcloud-入门理论等:

微服务

1、什么是微服务

  • 微服务是一种架构风格
  • 一个应用拆分为一组小型服务
  • 每个服务运行在自己的进程内,也就是可独立部署和升级
  • 服务之间使用轻量级HTTP交互
  • 服务围绕业务功能拆分
  • 可以由全自动部署机制独立部署
  • 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术

2、分布式微服务架构-落地维度

服务调用,服务降级,服务注册与发现,服务熔断,负载均衡,服务消息队列,服务网关,配置中心管理,自动化构建部署,服务监控,全链路追踪,服务定时任务,调度操作

SpringCloud=分布式微服务架构的站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶

Spring Cloud技术栈

3、springboot和springcloud选型

  • Spring Boot 2.X 版

    源码地址:https://github.com/spring-projects/spring-boot/releases/

    Spring Boot 2 的新特性:https://github.com/spring-projects/spring-boot/wiki/spring-Boot-2.0-Release-Notes

    通过上面官网发现,Boot官方强烈建议你升级到2.X以上版本

  • Spring Cloud H版

    源码地址:https://github.com/spring-projects/spring-cloud

    官网:https://spring.io/projects/spring-cloud

  • Spring Boot 与 Spring Cloud 兼容性查看

    文档:https://spring.io/projects/spring-cloud#adding-spring-cloud-to-an-existing-spring-boot-application

    JSON接口:https://start.spring.io/actuator/info

后续使用到的技术版本,参考尚硅谷教程

maven地址:为了确保后期不出问题,暂和尚硅谷教程版本一致。

https://blog.csdn.net/swadian2008/article/details/113530102

https://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/

  • Cloud - Hoxton.SR1
  • Boot - 2.2.2.RELEASE
  • Cloud Alibaba - 2.1.0.RELEASE
  • Java - Java 8
  • Maven - 3.5及以上
  • MySQL - 5.7及以上

父工程的创建

约定 > 配置 > 编码

1、创建聚合父工程8步

1、New Project - maven工程 - create from archetype: maven-archetype-site
2、聚合总父工程名字
3、Maven选版本
4、工程名字
5、字符编码 - Settings - File encoding
6、注解生效激活 - Settings - Annotation Processors
7、Java编译版本选8
8、File Type过滤 - Settings - File Type

git地址:XXXXXXXXXXXX或者参考https://blog.csdn.net/u011863024/article/details/114298270

2、DependencyManagement和Dependencies

dependencyManagement:管理依赖版本号,只是声明依赖,并不实现引入

Dependencies:子项目声明找父类版本号,父类没有,使用子项目具体版本。只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom。

3、初步模块创建

简写创建,详情参考git或者尚硅谷视频教程

1)、支付模块构建:

建Module,改POM,写YML,主启动,业务类(cloud-provider-payment8001

构建表,实体对象,mapper等

工程重构(cloud-api-commons)

Eureka基础知识

1、什么是服务治理

一句话:对多个服务的管理。管理包含调用,负载,容错,注册发现。

Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理,在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

2、什么是服务注册与发现

Eureka采用了CS的设计架构,Eureka Sever作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何RPC远程框架中,都会有一个注册中心存放服务地址相关信息(接口地址)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uD8K9am8-1670856750201)(png/image-20220411220714456.png)]

3、Eureka两个组件

Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

EurekaClient通过注册中心进行访问

它是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

4、EurekaServer服务端安装

git(cloud-eureka-server7001) cloud-provider-payment8001 cloud-consumer-order80

5、EureKa集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLqGB33Z-1670856750202)(png/image-20220411221110020.png)]

服务注册:将服务信息注册进注册中心

服务发现:从注册中心上获取服务信息

实质:存key服务命取value闭用地址

1、先启动eureka注主册中心

2、启动服务提供者payment支付服务

3、支付服务启动后会把自身信息(比服务地址L以别名方式注朋进eureka

4、消费者order服务在需要调用接口时,使用服务别名去注册中心获取实际的RPC远程调用地址

5、消去者导调用地址后,底屋实际是利用HttpClient技术实现远程调用

6、消费者实癸导服务地址后会缓存在本地jvm内存中,默认每间隔30秒更新—次服务调用地址

问题:微服务RPC远程服务调用最核心的是什么
高可用,试想你的注册中心只有一个only one,万一它出故障了,会导致整个为服务环境不可用。

解决办法:搭建Eureka注册中心集群,实现负载均衡+故障容错。互相注册,相互守望。

集群搭建测试

cloud-eureka-server7002 cloud-provicer-payment8001 cloud-provicer-payment8002

  • 找到C:\Windows\System32\drivers\etc路径下的hosts文件,修改映射配置添加进hosts文件
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
  • 修改cloud-eureka-server7001配置文件,互相配置

6、actuator微服务信息完善

主机名称:服务名称修改(也就是将IP地址,换成可读性高的名字)

修改cloud-provider-payment8001,cloud-provider-payment8002

修改部分 - YML - eureka.instance.instance-id

修改部分 - YML - eureka.instance.prefer-ip-address,访问信息有IP信息提示

7、服务发现Discovery

  • 修改cloud-provider-payment8001的Controller

8、EureKa自我保护理论(重要)

一句话:CAP(AP),保证不会因为网络原因对微服务立刻清理。好死不如赖活着

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

如果在Eureka Server的首页看到以下这段提示,则说明Eureka进入了保护模式:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THANTHRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUSTTO BE SAFE

导致原因

一句话:某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存。属于CAP里面的AP分支。
为什么会产生Eureka自我保护机制?

为了EurekaClient可以正常运行,防止与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务剔除

什么是自我保护模式?

默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。

自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

禁止自我保护:eureka.server.enable-self-preservation = false可以禁用自我保护模式

zookeeper

zookeeper是一个分布式协调工具,可以实现注册中心功能。关联zookeeper相关。

https://gitee.com/HaoZhouRS/study-notes/tree/master/notes/zookeeper

cloud-provider-payment8004,cloud-consumerzk-order80

consul

Consul官网:https://www.consul.io/

Consul下载地址:https://www.consul.io/downloads

Consul是一套开源的分布式服务发现和配置管理系统。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

  • 服务发现 - 提供HTTP和DNS两种发现方式。
  • 健康监测 - 支持多种方式,HTTP、TCP、Docker、Shell脚本定制化
  • KV存储 - Key、Value的存储方式
  • 多数据中心 - Consul支持多数据中心
  • 可视化Web界面

https://www.springcloud.cc/spring-cloud-consul.html

cloud-providerconsul-payment8006,cloud-consumerconsul-order80,

CAP

组件名 语言CAP 服务健康检查 对外暴露接口 Spring Cloud集成
Eureka Java AP 可配支持 HTTP
Consul Go CP 支持 HTTP/DNS
Zookeeper Java CP 支持客户端 已集成

CAP:

  • C:Consistency (强一致性)
  • A:Availability (可用性)
  • P:Partition tolerance (分区容错性)

最多只能同时较好的满足两个。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求。

因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:

CA - 单点集群,满足—致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍必的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

1、AP架构(Eureka)

当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

2、CP架构(ZooKeeper/Consul)

当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性。

结论:违背了可用性A的要求,只满足一致性和分区容错,即CP

学习路径:https://space.bilibili.com/302417610/,如有侵权,请联系q进行删除:3623472230

01-35-springcloud-zk-eureka-consul-cap-父工程相关推荐

  1. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

  2. SpringCloud之Eureka实战和架构设计解析

    SpringCloud之Eureka实战和架构设计解析 Netflix Eureka(后文简称Eureka)是由Netflix开源的一款基于REST的服务发现组件,包括Eureka Server及Eu ...

  3. SpringCloud(三) Eureka注册中心介绍以及单机版搭建

    一.Eureka 介绍 Spring Cloud Eureka 是 Spring Cloud Netfix微服务套件中的一部分,它基于 Netfix Eureka 做了二次封装,主要负责完成微服务架构 ...

  4. 服务注册中心AP和CP区别【Nacos|Eureka|Consul|Zookeeper】

    当下,分布式系统正变得越来越重要,大型网站几乎都是分布式的.分布式系统的最大难点,就是各个节点的状态如何同步.CAP 定理是这方面的基本定理,也是理解分布式系统的起点. CAP定理,又被称作布鲁尔定理 ...

  5. 浅谈SpringCloud (二) Eureka服务发现组件

    上面学习到了如何由一个程序访问另一个程序,那么如果使用SpringCloud来进行访问,该如何访问呐? 可以借助Eureka服务发现组件进行访问. 可以借助官方文档:https://spring.io ...

  6. SpringCloud创建Eureka模块

    1.说明 本文详细介绍Spring Cloud创建Eureka模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 在里面创建Eureka模块, ...

  7. SpringCloud创建项目父工程

    1.说明 本文详解介绍Spring Cloud项目的父工程创建, 由于Spring Cloud项目下有很多模块组件, 需要先创建一个大的父工程项目, 然后在下面创建各个子工程模块. 2.创建父工程 这 ...

  8. SpringCloud之Eureka(微服务注册)

    文章目录 前言 Peer to Peer架构 主从复制 对等复制 Zone及Region设计 SELF PRESERVATION 一.创建pom文件(工程) 1. 创建父级pom工程 2. 创建Eur ...

  9. SpringCloud,Eureka,服务注册,微服务之间的项目调用

    文章目录 前言 一.Eureka是什么? 二.项目实现步骤 1.项目外壳的搭建 2.Eureka注册中心服务搭建 3.Provider(提供者)服务搭建 4.Consumer(消费者)服务搭建 总结 ...

  10. springcloud+springboot+Eureka+Feign+Ribbon+Hystrix+Zuul

    Springcloud集成Eureka Eureka服务端和客户端 本实例采用springboot,eureka和feign/ribbon,hystrix,zuul,mybatis,redis 1. ...

最新文章

  1. TensorFlow高效读取数据的方法
  2. 开源应用框架BitAdminCore:更新日志20180817
  3. Adb+.net 实现微信跳一跳自动化
  4. WPF中一个通用的BoolToXXX转换类
  5. 解决:redis.clients.jedis.exceptions.JedisDataExceptionERR This instance has cluster support disabled
  6. python重新运行安装_无法重新安装Python?
  7. t–sql pl–sql_SQL Server –在T-SQL中使用最低的度量单位
  8. 在浏览器中输入url地址 - 显示主页的过程
  9. 【图像去噪】基于matlab GUI小波+中值+维纳及频域滤波【含Matlab源码 506期】
  10. Java的历史及发展
  11. .htaccess 语法以及应用
  12. 软考·网络工程师认证(第八章)
  13. MySQL中怎么对varchar类型排序问题(数字字符串和汉字拼音的顺序)
  14. 有道换域名,目标中立、客观、包容
  15. Spring Cloud Alibaba教程:使用Nacos作为配置中心
  16. UE4入门序列08(Unreal制作MMO游戏范围巡逻AI)
  17. 2016 song list
  18. 英语词性-句子成分-构词法
  19. 华为杯山东理工大学第二届团体程序设计天梯赛
  20. Ubuntu查看主机名和修改主机名

热门文章

  1. 雷达信号的脉冲累积(pulse integration)coherent and non-coherent 相干累积与非相干累积
  2. Python安装教程步骤1:Pycharm和Anaconda的安装
  3. Java 工具类 - 银行卡校验 BankCardUtil
  4. puppeteer爬取豌豆荚数据
  5. Android Android Studio 集成豌豆荚App墙广告
  6. C练题笔记之:Leetcode-38. 外观数列
  7. python timedelta 求时间差省去繁琐格式转换
  8. ITK 数据表达(图像)
  9. python新建文件夹和文件夹_Python创建文件夹与文件的快捷方法
  10. [Swift]获取设备当前连接的WiFi信息