微服务(rpc)

微服务(rpc)

  • 微服务必备的模块
    • 生产者
    • 消费者
    • 管理平台
    • 流量控制
      • 集群情况下如何做到流量监控
    • 负载均衡
    • 服务发现和治理
    • 序列化传输
      • 序列化和反序列化

微服务是一种架构风格,将一个应用程序拆分为一组小型、独立的服务,每个服务都可以独立开发、部署和扩展。每个服务都有自己的业务逻辑和数据存储,并通过轻量级的通信机制来进行互相通信。

微服务必备的模块

生产者

生产者的实现原理参考了Tomcat

消费者

消费者的实现原理参考了mybatis

管理平台

消费者和生产者在管理平台上注册信息,便于管理。每一个信息都要加上详细说明。管理平台中还应该有调用关系,说明谁调用了谁。

流量控制

当超过限制的流量访问微服务时,会造成瘫痪,此时造成的损失应由生产者承担。当设置流量控制后,超过流量的访问将会被禁止。

流量控制由消费者去做,当消费者发送请求后自己进行计数,当发现流量达到一定程度时,消费者自己就会进行拦截

集群情况下如何做到流量监控

假设有两台消费者访问四台生产者,一分钟不能超过一万次的流量,那么如何安排两台消费者的访问流量

负载均衡

不是用nigx做的,微服务属于内网调用,不对外网公布。内网之间的调用没有那么复杂,例如不会使用http协议。会使用自定义协议,在这种条件下,Tomcat和nigx不能够正常使用。(dobbo使用的就是自定义协议)

服务发现和治理

当生产者的服务器发生变化时(宕机或者有新服务器增加)

服务器增加:生产者和消费者就会自动向管理平台注册信息,为了区分不同的生产者和消费者,所以在申请时,会在平台上自动生成唯一的标记,同时标记会被存放放到指定的位置上,当生产者和消费者在次发送请求时,管理平台就可以根据标记来区分不同的生产消费者

服务器宕机:每台服务器都会定时向管理平台发送信息让管理平台确认自己的运行状态是否正常,当连续多次不在管理平台发送信息时,管理平台就可以及时发现服务器不能正常使用并及时进行销毁

当服务器发生变动后,管理平台会向所有调用变动生产者的消费者发送通知,以确保消费者可以及时了解生产者的消息。

由于存在延迟,当一台服务器多次不在向管理平台发送心跳期间,若有大量消费者的请求涌入,会造成损失。所以当消费者在第一次得不到生产者的回应后,会尝试第二次访问,当再次得不到回应时,消费者会及时将生产者IP进行上报并及时切换其他生产者进行请求。当管理平台接收到消费者的故障请求时,就会向其他消费者发送通知告知生产者故障

当消费者首次调用生产者IP时,会询问管理平台生产者的IP并以hashmap的方式存入缓存中存储到缓存中,下次直接进行访问,也正是因为这样,使得得知生产者故障的IP较晚。当消费者得知生产者故障时,会及时更新自己的缓存

序列化传输

通常情况下,序列化和反序列化会用到反射机制,而序列化传输使用的是probuffer,全程没用使用到任何反射机制,极大提高了效率。

springcloud性能比较慢,但是许多核心模块都是现成的,不需要自己进行开发

dobbo传输性能特别快,核心为生产者和消费者,其他模块内容需要自己去手写一份。

序列化和反序列化

序列化就是把对象转成流的形式,反序列化就是把流转为对象。序列化和反序列是毫秒级别的操作,之所以慢是因为应用到了反射,反射需要将内存都遍历一遍,导致速递很慢。

在序列化传输中,序列化和反序列化追求的都是无反射。

我们定义两个类,那么这两个类进行传输时,需要通过反射来遍历一遍类中的内容,那么如何做到无反射呢。

首先我们在WW类中加入注解标记他为需要特殊处理的类,给类中字段加入注解标记顺位和最大长度。那么这个类就进行了进化,生成了伴生类,但是在使用时是不会受到任何影响的。

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

我们如果要发送一个XX对象,消费者会有一个负责发送的send方法,里面包含了参数的url,类型等数据。也就是说,通过多态直接调用send中的data就可以完成发送。只有在启动生成伴生类时使用了反射,其他时候就不在使用反射。

反射类继承了多态,消费者调用send方法通过socket进行发送,生产者就会接收到,同时创建一个对象来储存接收到的信息,生产者对数据进行处理后返回给消费者。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChagKUHC-1692870508702)(C:\Users\沧翎\AppData\Roaming\Typora\typora-user-images\image-20230824164549223.png)]

这使得整个过程不存在反射,极大提高了速度。

附上原图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9XWQdLg-1692870508703)(C:\Users\沧翎\Documents\Tencent Files\3139086691\FileRecv\未命名文件.png)]

缺陷:

  • 字符串的存储我们需要自己写一个常量池

  • 在嵌套的情况下,我们需要知道嵌套的类有多大,所以不建议嵌套原生的类,最好是嵌套同样带注解的类。
    缺陷:

  • 字符串的存储我们需要自己写一个常量池

  • 在嵌套的情况下,我们需要知道嵌套的类有多大,所以不建议嵌套原生的类,最好是嵌套同样带注解的类。

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

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

相关文章

iOS 页面布局兼容放大模式

背景 有用户反馈,在iPhone SE 2代 存在遮挡UI界面问题,经过分析,发现用户开启了放大模式(Display Zoom -> Larger Font)导致实际显示时屏幕大小与正常模式不同,所以导致部分UI遮挡。 各手机屏幕在正常…

Vue3 中自定义hook函数

自定义hook函数 使用Vue3的组合API封装的可复用的功能函数;自定义hook的作用类似于vue2中的mixin技术;自定义Hook的优势: 很清楚复用功能代码的来源, 更清楚易懂; 什么是vue2中的mixin混入? 混入 (mixin) 提供了一种非常灵活的…

Mybatis映射.动态sql.分页

介绍: 动态SQL是MyBatis提供的一种动态生成SQL语句的方式,可以根据不同的条件生成不同的SQL语句,从而实现更加灵活的查询和操作。 在MyBatis的映射文件中,可以通过使用if、choose、when、otherwise、foreach等标签来实现动态SQL…

深入理解Reactor模型的原理与应用

1、什么是Reactor模型 Reactor意思是“反应堆”,是一种事件驱动机制。 和普通函数调用的不同之处在于:应用程序不是主动的调用某个 API 完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并…

同步和异步有什么区别,使用场景?

同步(Synchronous)和异步(Asynchronous)是用于描述不同的操作和通信模式的术语。它们在处理任务、执行代码以及处理通信时有很大的异同。 同步(Synchronous) 同步操作是指程序的执行顺序按照代码的先后顺序进行,一个操作完成后才能执行下一个操作。在同步操作中,调用一…

阿里云机器学习PAI全新推出特征平台 (Feature Store),助力AI建模场景特征数据高效利用

推荐算法与系统在全球范围内已得到广泛应用,为用户提供了更个性化和智能化的产品推荐体验。在推荐系统领域,AI建模中特征数据的复用、一致性等问题严重影响了建模效率。阿里云机器学习平台 PAI 推出特征平台(PAI-FeatureStore) 。…

Python 密码破解指南:15~19

协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【OpenDocCN 饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神,试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 十五、…

前端基础(Element、vxe-table组件库的使用)

前言:在前端项目中,实际上,会用到组件库里的很多组件,本博客主要介绍Element、vxe-table这两个组件如何使用。 目录 Element 引入element 使用组件的步骤 使用对话框的示例代码 效果展示 vxe-table 引入vxe-table 成果展…

极简Vim教程

2023年8月27日,周日上午 我不想学那么多命令和快捷键,够用就行... 所以就把我自己认为比较常用的命令和快捷键记录成博客 目录 预备知识Vim的工作模式保存内容退出Vim复制、粘贴和剪切选中一段内容复制粘贴剪切撤回和反撤回撤回反撤回查找替换删除删除…

深入理解Android消息机制的原理

Handler & Looper & MessageQueue关系简述 一个线程至多有一个looper;一个looper有一个mq;一个mq对应多个message;一个message对应多个handler。消息类型:同步、异步、同步屏障消息。无限循环:在队列中没有消…

stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)

单片机型号STM32F103R6: 最后实现的效果是,开机后PC内要求输入1或0,输入1则打开灯泡,输入0则关闭灯泡,输入其他内容则显示错误,值得注意的是这个模拟的东西只能输入英文 之所以用2个LED灯是因为LED电阻粗略一算就是1…

fat32 文件系统 误删除文件数据恢复 SDK 介绍

fat32 文件系统 误删除文件数据恢复 SDK 介绍 fat32_analyze.dll 是一个专门用于恢复 fat32 文件系统误删除文件的标准的动态链接库(DLL), 可被任何其他程序直接加载调用。 下载地址: https://gitee.com/tankaishuai/powerful_sdks/tree/master/fat32_a…

计算机视觉教程的量化转移学习

(实验性)计算机视觉教程的量化转移学习 本教程以 Sasank Chilamkurthy 编写的原始 PyTorch 转移学习教程为基础。 转移学习是指利用预训练的模型应用于不同数据集的技术。 使用转移学习的主要方式有两种: 作为固定特征提取器的 ConvNet :在…

【Tkinter系列02/5】界面初步和布局

本文是系列文章第二部分。前文见:【Tkinter系列01/5】界面初步和布局_无水先生的博客-CSDN博客 说明 一般来说,界面开发中,如果不是大型的软件,就不必用QT之类的实现,用Tkinter已经足够,然而即便是Tkinter规…

解决vue中改变浏览器大小时其他页面的echarts不渲染了

1、在页面中加入ref <div class"echart_income" ref"echartsWaring"></div> 2、去掉echarts渲染出来的属性_echarts_instance_ initChart() {//移除图表中_echarts_instance_属性this.$refs.echartsWaring.removeAttribute(_echarts_insta…

spring boot 项目整合 websocket

1.业务背景 负责的项目有一个搜索功能&#xff0c;搜索的范围几乎是全表扫&#xff0c;且数据源类型贼多。目前对搜索的数据量量级未知&#xff0c;但肯定不会太少&#xff0c;不仅需要搜索还得点击下载文件。 关于搜索这块类型 众多&#xff0c;未了避免有个别极大数据源影响整…

linux操作系统的权限的深入学习(未完)

1.Linux权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户…

Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务

前言 之前虽然单独讲过Security Client和Resource Server的对接&#xff0c;但是都是基于Spring webmvc的&#xff0c;Gateway这种非阻塞式的网关是基于webflux的&#xff0c;对于集成Security相关内容略有不同&#xff0c;且涉及到代理其它微服务&#xff0c;所以会稍微比较麻…

Prometheus 监控系统

常用的监控系统有哪些&#xff1f; 老牌传统 Zabbix Nagios Cacti 新一代的 Prometheus 夜莺 Zabbix 和 Prometheus 的区别&#xff1f;如何选择&#xff1f;【重中之重】 Zabbix 更适用于传统业务架构的物理机、虚拟机环境的监控&#xff0c;对容器环境的支持较差&#xf…

战略形成是权力妥协的过程,江湖,政治是常态

战略权力派&#xff1a;战略形成是各种权力妥协的过程【安志强趣讲270期】 趣讲大白话&#xff1a;有人的地方就有政治 **************************** 有人的地方就有江湖 有组织的地方就有政治 公司的战略是各种人的权力博弈的产物 围观权力&#xff1a;就是组织内部 宏观权力…