微服务体系<1>

我们的微服务架构  我们的微服务架构和单体架构的区别
什么是微服务架构
微服务就是吧我们传统的单体服务分成  订单模块  库存模块  账户模块

在这里插入图片描述

单体模块 是本地调用 从订单模块 调用到库存模块 再到账户模块  这三个模块都是调用的同一个数据库  这就是我们的单体架构
微服务 就是把我们的订单模块,库存模块 账户模块拆出来 作为  订单服务,库存服务
账户服务
基于订单模块我就可以有独立的进程了
用户在下单的时候 此时涉及到远程调用
我们此时有独立的数据库,针对我用户下单这个业务来说 需要我们3个微服务来完成
可能别的功能需要多个微服务来完成
这个就属于微服务架构   整个系统的业务可能有几百个  甚至上千个微服务去完成  这种架构就是微服务架构

在这里插入图片描述

微服务 在自己的进程中运行  并且这些微服务通过rpc调用,比如说http.dubbo进行通信
他们是基于某一个业务来调用的比如说用户下单.就需要我们的订单 库存 账户
给予我们的业务功能来构建这种就是我们的微服务架构,会有很多问题随着链路增大,当我发起请求调用的时候.假设出问题了
比如说账户服务调不通 就会导致我用户是没有办法下单的
微服务是独立进程,分布式部署,就会存在网络抖动,网络不通又是怎么去解决如果有大量请求  很有可能就是你订单服务扛不住,负载直接飙升到90%
直接就拒绝服务了  这个问题我们也得去解决  我们还得需要有一些限流方案

在这里插入图片描述

还有  假设操作mysql 我在账户服务出现了慢查询,此时我的下单链路就会很慢
这种情况下我的排查问题, 我该怎么去排查,到底是哪一个节点出现问题了。
因为对于我微服务而言,此时可能会涉及到跨部门沟通,效率低,我们这个慢操作到底出现在那个环节上
是不是此时还有个链路追踪组件,
是不是还会涉及到分布式事务
单体架构在同一个进程内  用的本地事务
此时就涉及到跨服务  只能用分布式事务,就会增加我们的难度
真正保证分布式的稳定性 我们要有很多的方案 真正的想让微服务架构落地的时候要学习很多1. 注册中心
2. 注册中心有什么用
我此时springboot的2个应用  我用户和订单模块  我通过url发起的调用
我此时涉及到跨应用和跨进程我可以基于resttemplate 进行发起调用
我 user--->>>>>>order 服务  就可以  通过restTemplate 就可以发起调用这就是完成我们微服务最基本的需求 就是我们服务之间如何调用
使用restTemplate  这样是有问题的

在这里插入图片描述

比如说 我   user--->order  我此时订单服务是有多节点部署的
User------->order (扩容)
现在如果扩容了 假设 我启动一个 8021 
根本原因就是我们吧这里写死的,  

在这里插入图片描述

 微服务里面的调用关系 如果使用http框架 没有办法感知到我们这个就是我们急需去思考的问题我们现在基于restTemplate发起的调用,   我扩容的时候 就没有办法了我吧这个服务节点注册进来 我会员发起调用的时候 我发起调用我从List中去取一个 随机get(0)一个   我们可以引入一个中间件 --》》》》注册中心

在这里插入图片描述

我consumer就可以拉取到 这个列表
就是我现在写死是不行的 我就得写活 我可以使用zk 或者redis 去存储
我某一个服务宕机了  我又能怎么感知到我们的会员服务 不需要非健康的实例,所以我们需要一个健康检查的功能
我们可以用nginx配置一个upstream来做

在这里插入图片描述

比如说 我 服务很多  我就的维护很多,我们采用nginx 做注册中心肯定是不现实的
所以我们希望我们的服务启动起来的时候直接在nginx中插入数据
我们就想到mysql

在这里插入图片描述

我们就可以使用mysql 存储我们的服务注册信息 我们可以基于mysql 来实现我们的注册信息
就可以把服务的实例注册在mysql中

在这里插入图片描述

就吧服务的实例存储在Mysql  就比如说订单服务启动之后就可以发起个请求,
在mysql中注册一条信息  进行注册 就比如说  如果你意外下线的化可以来一个取消接口把服务进行删除假设我网络不通  我可以把状态设置为down   down 就代表非健康

在这里插入图片描述

对于我会员服务来说 我就可以拉取信息
我调用的时候 我就可以从注册中心中去拉取 这样来的化   
我发起请求的时候就可以从注册中心去拉取对应的服务的Ip 和port
我拉过来之后我就可以get(0) 进行拉取了 我就可以发起本地远程调用了
我们的注册中心 他有2个很重要的接口  1. 注册接口 2。获取服务的接口
获取服务的接口  我要拉取所有的订单信息 这是最核心的接口
这就是注册中心要实现的核心功能,服务注册和发现
服务注册 就是需要吧我们的服务注册在 注册中心上
服务发现  就是我们调用模块 做发现
服务发现 不仅仅做新增和删减
很有可能就是你宕机的时候可能就挂了, 还需要做一个健康检查
不能每次发起远程调用的时候都过注册中心   其次如果注册中心挂了
发现此时会员服务是没有办法掉通的服务的调用严重依靠注册中心即便你注册中心挂了, 我也能调用到你订单服务
我需要做一个心跳接口 就是说我可以在我每一个微服务中启动一个定时任务  定期发心跳
假设5s发一次心跳,比如说ping3306
叫做服务的续约
告诉注册中心我还活着最后一次发心跳的时间、 最后一次服务续约的时间我可以基于中台的功能去看 先看有什么模块  尽可能的了解业务我记录下来对于我注册中心来说 会检查 假设到11s 上一次还是01s
隔了10s 你还没有发送心跳过来
就代表i已经挂了
我就给你设置为down

在这里插入图片描述

他此时还没有删除  假设30s 的化 还没有做  我就可以认为你已经挂掉了 这个服务如果干掉的化  对于我们会员服务来说拉取我们服务的时候只会去取一个 通过心跳的机制感知到服务的增减对于会员服务来说 你不能因为 我注册中心挂了 我就不能发起调用
服务的调用严重依赖于你注册中心
即便你注册中心挂了 我也能调用到你的订单服

在这里插入图片描述

我需要一个心跳接口,我可以在每个微服务中 启动一个定时任务  假设每5s  我发一次心跳  
告诉注册中心 我还活着  假设最后一次发心跳的时间  我记录下来,
最后一次服务的续约时间

在这里插入图片描述

对于我们注册中心来说 会检查 假设到11s, 上一次还是01s 隔了10s 你还没有发送心跳过来
就代表你已经挂了
我给你设置为down我需要通过心跳机制来感知服务的增减
对于会员服务来说 你不能因为 我注册中心挂了 我就不能调用
我可以缓存起来 然后利用负载均衡算法 get(0) 发起调用  解决了每次调用之前我都的从服务器拉取的一些问题
以及我注册中心挂了就不能发起调用了
缓存起来的好处就是客户端发起调用的时候 我只需要从本地缓存中去读取就可以了

在这里插入图片描述

注册中心 如果自己去实现的化 让自己去设计的化 有什么思路
微服务中为什么要有这个注册中心
核心作用就是服务注册和服务发现注册中心的实现

在这里插入图片描述

注册中心的技术选型CP+ap  
Cp 就是说他的服务实例在内存中
Ap 就是说服务实例会持久到磁盘  重启的化 会从磁盘中进行加载

在这里插入图片描述

微服务的技术栈 主讲就是nacos  alibaba这一套

在这里插入图片描述
在这里插入图片描述

openApi 针对于我api来说我可以通过api来查询他的功能

在这里插入图片描述

我就可以支持异构

在这里插入图片描述

nacos的2.0的底层通信变了
以前是基于Mvc的http 接口
2.0 变了 变成grpc了

在这里插入图片描述

要学会看待自己的不足  我们做技术选型的时候优先选择nacos
nacos的架构

在这里插入图片描述

1、基于目前情况分析目前的原因
2、出解决方案  进而改进服务的提供者和消费者
User--->Order
NacosClient
NacosServerClient 在启动的时候会发起一个 服务注册的接口 去进行服务注册,在2.1 版本就会基于grpc发起通信
当我们user-->order的时候 ,服务发现从nacos中拉取服务, 然后借助ribbon发起负载均衡调用
我们的注册中心的概念

在这里插入图片描述


流量的打标  在元数据中达标  灰度
注册中心的核心功能  
服务注册和服务发现
服务心跳 
服务同步 数据的一致性 (nacos的)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

加入pom  引入依赖 注意springBoot和springcloud的版本依赖  做统一的版本管理 以及兼容性问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Training-Time-Friendly Network for Real-Time Object Detection 论文学习

1. 解决了什么问题? 目前的目标检测器很少能做到快速训练、快速推理,并同时保持准确率。直觉上,推理越快的检测器应该训练也很快,但大多数的实时检测器反而需要更长的训练时间。准确率高的检测器大致可分为两类:推理时…

银河麒麟安装mysql数据库(mariadb)-银河麒麟安装JDK-银河麒麟安装nginx(附安装包)

银河麒麟离线全套安装教程(手把手教程) 1.银河麒麟服务器系统安装mysql数据库(mariadb) 2.银河麒麟桌面系统安装mysql数据库(mariadb) 3.银河麒麟服务器系统安装JDK 4.银河麒麟桌面系统安装JDK 5.银河麒麟…

青大数据结构【2021】

一、单选(17!) 根据中序遍历得到降序序列可以知道,每个结点的左子树的结点的值比该结点的值小,因为没有重复的关键字,所以拥有最大值的结点没有左子树。 二、简答 三、分析计算 四、算法分析 3.迪杰斯特拉…

windows安装Elasticsearch8.9.0

官网解压安装好路径(非中文,无空格) 可参考 言之有李LAX csdn http://t.csdn.cn/S2oju本人使用jdk17 修改配置elasticsearch.yml xpack.security.enabled: false xpack.security.http.ssl:enabled: false直接点击bin\elasticsearch.bat…

Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用

Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用 目录 Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用 一、简单介绍 二、NuGetForUnity 的下载导入 Unity 三、NuGetForUnity 在 Unity 的…

LeetCode 75 第十二题(11)盛最多水的容器

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 配合着示例给出的图片我们可以得知找出盛水最多的容器是什么意思,给一个数组,找出数组中两个元素能围成的最大的矩阵面积是多少. 比较直观的想法是套两层for循环暴力解出来,但是这题是中等难度题,一般中等题是没法用暴力得…

pinia在vue3中的使用

总结: 在store文件夹中建一个pinia的文件userStore.js 1.要想使用pinia必须先引入defineStore 这里我们使用es6的模块化语法导出的 import { defineStore } from pinia 2.然后使用export const useUserStore defineStore(user,{}) defineStore 方法有两个参数&…

论文分享:PowerTCP: Pushing the Performance Limits of Datacenter Networks

1 原论文的题目(中英文)、题目中包含了哪些关键词?这些关键词的相关知识分别是什么? 题目:PowerTCP: Pushing the Performance Limits of Datacenter Networks PowerTCP:逼近数据中心的网络性能极限 2 论…

vue+Element项目中v-for循环+表单验证

如果在Form 表单里有通过v-for动态生成&#xff0c;如何设置验证呢&#xff1f; <el-form ref"ruleFormRef" :model"ruleForm" status-icon :rules"rules" label-width"120px"class"demo-ruleForm" hide-required-aster…

在EF Core中为数据表按列加密存储

假设有User表 public class User : Entity<int> {public int Id { get; set; }public string UserName { get; set; }public string Name { get; set; }public string IdentificationNumber { get; set; } }其中有身份证号码IdentificationNumber列&#xff0c;需要加密…

虚拟机(VMware)安装Linux(Ubuntu)安装教程

清华大学开源网站镜像站网址&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror 进入之后在搜索框中搜索“ubuntu” 直接点击箭头所指的蓝色字体“ubuntu-20.04.1-desktop-amd64.iso”即可下载

[Ubuntu 22.04] containerd配置HTTP方式拉取私仓Harbor

文章目录 1. 基础环境配置2. Docker安装3. 部署Harbor&#xff0c;HTTP访问4. 部署ContainerD5. 修改docker配置文件&#xff0c;向harbor中推入镜像6. 配置containerd6.1. 拉取镜像验证6.2. 推送镜像验证 1. 基础环境配置 [Ubuntu 22.04] 安装K8S基础环境准备脚本 2. Docker安…

听说 Spring Bean 的创建还有一条捷径?

文章目录 1. resolveBeforeInstantiation1.1 applyBeanPostProcessorsBeforeInstantiation1.2 applyBeanPostProcessorsAfterInitialization1.3 案例 2. 源码实践2.1 切面 Bean2.2 普通 Bean 在 Spring Bean 的创建方法中&#xff0c;有如下一段代码&#xff1a; AbstractAutow…

详解rocketMq通信模块升级构想

本文从开发者的角度深入解析了基于netty的通信模块, 并通过简易扩展实现微服务化通信工具雏形, 适合于想要了解netty通信框架的使用案例, 想了解中间件通信模块设计, 以及微服务通信底层架构的同学。希望此文能给大家带来通信模块架构灵感。 概述 网络通信是很常见的需求&#…

什么是自动化测试?

什么是自动化测&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&#…

k8s安装prometheus

安装 在目标集群上&#xff0c;执行如下命令&#xff1a; kubectl apply -f https://gitee.com/i512team/dhorse/raw/main/conf/kubernetes-prometheus.yml使用 1.在浏览器访问地址&#xff1a;http://master_ip:30000&#xff0c;如下图所示&#xff1a; 2.查看k8s自带的…

yolov5 onnx模型 转为 rknn模型

1、转换为rknn模型环境搭建 onnx模型需要转换为rknn模型才能在rv1126开发板上运行&#xff0c;所以需要先搭建转换环境 模型转换工具 模型转换相关文件下载&#xff1a; 网盘下载链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;teuc 将其移动到虚拟机中&#xf…

前端开发Vue3.0 标签setup语法『UI组件库』之『模态框』【业务提升必备】

封装模态框需要定义的参数 title //弹窗标题 show // 是否显示弹窗 width // 弹窗宽度 height // 弹窗高度 borderRadius // 弹窗圆角 headerColor // 弹窗顶部颜色 contentText // 内容文本 contentTextCorder //内容文本颜色 position // 标题的位置 …

自定义 View(六) 自定义评分星星

先看看效果图 1.自定义 View 的基本流程 创建 View Class创建 attr 属性文件&#xff0c;确定属性View Class 绑定 attr 属性onMeasure 测量onDraw 绘制onTouchEvent ( 用户交互需要处理 ) 1.1 创建 View Class package com.example.view_day05_ratingbar;import android.…

GAMES104里渲染等一些剩下的问题

渲染的一些剩下的问题 1. 如何理解渲染中的AO(环境光遮蔽) 环境光遮蔽 我们先从一个简单的效果开始—环境光遮蔽(Ambient Occlusion,以下简称AO)。大家可以看到&#xff0c;下图中的场景没有任何渲染效果&#xff0c;也没有任何着色效果&#xff0c;但场景呈现出了非常清晰的…