深入浅出 -- 系统架构之微服务标准组件及职责

我们来认识一下微服务架构在Java体系中依托哪些组件实现的。

相对于单体架构的简单粗暴,微服务的核心是将应用打散,形成多个独立提供的微服务,虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题:

1、如何发现新节点以及检查各节点的运行状态?

2、如何发现服务及负载均衡如何实现?

3、服务间如何进行消息通信?

4、如何对使用者暴露服务API?

5、如何集中管理各节点配置文件?

6、如何收集各节点日志并统一管理?

7、如何直观的了解各节点间的调用链路?

8、如何对系统进行链路保护,避免服务雪崩?

可以发现,以上的各个问题,不是针对某种语言或某种技术的,任何要构建微服务架构的企业都需要面对这些问题,要么公司内部逐个研究各个问题的解决办法,要么就将已有的多种技术整合形成整体解决方案。好在经过互联网行业的多年发展,业内对于上述问题基本都有了标准的解决方案,下图清晰的说明了微服务架构需要的标准组件。

下面我们来逐个了解各个组件的职责:

1、注册中心(Service Registry)

注册中心是微服务架构最核心的组件。它起到的作用是对新节点的注册与状态维护,通过注册中心可解决上述第1个问题(1、如何发现新节点以及检查各节点的运行状态? )。

微服务节点在启动时会将自己的服务名称、IP、端口等信息在注册中心登记,注册中心会定时检查该节点的运行状态。注册中心通常会采用心跳机制最大程度保证已登记过的服务节点都是可用的

2、负载均衡(Load Balance)

负载均衡解决了第2个问题( 2、如何发现服务及负载均衡如何实现? )。通常微服务在互相调用时,并不是直接通过IP、端口进行访问调用。而是先通过服务名在注册中心查询该服务拥有哪些节点,注册中心将该服务可用节点列表返回给服务调用者,这个过程叫服务发现,因服务高可用的要求,服务调用者会接收到多个节点,必须要从中进行选择。因此服务调用者一端必须内置负载均衡器,通过负载均衡策略选择合适的节点发起实质性的通信请求。

3、服务通信(Communication)

服务通信组件解决了问题3(3、服务间如何进行消息通信? )。服务间通信采用轻量级协议,通常是HTTP RESTful风格。但因为RESTful风格过于灵活,必须加以约束,通常应用时对其封装。例如在SpringCloud中就提供了Feign和RestTemplate两种技术屏蔽底层的实现细节,所有开发者都是基于封装后统一的SDK进行开发,有利于团队间的相互合作。

4、API服务网关(API Gateway)

服务网关主要是解决问题4(4、如何对使用者暴露服务API? ),对于最终调用方来说,微服务的通信与各种实现细节应该是透明的,调用者只需关注他要使用的 API 接口即可。因此微服务架构引入的服务网关控制用户的访问权限。服务网关是外部环境访问内部微服务的唯一途径,在这个基础上还可以扩展出其他功能,例如:用户认证与授权、容错限流、动态路由、A/B测试、灰度发布等。

微服务API网关

5、配置中心(Config Management)

配置中心主要解决了问题5(5、如何集中管理各节点配置文件? ),在微服务架构下,所有的微服务节点都包含自己的各种配置文件,如jdbc配置、自定义配置、环境配置、运行参数配置等。要知道有的微服务可能可能有几十个节点,如果将这些配置文件分散存储在节点上,发生配置更改就需要逐个节点调整,将给运维人员带来巨大的压力。配置中心便由此而生,通过部署配置中心服务器,将各节点配置文件从服务中剥离,集中转存到配置中心。一般配置中心都有UI界面,方便实现大规模集群配置调整。

重复的配置文件

配置中心集中管理配置文件

6、集中式日志管理(Centralized Logging)

集中式日志主要是解决了问题6(6、如何收集各节点日志并统一管理? )。微服务架构默认将应用日志分别保存在部署节点上,当需要对日志数据和操作数据进行数据分析和数据统计时,必须收集所有节点的日志数据。那么怎么高效收集所有节点的日志数据呢?业内常见的方案有ELK、EFK。通过搭建独立的日志收集系统,定时抓取各节点增量日志形成有效的统计报表,为统计和分析提供数据支撑。

7、分布式链路追踪(Distributed Tracing)

很不舒服链路追踪解决了问题7(7、如何直观的了解各节点间的调用链路? )。系统中一个复杂的业务流程,可能会出现连续调用多个微服务,我们需要了解完整的业务逻辑涉及的每个微服务的运行状态,通过可视化链路图展现,可以帮助开发人员快速分析系统瓶颈及出错的服务。

服务调用链路图

8、服务保护(Service Protection)

服务保护主要是解决了问题8(8、如何对系统进行链路保护,避免服务雪崩? )。在业务运行时,微服务间互相调用支撑,如果某个微服务出现高延迟导致线程池满载,或是业务处理失败。这里就需要引入服务保护组件来实现高延迟服务的快速降级,避免系统崩溃。

以上就是微服务架构包含的组件以及各个组件在架构中承担的职责。下篇文章我们来聊一下:在Java中如何实现微服务架构的。

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

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

相关文章

从“危”到“机”:HubSpot如何助企业转化出海营销CRM风险?

在全球化的大背景下,越来越多的企业选择出海拓展业务,以寻求更大的发展空间。然而,随着市场的扩大,企业在出海营销过程中也面临着各种风险。为了有效规避这些风险,许多企业选择借助HubSpot这样的专业营销软件。今天运营…

软文写作技巧,媒介盒子揭秘

数字化时代,想要获取用户的注意力难上加难,只有紧跟互联网的创作节奏,在软文写作中,根据用户的浏览偏好进行适当调整,让软文具有更高的审美性、易读性和启示性,才能有效地吸引当下受众的注意力。今天媒介盒子就来和大家聊聊软文写作技巧。 一、文章选题 …

C语言之自定义类型联合和枚举

目录 前言 一:联合体(共用体)union 1.联合体类型的声明 2.联合体的特点 3.联合体大小的计算 4.联合体判断机器的大小端 二:枚举enum 1.概念 2.枚举的优点 3.枚举的使用 接下来的日子会顺顺利利,万事胜意…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…

2014最新AIGC创作系统ChatGPT网站源码+AI绘画网站源码+GPT4-All联网搜索模型

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持…

【超简单】基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…

电脑网卡无法连接网络?三招教你解决问题

在现代生活中,电脑网卡扮演着连接互联网的关键角色。无论是有线网卡还是无线网卡,都是电脑与外部网络通信的重要途径。然而,有时候我们可能会遇到电脑网卡无法连接网络的问题,这会严重影响我们的工作和娱乐。本文将介绍三种常见的…

【Qt】文件与音视频

目录 一、输入输出设备类 二、文件读写类 三、文件和目录信息类 四、音视频 4.1 音频 4.2 视频 文件操作是应用程序必不可少的部分。Qt作为一个通用开发库,提供了跨平台的文件操作能力。Qt提供了很多关于文件的类,通过这些类能够对文件系统进行操作…

用Python实现输入点云索引绘制该点云法向量

import open3d as o3d# 读取pcd文件 pcd o3d.io.read_point_cloud(r"D:\PythonProjects\Codes\paper_images\back_point\voxel.pcd")# 计算法向量 pcd.estimate_normals(search_paramo3d.geometry.KDTreeSearchParamHybrid(radius0.1, max_nn30))# 选择要绘制法向量…

四级作文模板——议论文——现象解释

议论文类型 现象解释 第一句 with the rapid development of society / economy / education / technology / culture / medical / service(任选) , it is of great necessity for youngster / students to improve our speaking ability.随着社会/经济/教育/科技/文化/医疗…

腾讯、阿里、字节….等大厂都更喜欢什么样的简历?

我985毕业,为什么筛选简历时输给了一个普通一本? 我投了20份简历,为什么没有一个大厂回我? 每次HR收到简历就没下文了,是我的简历有问题吗? 诚然,在求职时,简历往往就是我们给予H…

AI爆款文案 巧用AI大模型让文案变现插上翅膀

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

【C++】 详解 lower_bound 和 upper_bound 函数(看不懂来捶我!!!)

目录 一、前言 二、函数详解 🥝 lower_bound 🍍upper_bound 三、常考面试题 四、共勉 一、前言 这两个函数是我在 LeetCode 上做题见到,看到不熟悉的函数 lower_bound 和 upper_bound让我感觉很难受,于是在 C 官网去学习&…

Java入门基础知识第七课(超基础,超详细)——数组

前面二白讲了选择结构和循环结构,动手的同学会发现已经有了一定的难度,后面二白会专门收集一些经典的题目,训练多了才能让记忆更加深刻,这次咱们讲一下数组。 一、数组的定义 什么是数组呢,我们都知道变量是存储数据的…

数字乡村发展:推动农村现代化进程

随着信息技术的迅猛发展和数字化浪潮的深入推进,数字乡村发展已成为推动农村现代化进程的重要力量。数字乡村不仅是乡村振兴战略的重要组成部分,也是实现农村经济社会全面发展的重要途径。本文将从数字乡村的内涵、发展现状、面临的挑战以及发展策略等方…

聚类算法的先验基础知识

聚类算法的先验基础知识 1. 瑞利商2. 谱定理3. 联合概率4. 条件概率分布5. 边缘分布6. 贝叶斯定理7. 有向图8. 拉格朗日乘子定理 下一篇将介绍整理各种聚类算法,包括k-means,GMM(Guassian Mixture Models, 高斯混合),EM(Expectation Maximiza…

Docker速成:新手变专家!

Docker介绍 容器历史 1、Chroot Jail 就是常见的chroot命令的用法。它在1979年的时候就出现了,被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。 2、The FreeBSD Jail (监狱)实现了操作系统级别的虚拟化,他…

java中使用雪花算法(Snowflake)为分布式系统生成全局唯一ID

(全局唯一ID的解决方案有很多种,这里主要是介绍和学习Snowflake算法) 什么是雪花算法(Snowflake) 雪花算法(Snowflake Algorithm)是由Twitter公司在2010年左右提出的一种分布式ID生成算法&…

一起学习python——基础篇(10)

前言,Python 是一种面向对象的编程语言。以前大学读书的时候经常开玩笑说的一句话“如果没有对象,就new一个”。起因就是编程老师上课时经常说一句“首先,我们new一个对象”。 今天讲一下python的类和对象。 类是什么?它是一种用…