当前位置: 首页 > news >正文

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 管理工具

相关文章:

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

1、服务注册发现 服务注册就是维护一个服务列表,它在管理系统内所有的服务地址,当新的服务启动后,它会向服务列表提交自己的服务地址,服务的调用法可以直接向服务列表发送服务列表获取请求,就能获得所有的服务地址&am…...

途乐证券-新股行情持续火爆,哪些因素影响首日表现?

全面注册制以来,参加打新的投资者数量全体呈现下降。打新收益下降,破发频出的布景下,投资者打新策略从逢新必打逐步向优选个股改变。 经过很多历史数据,从商场定价、参加者热度以及机构重视度维度揭秘了上市后股价体现优秀的个股具…...

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

基于weka手工实现KNN

一、KNN模型 K最近邻(K-Nearest Neighbors,简称KNN)算法是一种常用的基于实例的监督学习算法。它可以用于分类和回归问题,并且是一种非常直观和简单的机器学习算法。 KNN算法的基本思想是:对于一个新的样本数据&…...

Lua 闭包

一、Lua 中的函数 Lua 中的函数是第一类值。意味着和其他的常见类型的值(例如数值和字符串)具有同等权限。 举个例子,函数也可以像其他类型一样存储起来,然后调用 -- 将 a.p 指向 print 函数 a { p print } -- 使用 a.p 函数…...

Java技术整理(1)—— JVM篇

1、什么是JVM? JVM是一个可运行Java代码的虚拟计算机,包括一套字节码指令集,一组寄存器,一个栈,一个垃圾回收,堆和一个存储方式栈。JVM 是运行在操作系统之上,并不与操作系统直接交互。 2、运行…...

bug解决:AssertionError: No inf checks were recorded for this optimizer.

这真的是最恶心的一个error(比网络回传找哪层没有传播到还要恶心!),找了好久的问题所在之处,最后偶然发现了这篇文章: 解决pytorch半精度amp训练nan问题 - 知乎 然后发现自己用的混合精度训练,发…...

Django笔记之数据库查询优化汇总

1、性能方面 1. connection.queries 前面我们介绍过 connection.queries 的用法,比如我们执行了一条查询之后,可以通过下面的方式查到我们刚刚的语句和耗时 >>> from django.db import connection >>> connection.queries [{sql: S…...

JVM内存区域

预备 为了更好的理解类加载和垃圾回收,先要了解一下JVM的内存区域(如果没有特殊说明,都是针对的是 HotSpot 虚拟机。)。 Java 源代码文件经过编译器编译后生成字节码文件,然后交给 JVM 的类加载器,加载完…...

某行业CTF一道流量分析题

今晚看了一道题,记录学习下。 给了一个hacktrace.pcapng,分析主要内容如下: 上传两个文件,一个mouse.m2s,一个mimi.zip,将其导出。 mimi.zip中存放着secret.zip和key.pcapng 不过解压需要密码&#xff…...

【Kafka】1.Kafka简介及安装

目 录 1. Kafka的简介1.1 使用场景1.2 基本概念 2. Kafka的安装2.1 下载Kafka的压缩包2.2 解压Kafka的压缩包2.3 启动Kafka服务 1. Kafka的简介 Kafka 是一个分布式、支持分区(partition)、多副本(replica)、基于 zookeeper 协调…...

Kafka API与SpringBoot调用

文章目录 首先需要命令行创建一个名为cities的主题,并且创建该主题的订阅者。 1、使用Kafka原生API1.1、创建spring工程1.2、创建发布者1.3、对生产者的优化1.4、批量发送消息1.5、创建消费者组1.6 消费者同步手动提交1.7、消费者异步手动提交1.8、消费者同异步手动…...

JavaScript构造函数和类的区别

原文 构造函数 没有显式的创建对象创建对象时使用new操作符。所有属性和方法赋值给this对象。没有return语句按照惯例,构造函数的方法名首字母应该使用大写字母,用于区分普通函数,其实构造函数也是函数,其主要功能是用来创建对象…...

Spring与Spring Bean

Spring 原理 它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可 以和其他的框架无缝整合。 Spring 特点 轻量级 控制反转 面向切面 容器 框架集合 Spring 核心组件 Spring 总共有十几个组件核心容器(Spring core) S…...

并发相关面试题

巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 如何理解volatile关键字 在并发领域中,存在三大特性:原子性、有序性、可见性。volatile关键字用来修饰对象的属性…...

Hadoop+Python+Django+Mysql热门旅游景点数据分析系统的设计与实现(包含设计报告)

系统阐述的是使用热门旅游景点数据分析系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体…...

php中nts和ts

PHP语言解析器:官方提供了2种类型的版本,线程安全(TS)版和非线程安全(NTS)版 TS: TS(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时进行数据加锁保护,其他线程不能同时进行访…...

设计模式之责任链模式【Java实现】

责任链(Chain of Resposibility) 模式 概念 责任链(chain of Resposibility) 模式:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者 通过前一对象记住其下一个对象的引用而连成一条…...

Android 12.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析

1.前言 在android12.0的系统rom定制化开发中,在系统原生systemui进行自定义下拉状态栏布局的定制的时候,需要在systemui下拉状态栏下滑的时候,根据下滑坐标来 判断当前是滑出通知栏还是滑出控制中心模块,所以就需要根据屏幕宽度,来区分x坐标值为多少是左滑出通知栏或者右…...

服务器安装JDK

三种方法 方法一: 方法二: 首先登录到Oracle官网下载JDK JDK上传到服务器中,记住文件上传的位置是在哪里(我放的位置在/www/java),然后看下面指示进行安装 方法三: 首先登录到Oracle官网下载…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…...