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

Shopee API逆向分析:如何用Java安全地获取商品分类与列表数据(附完整代码)

Java实战:电商平台商品数据采集与分析技术解析 在当今数据驱动的商业环境中,理解电商平台的商品数据结构对于市场研究、竞品分析和商业决策具有重要意义。本文将深入探讨如何通过技术手段获取和分析电商平台的商品分类与列表数据,同时强调技术…...

从SVM到Transformer:大佬们是怎么让模型‘举一反三’的?聊聊泛化理论简史

从SVM到Transformer:泛化理论如何塑造现代机器学习 在2012年ImageNet竞赛中,AlexNet以惊人优势夺冠,其成功不仅源于GPU算力,更得益于Dropout等提升泛化能力的技术。这背后是一个跨越半个世纪的理论探索——从Vapnik的统计学习理论…...

从油气勘探到城市安全:地震波技术如何跨界守护地下空间?

地震波技术的跨界革命:从油气勘探到城市地下空间安全 当大多数人听到"地震波技术"时,脑海中浮现的可能是石油勘探或地质研究。但这项诞生于上世纪的技术,正在经历一场静默的革命——它正从传统的油气勘探领域,悄然渗透到…...

SQLx中的Option类型处理:深入解析与实战

在使用SQLx库进行PostgreSQL数据库操作时,处理Option类型的数据有时会令人困惑。本文将通过一个具体的例子,详细解释如何正确处理Option<Person>类型,并展示如何避免常见的错误。 背景介绍 假设我们有一个Person结构体,代表人员信息: struct Person {name: Strin…...

YOLO11入门实战:从cd命令到python train,完整流程解析

YOLO11入门实战&#xff1a;从cd命令到python train&#xff0c;完整流程解析 1. 前言&#xff1a;为什么选择YOLO11&#xff1f; 如果你对计算机视觉感兴趣&#xff0c;或者想快速上手一个强大的目标检测模型&#xff0c;YOLO11绝对是一个值得尝试的选择。它继承了YOLO系列速…...

别再写复杂SQL了!用MongoDB聚合管道搞定电商订单数据分析(实战篇)

电商订单分析新范式&#xff1a;MongoDB聚合管道实战指南 当我们需要从海量订单数据中挖掘用户行为规律时&#xff0c;传统SQL的GROUP BY往往显得力不从心。想象这样一个场景&#xff1a;你的电商平台每天新增数十万订单&#xff0c;管理层需要实时掌握每个用户的消费特征——他…...

Llama-3.2-3B快速上手:Ollama部署+基础使用全解析

Llama-3.2-3B快速上手&#xff1a;Ollama部署基础使用全解析 1. 认识Llama-3.2-3B&#xff1a;你的轻量级AI助手 1.1 模型特点与优势 Llama-3.2-3B是Meta最新推出的轻量级语言模型&#xff0c;专为日常对话和多语言理解优化。相比其他同参数规模的模型&#xff0c;它有三大突…...

Hunyuan-MT-7B真实案例:某边境县医院门诊处方双语打印系统输出

Hunyuan-MT-7B真实案例&#xff1a;某边境县医院门诊处方双语打印系统输出 1. 项目背景与需求 某边境县医院面临着特殊的语言服务需求。由于地处多民族聚居区&#xff0c;医院每天需要接待大量使用不同语言的患者。门诊处方需要同时使用汉语和当地少数民族语言打印&#xff0…...

嵌入式老鸟的避坑指南:从芯片选型到驱动调试,那些教科书不会告诉你的实战经验

嵌入式开发实战避坑指南&#xff1a;从芯片选型到系统调优的深度解析 引子&#xff1a;那些年我们踩过的嵌入式大坑 记得刚入行嵌入式开发时&#xff0c;我接手了一个看似简单的SPI通信项目。按照教科书上的标准流程配置好寄存器后&#xff0c;却发现数据总是错位。熬了三个通宵…...

ta4j数据源集成实战:从Yahoo Finance到Coinbase的完整解决方案

ta4j数据源集成实战&#xff1a;从Yahoo Finance到Coinbase的完整解决方案 【免费下载链接】ta4j A Java library for technical analysis. 项目地址: https://gitcode.com/gh_mirrors/ta/ta4j ta4j是一个强大的Java技术分析库&#xff0c;提供了从多种金融数据源获取市…...