一、了解微服务架构
1、微服务技术栈

整体学习规划路线
2、微服务与单体架构的区别
单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署
优势
缺点
3、分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,成为一个服务。
优点:
缺点:
4、微服务:是一种经过良好架构设计的分布式架构方案
微服务架构特征:
5、微服务技术对比

6、一般企业需求对比

二、SpringCloud
1、介绍:SpringCloud是目前国内使用最广泛的微服务框架。
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验

SpringCloudyuSpringBoot的版本兼容关系如下:

2、服务拆分及远程调用
3、微服务远程调用
//在主类(配置类)中引入springboot带有的RestTemplate(),注入spring容器
//主类springbootApplication就是配置类
@Beanpublic RestTemplate restTemplate(){ return new RestTemplate();}
restTemplate.getForObject(url,User.class);
可根据请求地址(该请求地址和在浏览器中的地址相同),User.class可将返回的json类型转换为对应的类(对象);
远程调用的提供者与消费者:
三、Eureka注册中心
1、传统直接地址调用的问题
硬编码:写死地址(微服务多个地址如何解决)

Eureka的作用:
(1)Eureka注册中心分为两部分:


消费者根据负载均衡选择对应微服务,并进行远程调用

注册中心与服务提供者存在一个30秒心跳续约,检测该微服务是否还是正常运行,如果没有正常运行,
就从注册中心删除,并且消费者也不会再收到这个微服务的对应信息,如图中的8083

主要问题:解决
Eureka的搭建主要步骤:
Eureka服务端:
<!--eureka服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
server: port: 10086 # 服务端口spring: application: name: eurekaserver # eureka的服务名称eureka: client: service-url: # eureka的地址信息 defaultZone: http://127.0.0.1:10086/eurekaEureka客户端:
<!--eureka客户端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
spring: application: name: user-service #服务名称eureka: client: service-url: # eureka的地址信息(客户端与服务端的相同) defaultZone: http://127.0.0.1:10086/eureka大致服务搭建流程:@LoadBalanced注解用于负载均衡

四、Ribbon(实现负载均衡)SpringCloud的组件

底层源码实现原理:
流程:

轮询策略:

修改负载均衡策略:(server:服务器;service:服务)
1、代码方式,在配置类中,定义一个新的IRule;这种方式配置之后不论是该类访问哪一个服务都会遵循这个规则,分配的服务器都是随机的。
//此处是在application(需要随机服务器的主类)中配置的配置类,负载均衡策略为随机
@Bean
public IRule randomRule() { return new RandomRule(); }
2、在配置文件中application.yml,添加新的配置也可以修改配置的规则; (这里可以指定某种服务请求会使用这种规则,此处为userservice)表示该类,该服务类请求userservice时就会按照这个规则,其他的不管。
userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则负载均衡的加载:初始化为懒加载,懒加载之后会进行缓存,后面请求访问就会更快
(开启饥饿加载)

如果有多个指定服务:
