一.微服务技术栈
二.服务架构
1.1单体架构
1.2分布式架构
1.3微服务技术对比
1.4服务提供者与消费者(相对)
服务提供者:暴露接口给其它微服务调用
服务消费者:调用其它微服务提供的接口
提供者与消费者角色其实是相对的
三.Eureka注册中心
1.1Eureka的作用
Eureka自己也是一个微服务,所以Eureka在启动时会将自己也注册到Eureka上,并配上自己的信息地址,以便在Eureka集群之间通信
1.2搭建过程
四.Ribbon负载均衡
1.1负载均衡流程
1.2负载均衡策略
1.3修改负载均衡规则
代码方式:配置灵活,但修改时需要重新打包发布
配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
1.4饥饿加载
五.Nacos注册中心
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。Nacos 是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高
1.1搭建过程
1.2Nacos服务分级存储模型
微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群
在消费者中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务
1.3NacosRule的负载均衡策略
优先选择同集群服务实例列表
本地集群找不到提供者,才去其它集群寻找,并且会报警告
确定了可用实例列表后,再采用随机负载均衡挑选实例
1.4加权负载均衡
实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高
①Nacos控制台可以设置实例的权重值,0~1之间
②同集群内的多个实例,权重越高被访问的频率越高
③权重设置为0则完全不会被访问
1.5环境隔离
适用于开发、生产、测试不同环境的变化,我们可以把业务相关度比较高的放到同一个group中,比如订单和支付
①每个namespace都有唯一id
②服务设置namespace时要写id而不是名称
③不同namespace下的服务互相不可见
1.6Nacos与Eureka的相同点以及区别
相同点:
①都支持服务注册和服务拉取
②都支持服务提供者心跳方式做健康检测
区别:
①Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
②Nacos里有临时实例和非临时实例,临时实例心跳不正常会被剔除,非临时实例则不会被剔除
③Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
④Nacos集群默认采用AP方式(强调数据的可用性),当集群中存在非临时实例时,采用CP模式(强调数据的可靠性和一致性);Eureka采用AP方式
六.Nacos配置管理
1.1配置管理和配置拉取
①在Nacos中添加配置文件
②在微服务中引入nacos的config依赖
③在微服务中添加bootstrap.yml(bootstrap.yaml文件,会在application.yml之前被读取),配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件
如果当前环境不是public,还需要在bootstrap.yml文件的spring.cloud.nacos.config.namespace:配置上命名空间的id
1.2配置热更新
Nacos配置更改后,微服务可以实现热更新,方式:
①通过@Value注解注入,结合@RefreshScope来刷新
②通过@ConfigurationProperties注入,自动刷新(推荐)
注意事项:
不是所有的配置都适合放到配置中心,维护起来比较麻烦
建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置
1.3多环境配置共享
微服务会从nacos读取的配置文件:
①[服务名]-[spring.profile.active].yaml,环境配置,
例如:userservice-dev.yaml
②[服务名].yaml,默认配置,多环境共享
例如:userservice.yaml
无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件
多种配置的优先级:
1.4多服务共享配置
不同微服务共享的配置文件:
①通过shared-configs指定
②通过extension-configs指定
例如:
多种配置的优先级:
1.5Nacos集群搭建
①搭建MySQL集群并初始化数据库表
②修改集群配置(节点信息)、数据库配置
③分别启动多个nacos节点
④nginx反向代理