微服务
2022-05-12 23:38:39 22 举报
坤仔牛逼
作者其他创作
大纲/内容
Nacos注册中心它其实也是SpringCloud的组件、但是它相比Eureka更加丰富阿里巴巴提供的产品
项目结构
定时拉取服务
技术支持RabbitMQ
Naocos的环境隔离---namespaceNaocs中服务存储和数据存储的最外层是一个名为namespace的东西用来做外层隔离每个namespace都有唯一id所以要想访问服务就必须放在相同的环境下面去
fegin自定义配置(日志的配置)允许我们覆盖默认配置
分布式日志:你想一下这么庞大的服务代码出现问题 ,记录日志以及异常信息他会去统计日志并想形成服务报表
数据库
微服务springCloude
服务
服务之间会完成相互调用微服务非常多的情况的下:比如说我现在的配置文件需要完成修改那么我这个配置文件可能跟我数百个微服务都有关系这个时候我就要去逐个的去调整这个微服务(就非常麻烦)第二我调整完了配置之后这些关联的微服务就都要重新启动那么在生产环境下服务的重启会带来很多麻烦那么我们的需求就是这些配置文件要实现统一的管理并且我的服务配置完之后不需要重启然后就立马生效这个时候就是热更新这个时候就要用到配置管理服务器可以把其他的微服务的核心的经常变更配置文件集中交给配置管理服务器(所有的微服务都可以放上去)在那些微服务启动的时候他们就回去读取配置管理服务里面的文件再与自己本地的文件相结合作为最总的配置文件我们的微服务回去不断 的去读取配置管理服务里面的信息当发现配置修改时就回去拉取信息并且实现服务的热更新
它的存在其实就是为了解决RestTemplate方式调用存在的问题:问题存在的有:代码可读性差,编程体验不统一,参数复杂URL难以维护是一种声明式的http客户端其作用是帮我发起http请求吗属于自动装配需要导入依赖
要实现跨服务调用其实就是发起HTTP请求就要让Spring容器当中配置RestTemplate(第三方对象)配置这个第三的对象来完成服务之间的远程调用
配置中心
NacosRule负载均衡根据集群负载均很yaml文件可配置NacosRule的负载均很权重设置就是说通过调动设置可以让性能好的服务器接收多的请求性能差的接收少量的请求
分布式日志服务
实例
集群
作用是:监控整个服务,每一个节点的状态 cpu 内存 等等情况
user-service服务的提供者
作用:负载均衡服务路由身份验证和权限校验请求限流拿着服务名回去服务中心的列表中去找服务
拉取配置信息
请求:http:..uservice/user/1其实是不可用的地址负载均很来帮助它找到可用地址
读取nacos中配置文件
消息提供者
Ribbon负载均衡
拉取userservice
商品功能
北京
请求路由,负载均衡
MQ的消息队列(主要解决异步通讯)存放消息的队列事件的驱动
热更新
RANCHER
服务的拉取将来user-service多次启动模拟多实例部署,为了避免端口冲突就需要修改端口设置在你服务的消费者的启动类上面加上@LoadBalanced负载均衡算法选取服务的提供者列举:“http://uservice/user”+order.getUserId();
加载bean
要想做到自动更新:就要做到Nacos配置文件变更后微服务无需重启就可以感知:两种方式实现: 生成一个Component的配置类加上@ConfigurationProperties(prefix=\"\"):这个注解让这个类跟我们的配置文件等级一致
路由
集群概念服务调用尽可能选择本地集群的服务跨集群的调用延迟高本地集群不可访问的时候再去访问其他集群
支付功能
bootstrap.yml放着Nacos地址botstrtap的配置文件优先级高于application的优先级因为我们提前拿到nacos的地址信息所以把把一些刚需的先放到这里
docker
jenkins
创建Spring容器
在服务的调用中会存在服务的提供者和消费者的概念其实我们在做第三方配置ResTemplalt对象进行第三方调用的时候会存在硬编码问题 (其实就是http地址的硬编码)
user-service8082
硬编码问题交个Eureka注册中
注册服务信息
其实就说Eureka:服务再进行注册的时候就会向服务中心提交自己的信息服务中心就会记录这些信息那么如果出现多个服务的提供者我的消费者如何选择呢?那么服务的消费者会通过均衡算法来从它的服务列表中进行挑选
服务提供者
服务信息的注册
非临时实例、nacos主动询问有没有心跳如果没有心跳就等待回复
nacos注册中心
消息消费者
概念是啥子?啥子叫做分布式?啥子叫做集群?啥子叫做微服务?分布式:比如说你现在有一个项目是:一个加减法,我现在把这项目进行拆分成减法,和加法项目分别部署在不同的服务器,那么其实它的目的是啥子呢?为什么要样做呢?其实就是说大项目,访问特别大的时候,它其实是为了解决并发问题,以缩短单个任务的执行时间来提高效率,那么这个时候啥子是集群呢?其实就是说比如现在我的减法业务访问量非常大那么这个时候我就必须要对他进行业务减压,那么方式就是给进行增加服务器让他们两个做同样业务的事情这样他们两个就形成了一个集群,其实集群和分布式并不是包含关系他们是一个互溶的关系也就是我这个业务并发并不是特别高的时候我并不需要集群对不对其实也就可以看出,分布式就是业务拆开之后业务之间做的事情是不同的,集群就是业务之间做的相同的事情精华是:分布式是以缩短单个任务的执行时间来提高效率然而集群就是说通过提高单位时间内执行的任务数量来提高效率的那么是啥子又是微服务呢?其实刚刚我们拆开后的每一个服务我们就给他喊微服务那么为啥子会出现这个微服务呢?其实目的还是为了高并发准备的,拆开之后我们就可以应对高并发场景,单体式的项目无法对应太高的并发,因为它是部署在一个服务器当中的吗,那么我这样拆开之后,客户就可以根据自己的业务需求去访问不同业务模块,也就是访问不同服务器,那么这样做我就可以解决很多并发场景的问题(其实就想成一个布局的格式)其实他还是做到的是做到单一职责统一网关为什么需要统一网关?它的作用是啥子?你这样想网关其实就是一个小区的保安我每个服务再不同的楼栋你要过来访问我的网关会对你进行身份严验证他会路由到你要访问的服务,其实它要先做的是查看我分布式缓存中的数据,那么我缓存中没有你要的数据他才会给你路由到你要的服务当中为什么要这样做呢?其实也就还给我数据库减轻压力因为太高的并发我的sql数据库是承受不了的吗
导入alibaba的管理依赖添加Nacos的客户端依赖配置Nacos的yml配置客户端依赖
远程调用
轮询8081
他来帮助我们部署服务打成包变成DOCKER这样的虚拟容器基于叫做持续集成
返回服务列表:localhost:8081localhost:8082
系统监控链路追踪
每隔三十秒向服务提供传输心跳表示我是健康的不要把我踢出
Feign的远程调用
用户模块
父工程所有依赖
微服务
eureka-service
分布式缓存
用户管理
杭州
注册中心;配置中心
搭建Nacos注册中心
拉取或注册服务信息
搭建eureka服务
负载均很的原理:是由Ribbon组件实现的
服务网关
@LoadBalanced发起的请求会被Ribbon'进行拦截和处理的拦截动作由:LoadBalancerInterceptor实现了接口: ClientHttpRequestInterceptor他会去拦截由客户端发起的HTTP请求所以就会被拦截器,进行拦截那么负载均衡是讲究策略的:那么是又它的顶层接口IRule接口决定的那么其实是你可以定义它的规则的配置@Bean方法:返回值是IRule接口第二中方式就会把他放进yml配置文件中去
注册中心
两种实现:一种阻塞式一种响应式
交换机
kubernetes
主动推送变更消息
上海
user-service8081
订单
Nacos的服务分级存储模型
注册发现;读取配置
配置管理需要导入依赖添加bootstrap文件spring: application: name: userservice # 服务名称 profiles: active: dev #开发环境,这里是dev cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名
order-service
基于SpringBoot实现了组件的自动装配
步骤:需要在启动类上面加上@EnableFeignClients定义和使用:@FeignClient(\"userservice\")主要是基于Springmvc的注解来声明远程调用的信息
分布式搜索
因为我的微服务项目基于SpringBoot我需要进行导依赖进行管理eureka 的起步依赖配置yml文件配置eureka服务yml文件配置的服务的集群的地址(将来)在启动类加入注解:EnableEurekaService:相当于SpringCloud的注册中心的开关
临时实例(如果没有心跳就将它踢出)
服务集群
可以通过配置文件来设置临时实例和非临时实例
eureka-service注册中心
虚拟主机(相互隔离)
order-service服务的消费者
实现统一网关需要导入依赖,书写配置文件
微服务之间的调用是怎样的?服务将自己的业务暴露为接口方便其他服务调用
服务消费者
服务在做拆分的时候一个模块只做它对应的事情职责必须单一不同的微服务不能做相同的事情、微服务的数据独立,不要访问其他数据库的数据(从根源上杜绝耦合作业)
项目启动
消息队列
拉取服务进行消费
订单模块
0 条评论
下一页