微服务体系<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
NacosServer


Client 在启动的时候会发起一个 服务注册的接口 去进行服务注册,在2.1 版本就会基于grpc发起通信
当我们user-->order的时候 ,服务发现从nacos中拉取服务, 然后借助ribbon发起负载均衡调用
我们的注册中心的概念

在这里插入图片描述


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

在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

8.docker仓库

文章目录 Docker仓库本地私有仓库Docker HarborDocker harbor部署访问页面创建用户下载私有仓库镜像harbor同步 Docker仓库 本地私有仓库 ##先下载 registry 镜像docker pull registry##修改配置文件,在 daemon.json 文件中添加私有镜像仓库地址vim /etc/dock…

Windows使用Notepad++编辑Linux服务器的文件

🚀 Windows使用Notepad编辑Linux服务器的文件 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介…

Verilog语法学习——LV2_异步复位的串联T触发器

LV2_异步复位的串联T触发器 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述: 用verilog实现两个串联的异步复位的T触发器的逻辑&#x…

Mac 安装启动RabbitMq

使用HomeBrew安装 未安装的请参照我的这篇Mac安装HomeBrew文章 安装 执行命令 brew install rabbitmq启动方式 brew services start rabbitmq端口说明 端口用处5672RabbitMQ通讯端口,也就是连接使用的端口15672RabbbitMQ管理界面端口,需要开启Manage…

Django实现音乐网站 ⑴

使用Python Django框架制作一个音乐网站。 目录 网站功能模块 安装django 创建项目 创建应用 注册应用 配置数据库 设置数据库配置 设置pymysql库引用 创建数据库 创建数据表 生成表迁移文件 执行表迁移 后台管理 创建管理员账户 启动服务器 登录网站 配置时区…

图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index

LLM 如火如荼地发展了大半年,各类大模型和相关框架也逐步成型,可被大家应用到业务实际中。在这个过程中,我们可能会遇到一类问题是:现有的哪些数据,如何更好地与 LLM 对接上。像是大家都在用的知识图谱,现在…

web APIs-练习一

轮播图点击切换&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"…

浅谈自动化测试

谈谈那些实习测试工程师应该掌握的基础知识&#xff08;一&#xff09;_什么时候才能变强的博客-CSDN博客https://blog.csdn.net/qq_17496235/article/details/131839453谈谈那些实习测试工程师应该掌握的基础知识&#xff08;二&#xff09;_什么时候才能变强的博客-CSDN博客h…

无涯教程-jQuery - Puff方法函数

吹气效果可以与show/hide/toggle一起使用。通过按比例放大元素并同时隐藏它&#xff0c;可以形成粉扑效果。 Puff - 语法 selector.hide|show|toggle( "puff", {arguments}, speed ); 这是所有参数的描述- model - 效果的模式。可以是"显…

【项目】轻量级HTTP服务器

文章目录 一、项目介绍二、前置知识2.1 URI、URL、URN2.2 CGI2.2.1 CGI的概念2.2.2 CGI模式的实现2.2.3 CGI的意义 三、项目设计3.1 日志的编写3.2 套接字编写3.3 HTTP服务器实现3.4 HTTP请求与响应结构3.5 EndPoint类的实现3.5.1 EndPoint的基本逻辑3.5.2 读取请求3.5.3 构建响…

iOS开发-聊天emoji表情与自定义动图表情左右滑动控件

iOS开发-聊天emoji表情与自定义动图表情左右滑动控件 之前开发中遇到需要实现聊天emoji表情与自定义动图表情左右滑动控件。使用UICollectionView实现。 一、效果图 二、实现代码 UICollectionView是一种类似于UITableView但又比UITableView功能更强大、更灵活的视图&#x…

Debian9离线安装docker

1. 前言 在服务器禁止外网访问的情况下&#xff0c;无法通过apt-get install安装docker&#xff0c;使得docker安装变得异常曲折 本地下载安装包&#xff0c;scp到服务器通过dpkg -i 手动安装&#xff0c;启动docker服务失败… … 各种坑&#xff0c;猛男也要落泪 &#x1f92…

招商银行秋招攻略和考试内容详解

招商银行秋招简介 招商银行是一家股份制商业银行&#xff0c;银行的服务理念已经深入人心&#xff0c;在社会竞争愈来愈烈的今天&#xff0c;招商银行的招牌无疑是个香饽饽&#xff0c;很多人也慕名而至&#xff0c;纷纷向招商银行投出了简历。那么秋招银行的秋招开始时间是多…

VMware虚拟机安装VMware tools

一、挂载光驱 执行以下命令来创建 /mnt/cdrom 目录&#xff1a; mkdir -p /mnt/cdrom-p 参数会确保如果 /mnt/cdrom 的上级目录&#xff08;例如 /mnt&#xff09;不存在的话也会被创建。 然后&#xff0c;你可以再次尝试挂载光盘&#xff1a; mount /dev/sr0 /mnt/cdrom这次…

面试手写实现Promise.all

目录 前言常见面试手写系列Promise.resolve 简要回顾源码实现Promise.reject 简要回顾源码实现Promise.all 简要回顾源码实现Promise.allSettled 简要回顾源码实现Promise.race 简单回顾源码实现结尾 前言 (?﹏?)曾经真实发生在一个朋友身上的真实事件&#xff0c;面试官让…

flink采用thrift读取tablets一个天坑

原先的配置 [INFO] StarRocksSourceBeReader [open Scan params.mem_limit 8589934592 B] [INFO] StarRocksSourceBeReader [open Scan params.query-timeout-s 600 s] [INFO] StarRocksSourceBeReader [open Scan params.keep-alive-min 100 min] [INFO] StarRocksSourceBeRea…

软件外包开发测试管理工具

测试是软件工程中非常重要的一个环节&#xff0c;在上线前必须需要经过严格的测试才能确保上线后软件系统长时间运行。有大量的软件开发和测试管理工具&#xff0c;每一个工具都有自己的特点&#xff0c;今天和大家分享一些常见的工具&#xff0c;希望对大家有所帮助。北京木奇…

MySQL中锁的简介——行级锁之 间隙锁 和 临键锁

1.间隙锁演示 2.临键锁演示 间隙锁锁住的是间隙&#xff0c;不包含对应的数据记录&#xff0c;而临键锁既会包含当前这条数据记录&#xff0c;也会锁定该数据记录之前的间隙。间隙锁的目的是防止其他事务插入间隙造成幻读现象。间隙锁是可以共存的&#xff0c;一个事务采用的间…

Redhat7/CentOS7 网络配置与管理(nmtui、nmcli、GNOME GUI、ifcfg文件、IP命令)

背景&#xff1a;作为系统管理员&#xff0c;需要经常处理主机网络问题&#xff0c;而配置与管理网络的方法和工具也有好几种&#xff0c;这里整理分享一下网络配置与管理的几种方式。 1、NetworkManager 概述 在 Red Hat Enterprise Linux 7 中&#xff0c;默认网络服务由 N…

python爬虫-加速乐cookie混淆解析实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;抓包工具第一次请求页面&#xff0c;得到响应。本次我使用的fiddle进行抓包&#…