微服务基础总结

1.服务注册和发现

服务注册维护一个登记簿,管理系统内所有服务地址,服务启动后会向登记簿交待自己的地址信息。

服务注册形式:客户端注册和第三方注册

  • 客户端注册(zookeeper)
    • 服务自身要负责注册和注销工作,服务启动后向注册中心注册自身,当服务下线时注销自己,期间需要和注册中心保持心跳,心跳也可以由注册中心负责(探活)。
    • 缺点:注册工作与服务耦合在一起
  • 第三方注册(独立的服务registrar)
    • 由独立的服务registrar负责注册与注销,服务启动后以某种方式通知registrar,然后负责向注册中心发起注册工作,注册中心要维护与服务之间的心跳,服务不可用时,向注册中心注销服务
    • 缺点:registrar必须是个高可用的系统,否则注册工作没法进展
  • 客户端发现
    • 客户端负责查询服务地址,以及负载均衡工作
    • 缺点:多语言时的重复工作,每个语言实现相同逻辑
  • 服务端发现
    • 额外的router服务,请求达到router,然后router负责查询服务于负载均衡
    • 缺点:保证router高可用
  • Consul
  • Eureka
  • SmartStack
  • Etcd

2.API网关

是进入系统的唯一节点,封装内部系统的架构并提供api给各个客户端,可能有其他功能:授权,监控,负载均衡,缓存,请求分片和管理,静态响应处理等。

所有来自客户端的请求都要先经过网关,然后路由这些请求到对应的微服务

将经常通过调用多个微服务来处理一个请求以及聚合多个服务的结果,可以在web协议与内部使用的非web友好型协议间进行转换,eg:http协议,webSocket协议

  • 请求转发:对客户端的请求安装微服务的负载转发到不同的服务上
  • 响应合并:把业务上需要调用多个服务接口才能完成的工作合并成一次调用对外统一提供服务
  • 协议转换:支持 SOAP, JMS, Rest 间的协议转换。
  • 数据转换:支持 XML 和 Json 之间的报文格式转换能力(可选 )
  • 安全认证:
    • 基于 Token 的客户端访问控制和安全策略
    • 传输数据和报文加密,到服务端解密,需要在客户端有独立的 SDK 代理包
    • 基于 Https 的传输加密,客户端和服务端数字证书支持
    • 基于 OAuth2.0 的服务安全认证(授权码,客户端,密码模式等)

3.配置中心

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

  • zookeeper配置中心:采取数据加载到内存方式解决高效获取的问题,借助 zookeeper 的节点监听机制来实现实时感知。
  • 配置中心数据分类:
    • 服务配置:数据库服务,队列服务,缓存服务
    • 各类开关:功能开关,业务开关,服务开关
    • 业务配置:模块A,B, C

4.事件调度(kafka):消息服务和事件的统一调度,常用 kafka , activemq 等

5.服务跟踪

  • 随着微服务数量不断增长,需要跟踪一个请求从一个微服务到下一个微服务的传播过程, 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 发起的请求

6.服务熔断

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。

服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

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

  • Hystrix 断路器机制

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

7.API管理:SwaggerAPI 管理工具

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

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

相关文章

清理c盘的垃圾。

1 清理系统缓存 1.首先使用键盘上[ WindowsR ]打开[运行] 2,在对话框中输入%temp%字符,并点击[确定] 3.选中该弹窗,再用[ctrlA] 进行全选 4.删除 2 清理软件 链接: https://pan.baidu.com/s/1sG70n-aEMGStv4T1YM-cPQ?pwd83rm 提取码: 83r…

部署Tomcat和jpress应用

静态页面:静态页面是指在服务器上提前生成好的HTML文件,每次用户请求时直接返回给用户。静态页面的内容是固定的,不会根据用户的请求或其他条件进行变化。静态页面的优点是加载速度快,对服务器资源要求较低,但缺点是无…

深入理解派生类

深入理解派生类 Created time: August 6, 2023 10:10 AM 运行时多态和编译时多态 多态是面向对象编程中的一个重要概念,它可以让我们以一种更加灵活的方式来处理对象,使得程序更加易读易维护。在C中,多态可以分为两种类型:运行…

从URL取值传给后端

从URL传值给后端 http://127.0.0.1:8080/blog_content.html?id8点击浏览文章详情,跳转至详情页面 从 url 中拿出文章 id,传给后端 首先拿到url然后判断是否有值,从问号后面取值params.split(&) 以 & 作为分割然后遍历字符数组 param…

TFTP 的使用操作指南(轻松入门版)

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

RabbitMQ 生产者-消息丢失 之 场景分析

生产者-消息丢失 之 场景分析 生产者消息丢失的场景消息无法到达RabbitMQ连接断开信道关闭 RabbitMQ无法将消息入队交换机不存在无匹配队列 消息过期丢失消息丢失场景对比 生产者消息丢失的场景 生产者发送消息的流程如下:首先生产者和RabbitMQ服务器建立连接&…

opencv基础 42- Scharr算子-cv2.Scharr()(边缘检测基础)

Scharr算子是用于计算图像梯度的一种常用算子,特别是在边缘检测任务中。它是Sobel算子的改进版本,旨在提供更加准确和敏感的边缘检测。 在离散的空间上,有很多方法可以用来计算近似导数,在使用 33 的 Sobel 算子时,可能…

简述Mysql索引

一、索引概述 1.1 索引概述 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。 这些数据结…

uniapp小程序console.log在微信开发者工具中不打印问题

最近在开发一款uniapp小程序,发现console.log在微信开发者工具中不打印,但在H5页面就能够有打印输出,于是在网上寻找原因… 主要是由于vue.config.js文件中有设置发布时删除console的配置,如下: 官网参考地址&#x…

静态路由 (华为设备)

默认路由:当路由器 收到目标地址不在路由表中的数据包时,将会 全部 发送 到 默认路由所定义的吓一跳 ,作为位置地址 数据包的 最后求助方式,这就是默认路由器的功能,默认路由的使用,可以大大的节省系统资源…

LeetCode 130. 被围绕的区域

题目链接:130. 被围绕的区域 题目描述 给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例1: 输入:board [[“…

SQL Server数据库如何添加mysql链接服务器(Windows系统)

SQL Server数据库如何添加mysql链接服务器(Windows系统) 一、说明二、下载mysql的odbc驱动三、安装mysql odbc四、配置ODBC4.1 控制面板→ODBC数据源(64位)→双击打开4.2 添加msql odbc数据源 五、测试添加是否成功六、打开SSMS&a…

ChatGPT的 6 个强势升级:重点是超强的文件上传和分析功能也来啦!

发布会核心概览 前日凌晨,OpenAI在社交平台上宣布了一系列新功能,旨在提升用户体验。这6 个新功能包括 “提示示例、回答建议、GPT-4默认选择、可分析上传多个文件、保持登录状态和键盘快捷键”。 其中,可分析上传多个文件的功能非常强大。结…

react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html

文章目录 ⭐前言⭐搭建react ts项目⭐引入grapes 插件⭐结束 ⭐前言 大家好,我是yma16,本文分享关于react搭建在线编辑html的站点。 react 发展历史 React是由Facebook开发的一种JavaScript库,用于构建用户界面。React最初发布于2013年&…

nginx反向代理及负载均衡的实现

目录 1.nginx反向代理 2.nginx负载均衡 3.nginx反向代理及负载均衡实现 nginx反向代理 4台主机都需要的操作: 两台服务器操作: 两台主机服务器进行测试; nginx负载均衡配置 4.nginx配置其他参数 多虚拟机访问 后端服务器日志中需要…

小鱼深度产品测评之:阿里云低代码开发平台魔笔,一站式的应用全生命周期管理,高效解决应用研发、迭代、运维的问题。

低代码开发平台魔笔测评 1、引言2、购买流程3、魔笔3.1添加应用3.2 应用列表3.1.1 列表应用展示3.2.1 列应用操作3.2.1.1 自动保存3.2.1.2 复制功能3.2.1.3 编辑功能3.2.1.4 删除 3.3 应用设计器3.3.1应用设计器入口3.3.2 设计器体验3.3.2.1 设计器页面展示3.3.2.2 设计器页面查…

网络安全预警分类流程

网络安全预警指南 随着信息技术的广泛应用与快速发展,传统业务与信息系统的融合程度不断加深,网络安全对国家政治、经济、文化、公共服务活动的影响进一步增大。网络安全形势日趋复杂,安全威胁不断变化,利用网络漏洞、恶意程序从…

日常随笔——如何把excel题库转换为word打印格式

将Excel题库转换为Word可以通过编程的方式实现。以下是一个使用Python的示例代码,该代码使用openpyxl库读取Excel文件,并使用python-docx库创建和保存Word文档。 首先,请确保已经安装了 openpyxl 和 python-docx 库。可以使用以下命令进行安…

Unity 实现字幕打字效果

Text文本打字效果,TextMeshPro可以对应参考,差距不大,改改参数名就能用。改脚本原本被我集成到其他的程序集中,现在已经分离。 效果 实现功能 1.能够设置每行能够容纳的字数和允许的冗余 2.打字效果 3.每行打完上移 4.开头进入&…

真我V3 5G(RMX2200 RMX2201)解锁刷机全过程

安卓系统新Rom包为GSI,更具有通用性,可以比较放心刷。 原厂系统垃圾多、广告多,甚至热点功能不支持ipv6,严重偏离热点机的定位。 主要参考 https://www.bilibili.com/read/cv20730877/https://www.bilibili.com/read/cv2073087…