微服务学习Day01

微服务使用的技术

服务集群, 注册中心, 配置中心, 网关组件, 分布式缓存, 分布式搜索, 消息队列, 分布式日志服务, 系统监控链路追踪

技术内容

调用,注册中心
通知,消息队列异步

汇总

服务治理 springcloudalibaba (nacos注册发现, nacos配置管理)
缓存技术 redis(雪崩击穿穿透等)
异步通信 dubbo(异步,分布式锁等)
搜索技术 es等
持续集成 未接触

总结

将项目的各个功能拆分为独立的项目(服务),

微服务- 服务间调用

基础调用

  1. 在启动类上 自动bean装配注入spring的 resttemplate类
  2. 使用resttemplate类 需要url

使用 eureka注册中心

名词

服务提供者: 被远程调用的服务
消费者: 调用远程服务的服务
注册中心: 服务提供者向注册中心提供服务信息, 消费者从注册中心拉取所需要的服务信息并调用
心跳: 服务会向eureka发送心跳,eureka每隔一定时间检测心跳,从而知道服务健康状态
向下探测: eureka并没有,nacos对非临时实例采取

  1. eur是一个服务端
  2. 被发现的服务是客户端client

使用:

  1. eru
    1. 新建项目
    2. 添加依赖
    3. 添加注解
    4. 配置application.yml文件
      • 服务名称
spring: 
	application:
		name: userservice # 服务器名称
		- eru地址
  1. 其他服务
    1. 添加依赖
    2. 配制application.yml文件
      • 服务名称
      • eru地址
    3. 调用的时候url为其他服务名称直接调用

作用:

  • eru:
    1. 接收服务信息(其他注册)
    2. 接收心跳
    3. 发现
  • 其他服务
    1. 提供心跳
    2. 提供自身的服务信息

eru的ribonn来进行拦截url和负载均衡

使用:

  1. 添加@loadbalance 实现了client??的客户端的拦截http请求接口 intercept
  2. 拦截到url , 获取主机名(服务名) , 负载均衡客户端ribbon的 loadbalancer.execut(主机名), {拉取对应的服务列表, rule.chose() randomrule round robin 轮训调度 拿到真实的一个服务名称}, 改url, 发起请求

拦截url

  1. 拦截url , 从eur中找到对应服务列表, 轮训找出调用的服务

负载均衡原理

轮训提供服务

负载均衡策略

默认ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择 可以修改Zone
定义IRULE实现 修改负载均衡规则

  1. 代码实现 全体
@Bean
public IRule randomRule(){
return new RandomRule()
}
  1. xml/yam实现 只针对某个服务
userservice: 
	ribbon:
		NFLoadBalancerRuleClassName: com.规则名称
  1. 饥饿加载策略
    默认懒加载: 服务器启动后相应第一次请求耗时很长 因为第一次访问时才会创建loadbalancer服务器等,
ribbon:
	eager-load:
		enabled: true # 开启
		clients: # 指定饥饿加载的服务名称, 如果是一个服务就直接写后面,否则且行加- 
			- userservce

DispatcherServlet 加载 (SpringMVC的容器)

Nacos注册中心

认识Nacos

阿里巴巴的产品, 现在属于SpringCloud的组件
注册发现, 分布式配制等, 比Eureka更丰富

安装
  1. 安装nacos.io (Release,Tag, source), 解压配制(bin可执行文件 startup.cmd打开-> startup.cmd -m模式 standalone单机启动 ; target jar包可执行包; conf配置文件 application.properties修改端口 serverport默认8848)

SpringCloud Commons 通用, 定义接口规范

服务发现 服务注册 DiscoveryClient, ServiceRegistry
要改依赖, 父工程管理依赖, 子工程直接加
改地址

Nacos服务注册或发现

  1. 添加依赖 nacos.discovery依赖
  2. 修改yml文件
spring:
	cloud:
		nacos:
			server-addr: localhost:8848 # nacos地址

Nacos服务分级存储模型:

同一个服务可有多个实例
同一服务在同一地域的多个实例称集群 默认default 无
即 服务 - 集群 - 实例
服务调用尽可能选择本地集群的服务, 跨集群延迟高

添加集群名称cluster-name
 spring: 
 	cloud:
 		nacos:
 			server-addr: localhost:8848 # nacos服务端地址
 			discovery:
 				cluster-name: BJ  #集群名称 北京
根据集群负载均衡

直接就是彻底优先选择本地集群, 然后在本地集群基础上进行随即访问~
NacosRule 先集群后随机

userservice:
	ribbon:
		NFLoadBalancerRuleClassName: com.alibab.cloud.nacose.ribbon.NacosRule 

若本地都挂了,才会跨集群访问, 同时会有跨集群警告日志

根据权重负载均衡

背景: 机器性能好坏
Nacos提供了权重配制来控制访问频率, 权重越大则访问频率越高
权重值一般 0 到 1 如果是0 完全不会被访问(版本升级可以用), 0.2 0.3等

进入服务,点集群下实例的编辑

环境隔离 - namespace

Nacos中服务和数据存储的最外层都是一个名为namespace用来做最外层隔离(环境变化, 开发,测试,生产等) 里面有group(业务相关性比较高的放一个group中)

namespace环境 - group相关/版本 - 服务 - cluster集群 - 实例
不同环境的服务不可相互调用否则报错no instances availabl即不同namespace下的服务不可见

  1. 在Nacos控制台可以创建namespace , 用来隔离不同的环境
  2. 填写空间名称和空间描述 这两个是必填, 而命名空间id可以根据uuid自动生成
配法:
spring:
	cloud:
		nacos:
			server-addr: localhost:8848
			discovery:
				cluster-name: BJ # 北京 集群名称
				namespace:      # 命名空id

Nacos注册中心细节分析

临时/非临时实例

服务提供者: 注册服务信息
消费者:定时拉取服务pull

临时实例: 提供心跳, nacos会30秒检测一次,无心跳则为不健康状态, 且会被剔除
非临时实例: nacos主动发请求询问, 主动探测间隔很小, 且不健康不会被剔除

nacos注册中心: 主动推送变更消息push,服务列表更新更及时

spring: 
	cloud:
		nacos:
			server-addr: localhost:8848
			discovery: 
				namespace:	#命名空间uuid
				ephemeral: false # 是否临时实例
				cluster-name: BJ  # 集群名称

Nacos与eureka的比较:

  • 共同点
    1. 都支持服务的注册和服务网拉取
    2. 都支持服务提供者心跳方式做健康监测
  • 区别
    1. Nacos支持服务端主动检测提供者状态: 临时实例采用心跳模式, 非临时实例采用主动检测模式(服务器压力会更大)
    2. 临时实例心跳不正常会被剔除, 非临时实例则不会被剔除
    3. Nacos支持服务列表变更的消息推送模式,服务列表更新更加及时
    4. Nacos集群默认采用AP方式, 当集群中存在非临时实例时, 采用CP模式;Eureka采用AP模式
  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值