微服务中的重要模块

为什么要有微服务?

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

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

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

微服务的七大模块

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

微服务概述

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

  生产者要先进行注册,包含名字,功能,所属部门,接口有哪些,接口说明,联系人,生产者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.mfbz.cn/a/550068.html

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

相关文章

msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

场景: CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…

Ctex+texmaker

最近要准备幻灯片,发现我喜欢的模板是用的Ctex,在Texlive下没有办法运行。 于是进行了很多尝试。最后找到一个快捷的办法,删掉自己笔记本中的texlive,在Ctex官网中下载Ctex套件(下载中心 – CTEX),下载的版本是过时版…

Linux 安装KVM虚拟机

什么是KVM虚拟机? KVM 是 Kernel-based Virtual Machine 的缩写,是一种用于虚拟化的开源硬件虚拟化技术。它使用 Linux 内核的虚拟化模块,将物理服务器划分为多个虚拟机。KVM 允许虚拟机直接访问物理硬件资源,从而提供出色的性能和稳定性,同…

解读科技智慧公厕改变生活的革命性创新之路

公共厕所,作为城市基础设施的一部分,一直以来都备受人们诟病。脏乱差、设施老旧、管理混乱,成为公共厕所长期存在的问题。然而,随着科技的不断进步,智慧公厕应运而生,为解决公厕难题,智慧公厕源…

BetterDisplay Pro for Mac 显示器校准和优化软件

BetterDisplay Pro for Mac是一款适用于Mac电脑的显示器校准和优化软件。它可以帮助用户校准显示器的颜色、亮度、对比度和伽马值等参数,使得显示器更加准确和清晰,提高用户的工作效率。 BetterDisplay Pro for Mac v2.0.11激活版下载 这款软件具有直观的…

电脑不能上网,宽带调制解调器出现问题如何处理

目录 一、问题说明 二、解决方案 一、问题说明 内网的设备能互联,内网的各个设备无法连外网。 电脑在检测网络时,出现以下提示: 二、解决方案 首先重启光猫(我们是电信宽带)。 如果还是有问题,再重启…

springboot+vue全栈开发【3.前端篇之Vue基础语法2】

目录 前言Vue基础语法1.事件绑定指令2.条件渲染指令v-show和v-if指令v-else和v-else-if指令 3.列表渲染指令扩展:v-for中的key 前言 hi,这个系列是我自学开发的笔记,适合具有一定编程基础(html、css那些基础知识要会!…

MAC安装CocoaPods遇到的错误Failed to build gem native extension.

MAC安装CocoaPods遇到的错误Failed to build gem native extension. 配置flutter环境的时候报错cocoapods不可用 发现已经安装了CocoaPods,但是不能用 重新安装CocaPods sudo gem install cocoapods重新安装报错如下: 安装RVM curl -L https://get.r…

HBase的数据模型与架构

官方文档:Apache HBase – Apache HBase™ Homehttps://hbase.apache.org/ 一、HBase概述 1.概述 HBase的技术源自Google的BigTable论文,HBase建立在Hadoop之上,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于…

10. Spring MVC 程序开发

本文源码位置: Spring-MVC 1. Spring MVC 概要 摘自Spring官方: Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes …

Redis的Stream 和 实现队列的方式【List、SortedSet、发布订阅、Stream、Java】

Redis队列与Stream、Redis 6多线程详解 Redis队列与StreamStream总述常用操作命令生产端消费端单消费者消费组消息消费 Redis队列几种实现的总结基于List的 LPUSHBRPOP 的实现基于Sorted-Set的实现PUB/SUB,订阅/发布模式基于Stream类型的实现与Java的集成 消息队列问…

权限管理Ranger详解

文章目录 一、Ranger概述与安装1、Ranger概述1.1 Ranger介绍1.2 Ranger的目标1.3 Ranger支持的框架1.4 Ranger的架构1.5 Ranger的工作原理 2、Ranger安装2.1 创建系统用户和Kerberos主体2.2 数据库环境准备2.3 安装RangerAdmin2.4 启动RangerAdmin 二、Ranger简单使用1、安装 R…

使用代理IP实现Python爬虫中的随机IP请求

目录 前言 一、什么是代理IP? 二、 随机IP请求的实现步骤 1. 获取代理IP列表 2. 随机选择代理IP 3. 发送请求 4. 处理响应 总结 前言 在网络爬虫中,使用代理IP是一种常见的技术手段,它可以帮助我们隐藏真实IP地址,提高爬取…

python生成二维码

要在Python中生成二维码,可以使用第三方库qrcode。首先,确保已经安装了qrcode库: pip install qrcode然后,使用以下代码生成二维码: import qrcodedata "https://mp.csdn.net/mp_blog/creation/editor?spm100…

static+单例模式+类的复合继承

汇编语言 汇编语言是最靠谱的验证“编程语言相关知识点”正确性的方式 汇编语言与机器语言一一对应,每一条机器语言都有与之对应的汇编指令 机器语言是计算机使用的语言,它是一串二进制数字 汇编语言可以通过汇编得到机器语言机器语言可以通过反汇编得到…

LoRA:大模型的低阶自适用(使用BERT在IMDB数据集上运用LoRA微调)

文章目录 简介LoRA文章主要贡献LoRA技术模型图技术细节论文实验结果LoRA在bert的运用LoRA核心代码实战分析 简介 论文链接https://arxiv.org/pdf/2106.09685v2.pdf 本文将先介绍论文中的LoRA技术,然后以BERT为例在IMDB数据集上代码实现运用这项微调技术。 代码数…

Day 14 网络协议

常见网络设备:交换机 路由器 中继器 多协议网关(路由器的前身) 交换机:用于连接统一网络的设备,实现内网设备通信。 从广义上分为:局域网交换机,广域网交换机 从网络构成分为:接…

Prompt提示工程上手指南:基础原理及实践-思维树 (ToT)策略下的Prompt

前言 此篇文章已经是本系列的第五篇文章,之前我们已经将检索增强生成(RAG)策略,逐渐我们掌握的知识和技术都在不断提高,对于Prompt的技巧策略也不能只局限于局部运用而要适应LLM大模型的整体框架去进行改进休整。较为主流的LLM模型框架设计基…

通过adb 命令打印安装在第三方模拟器上的log

1,环境:Windows 11 ,第三方模拟器 网易的MuMu 步骤: 1,打开cmd,输入 adb connect 172.0.0.1:7555 2,在cmd,再次输入adb logcat 回车

【Web】陇原战“疫“2021网络安全大赛 题解

目录 CheckIN eaaasyphp EasyJaba CheckIN 拿到附件,贴出关键代码 func getController(c *gin.Context) {cmd : exec.Command("/bin/wget", c.QueryArray("argv")[1:]...)err : cmd.Run()if err ! nil {fmt.Println("error: ", …