微服务到底是个什么东东?

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。

每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

现在市面常见的微服务框架主要有:Spring Cloud 和 Dubbo

服务注册发现

服务注册发现:服务注册就是维护一个登记薄,服务注册就是维护一个登记簿,它管理系统内所有的服务地址。当新的服务启动后,它会向登记 簿交待自己的地址信息。服务的依赖方直接向登记簿要 Service Provider 地址就行了。当下用于服务注册的工具非常多 ZooKeeper,Consul,Etcd, 还有 Netflix 家的 eureka 等。服务注册有两种形式:客户端注册和第三方注册.

服务注册(zookeeper)

服务注册是服务自身要负责注册与注销的工作。当服务启动后向注册中心注册自身,当服务下线时注销自己。期间还需要和注册中心保持心跳。心跳不一定要客户端来做,也可以由注册中心 负责(这个过程叫探活)。这种方式的缺点是注册工作与服务耦合在一起,不同语言都要实现一套注册逻辑。

服务发现

当服务调用方调用某个服务的时候,可以通过服务的名字去服务注册发现中心获取可用的服务,服务发现中心从内存的服务列表获取所有可用的服务,然后负载均衡根据既定的规则选择一个服务将 HTTP 服务 ip port 返回给调用方,如果是grpc服务,从连接池获取该服务的连接返回给调用方。

API网关

API网关:API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。

API Gateway 负责请求转发、合成和协议转换。所有来自客户端的请求都要先经过 API Gateway,然后路由这些请求到对应的微服务。API Gateway 将经常通过调用多个微服务来处理一个请求以及聚合多个服务的结果。它可以在 web 协议与内部使用的非 Web 友好型协议间进行转换,如HTTP 协议、WebSocket 协议。

API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

请求转发

服务转发主要是对客户端的请求安装微服务的负载转发到不同的服务上。

相应合并

业务上需要调用多个服务接口才能完成的工作合并成一次调用对外统一提供服务。

协议转换

重点是支持 SOAPJMS比如 Rest 间的协议转换。

数据转换

重点是支持 XML 和 Json 之间的报文格式转换能力(可选)。

安全认证

•基于 Token 的客户端访问控制和安全策略;•传输数据和报文加密,到服务端解密,需要在客户端有独立的 SDK 代理包;•基于 Https 的传输加密,客户端和服务端数字证书支持;•基于 OAuth2.0 的服务安全认证(授权码,客户端,密码模式等)。

配置中心

配置中心:配置中心一般用作系统的参数配置,它需要满足如下几个要求:高效获取、实时感知、分布式访问。

zookeeper 配置中心

实现的架构图如下所示,采取数据加载到内存方式解决高效获取的问题,借助 zookeeper 的节点监听机制来实现实时感知。

配置中心数据分类

事件调度(kafka)

消息服务和事件的统一调度,常用用 kafka ,activemq 等。

服务跟踪(starter-sleuth)

随着微服务数量不断增长,需要跟踪一个请求从一个微服务到下一个微服务的传播过程, Spring Cloud Sleuth 正是解决这个问题,它在日志中引入唯一 ID,以保证微服务调用之间的一致性,这样你就能跟踪某个请求是如何从一个微服务传递到下一个。

•为了实现请求跟踪,当请求发送到分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识,同时在分布式系统内部流转的时候,框架始终保持传递该唯一标 识,直到返回给请求方为止,这个唯一标识就是前文中提到的 Trace ID。通过 Trace ID 的记录,我们就能将所有请求过程日志关联起来;
•为了统计各处理单元的时间延迟,当请求达到各个服务组件时,或是处理逻辑到达某个状态时,也通过一个唯一标识来标记它的开始、具体过程以及结束,该标识就是我们前文中提到的 Span ID,对于每个 Span 来说,它必须有开始和结束两个节点,通过记录开始 Span 和结束 Span 的时间戳,就能统计出该 Span 的时间延迟,除了时间戳记录之外,它还可以包含一些其他元数据,比如:事件名称、请求信息等;
•在 Spring Boot 应用中,通过在工程中引入 spring-cloudstarter-sleuth 依赖之后, 它会自动的为当前应用构建起各通信通道的跟踪机制,比如:
•通过诸如 RabbitMQ、Kafka(或者其他任何 Spring Cloud Stream 绑定器实现的消息中间件)传递的请求。•通过 Zuul 代理传递的请求。•通过 RestTemplate 发起的请求。

服务熔断(Hystrix)

服务熔断:在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

熔断器的原理很简单,如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或者浪费 CPU时间去等到长时间的超时产生。熔断器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。

Hystrix 断路器机制

断路器很好理解, 当 Hystrix Command 请求后端服务失败数量超过一定比例(默认 50%), 断路器会切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认 5 秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN). Hystrix 的断路器就像我们家庭电路中的保险丝, 一旦后端服务不可用, 断路器会直接切断请求链, 避免发送大量无效请求影响系统吞吐量, 并且断路器有自我检测并恢复的能力。

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

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

相关文章

通过反射机制给已知属性赋值

最近在看spring,在手写spring框架之前,需要巩固一下反射。 反射有这样一个简单的例子,记录一下。 假如你知道age这个属性名,但是不知道属性类型,也可以写: 可以获取到属性的类型

昇思25天学习打卡营第11天 | mindspore 实现 ResNet 50 迁移学习

1. 背景: 使用 mindspore 学习神经网络,打卡第 11 天;主要内容也依据 mindspore 的学习记录。 2. 迁移学习介绍: mindspore 实现 ResNet 50 迁移学习; 具体 ResNet 50 的模型原理以及实现,可以参考本博客…

谈谈我对李彦宏说的“不要卷模型,要卷应用”的理解

我理解李彦宏的发言是强调人工智能技术应该关注应用而不是仅仅关注模型的发展。他认为AI技术已经从辨别式(discriminative)转向了生成式(generative),意味着AI不再仅仅是识别和分类问题,而是能够创造新的内…

设计模式-领域逻辑模式-事务脚本(Transaction Script)

事务脚本的特点 多数应用可看成由多个事务组成事务脚本将多个业务逻辑组织成单个过程事务间相互修改各自产生的数据 事务脚本的运行机制 使用事务脚本时,领域逻辑主要通过系统所执行的事务来组织。例如:预定酒店过程。 事务脚本的组织 将整个事务脚本放…

【BUG】已解决:IndexError: list index out of range

已解决:IndexError: list index out of range 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区…

微信小程序:2.全局开发

app实例 简介 app.js中注册小程序实例的方法App拥有生命周期回调函数、错误监听函数、页面不存在监听函数等 生命周期回调函数 onLaunch(options) {//监听小程序初始化 console.log("监听小程序初始化",options); }, onShow (options) {//监听小程序启动或切前台…

Ubuntu串口调试单片机

来自🥬🐶程序员 Truraly | 田园 的博客,最新文章首发于:田园幻想乡 | 原文链接 | github (欢迎关注) 文章目录 brltty 导致 USB 转串口连接失败串口调试工具直接操作串口puttySerial Monitor | vscode 插件minicom(推荐)舍友在搞 c-sky 的单片机,囚来了一块玩玩,尝…

【C++】C++中的getcwd函数详解

目录 一.getcwd函数是什么 二.getcwd函数怎么用 一.getcwd函数是什么 在C中&#xff0c; getcwd 是一个用于获取当前工作目录的函数&#xff0c;它是POSIX标准的一部分&#xff0c;定义在 <unistd.h> 头文件中&#xff08;在Windows上&#xff0c;它定义在 <direct…

对服务器进行基本了解(二)

目录 一. 云服务器数据库 1.查看MYSQL版本 2.查看mysql的运行状态 3.运行mysql 4. 进入mysql的用户 5. 更改用户密码 6. 查找mysql端口号 7. 创建一个数据库 8. 查看用户 9. 查看数据库 10. 显示数据库的表 11. 修改用户的host 12. 对用户赋权 13. 开放指定端…

python程序设定定时任务

在 Windows 系统上,您可以使用任务计划程序(Task Scheduler)来设置定时任务,执行 Python 文件。以下是具体步骤: 步骤 1:准备 Python 文件 假设有一个名为 script.py 的 Python 脚本。确保它可以在命令行中正确运行。 步骤2:找到Python可执行文件的位置 知道Python可…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述

3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 以下是文档的核心内容总结&#xff1a; UAV系…

nginx的access.log日志输出请求数

适用格式 #log_format main $remote_addr - $remote_user [$time_local] "$request" # $status $body_bytes_sent "$http_referer" # "$http_user_agent" "$http_x_forwarded_for"; 形如&#…

自然语言处理中的本体/分类/同义相似

本体相似、分类相似与同义相似这三个概念都是在信息检索和自然语言处理中经常用到的相似性度量方法&#xff0c;它们的区别如下&#xff1a; 本体相似&#xff1a;本体是领域内的概念及其关系的模型&#xff0c;本体相似性度量是指计算两个本体之间的相似程度。本体相似性度量通…

【JVM实战篇】内存调优:内存问题诊断+案例实战

文章目录 诊断内存快照在内存溢出时生成内存快照MAT分析内存快照MAT内存泄漏检测的原理支配树介绍如何在不内存溢出情况下生成堆内存快照&#xff1f;MAT查看支配树MAT如何根据支配树发现内存泄漏 运行程序的内存快照导出和分析快照**大文件的处理** 案例实战案例1&#xff1a;…

CH390H+STM32F1+LWIP

文章目录 1、CH390芯片介绍2、电路部分3、LWIP调试3.1修改点13.2 修改点2 4、结果展示参考 1、CH390芯片介绍 官网地址&#xff1a; 南京沁恒微电子股份有限公司 特点&#xff1a; 2、电路部分 CH390及接口&#xff1a; STM32F1引脚&#xff1a; 不含LWIP的demo及LWIP…

【WPF】图片剪裁-ImageCropping

【WPF】图片剪裁-ImageCropping 背景技术栈实现思路核心代码界面布局Style处理逻辑使用技巧预览下载背景 机缘巧合吧,当时在全网寻找图像剪裁工具,但大都不能满足需求,于是决定动手写。当然如果只是为了完成这么一个功能就没有必要记录了,主要是不依赖与第三方图像库,且实…

【数据结构】二叉树全攻略,从实现到应用详解

​ &#x1f48e;所属专栏&#xff1a;数据结构与算法学习 &#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ ​ &#x1f341;1. 树形结构的介绍 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做…

Docker Machine 深入解析

Docker Machine 深入解析 引言 Docker Machine 是 Docker 生态系统中的一个重要工具,它简化了 Docker 容器环境的配置和管理过程。本文将深入探讨 Docker Machine 的概念、功能、使用场景以及如何在实际环境中高效利用它。 什么是 Docker Machine? Docker Machine 是一个…

Qt纯代码绘制一个等待提示Ui控件

等待样式控件是我们在做UI时出场率还挺高的控件之一&#xff0c;通常情况下有如下的几种实现方式&#xff1a;1、自定义绘图&#xff0c;然后重写paintEvent函数&#xff0c;在paintEvent中绘制等待图标&#xff0c;通过QTimer更新绘制达到转圈圈的效果。2、 获取一张gif的资源…

SpringBoot下的定时魔法:揭秘@Scheduled注解的无限可能

在这个快节奏的时代&#xff0c;自动化与定时任务成为了提升效率的不二法门。而在Java的Spring Boot框架中&#xff0c;Scheduled注解就像是一位精通时间魔法的巫师&#xff0c;悄无声息地让你的应用按部就班地执行着各种定时任务。今天&#xff0c;就让我们一起揭开它的神秘面…