springCloud介绍
1、单体架构系统:
所有功能都放在一个应用里,便于开发,测试,部署。我们平时自己做的都是单体架构系统,便于开发,测试,部署。不过也有弊端,最主要体现在高访问,高并发。访问量过高的话就会非常卡,影响业务。仅仅靠单体架构本身,就很难突破这个瓶颈。
2、分布式和集群:
为了解决单体架构高访问,高并发问题,通常解决办法就是采用分布式和集群来做
3、SpringCloud:
SpringCloud就是一套工具,帮助我们很容易的搭建出来集群和分布式的架子出来。
服务注册中心:Eureka
客户端:Ribbon Feigh
断路保护:Hystrix
配置服务,消息总线等概念
先导知识
JavaSE、
数据库、
前端、
Servlet、Http、
Mybatis、Spring、SpringMVC、SpringBoot、
Dubbo、Zookeeper、分布式基础、
MAVEN、GIIT、
AJAX、JSON
一、SpringCloud
框架:
Spring IOC AOP
SpringBoot。新一代的JAVAEE开发标准。自动装配,约定大于配置
模块化 - all in one
SpringCloud。
微服务架构四个核心问题
1、服务很多,客户端怎么访问,服务分发
2、服务之间如何通信。订单--->交易
3、服务太多了,如何治理。
4、服务挂了怎么办。
解决方案:
Spring Cloud ----生态。
1、Spring Cloud NetFlix--一站式解决方案2018-12 停更
分发:api网关,zuul组件,
通信:Feign --HttpClint---Http通信方式、同步、阻塞
治理:服务注册和发现:Eureka
熔断:熔断机制:Hystrix
-------------------
2、Apache Dubbo Zookeeper---半自动,需要整合别人的
分发:API:没有、找第三方组件、或者自己实现
通信:Dubbo
治理:Zookeeper
熔断:没有借助Hystrix
方案不完善
3、Spring Cloud Alibaba---一站式解决方案、成本更低、更简单
万变不离其宗
1、API
2、HTTP、RPC
3、服务的注册和发现
4、熔断机制
网络不可靠
新概念:服务网格--Server Mesh
二、微服务
1、什么是微服务
1、架构模式、架构风格,提倡将单一的应用程序划分成一组小的服务,模块化,看可以根据业务上下文选择合适的语言,工具进行构建,可以有一个轻量级的集中式管理这些服务。可以使用不同的语言编写服务。也可以使用不同的数据存储
2、将传统的一站式应用拆分成一个一个的服务,彻底的解耦,每个微服务提供单个业务功能的服务。一个服务做一件事情。
2、优缺点
优点
§ 单一职责原则。
§ 服务内聚足够小,代码容易理解
§ 开发简单,效率高,可以被小团队单独开发
§ 松耦合
§ 可以使用不同语言开发
§ 易于和第三方继承,通过持续集成工具部署
§ 只是业务逻辑代码,不会和HTML、CSS和其他页面混合
§ 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库
缺点
开发人员要处理分布式系统的复杂性
运维难度增加
系统部署依赖
服务间通信的成本
数据一致性
系统集成测试
性能监控
3、技术栈
4、SpringCloud和SpringBoot的关系
1、SpringBoot专注于快速方便的开发单体微服务
2、SpringCloud是关注全局的微服务协调治理框架,将SpringBoot开发的单体微服务整合起来并管理,
为各个服务之间提供:配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、
分布式会话等等集成服务。
3、SpringBoot可以离开SpringCloud独立使用,开发项目,但是SpringCloud离不开SpringBoot
4、SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架
5、Dubbo和SpringCloud技术选型
1、分布式+服务治理Dubbo
2、Dubbo与SpringCloud
Dubbo定位是一款RPC框架、Spring Cloud目标是微服务架构下的一站式解决方案
3、设计模式+微服务拆分思想
三、SpringCloud能干什么
1、分布式、版本控制配置
2、服务注册与发现
3、路由
4、服务到服务的调用
5、负载均衡配置
6、断路器
7、分布式消息管理
……
四、下载
网站参考
1、https://www.springcloud.cc/spring-cloud-netflix.html
2、中文APIhttps://www.springcloud.cc/spring-cloud-dalston.html
3、SpringCloud中文社区http://springcloud.cn/
4、springCloud中文网https://www.springcloud.cc
版本是通过字母表顺序来对应时间版本顺序
![在这里插入图片描述](https://img-blog.csdnimg.cn/c9d93274909d4269abca0c30d26ec474.png)
五、创建项目
http://localhost/consumer/dept/list --- 即可直接访问80端口 内部访问8001端口 自动执行
六、Eureka服务注册与发现
保证了AP原则,保证了可用性和分区容错性
简介:
Netflix在设计Eureka时,遵循的是AP原则,基于REST的服务,用于定位服务,实现云端中间层服务发现和故障转移。
有了服务发现注册,只需要使用服务的标识符,就可以访问到服务,不需要修改服务调用的配置文件了,
功能类似于Dubbo的注册中心,比如Zookeeper
原理:
1、封装了NetFlix公司开发的Eureka模块来实现服务注册与发现,C-S架构设计,
2、EurekaServer作为服务器注册功能的服务器。是服务中心
3、其他服务使用Eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员就可以通过
EurekaServer来监控系统中各个微服务的是否正常运行,SpringCloud的一些其他模块,
就可以通过EurekaServer来发现系统中的其他微服务。并执行相关逻辑
两个组件
1、Eureka Server提供服务注册服务,各个节点启动后,在EurekaServer中进行注册,这样Eureka的服务注册表中会存储所有可用服务的信息,服务节点的信息可以在页面直观的看到
2、Eureka Client 是一个Java客户端,用于简化EurekaServer的交互,客户端同时也具备一个内置的,使用轮询负载算法的,负载均衡器。在应用启动后,向EurekaServer发送心跳(默认周期30秒)。在多个心跳周期没接收到某个节点的心跳,EurekaServer就会把服务注册表中得到服务节点移除掉,(默认周期为90秒)
三大角色
Eureka Server 提供服务的注册与发现,zookeeper
Service Provider 将自身服务注册到Eureka中,从而消费方能够找到
Service Consumer 服务消费方从Eurekka中获取注册服务列表,从而找到消费服务
步骤
1、eureka客户端
1、导入依赖
2、编写配置文件
3、开启功能
2、其他微服务,服务注册、服务发现、服务监控信息打印
1、导包
2、编写配置信息
3、在主配置文件开启Eureka
4、测试
自我保护机制(好死不如赖活着):
○ 某一时刻,某个微服务不可用了,eureka不会立刻清理,依旧会对服务的信息进行保存
○ 一定时间没有收到某个微服务实例的心跳,就会注销实例,默认90秒
○ 当在短时间内丢失大量客户端时,比如断电。Eureka就会进入自我保护模式,此时保存注册表的信息,不再删除注册表中的数据,恢复后,退出自我保护模式
○ 综上所述,是一种应对网络遗异常的安全保护措施,宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例
○ 也可以关闭这个机制,eureka.server.enable-self-preservation=false 禁用自我保护机制
eureka集群
任何一个崩了其他的依然可以运行
1、设置url映射
C:\Windows\System32\drivers\etc
需要保证 eureka.instance.hostname eureka服务的实例名称在集群中保证唯一。
需要保证 eureka.client.service-url.defaultZone 的主机名(或IP)要唯一。如果是 Eureka 集群在同一个主机上时(学习和开发时),通过配置 hosts ,保证主机名的唯一。
win10 环境修改,在 C:\Windows\System32\drivers\etc 的 hosts 文件修改:
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com
127.0.0.1 eureka7001.com
7001里配置添加7002、7003
7002里配置添加7001、7003
7003里配置添加7001、7002
启动项目后
访问7001可以看到7002、7003,在7001上挂载一个项目7002、7003也能看到,假如7001崩了 7002 7003也能用
CAP原则
在一个分布式系统中,一致性C、可用性A、分区容错性P不可兼得
一致性 C 数据备份,在同一时刻是否是同样的值
可用性 A 保证每个请求不管成功或者失败都有响应
分区容错性 P 任意信息丢失都不会影响系统的继续运作。
CA 单点集群,满足一致性、可用性,可扩展性比较差
CP 通常性能不是很高
AP 对一致性要求较低
Eureka和Zookeeper对比
分布式系统中一般都需要必须保证分区容错性
Zookeeper保证CP
可以容忍注册中心返回几分钟之前的注册信息,但是不能容忍服务down掉。对可用性的要求高于一致性。主机down掉会选举,但是时间较长30s~120s在此期间服务瘫痪,这个选举时间导致的服务不可用是不能容忍的。
Eureka保证AP
eureka首先保证的是可用性。各个节点都是平等的,节点挂掉其他的节点仍然可以正常工作。服务向Eureka注册时,如果发现连接失败就会自动切换至其他节点,此外还有自我保护机制,--->15分钟超过85%的节点没有心跳,就启动该机制
1、Eureka不再移除注册列表中的服务
2、Eureka仍能接受新服务的注册和查询请求,但不会同步到其他节点上
3、网络稳定后,把新的注册信息同步到其他节点
总之:eureka可以很好的而应对因网络故障导致的部分节点失去联系的情况,不会像zookeeper那样使整个注册服务瘫痪