微服务中的重要模块

为什么要有微服务?

微服务提高开发效能,避免业务的重复理解,代码重复开发,增加开发效能和代码复用性。

  在实际的工作中许多不同的业务有着共同的功能需求,如果我们每遇到一次这种需求就重新去理解构建一次的话会花费大量的时间。但是如果我们把这些共同的需求变为一个个小的模块,在需要使用对应功能时直接去调用这些模块能大大节省时间。避免了业务重复理解,代码重复开发,增加开发效能和代码复用性。

微服务的数量很多,有着几万到几十万的微服务。

微服务的七大模块

  • 中央管理平台
  • 生产者
  • 消费者
  • 权限管理
  • 流量管理
  • 自定义传输协议
  • 序列化与反序列化

微服务概述

  微服务中有提供服务的生产者,也存在使用服务的消费者,而存在着一个中央管理平台去管理这些生产者和消费者。一个微服务既可以是生产者也可以是消费者

  生产者要先进行注册,包含名字,功能,所属部门,接口有哪些,接口说明,联系人,生产者ip地址等信息。

  消费者也要先进行注册:名字,目的,所属部门,联系人,IP地址等信息。消费者可以调用多个生产者,消费者想要调用生产者要先申请。申请包括:调用原因,所属业务,所属部门,联系人,调用那些接口,某个接口每分钟调用的上限次数等信息。

  中央管理平台要进行权限控制(消费者可以调用生产者的哪些接口)和流量控制(这里的流量是指访问量)。服务发现,服务治理。当某些服务的服务器出现问题了,中央管理平台也要及时的察觉出来。所以这些服务器socket(包含生产者和消费者)每隔几秒就向管理平台发送一次心跳(轮询),证明自己还活着。如果管理平台没有收到某个服务器的心跳,那么就会报出异常,向对应管理者发送信息。

   一旦消费者的对某个生产者发送请求失败就要将请求分配到其他服务器上去。如果生产者新增了服务器,要让消费者也知道新增服务器的存在,让请求也能打到这些服务器上。

  内网为了传输更快,要重新规定一个协议,自己研发一套。不能使用原有的http协议。

生产者

生产者注册后,会生成一个唯一标识。生产者程序,需要引入微服务相关的jar包,在一个固定的文件夹中会生成一个此服务对应的一个秘钥,那么当程序启动时,jar包就会把这个秘钥发送到中央管理平台,就能够找到对应的注册的生产者,还会把主机ip等信息也上传到中央管理平台对应的生产者,每秒钟服务器会向中央管理平台每隔几秒发送一次心跳,来证明服务器运行正常,如果中央管理平台没有收到心跳,那么就会标记异常。

在生产者压力较大时,生产者会新增服务器,通过新增生产者服务器的心跳,就能够将自己的信息通知到中央管理平台。

生产者的实现原理类似于Tomcat+springboot

消费者

消费者和生产者一样,也会需要注册,生成一个id,消费者服务器也有对应的秘钥,这样就无需手动去统计,消费者有哪些服务器了。

生产者会拥有若干个接口,消费者在申请的时候可能并不会申请全部的接口,每个申请的接口,都需要提交调用次数等信息。

微服务及其注重性能,消费者在首次调用的时候需要向中央管理平台询问,知道生产者服务器有哪些ip,然后缓存到消费者服务器本地,下次再调用就不需要再经过中央管理平台了,而是直接访问生产者服务器。

在访问的时候需要判定消费者对生产者的接口有没有访问权限,如果消费者想要越界调用某些没有权限的接口,需要消费者自己去拦截,由消费者的jar包去实现拦截。

消费者对生产者的访问权限存储在消费者的本地中,由于消费者申请接口的数量可能变化,所以每隔几分钟消费者会去中央管理平台去同步一下自己的访问权限,更新到本地。

当生产者新增了服务器后,消费者通过分钟级的轮询中央管理平台也能够发现这些新增的服务器并使用。

怎样解决生产者崩溃问题

当一个生产者者服务器出现故障后,中央管理平台有5-6次没有收到某台生产者服务器的心跳时,才能判定该服务器出故障了,这会导致一个较长的延迟。所以如果这期间会有许多的请求过来,这时如果一个消费者请求这个服务器失败了,会再try catch一次,如果还请求失败,就会更换一个服务器进行请求。并将该故障消费者服务器上报给中央管理平台,中央管理平台接到消费者对生产者的故障报告后会立刻查询有哪些消费者正在调用该台故障的生产者服务器,并且立刻向他们更新消息,告诉他们这台服务器故障了。这样的处理是毫秒级别的。

如果一共有三台消费者服务器,而这三台消费者对生产者总访问量限制为每分钟一千次,该如何进行流量控制?

1.方案一:在众多消费者服务器中,会选择一台服务器负责进行访问次数统计,到了每分钟允许访问的总次数吧就告诉大家不要访问了。这种方法,统计不精确,有延迟。

2.方案二:把这些任务去平均分给这三台服务器,一旦某个消费者服务器的请求量达到了1000,就阻止该消费者服务器继续访问。

ps:3000的访问要求并不一定要非常精确,超过几十次访问是没有影响的。

自定义传输协议

如果使用http协议,那么任意一个项目都可以作为生产者,像servlet,spring,springboot都可以,只需要引入相关jar包即可。但是为了内部传输速率的加快,通常使用自定义协议,那么这时servlet,spring,springboot就都不可以了,所以就需要架构师自己写一套类tomcat的东西,但是和tomact的区别是,tomcat识别http协议,自己写的识别自定义协议。

http协议在外网,环境比较复杂。所以规定了许多字段。但是在内网使用的时候,通常会基于http协议/tcp协议进行缩减。自定义协议定义了每个字段的范围,如何发送,怎样解析。

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

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

相关文章

2.1不使用spring-boot-starter-parent

2.1不使用spring-boot-starter-parent ************************************************************* 从第1章的介绍中读者了解到在向pom.xml文件中添加依赖之前需要先添加spring-boot-starter-parent。spring-boot-starter-parent主要提供了如下默认配置: Java…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵,网络攻击,流量异常【3】

之前用NSL-KDD数据集做入侵检测的项目是: 【1】https://qq742971636.blog.csdn.net/article/details/137082925 【2】https://qq742971636.blog.csdn.net/article/details/137170933 有人问我是不是可以改代码,我说可以。 训练 我将NSL_KDD_Final_1.i…

Day42:动态规划 LeedCode 01背包 416. 分割等和子集

01背包 1.确定dp数组以及下标的含义 dp[i][j]的含义:从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 那么可以有两个方向推出来dp[i][j] 2.确定递推公式 不放物品i:由dp[i - 1][j]推出,即背…

十大排序——9.桶排序

这篇文章我们来介绍一下桶排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 桶排序和计数排序一样,都不是基于比较进行排序的。 下面通过一个例子来理解一下桶排序吧。 首先,给你一个无序数组[ 20,18,28,66,25,31,67,30 ],然后&#…

Maven POM元素解析(二)

一、parent <parent>元素包含定位此项目将从中继承的父项目所需的信息。注意&#xff1a;此元素的子元素不是插值的&#xff0c;必须作为文字值给定。 ElementTypeDescriptiongroupIdString要从中继承的父项目的组id。artifactIdString要从中继承的父项目的项目id。ver…

PX6C mini IMU发送速率修改

PX6C mini IMU发送速率修改 提高波特率&#xff11;、命令行方式1.1 原始IMU数据1.2 飞控计算过后的IMU数据 2、更改启动文件 提高波特率 提高发布频率过后数据的传送量一下变的大起来了&#xff0c;首先需要提高波特率。 我使用的PX4 6C mini。更改参数SER_TEL2_BAUD设置和上…

【Entity Framework】你知道如何处理无键实体吗

【Entity Framework】你知道如何处理无键实体吗 文章目录 【Entity Framework】你知道如何处理无键实体吗一、概述二、定义无键实体类型数据注释 三、无键实体类型特征四、无键实体使用场景五、无键实体使用场景六、无键使用示例6.1 定义一个简单的Blog和Post模型&#xff1a;6…

高分二号卫星(GF-2):中国遥感科技的新高度

​高分二号卫星&#xff08;GF-2&#xff09;是中国在高分辨率地球观测领域的重要成就&#xff0c;其引入了先进的成像技术和灵活的数据获取模式&#xff0c;为地球资源监测、环境保护、城市规划等领域提供了强大的数据支持。本文将深入介绍高分二号卫星的技术特点、成像能力以…

【华为OD机试】执行任务赚积分【C卷|100分】

题目描述 现有N个任务需要处理&#xff0c;同一时间只能处理一个任务&#xff0c;处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值&#xff0c;在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限&#xff0c;请问在…

10.Vue2.x条件渲染—v-if、v-show

文章目录 条件渲染—v-if、v-show 条件渲染—v-if、v-show <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>条件渲染</title><script type"text/javascript" src"../js/vue…

Day 27 39. 组合总和 40.组合总和II 131.分割回文串

组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数。解集不能…

BatchNorm算法详解

BatchNorm算法详解 1 BatchNorm原理 BatchNorm通过对输入的每个mini-batch的数据进行标准化&#xff0c;使得网络的输入分布更加稳定。 在训练过程中&#xff0c;每轮迭代网络层的输入数据分布变化很大的话&#xff0c;使得数据抖动很大&#xff0c;导致权重变化也会很大&am…

自定义类型: 结构体 (详解)

本文索引 一. 结构体类型的声明1. 结构体的声明和初始化2. 结构体的特殊声明3. 结构体的自引用 二. 结构体内存对齐1. 对齐规则2. 为啥存在对齐?3. 修改默认对齐值 三. 结构体传参四. 结构体实现位段1. 什么是位段?2. 位段的内存分配3. 位段的应用4. 位段的注意事项 ​ 前言:…

二维相位解包理论算法和软件【全文翻译- 加权最小二乘相位解包裹-PCG(5.4)】

5.4 加权最小二乘相位 与路径跟踪法不同,最小二乘法不直接处理残差问题,因为它们是通过对残差进行积分以最小化梯度差来求解的。另一方面,加权最小二乘法使用预先确定的权重(如质量图)来避免通过残差积分。选择权重的目的是以某种方式适应残差,隔离低信噪比区域,或对所…

什么是上位机?入门指南

什么是上位机&#xff1f; 上位机&#xff08;SCADA&#xff0c;Supervisory Control and Data Acquisition&#xff09;是一种软件系统&#xff0c;用于监控和控制工业过程中的设备。它通常与传感器、执行器和其他自动化设备一起工作&#xff0c;以实时地监视过程状态、收集数…

【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图

论文名称&#xff1a;Mapping annual 10-m maize cropland changes in China during 2017–2021 第一作者及通讯作者&#xff1a;Xingang Li, Ying Qu 第一作者单位及通讯作者单位&#xff1a;北京师范大学地理学部 文章发表期刊&#xff1a;《Scientific data》&#xff08…

Angular 嵌套表单

1.假设我有一个 “添加用户“ 的需求&#xff0c;在用户的信息中&#xff0c;联系方式分为邮箱和手机号&#xff0c;这两个联系方式就可以作为一个嵌套的内部的表单。下面是实现方式&#xff1a; <form [formGroup]"userForm"> <input type"text"…

Token2049主办方遭遇假门票风波,韩国罗马基金会Charles Lee损失50万美元

加密货币——遍地黄金&#xff1f;还是遍地陷阱&#xff1f; 尽管伊朗空袭以色列导致中东局势愈发紧张&#xff0c;但加密社区对当地市场的热情丝毫没有受到影响&#xff0c;不出意外的话&#xff0c;Token 2049这场全球最受瞩目的加密货币盛会将于4月18至19日在迪拜如期举行&…

Buck变换电路

Buck变换电路 Buck变换电路是最基本的DC/DC拓扑电路&#xff0c;属于非隔离型直流变换器&#xff0c;其输出电压小于输入电压。Buck变换电路具有效率高、输出稳定、控制简单和成本低的优点&#xff0c;广泛应用于稳压电源、光伏发电、LED驱动和能量回收系统。 电路原理 Buck变…

PyCharm 2024.1 发布:全面升级,助力高效编程!

PyCharm 2024.1 发布&#xff1a;全面升级&#xff0c;助力高效编程&#xff01; 文章目录 PyCharm 2024.1 发布&#xff1a;全面升级&#xff0c;助力高效编程&#xff01;摘要引言 Hugging Face&#xff1a;模型和数据集的快速文档预览针对 JavaScript 和 TypeScript 的全行代…