分布式服务一篇概览

news2024/9/25 21:25:57

分布式服务开发复杂于服务间交互,协调,治理等。服务的复杂性由应用本身转移到了网络交互层。

一、关于12-factor问题

在开发分布式服务时,我们通常会考虑如12-factor 问题,如配置中心、无状态化、日志等。

一个代码库:支持多人协作开发的代码集中管理平台。

一个依赖库:服务依赖发布、存储、隔离等管理。

一个配置中心:集中的配置管理中心,服务,协调多服务应用。

可插拔的支持服务:如数据库、消息中间件、三方服务等。

构建、发布、运行过程管理:服务发布管理。

每一个服务实例都是一个无状态的工作进程。

服务通过绑定特定的端口对外提供服务。

通过增减服务实例类型及数量来实现服务伸缩。

快速启动,优雅关机增强服务健壮性。

尽可能的保持开发、测试及生产环境一致性。

事件流形式处理日志,分离影响。

脚本或命令行式的服务管理工具支持。

二、总览

借用一张图:

三、服务发现

当由多个服务实例提供服务时,客户端需要知道都有哪些可调用服务,服务的具体位置以及怎么调用。

分布式协调服务:服务注册与发现。如 Eureka(AP)、Consul(CP)、Zookeeper(CP)、Nacos(CP + AP) 及 Etcd (CP)等。

示例 Nacos 架构图:

四、API 网关

客户端及服务端之间是多对对关系,对于涉及到统一权限管理、路由负载、日志、监控等支持性功能需求,网关服务处理相对更加合适。如 Spring Cloud GatewaynginxOpenRestyzuulAPISIX 等。

示例 Spring Gate Way 工作流程:

五、配置中心

独立的服务配置可以和服务集成在一起,对于分布式多服务模式,灵活、集中的配置管理则非常必要。

配置中心一般需要提供配置添加、删除、更新管理,环境管理、灰度管理、版本控制等。如 Apollo、Nacos、Spring Cloud Config 等。 

Apollo vs Spring Cloud Config:

功能点ApolloSpring Cloud Config备注
配置界面一个界面管理不同环境、不同集群配置无,需要通过git操作
配置生效时间实时重启生效,或手动refresh生效

Spring Cloud Config 需要通过Git webhook,

加上额外的消息队列才能支持实时生效

版本管理界面上直接提供发布历史和回滚按钮无,需要通过git操作
灰度发布支持不支持
授权、审核、审计界面上直接支持,而且支持修改、发布权限分离需要通过git仓库设置,且不支持修改、发布权限分离
实例配置监控可以方便的看到当前哪些客户端在使用哪些配置不支持
配置获取性能快,通过数据库访问,还有缓存支持较慢,需要从git clone repository,然后从文件系统读取
客户端支持

原生支持所有Java和.Net应用,

提供API支持其它语言应用,

同时也支持Spring annotation获取配置

支持Spring应用,提供annotation获取配置Apollo的适用范围更广一些

题外话:

相关内容拓展:(技术前沿)

近10年间,甚至连传统企业都开始大面积数字化时,我们发现开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

针对这类问题,低代码把某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。极大的提高了程序员的生产效率。 体验官网:https://www.jnpfsoft.com/?csdn

推荐一款程序员都应该知道的软件JNPF快速开发平台,采用业内领先的SpringBoot微服务架构、支持SpringCloud模式,完善了平台的扩增基础,满足了系统快速开发、灵活拓展、无缝集成和高性能应用等综合能力;采用前后端分离模式,前端和后端的开发人员可分工合作负责不同板块,省事又便捷。

还没有了解低代码这项技术可以赶紧体验学习!

六、服务治理

分布式服务涉及多服务间协调共同对外提供服务。相对来说,会有更多的不可控因素影响其可用性,如服务间调用超时、流量过载等,因此服务治理也是一门必修课。

熔断降级、流量控制支持:Spring Cloud Circuit BreakerResilience4JSentinelHystrix

Sentinel 示例

七、链路追踪

分布式服务使得问题追踪变得很困难,需要综合请求路径上不同服务节点表现来定位问题。因此首先需要有一条链,一条从请求调用入口到服务底层再到返回的完整追踪链路。

支持组件如:Spring Cloud Sleuth、Zipkin、SkyWalking。

示例 SkyWalking 架构图:

八、日志

汇总所有服务日志顺序综合展示。包括日志收集,传送,落库存储及展示等。

典型如 ELK,logstash 负责收集日志数据及传送,ElasticSearch 负责存储,Kibana 负责 查询展示。

数据采集存在多种可选收集器:如 filebeat(更轻量)、logstash、Fluentd 等。

九、监控

(Prometheus | Zabbix)+ Grafana )

1、Promethueus

开源系统监控报警系统。负责收集,存储时间序列监控数据并展示。整体架构图如下:

2、Zabbix

开源的分布式监控解决方案。

3、Grafana

提供查询,多维度可视化展示,报警等功能。

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

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

相关文章

数通王国历险记之地址分析协议(ARP)

系列文章目录 数通王国历险记(4) 目录 前言 一,什么是地址解析协议(ARP) 二,封装和解封装 三,为什么需要地址解析协议(ARP) 四,ARP的验证实验 4.1&#x…

线程池ThreadPoolExecutor详解以及多种线程池的实现

1、线程池状态含义 ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量,之所以将信息存储在一个变量中,是为了保证原子性。 具体的高三位与线程池状态如下,引用自网课的图片: 2、构…

【数据库编程】最新版MySQL的JDBC编程(图文演示)

数据库系列文章 1. 零基础带你快速上手SQL语言 2. 玩转表及其数据 3. 上手表设计 4. 索引和事务 5. 最新版MySQL的JDBC编程 文章目录 前言1. 数据库编程的必备条件2. Java的JDBC编程3. JDBC工作原理3.1 数据库驱动包从哪里来 4. JDBC编程4.1 创建 Java 项目4.2 导入数据库驱动包…

使用wkhtmltopdf实现HTML转PDF

wkhtmltopdf注意事项 1.webkit内核的,所以建议使用之前用谷歌浏览器开发好网页 2.目前这个插件不再更新,所以内核老旧,只支持ES5的代码,所以ES6及以上的代码统统不支持,还有字符串拼接的 符号也不能使用&#xff0c…

JMeter录制HTTPS脚本解决办法

目录 前言: 背景 解决方法 前言: 在使用JMeter录制HTTPS脚本时,可能会遇到一些问题,例如SSL证书错误或请求失败等。解决这些问题的一种常见的方法是通过安装并信任服务器的SSL证书来解决。 背景 在对某项目进行脚本录制的时…

银河麒麟服务器v10 sp1 部署 Net6.0 项目

上一篇已经部署了Net6.0环境,本节将实现Net6.0程序部署,打开或新建项目,修改appsettings.json配置: 添加:"urls": "http://*:8061",//linux部署使用,端口可根据需求修改为自己的 在项…

快速幂与64位整数乘法(位运算)

矩阵快速幂和64位整数乘法 矩阵快速幂64位整数乘法 矩阵快速幂 问题链接: AcWing 90. 64位整数乘法 问题描述: 分析 快速幂需要用到位运算的思想,求 a b a^b ab,我们将 b b b转换成二进制的形式,假设 b 7 b7 b7&…

GB50254-2014电气装置安装工程低压电器施工及验收规范

为保证低压电器的安装质量,促进施工安装技术进步,确保设备安装后的安全运行,制定本规范。 本规范适用于交流 50Hz或60Hz额定电压为 1000V 及以下,直流额定电压为 1500V 及以下通用低压电器的安装与验收。不适用于: 1、无需固定安装的家用电器、电工仪器…

数据结构第一章 绪论——走进数据的世界

名人说:唯一可以确定的是,明天会使我们所有人大吃一惊。——阿尔文托夫勒 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) ✔ 课件资料及视频课程学习:王道 数据结构&#xff08…

哪家好用?四款国内外远程桌面软件横测:ToDesk、向日葵、TeamViewer、AnyDesk

一、前言 远程桌面软件对于职场人来说并不陌生,可以说是必备的办公软件之一。在经历过新冠疫情后,大家对于远程办公的认识越来越深入,也就在这段期间,远程桌面软件大范围的应用起来,真正走进大众视野并融入我们的工作和…

探索RabbitMQ的特色功能:释放RabbitMQ尖端特性的潜力

d1、简介 RabbitMQ 是一个功能强大的开源消息中间件,采用 AMQP(Advanced Message Queuing Protocol)协议来实现可靠的消息传递。它提供了可靠性、灵活性和可扩展性,被广泛应用于分布式系统、微服务架构和异步通信等场景。本文将介…

前台-GoEasy即时通讯

1.先去GoEasy官网下载源码 第一步 App.vue <script setup lang"ts">import { watch, ref, markRaw, reactive, nextTick, provide, InjectionKey } from vueimport headerIndex from /Layout/header/headerIndex.vueimport purchaseHeaderBig from /Layout/hea…

OpenCV(Mat类)

目录 1、什么是Mat类 2、Mat类组成 3、Mat类能存储的数据类型 4.Mat类的创建 4.1 利用矩阵宽、高和类型参数创建 4.2 利用矩阵Size()结构和数据类型参数来创建 4.3 利用已有Mat类来创建 5、Mat类的赋值 5.1 创建时赋值 5.2 类方法赋值 5.3 枚举赋值 6、Mat类数据的读取 …

【Linux】Redis 集群部署

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Redis 集群部署 Redis 主从复制主从复制的作用主从复制的流程搭建Redis 主从复制安装 Redis修改 Redis 配置文件&#xff08;Master节点操作&#xff09;修改 Redis 配置文件…

基于redhat发行版mysql8.0的卸载与重装mysql5.7

文章目录 一、软件的选择与下载二、卸载mysql8.01.查看my.cnf中的部署信息2.卸载mysql8.03.卸载完毕安装包后删除相关数据 三、mysql5.7的安装1.解压安装包2.初始化mysql数据库3.修改root密码 四、安装mysql5.7客户端附&#xff1a;创建数据库以及用户 本次案例是卸载mysql8.0然…

Michael.W基于Foundry精读Openzeppelin第1期——Address.sol

Michael.W基于Foundry精读Openzeppelin第1期——Address.sol 0. 版本0.1 Address.sol 1. 目标合约2. 代码精读2.1 isContract(address)2.2 sendValue(address, uint256)2.3 functionCall(address, bytes memory) && functionCall( address, bytes memory, string memor…

JavaSE基础(上)

目录 第一章 java入门 环境配置 常用cmd命令 打开cmd 安装JDK&#xff1a;Java工具包 IDEA 1 IDEA概述&#xff08;1&#xff09;IDEA概述&#xff1a;IDEA全称IntelliJ IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;是业界公认的目前用于Java程序开发最…

ABeam News | 乘云而上,扬帆起航——ABeam Consulting 2023 RISE+BTP私享会圆满落幕

当今中国&#xff0c;数字经济大潮风起云涌&#xff0c;数字化转型已经成为企业发展的“必修课”。对于企业来说&#xff0c;如何在数字化浪潮中奋楫扬帆&#xff0c;借助技术和管理手段助力企业“提质、降本、增效”&#xff0c;成为发展中所亟待解决的问题。 6月1日&#xf…

LED显示屏四大连接方式

LED显示屏的四大连接方式是数据连接、电源连接、信号输入连接和控制系统连接。以下是对每种连接方式的详细说明&#xff1a; 1,数据连接&#xff1a; 数据连接用于传输显示内容的数据信号到LED显示屏。常见的数据连接方式包括&#xff1a; 串行连接&#xff08;Serial Connecti…

离开Kubernetes也能玩转Dapr

Dapr 被设计成一个面向开发者的企业级微服务编程平台&#xff0c;它独立于具体的技术平台&#xff0c;可以运行在“任何地方”。Dapr本身并不提供“基础设施&#xff08;infrastructure&#xff09;”&#xff0c;而是利用自身的扩展来适配具体的部署环境。就目前的状态来说&am…