当前位置: 首页 > 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官网下载…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...