1. 首先从结构方面来说
单体架构:比较适合用于小型项目(像一些学生管理系统),简单方便,高度耦合
分布式架构:松耦合,扩展性好,但架构复杂,难度大,适合大型互联网项目,像京东淘宝等
微服务:一种良好的分布式架构方案
优点:拆分力度小,服务更独立,耦合度更低
缺点:架构非常复杂,运维,监控,部署难度提高
不同微服务,不要重复开发相同业务。微服务数据独立,不同微服务需要有自己的数据库。不要访问其他微服务的数据库,但是微服务可以将自己的业务接口调用给其他使用,从而间接访问其他微服务数据。
消费者和提供者
服务提供者:暴露接口给其他微服务使用
服务提供者:调用其他微服务提供的接口
二者的角色是相对的
——————————————————————————————————
Eureka 注册中心
Eureka的作用:Eureka就是一个注册中心,提供服务注册和发现的功能
服务提供者:该微服务暴露出自己的接口(restful风格),供注册中心中注册的其他微服务访问数据
服务消费者:从注册中心中,获取服务列表,从而调用其他服务的就接口
Eureka负责管理,记录服务者的信息。服务调用者无需自己寻找服务,而是将自己的需求告诉Eureka,Rureka将包含信息的服务告诉你。
在Eureka架构中,微服务角色有两种:
EurekaServer:服务端,注册中心。同时Eureka也会将自己注册进去
1. 记录服务信息
2. 心跳监控
EurekaClient:客户端
1。服务提供者,像userservice
2. 服务消费者,orderservice
接下来开始搭建EurekaServer
1. 引入eureka-server 依赖
2. 添加@EnableEurekaServer注解
3.在application.yml 中配置eureka地址
其中
server: port: 10086 这个端口号由自己设定,没有要求
这个是注册者的姓名,可以自己设定
spring: application: name: eurekaserver
2. 服务注册,进行客户端注册
引入eureka-client 依赖,注意,和eureka-server的依赖不一样
在application.yml 中配置eureka地址,注意这里容易出错。
配置服务的姓名在spring中
以上运行之后就可以在Eureka注册中心进行实例化注册了,下面就是注册了 eurekaserver,userservice,orderservice
3. 服务发现
使用服务名直接进行restful风格的地址。userservice
给RestTemplate添加@LoadBalanced 注解
最后使用服务调用者名称进行远程调用, 即可获取cloud_order和cloud_user数据
httplocalhost:8080/order/101http://localhost:8080/order/101
打开下方控制台的运行代码管理 view -> Tool windows ->service
springcloud 克隆子项目 改变端口号,一个userservice 两个模块
首先右击正在运行的userapplication—》点击copy configuration—》选择 modify options —》选择evoirment varible 然后 填写 server.port=8002 即可配置端口号成功
———————————————————————————————————————————
负载均衡
1.负载均衡流程
可以看到,uservice服务有两个运行模块,然后当orderservice请求服务时,一般采用轮询的方式进行使用这两个模块相同,但是端口号不同的数据。
在orderservice服务中,本来是使用
String url="http://userservice/user/"+order.getUserId();
但是不能直接访问useservice服务。首先需要通过orderservice 来发送请求
http://userservice/user/1 到拦截器-》由拦截器RibbonLoadBanlancerClient 获取服务id -》userservice -》通过DynamicServerListLoadBalancer 来拉取service 从Eureka-server中获取服务列表-》通过负载均衡IRule来选择使用某个服务-》返回给RibbonLoadBanlancerClient-》最后修改URL,发起请求http://localhost:8080/user/1,最后请求到了8081.
这里涉及到了负载均衡 ,
2. 负载均衡自定义
可以通过定义IRule来修改负载均衡策略
1.代码的形式
可以看到userservice的两个服务是随机的形式,原来是轮询模式,二者相互轮转
2. 第二种就是通过配置文件的形式
3. 饥饿加载
Ribbon默认为懒加载
*懒加载:就是只有第一次访问的时候(才会去加载ribbon客户端)才会去创建LoadBalanceClient(后面还要做服务拉取),所以请求时间较长,后面服务列表就会缓存在内存当中
*饥饿加载:在项目创建的时候就创建,第一次访问降低访问耗时
建立饥饿加载的方法:进行application.yml 配置