spring cloud day01
1. 项目结构-掌握
1. 单体架构
- 优点:架构简单、部署成本低
- 缺点:耦合度高(维护困难、升级困难)
2. 分布式架构
- 优点:降低服务耦合、有利于服务升级和拓展
- 缺点:服务调用关系错综复杂
3. 微服务架构
-
- 特点
- 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
- 自治:团队独立、技术独立、数据独立,独立部署和交付
- 面向服务:服务提供统一标准的接口,与语言和技术无关
- 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
- 特点
-
- 微服务与分布式之间的关系
- 微服务是一种经过良好架构设计的分布式架构方案 。
- SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件
- 微服务与分布式之间的关系
2. 微服务技术的对比
1. dubbo和springcloud的对比
- 面试题
2. springcloud 和springcloudalibaba的对比
- 面试题
3. spring cloud的基本介绍
1. spring cloud是一套技术解决方案,里面包含了N多的技术组件
- 掌握
2. 使用springcloud一定需要使用springboot
- 掌握
3. springcloud的版本和springboot的版本有兼容性的问题
- 重点掌握
4. 微服务环境的准备-了解
1. 服务拆分的规则
- 面试题
按照功能模块进行拆分,不能拆分出的,做成一个通用功能
- 不同微服务,不要重复开发相同业务
- 微服务数据独立,不要访问其它微服务的数据库
- 微服务可以将自己的业务暴露为接口,供其它微服务调用
2. 环境的搭建
-
- 解压项目并导入idea
- 2,创建数据库并导入sql中表和数据
-
- 修改每个项目中的mysql的连接信息 然后启动服务
5. 远程微服务的调用-重点掌握
1. 创建RestTemplate对象并放入spring的ioc容器中
2. 在需要使用的时候注入该对象
3. 使用restTemplate对象的方法发起一个http的请求
6. Eureka注册中心
1. eureka注册中心的工作流程-掌握
2. eureka会有2个组成部分-了解
- server-注册中心
- client-内容提供者和消费者
3. Eureka Server的搭建-重点掌握
-
- 创建一个普通的Java项目
-
2, 导入server的核心jar包
-
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
-
-
- 在启动引导类中开启Server的功能
- @EnableEurekaServer
-
- 设置注册到Eureka的地址
server: port: 10086 spring: application: name: eureka-server eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka
4. 微服务注册到注册中心-重点掌握
-
- 导入eureka client的核心的jar包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
- 配置eureka的注册的地址
spring: application: name: userservice eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka
5. 服务的发现-重点掌握
-
- 导入eureka client的核心的jar包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
- 配置eureka的注册的地址
spring: application: name: orderservice eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka
-
- 在RestTemplate对象的创建的方法上添加负载均衡的注解
- @LoadBalanced
-
- 调用的url地址作用使用内容提供者的服务的名称,替换之前的ip和端口
String url = "http://USERSERVICE/user/" + order.getUserId();
- 服务名称不区分大消息
7. Ribbon组件
1. 作用:主要实现负载均衡
SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。
2. 负载均衡策略有哪些?-面试题
- 至少能够说出3-4个
内置负载均衡规则类 | 规则描述 |
---|---|
RoundRobinRule | 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。 |
AvailabilityFilteringRule | 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的..ActiveConnectionsLimit属性进行配置。 |
WeightedResponseTimeRule | 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。(根据权重随机,响应时间越长,权重值越小) |
ZoneAvoidanceRule,默认 | 以区域可用的服务器为基础进行服务器的轮询选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。 |
BestAvailableRule | 忽略那些短路的服务器,并选择并发数较低的服务器。 |
RandomRule | 随机选择一个可用的服务器。随机 |
RetryRule | 重试机制的选择逻辑 |
- 默认的策略-ZoneAvoidanceRule,是一种轮询方案
3. 负载均衡策略的修改-重点掌握
-
- 全局的修改
@Bean public IRule randomRule(){ return new RandomRule(); }
-
- 单独修改某一个服务
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
3. 加速第一次访问的速度-开启饥饿加载策略-了解
ribbon:
eager-load:
enabled: true
clients: userservice
8. Nacos组件
1. 搭建nacos的服务-重点掌握
启动nacos:
startup.cmd -m standalone
2. 服务注册到nacos-重点掌握
-
- 在父工程的pom.xml中添加jar包的依赖管理
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
-
- 导入nacos的服务发现的jar包:user-service和order-service中
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
- 配置nacos的id和端口:在user-service和order-service的application.yml中添加nacos地址:
spring: cloud: nacos: server-addr: localhost:8848
3. 集群节点的分级存储-重点掌握:user-service
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
4. nacos的负载均衡-重点掌握:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
- order-service的application.yml
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
4. 带权重的负载均衡-重点掌握
- 可以在nacos中找到具体的服务 然后点击编辑 设置权限 权重的值在0-1之间 值越大获取流量的机会就越大 同时如果设置为0则表示不在接收新的请求
5. 环境的隔离-掌握
-
- 在nacos的控制台的命名空间下创建一个新的命名空间
-
- 内容提供者注册到对应的空间下
spring: cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: HZ namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
- 特别注意:配置的是id不是名称
-
- 消费者注册到该命名空间下
6. nacos的工作的原理-掌握
零时实例和非临时实列的区别
-
临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
-
非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
-
spring: cloud: nacos: discovery: ephemeral: false # 设置为非临时实例
7. nacos和eureka的区别是什么?-面试题
-
Nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
-
Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式