读书笔记--微服务架构

微服务架构

服务网关

客户端与微服务直接通信
GateWay:API 网关是一个服务器,是系统的单入口点。它类似于面向对象设计模式中的门面(Facade)模式。API 网关封装了内部系统架构,并针对每个客户端提供一个定制 API。它还可用于认证、监控、负载均衡、缓存和静态响应处理。例如nginx,node.js
API 网关作为系统的单入口点,并且负责请求路由,组合和协议转换。它为每个应用客户端提供了一个自定义 API。API 网关还可以通过返回缓存或默认数据来掩盖后端服务故障。

服务间进行通信

服务必须使用进程间通信(IPC)机制进行交互

交互方式:一对一 ,一对多
同步 还是异步

几种表现形式:
请求/响应
通知(又称为单向请求)
请求/异步响应
发布/订阅
发布/异步响应

服务间通信需要解决的问题:

1、数据格式和协议:
确定服务之间通信的数据格式和协议,如JSON、XML、Protocol Buffers等。
统一协议有助于确保服务之间的兼容性和互操作性。
2、服务发现:
确保每个服务都能够找到其他服务的位置和地址。
使用服务发现机制,如注册中心、DNS等,使服务能够动态地发现和连接到其他服务。
3、消息传递方式:
选择适当的消息传递方式,如HTTP/REST、消息队列、RPC等。
不同的应用场景可能需要不同的通信方式。
4、安全性:
确保通信是安全的,防止未经授权的访问和数据泄露。
使用加密、身份验证和授权机制来保障通信的安全性。
5、错误处理和重试机制:
设计服务间通信的错误处理机制,包括如何处理超时、网络错误、服务不可用等情况。
实施重试策略以增加系统的健壮性。
6、版本控制:
管理服务接口的版本,确保对现有服务的更改不会破坏依赖该服务的其他系统。
使用版本控制机制,如语义化版本控制。
7、负载均衡:
处理服务间通信的负载均衡,确保请求被均匀地分发到多个服务实例。
提高系统的可伸缩性和容错性。
8、监控和日志:
实施监控和日志记录机制,以便及时发现和解决通信问题。
收集有关通信性能、错误和异常的信息,用于故障排除和系统优化。
9、限流和流量控制:
确保服务之间的通信不会导致过度的流量,采用限流和流量控制手段。
防止因为高并发而导致系统性能下降。
10、持久性和一致性:
解决异步通信中的一致性问题,确保消息传递的持久性。
使用事务或其他机制来保障数据的一致性。

实现机制

1、HTTP/REST API:
通过HTTP协议提供RESTful API,服务之间通过HTTP请求和响应进行通信。
简单易用,适用于无状态通信
2、消息队列:
使用消息队列系统(如RabbitMQ、Apache Kafka、ActiveMQ等),服务可以异步地通过消息进行通信。
提供解耦和可伸缩性,适用于需要异步处理的场景。
3、RPC(远程过程调用):
使用RPC框架(如gRPC、Thrift、Protocol Buffers等),服务之间可以像调用本地函数一样进行远程调用。
提供更直观的接口定义和强类型的通信。
4、WebSocket:
提供全双工通信,适用于需要实时性的场景。
常用于实时通知、聊天等应用。
5、共享数据库:
多个服务共享同一个数据库,通过数据库进行数据共享。
可能导致数据耦合,需谨慎使用。
6、事件驱动架构:
使用事件驱动的架构,服务通过发布-订阅模式进行通信。
适用于需要在系统内部广播事件的场景。
7、GraphQL:
提供灵活的查询语言,服务可以按需获取需要的数据。
适用于前端向后端发起复杂查询的场景。
8、CORBA(公共对象请求代理体系结构):
一种面向对象的远程通信协议。
在某些遗留系统中可能仍在使用。

服务发现

服务实例的网络位置在服务注册中心启动时被注册。当实例终止时,它将从服务注册中心中移除。通常使用心跳机制周期性地刷新服务实例的注册信息。

服务发现的关键部分是服务注册中心。服务注册中心是一个可用服务实例的数据库。服务注册中心提供了管理 API 和查询 API 的功能。服务实例通过使用管理 API 从服务注册中心注册或者注销。系统组件使用查询 API 来发现可用的服务实例。
有两种主要的服务发现模式:客户端发现与服务端发现。在使用了客户端服务发现的系统中,客户端查询服务注册中心,选择一个可用实例并发出请求。在使用了服务端发现的系统中,客户端通过路由进行请求,路由将查询服务注册中心,并将请求转发到可用实例。

职责

服务注册
定义: 服务注册是将服务的元数据(例如服务名称、IP地址、端口号、健康状态等)注册到服务注册中心的过程。
职责:
将服务的信息注册到服务注册中心,使其他服务能够发现和调用它。
定期更新服务的健康状态,以便其他服务能够知道该服务的可用性。
处理服务实例的注册和注销,确保服务注册中心中的信息是最新的。

服务发现
定义: 服务发现是在运行时查找和获取服务实例的过程,以便建立连接和进行通信。
职责:
查询服务注册中心,获取服务的元数据,包括服务实例的位置、IP地址、端口号等。
通过服务发现机制,使服务能够动态地找到并连接到其他服务,无需硬编码服务的位置信息。
处理服务实例的动态变化,例如新增服务、服务下线、服务健康状态变化等。

解决方案

Consul、Eureka、nacos、etcd、Zookeper、Kubernetes Service Discovery、AWS Cloud Map、HashiCorp Serf。

分布式数据管理

分布式系统也需要保证数据的ACID,但是数据库的私有性导致管理困难
CAP 定理:
一致性
每次读取都会收到最近的写入或错误。
可用性
每个请求都会收到一个(非错误)响应,但不能保证它包含最新的写入。
分区容错性
尽管节点之间的网络丢弃(或延迟)任意数量的消息,系统仍继续运行。

第一个挑战是如何实现维护多个服务间的业务事务一致性。第二个挑战是如何实现多个服务中检索数据。
大多数应用使用的解决方案是事件驱动架构。实现事件驱动架构的一个挑战是如何以原子的方式更新状态以及如何发布事件。有几种方法可以实现这一点,包括将数据库作为消息队列、事务日志挖掘和事件溯源。

选择部署策略

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

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

相关文章

vue上传文件加进度条,fake-progress一起使用

el-upload上传过程中加进度条,进度条el-progress配合fake-progress一起使用,效果如下: 安装 npm install fake-progress 在用到的文件里面引用 import Fakeprogress from "fake-progress"; 这个进度条主要是假的进度条&#xff…

轻量级图床Imagewheel本地部署并结合内网穿透实现远程访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

springIoc依赖注入循环依赖三级缓存

springIoc的理解,原理和实现 控制反转: 理论思想,原来的对象是由使用者来进行控制,有了spring之后,可以把整个对象交给spring来帮我们进行管理 依赖注入DI: 依赖注入,把对应的属性的值注入到…

全面解读数据安全法规

数据安全,可以说是近些年的热点,特别是随着大数据、人工智能等信息安全技术的快速发展,数据安全和隐私保护形势日益严峻,网络边界被打破,数据安全问题与日俱增。各国也非常重视数据安全建设,如下图展示的全…

js join方法的使用

JavaScript的join()方法是数组对象的方法之一,用于将数组中的所有元素连接成一个字符串。它可以接受一个可选的参数作为分隔符,用于在每个元素之间进行分隔。 以下是join()方法的基本语法: var newString array.join(separator) 在上述方…

设计模式之避免共享的设计模式 Thread-Specific Storage 模式

系列文章目录 设计模式之避免共享的设计模式Immutability(不变性)模式 设计模式之并发特定场景下的设计模式 Two-phase Termination(两阶段终止)模式 设计模式之避免共享的设计模式Copy-on-Write模式 提示:写完文章后…

Android Matrix (三)矩阵组合和应用变换

在 Android 开发中,Matrix 类不仅提供了 mapPoints 方法来变换点坐标,还提供了多种其他用法,使其成为处理图像和视图变换的强大工具。以下是 Matrix 类的一些关键用法: 1. 变换方法 setTranslate(float dx, float dy): 设置矩阵…

Android开发基础(二)

Android开发基础(二) 上篇主要描述了Android系统架构,代码是通过Java表示的; 本篇将从介绍Android组件去理解Android开发,代码将对Java和Kotlin进行对比。 Android组件 Android应用程序由一些零散的有联系的组件组成…

黑洞数(C语言)

黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。 任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后…

element input组件自动失去焦点问题解决

最近在 Vue3 ElementPlus 中,使用 el-input 组件时,如果设置了 v-model,那么在每次改变内容后后,input 会自动失去焦点,这样会导致用户无法输入多个字符。 一、问题原因 如上图所示,配置项的 Name 和 Cod…

算法训练营Day36

#Java #动态规划 开源学习资料 Feeling and experiences: 动态规划:01背包理论基础:卡码网题目链接 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料&#xf…

信息收集之子域名收集

渗透测试常见手法和思维 信息收集 简述 信息收集对于渗透测试前期来说是非常重要的,因为只有我们掌握了目标网站或目标主机足够多的信息之后,我们才能更好地对其进行漏洞检测。正所谓,知己知彼百战百胜! 信息收集的方式可以分…

linux下can调试工具canutils编译安装

命令安装只需要 sudo apt-get install canutils 一、下载源码 下载canutils和libsocketcan libsocketcan地址:https://public.pengutronix.de/software/libsocketcan/libsocketcan-0.0.11.tar.bz2 #0.0.11版本 canutils地址:https://public.pengutronix…

【计算机毕业设计】基于springboot的校园跑腿任务管理系统java+vue

校园跑腿管理系统又称“效率鸭”跑腿系统,是在学校进行现代化的信息管理和提供信息服务的基础,引导人们快速、准确地获取快递资源、预约洗浴并对外卖资源进行有效管理的保证。疫情当下,为了减少人员的聚集,因此,迫切需…

StampedLock详解

在现代的Java应用中,同步是一个核心问题,尤其是在高并发环境下。Java提供了多种同步机制,从基本的synchronized关键字到更高级的ReentrantLock。但在Java 8中,引入了一个新的同步原语——StampedLock,它旨在提供更高的…

C#使用Office原生库开发后的运行问题

目录 一、准备 二、测试Office2007 1、直接运行 2、安装VS2009 3、重新在“引用”库 4、安装“包” 5、报错修复 6、小结 三、测试office2010 1、在VS2019中打开原项目 2、添加“包” 3、重新添加引用 4、测试Word功能 5、测试卸掉那两个“包” 6、测试Excel功能…

索引策略-多列索引

一. 前言 当我们对多列索引的理解不够深刻的时候,往往会为每个列创建独立的索引或者按照错误的顺序创建多列索引。 二. 案例说明 问题一: 为每个列创建独立索引 CREATE TABLE t(c1 INT,c2 INT,c3 INT,KEY(c1),KEY(c2),KEY(c3) );这种索引策略,一般都是由于人们听到一些专家诸…

阳光保险选择OceanBase稳定运行超700天

阳光保险集团成立于 2005 年 7 月,旗下拥有财产保险、人寿保险、信用保证保险、资产管理等多家专业子公司,是全球市场化企业中成长最快的集团公司之一,目前位列中国保险行业前八。随着数字化升级趋势的不断加速,很多企业产生将软硬…

达摩研究院Paraformer-large模型已支持windows

简介 FunASR是一个基础语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端点检测(VAD)、标点恢复、语言模型、说话人验证、说话人分离和多人对话语音识别等。FunASR提供了便捷的脚本和教程&#xff0…

二十三、关于vite项目中无法使用minio的解决方案

问题背景 项目需要上传大文件,既然是大文件,如果一次性进行读取发送、接收都是不可取的,很容易导致内存问题。所以对于大文件上传,就一定要实现切片上传、断点续传。如果自己实现相对比较麻烦,但好消息是我们的文件服务使用了开源的minio作为对象存储服务,并且minio也提…