微服务架构
将单一的应用程序拆分成小的服务,每个服务运行在独立的进程中,服务之间通过轻量级的通信机制相互协调、互相配合。
特征:高内聚低耦合
- 单一职责:每个服务对应唯一业务能力
- 面向服务:服务对外暴露业务接口
- 自治:团队独立、技术独立、数据独立、部署独立
- 隔离性强:避免级联问题
项目架构 自动化部署
SpringCloud简介
分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体
所用技术组件升级
结构搭建
- 一个服务内包含多个springboot服务
- 数据库拆分,一个springboot连接一个数据库
服务远程调用
我现在要关联查询,数据库是分开的,就得调用另一个服务
通过订单服务向 用户服务发起一个http请求来获取用户信息
RestTemplate
spring提供了一个RestTemplate,通过它可以发起http请求
- 将RestTemplate注入spring容器
- 在controller注入
@Autowired
private RestTemplate restTemplate;
- 使用restTemplete调用user服务
测试成功
提供者和消费者
提供和消费是相对的,一个服务既可以是提供者,也可以是消费者
Eureka
作用
- 启动的服务都会在eureka-server注册
- 消费者使用时会在注册中心拉取服务,并做负载均衡,挑选一个服务后进行远程调用
- 服务心跳续约,每隔30秒1次
服务注册
EurekaServer
- 新建一个项目eureka-service
- 导入pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 创建启动类
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
- 添加application.yml配置类
server:
port: 10088
spring:
application:
name: eurekaserver
eureka:
client:
service-url:
defaultZone: http://localhost:10088/eureka
EurekaClient
- 引入pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 加配置
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://localhost:10088/eureka
服务注册列表
服务拉取
总结
Ribbon
负载均衡流程
负载均衡策略
负载均衡策略配置
饥饿策略
Nacos
搭建
https://github.com/alibaba/nacos/tags 找到版本下载- 解压到
D:\Program Files\nacos Program Files\nacos\bin startup.cmd -m standalone http://192.168.52.1:8848/nacos/index.html 登录- 用户名:
nacos 密码:nacos
注册服务
- 引入父项目pom依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- 引入子服务pom依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
查看服务
服务分级存储模型
配置集群
服务本不会优先选择本地集群中服务,可以配置;如果本地没有服务,会跨集群访问
配置优先访问本地集群服务: 可在Nacos界面通过修改权重,调整同一集群下负载均衡;权重从0-1;按比例分配;权重为0,不会被访问(服务平滑升级)
环境隔离
用namespace来做,每个namespace都有唯一id
实现服务隔离,不在一个空间的服务不能互相访问
配置:spring: cloud: discovery: namespace: (命名空间id)
Eureka和Nacos
相同点
- 都支持服务注册和服务拉取
- 服务提供者会有心跳方式做健康检测
不同点
- Nacos支持主动检测:临时实例 心跳模式;非临时实例 主动检测
- 临时实例心跳不正常会剔除;非临时不会
- 服务列表变更会推送 服务更新提醒
- Nacos集群默认为AP模式,集群中有非临时实例采用CP模式;Eureka为AP
|