初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos
学习路径
认识微服务" class="reference-link">
认识微服务
单体架构特点?
简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
分布式架构特点?
松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
微服务:一种良好的分布式架构方案
优点:拆分粒度更小、服务更独立、耦合度更低
缺点:架构非常复杂,运维、监控、部署难度提高
SpringCloud
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:
微服务拆分**与调用**
单一职责:不同微服务,不要重复开发相同业务
数据独立:不要访问其它微服务的数据库
面向服务:将自己的业务暴露为接口,供其它微服务调用
微服务调用方式
基于RestTemplate发起的http请求实现远程调用
在启动类中注入
在业务逻辑层中访问封装
http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。
服务调用关系
服务提供者:暴露接口给其它微服务调用
服务消费者:调用其它微服务提供的接口
提供者与消费者角色其实是相对的
一个服务可以同时是服务提供者和服务消费者
E**ureka注册中心**
远程调用的问题
- 服务消费者该如何获取服务提供者的地址信息?
- 如果有多个服务提供者,消费者该如何选择?
- 消费者如何得知服务提供者的健康状态?
E**ureka原理**
- 消费者该如何获取服务提供者具体信息?
服务提供者启动时向eureka注册自己的信息
eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息
2.如果有多个服务提供者,消费者该如何选择?
服务消费者利用负载均衡算法,从服务列表中挑选一个
3.消费者如何感知服务提供者健康状态?
服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
eureka会更新记录服务列表信息,心跳不正常会被剔除
消费者就可以拉取到最新的信息
搭建EurekaServer
搭建EurekaServer服务步骤如下:
创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-server 编写启动类,添加@EnableEurekaServer注解
3.添加application.yml文件,编写下面的配置:
server:
port: 10086 # 自定义端口号
spring:
application:
name: eurekaserver # 项目名称
eureka:
client:
service-url: # eureka地址信息
defaultZone: http://127.0.0.1:10086/eureka/
服务注册
引入eureka-client依赖
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在application.yml中配置eureka地址
eureka:
client:
service-url: # eureka地址信息
defaultZone: http://127.0.0.1:10086/eureka/
无论是消费者还是提供者,引入eureka-client依赖、知道eureka地址后,都可以完成服务注册
服务发现
- 引入eureka-client依赖
在application.yml中配置eureka地址
String url = “http://userserver/user/“ + order.getUserId();
给RestTemplate添加@LoadBalanced注解
/**
* 创建RestTemplate并注入spring容器
* */
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
用服务提供者的服务名称远程调用
Ribbon负载均衡原理
负载均衡原理
负载均衡策略
N**acos注册中心**
认识和安装Nacos
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
- 在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:
- 注释掉order-service和user-service中原有的eureka依赖。
- 添加nacos的客户端依赖:
修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:
spring:
datasource:url: jdbc
//localhost:3306/cloud_order?useSSL=false
username: BLS
password: 123456
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderserver
cloud:
nacos:
server-addr: localhost:8848
2.启动并测试:
Nacos快速入门
Nacos服务搭建
下载安装包
解压
在bin目录下运行指令:startup.cmd -m standalone
Nacos服务注册或发现
引入nacos.discovery依赖
配置nacos地址spring.cloud.nacos.server-addr
Nacos服务分级存储模型
修改application.yml,添加如下内容:
spring:
datasource:url: jdbc
//localhost:3306/cloud_user?useSSL=false
username: BLS
password: 123456
driver-class-name: com.mysql.jdbc.Driver
application:
name: userserver # 项目名称
cloud:
nacos:
server-addr: localhost:8848 # nacos配置地址
discovery:
cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
在Nacos控制台可以看到集群变化:
Nacos环境隔离
- Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离
2.在Nacos控制台可以创建namespace,用来隔离不同环境
3.然后填写一个新的命名空间信息:
4.保存后会在控制台看到这个命名空间的id:
5.修改order-service的application.yml,添加namespace:
6.重启order-service后,再来查看控制台:
7.此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错:
- Nacos与eureka的共同点
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测
2.Nacos与Eureka的区别
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
还没有评论,来说两句吧...