Java技术整理(6)—— 微服务篇

1、服务注册发现

服务注册就是维护一个服务列表,它在管理系统内所有的服务地址,当新的服务启动后,它会向服务列表提交自己的服务地址,服务的调用法可以直接向服务列表发送服务列表获取请求,就能获得所有的服务地址,只需要选取需要的服务即可。

现在的服务注册工具有很多,例如ZooKeeper,Consul,Etcd、Netflix、Eureka

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

(1)客户端注册: 客户端注册是服务自身负责注册与注销,当服务启动后向注册中心提交服务地址,当服务下线时注销自己,期间还需要和注册中心发送心跳数据,心跳机制是注册中心用来判断服务是否存在的机制,通常是由注册中心进行心跳监听。

客户端注册的缺点: 注册与服务功能相耦合。

(2)第三方注册: 第三方注册是由一个独立的注册服务 Registrar 负责注册与注销工作,当服务开启时,通知 Registrar 进行注册操作,然后 Registrar 负责向注册中心发起注册工作,同时维护服务与注册中心的心跳,当服务不可用时,Registrar 发起销毁工作。

第三方注册的缺点: Registrar 必须是一个高可用的系统,否则注册工作无法进行。

服务发现有两种形式:客户端发现 和 第三方发现

(1)客户端发现: 客户端负责查询可用服务地址,也负责负载均衡的实现。这种方式是最为直接也最为方便的一种方式,但它的缺点在于多语言时需要重复编写相同逻辑。

(2)服务端发现: 服务端需要额外添加Router服务,服务请求会先发送到Router,然后Router负责查询服务与负载均衡,这种方式的缺点在于必须保证Router的高可用。


2、API网关

API Gateway 是一个服务器,也可以说是进入系统的唯一通道,API Gateway内部封装了一个系统的架构,并提供API给客户端,它能过实现的功能也非常多,例如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。

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

(1)请求转发: 服务转发主要是对客户端发起的安装微服务的请求负载到不同的服务上。
(2)响应合并: 将业务上需要多个接口共同作用的工作统合并成一次调用对外统一提供服务。
(3)协议转换: 重点是支持SOAP、JMS、Rest间的协议转换
(4)数据转换: 重点是支持XML和JSON之间的格式转换
(5)安全认证:

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

3、配置中心

配置中心是作用于系统的参数配置,它需要满足高效获取,实时感知,分布式访问的条件。

例如Zookeeper配置中心,采用的是数据加载到内存,实现高效获取,通过 节点监听机制 实现实时感知


4、事件调度

事件调度是为了解决高并发环境下,快速反馈机制的实现。

事件调度通过消息队列来解决快速反馈问题,常用的消息队列有kafka(只在乎高并发,不在乎性能),activemq、rabbitmq等等…


5、服务追踪

服务跟踪是随着微服务数量的增长,需要跟踪请求在微服务之间的流转情况而采取策略。

例如 Spring Cloud Sleuth就是一种服务追踪组件,它在日志中引入唯一ID,确保微服务调用之间的唯一性,这样就能跟踪请求在服务间的流转情况。

(1)实现请求跟踪: 为了实现请求跟踪,当请求发送到分布式系统的入口端点时,只需要服务跟踪框架为其创建一个唯一标识,同时在分布式系统流转时维持这个标识,直到完成请求,这个唯一标识就是Trace ID,通过Trace ID的记录,就能将请求过程日志关联起来。

(2)统计各处理单元的时间延迟: 当请求达到各个服务组件时,或者处理逻辑到达某个状态时,通过唯一标识来记录它的开始、具体过程以及结束,这个标识就是Span ID,对于每个Span都有开始和结束两个节点,通过记录span的开始和结束时间戳来统计出该Span的时间延迟,它还能存储其它数据,例如事件名称,请求信息等。


6、服务熔断(Hystrix)

服务熔断是为了防止基础微服务因某个服务异常而产生的联级故障,进而造成系统崩溃的情况,这种现象叫做服务雪崩效应

(1)熔断器

当发生服务雪崩时,就可以用到熔断器,熔断器的原理是在一段时间内监听到许多类似的错误出现,会强迫其以后的多个调用快速失效,不再访问远程服务器,从而防止应用程序不断尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或浪费CPU去等待长时间的超时产生。

(2)断路器

断路器是一种熔断器的实现,当 Hystrix Command 请求后,服务失败数量超过一定比例(默认一半),断路器就切换到 Open状态,这时断路器会直接拦截所有请求,让请求以错误的状态返回给用户,一段时间后(默认保持5秒),自动切换到 Half-Open 状态,这时会判断下一次请求的返回情况,若请求成功则恢复到 Closed 状态,否则重开 Open 状态。


7、API管理

有一种工具叫 Swagger API 管理工具

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

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

相关文章

【LangChain】Prompts之示例选择器

LangChain学习文档 【LangChain】向量存储(Vector stores)【LangChain】向量存储之FAISS【LangChain】Prompts之Prompt templates【LangChain】Prompts之自定义提示模板【LangChain】Prompts之示例选择器 概要 如果您有大量示例,您可能需要选择要包含在提示中的哪…

pytest功能特性介绍

前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unittest是没什么区别的(个人理解)。 fixture用途 1.做测试前后的初始化设置,如测试数据…

【AI】《动手学-深度学习-PyTorch版》笔记(十七):卷积神经网络入门

AI学习目录汇总 1、从全链接层到卷积 1.1 卷积 我们在前面学习的多层感知机中,已经认识了全链接层,缺点很明显,在稍微大点的网络模型中,参数成指数级别增长。参数量很快就达到数十亿,这样的量级几乎无法计算。为此科学家们想出一个减少参数的方法:卷积。 从全链接层到…

Android Monkey测试

1.直接使用 当配置好一切环境的前提下,仅需套用以下基础语法,即可简单使用(更多的命令可以去Android的官网查询) adb shell monkey -p [包名] -v [需要点击的次数] 举例,如我这里的包名是 com.test.chj233 ,需要随机生成 1万次…

linux 关机和重启

关机和重启 关机和重启之前最好先数据数据同步一下 # 将数据由内存同步到硬盘sync 关机 #shutdown [选项] 时间#立即进入维护模式shutdown now#立即重启shutdown -r now#20:00 重新启动计算机shutdown -r 20:00& #立即关机shutdown -h now# 20:00 关闭计算机shutdown -h 20…

K8S系列文章之 Shell批处理脚本应用

一、简要说明 1、批处理脚本介绍 命令批处理脚本:/usr/shell/all.sh文件批量分发脚本:/usr/shell/scp.sh 2、批处理命令脚本原理 读取/usr/shell/hosts文件中的ip列表使用$*接收脚本所有参数for循环遍历hosts文件中的ip地址通过ssh host cmd 实现目的…

【elasticSearch系】3.完整搭建详尽版elk

话不多说,我们先看下经典的elk 是由哪些组件搭建组合起来的 elasticSearch和kibana搭建 可以查看之前我搭建elasticsearch和kibana 的这篇文章 logstash搭建 为了和之前我搭建elasticsearch和kibana版本保持一致,这里我们还是选择7.17.3 下载地址 点击下载,这里为了方…

wangEditor5实现@评论功能

需求描述:在输入框输入后显示用户列表,实现人功能 当前环境:vue3viteelementPluswangEditor5 需要插件:wangeditor/plugin-mention 安装插件:npm i wangeditor/plugin-mention 输入框组件分两部分:1. wa…

谈谈对Spring MVC的理解

问题分析: SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层…

基于vue3+webpack5+qiankun实现微前端

一 主应用改造(又称基座改造) 1 在主应用中安装qiankun(npm i qiankun -S) 2 在src下新建micro-app.js文件,用于存放所有子应用。 const microApps [// 当匹配到activeRule 的时候,请求获取entry资源,渲染到containe…

软件测试基础篇——MySQL

MySQL 1、数据库技术概述 数据库database:存放和管理各种数据的仓库,操作的对象主要是【数据data】,科学的组织和存储数据,高效的获取和处理数据SQL:结构化查询语言,专为**关系型数据库而建立的操作语言&…

JavaScript类

JavaScript 类(class) 类是用于创建对象的模板。 我们使用 class 关键字来创建一个类,类体在一对大括号 {} 中,我们可以在大括号 {} 中定义类成员的位置,如方法或构造函数。 每个类中包含了一个特殊的方法 constructor(),它是类…

vue3项目中引入dialog插件,支持最大最小化、还原、拖拽

效果图: 上图是layui-vue组件库中的layer插件,我的项目使用的是element-plus组件库,在用不上layui组件库的情况下,就单独引入layui/layer-vue这个弹层插件就可以了 npm地址:layui/layer-vue - npm layui-vue组件库地址…

UnrealEngine - 网络同步之连接篇

1 连接过程 - 握手 传统的 C/S 架构下,Client 和 Server 通常会建立一条抽象的 Connection,用来进行两端的通信。 UE 的官方文档中提供了 Client 连接到 Server 的示例 ,简单来说分为如下几步: 打包构建好 Client 和 Server 进程…

11-数据结构-栈和队列的应用(C语言)

栈和队列的应用 目录 栈和队列的应用 一、括号匹配(栈) 二、表达式的各种转换 (1)中缀转后缀(手工) (2)后缀转中缀表达式(手工) (3)中缀转后缀(栈) (4)中缀转后缀(树) (5)后缀表达式求值 (6)中缀表达式求值(栈…

EasyExcel多次写入数据多个EasyExcel文件导出到zip压缩文件

笔者最近需要导出一百多万条数据到Excel,已经超出单张工作表的最大容量(2^201048576),需要导出到多个工作表或多个Excel文件。 海量数据导出面临的问题有以下几个: 如果一次性查出所有数据,很可能内存溢出…

jackson库收发json格式数据和ajax发送json格式的数据

一、jackson库收发json格式数据 jackson库是maven仓库中用来实现组织json数据功能的库。 json格式  json格式一个组织数据的字符文本格式,它用键值对的方式存贮数据,json数据都是有一对对键值对组成的,键只能是字符串,用双引号包…

ArcGIS API for JavaScript 4.x 教程(一) 显示一张地图

了解如何创建和显示带有基本地图图层的地图。 地图包含地理数据层。地图包含一个基本地图层,以及一个或多个数据层(可选)。可以使用地图视图显示地图的特定区域,并设置位置和缩放级别。 本教程将向您展示如何使用地形底图层创建和…

时序预测 | Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 时序预测 | Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型 1.Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型 2.单变量时间序列预测; 3.多指标评价,评价指标包括:R2、MAE、MBE等,代码质量极高…

XML学习基础知识归纳(一)

一、XML基本概述 (1)概念:XML是可扩展的标记语言,xml文档的后缀名为 .xml (2)作用:用来用来传输和存储数据,不用于表现和展示数据,这点呢相比于HTML来说是不同的&#…