1.微服务概念

单体架构:

优点:架构简单,部署成本低,适合小项目
缺点:耦合太高,不好维护和升级

分布式架构:

优点:降低了服务的耦合度,有利于服务升级和拓展
缺点:架构复杂,难度大

微服务:一种良好的分布式架构方案

优点:职责单一 ,什么都是独立的,一个功能就是一个项目,可以做到高内聚,低耦合
缺点:架构比较复杂,运维和监控部署等 难度比较高

微服务 、SpringBoot 、SpringCloud 三者间的关系:

微服务是:一种架构风格,可以把一个大的项目拆分成若干个小项目,每个小项目都拥有独立的接口,数据库等,相互之间可以调用。
SpringCloud是:微服务的一站式解决方案,里面集成了各种微服务功能组件。
SpringBoot是:SpringCloud整合技术的时候,是基于SpringBoot整合的,他们两个版本互相兼容,我们常用的版本为,SpringCloud:Hoxton,SpringBoot:2.3.X。

微服务的拆分和远程调用:

拆分:
1.微服务需要根据业务模块拆分,做到单一职责,不能重复开发相同业务
2.微服务可以将业务暴露为接口,供其他微服务使用
3.不同微服务都应该有自己独立的数据库
远程调用方式:
1.基于RestTemplate发起的http请求实现远程调用
2.http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。

服务调用关系:

1.服务提供者:暴露接口给其他微服务调用
2.服务消费者:调用其他微服务提供的接口
3.提供者与消费者角色是相对的
4.一个服务可以同时拥有提供者和消费者两种角色

Eureka注册中心:

基础架构:

1.eureka-server
2.eureka-client:有提供者和消费者

微服务如何得知提供者地址?

1.提供者启动,必须立即注册自己的信息到eureka
2.eureka会保存服务名称及实例ip和端口的映射关系
3.消费者去eurek根据服务名称拉取服务实例列表

消费者如何在多个服务中选择一个?

利用组件Ribbon可以做负载均衡处理

如何感知服务故障?

1.提供者会向eureka持续发送心跳,默认30秒一次
2.eureka会自动定时检测心跳,如果超时未心跳,就会认为是服务宕机,就会被剔除

如何搭建Eurekaserver?

01-微服务-SpringCloud - 图1

服务注册:

01-微服务-SpringCloud - 图2

服务发现:

1.引入eureka-client依赖
2.在yml配置中配置eureka地址
3.给RestTemplate添加@LoadBalanced注解
4.用服务提供者的服务名称远程调用

Ribbon负载均衡

Ribbon负载均衡规则:

1.规则接口是IRule
2.默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

负载均衡自定义方式

1.代码方式:配置灵活,但修改时需要重新打包发布
2.配置方式:直观,方便,不用重新打包发布,但是无法做到全局配置

饥饿加载

1.开启饥饿加载
2.指定饥饿加载的微服务名称

Nacos注册中心:

Nacos服务搭建:

1.下载安装包
2.解压
3.在解压文件里面开启dos窗口,然后运行指令:startup.cmd -m standalone

Nacos服务注册或发现

1.引入nacos.discovery依赖
2.配置nacos地址spring.cloud.nacos.server-addr

Nacos服务分级存储模型

1.一级是服务,例如:userservice
2.二级是集群,例如:杭州或上海
3.三级是实例,例如:上海的某台部署了userservice的服务器

如何设置实例的集群属性

1.修改yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可

NacosRule负载均衡策略

1.优先选择同集群服务实例列表
2.本地集群找不到提供者,才去其他集群寻找,并且会报警告
3.确定了可用实例列表后,再采用随机负载均衡挑选实例

实例的权重控制

1.Nacos控制台可以设置实例的权重值,0~1之间
2.同集群内的多个实例,权重越高被访问的频率越高
3.权重设置为0则完全不会被访问

环境隔离

1.每个namespace都有唯一id
2.服务设置namespace时要写id而不是名称
3.不同namespace下的服务互相不可见

Nacos注册中心与Eureka注册中心的共同点

1.都支持服务注册和服务拉取
2.都支持服务提供者心跳方式做健康检测

Nacos注册中心与Eureka注册中心的区别

1.Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
2.临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3.Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
4.Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式