为什么要学习微服务框架
认识微服务
服务架构演变
单体架构
分布式架构
微服务结构
SrpingCloud
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
服务拆分及远程调用
服务拆分注意事项
我们查询的时候需要到另一个数据库查询username,我们只能通过向另一个服务发送请求的方式,来获得对应的响应
提供者与消费者
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
一个服务可以同时是服务提供者和服务消费者
Eureka注册中心
服务调用出现的问题
搭建EurekaServer
1.创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
2.编写启动类,添加@EnableEurekaServer注解
@EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
3.添加application.yml文件,编写下面的配置:
server: port: 10086 #服务端口 spring: application: name: eurekaserver eureka: client: service-url: #eureka地址信息 defaultZone: http://127.0.0.1:10086/eureka
编译器记得改成8版本的,1.8不支持!
运行后,直接点击端口就能打开
注册Eureka 服务
将user-service服务注册到EurekaServer步骤如下:
1.在user-service项目引入spring-cloud-starter-netflix-eureka-client的依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2.在application.yml文件,编写下面的配置:
spring: application: name: userservice eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/
再启动后,实例就有两个了:
在order-service完成服务拉取
Ribbon 负载均衡
负载均衡原理
修改负载均衡规则
饥饿加载
Nacos注册中心
默认是8848端口
我们下载好nacos 在nacos的bin目录打开终端
输入startup.cmd -m standalone
浏览器打开:
http://192.168.219.1:8848/nacos/index.html#/login
默认账号密码都是nacos,直接登陆就可以了
服务注册到Nacos
1.在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:
<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>
2.注释掉order-service和user-service中原有的eureka依赖。
3.添加nacos的客户端依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
然后启动服务就可以了
Nacos服务分级存储模型
服务跨集群调用问题
服务集群属性
直接配置集群名称了,运行另一个实例的时候修改集群,这样两个实例的集群都不一样
根据集群负载均衡
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
优先选择本地集群,在本地集群的多个服务中,随机进行选择
根据权重负载均衡
实际部署中会出现这样的场景: 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求 Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高
可通过权重设置,进行无感知升级
环境隔离 - namespace
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离
Nacos注册中心原理
临时实例和非临时实例
主动检测对服务器压力比较大,建议临时实例