自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 SkyWalking微服务链路追踪实战

skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

2024-02-27 01:23:38 1213

原创 Gateway网关实战

API网关是随着微服务概念兴起的一种架构模式,它是运行于外部请求与内部服务之间的一个流量入口,用于实现对外部请求的协议转换、鉴权、流控、参数校验、监控等通用功能。Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等。

2024-02-26 19:06:46 977

原创 Seata分布式事务实战XA&TCC模式

TCC 是一种侵入式的分布式事务解决方案,以上三个操作都需要业务系统自行实现,对业务系统有着非常大的入侵性,设计相对复杂,但优点是 TCC 完全不依赖数据库,能够实现跨数据库、跨应用资源管理,对这些不同数据访问通过侵入式的编码方式实现一个原子操作,更好地解决了在各种复杂业务场景下的分布式事务问题。

2024-02-26 01:44:11 944

原创 Seata分布式事务实战AT模式

在微服务架构中,完成某一个业务功能可能需要横跨多个服务,操作多个数据库。这就涉及到到了分布式事务,需要操作的资源位于多个资源服务器上,而应用需要保证对于多个资源服务器的数据操作,要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同资源服务器的数据一致性。典型的分布式事务应用场景跨库事务跨库事务指的是,一个应用某个功能需要操作多个库,不同的库中存储不同的业务数据。分库分表通常一个库数据量比较大或者预期未来的数据量比较大,都会进行分库分表。微服务架构。

2024-02-25 23:02:55 908

原创 Sentinel微服务流量治理组件实战下

Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。规则管理和推送:统一管理推送规则。鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。

2024-02-24 16:08:01 1143

原创 Sentinel微服务流量治理组件实战上

当依赖的服务有大量超时时,在让新的请求去访问根本没有意义,只会无畏的消耗现有资源。比如我们设置了超时时间为1s,如果短时间内有大量请求在1s内都得不到响应,就意味着这个服务出现了异常,此时就没有必要再让其他的请求去访问这个依赖了,这个时候就应该使用断路器避免资源浪费。

2024-02-24 15:06:53 1312

原创 Nacos配置中心实战

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

2024-02-24 00:57:45 964

原创 微服务远程调用Feign

微服务之间如何方便优雅的实现服务间的远程调用?RPC 全称是 Remote Procedure Call ,即远程过程调用,其对应的是我们的本地调用。RPC 的目的是:让我们调用远程方法像调用本地方法一样。//本地调用//RPC远程调用 orderService为代理对象Feign是Netflix开发的声明式、模板化的HTTP客户端,Feign可帮助我们更加便捷、优雅地调用HTTP API。

2024-02-23 23:11:48 1411 1

原创 Nacos注册中心实战

服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。1. 易用:简单的数据模型,标准的 restfulAPI,易用的控制台,丰富的使用文档。

2024-02-23 10:14:06 827

原创 ElasticSearch底层读写工作原理

记录当前所有可用的segment,每个commit point都会维护一个.del文件,即每个.del文件都有一个commit point文件(es删除数据本质是不属于物理删除),当es做删改操作时首先会在.del文件中声明某个document已经被删除,文件内记录了在某个segment内某个文档已经被删除,当查询请求过来时在segment中被删除的文件是能够查出来的,但是当返回结果时会根据commit point维护的那个.del文件把已经删除的文档过滤掉。

2024-02-20 18:58:10 1398

原创 ElasticSearch高级功能

关系型数据库范式化(Normalize)设计的主要目标是减少不必要的更新,往往会带来一些副作用:一个完全范式化设计的数据库会经常面临“查询缓慢”的问题。搜不到的原因:存储时,内部对象的边界并没有考虑在内,JSON格式被处理成扁平式键值对的结构。自Elasticsearch 5.x后引入,专门为Elasticsearch 设计,扩展了Java的语法。反范式化(Denormalize)的设计不使用关联关系,而是在文档中保存冗余的数据拷贝。一条数据的改动,可能会引起很多数据的更新。

2024-02-20 16:55:55 1037

原创 ElasticSearch聚合操作

Terms,需要字段支持filedata,如果是keyword 默认支持fielddata,如果是text需要在Mapping 中开启fielddata,会按照分词后的结果进行分桶。不精准的原因: 数据分散到多个分片,聚合是每个分片的取 Top X,导致结果不精准。聚合函数:指定要执行的聚合操作,如 sum、avg、min、max、terms、date_histogram 等等。查询条件:指定需要聚合的文档,可以使用标准的 Elasticsearch 查询语法,如 term、match、range 等等。

2024-02-18 01:15:19 1150

原创 ElasticSearch分词器和相关性详解

搜索的相关性算分,描述了一个文档和查询语句匹配的程度。ES 会对每个匹配查询条件的结果进行算分_score。打分的本质是排序,需要把最符合用户需求的文档排在前面。如何衡量相关性:1. Precision(查准率)―尽可能返回较少的无关文档。2. Recall(查全率)–尽量返回较多的相关文档。3. Ranking -是否能够按照相关度进行排序。

2024-02-14 15:52:40 2045

原创 Elasticsearch深度分页问题

查询第一页5条数据"query": {},"from": 0,"size": 5但是如果我们查询的数据页数特别大,当from + size大于10000的时候,就会出现问题,如下图报错信息所示:ES通过参数index.max_result_window用来限制单次查询满足查询条件的结果窗口的大小,其默认值为10000。分页方式性能优点缺点适用场景低灵活性好,实现简单,支持随机翻页受制于max_result_window设置,不能无限制翻页;存在深度翻译问题,越往后翻译越慢。

2024-02-13 17:54:01 1925 1

原创 ElasticSearch级查询Query DSL下

全文检索查询旨在基于相关性搜索和匹配文本数据。这些查询会对输入的文本进行分析,将其拆分为词项(单个单词),并执行诸如分词、词干处理和标准化等操作。Elasticsearch 中的一些全文检索查询示例包括 match、match_phrase 和 multi_match 查询。

2024-02-12 00:25:46 1182

原创 ElasticSearch级查询Query DSL上

常见的编辑距离值包括0、1、2,其中0表示精确匹配,1表示允许一个字符的差异,2表示允许两个字符的差异,以此类推。术语级别查询(Term-Level Queries)指的是搜索内容不经过文本分析直接用于文本匹配,这个过程类似于数据库的SQL查询,搜索的对象大多是索引的非text类型字段。术语查询直接返回包含搜索内容的文档,常用来查询索引中某个类型为keyword的文本字段,类似于SQL的“=”查询,使用十分普遍。参数,你可以指定要忽略的前缀长度,以便更精确地匹配剩余的部分。

2024-02-12 00:24:44 2053

原创 SpringBoot整合ElasticSearch

ElasticsearchRestTemplate模板类,封装了便捷操作Elasticsearch的模板方法,包括 索引 / 映射 / CRUD 等底层操作和高级操作。该接口是框架封装的用于操作Elastsearch的高级接口。

2024-02-11 13:04:53 1635

原创 ElasticSearch快速开始

正排索引(Forward Index)和倒排索引(Inverted Index)是全文检索中常用的两种索引结构,它们在索引和搜索的过程中扮演不同的角色。正排索引(正向索引)正排索引是将文档按顺序排列并进行编号的索引结构。每个文档都包含了完整的文本内容,以及其他相关的属性或元数据,如标题、作者、发布日期等。在正排索引中,可以根据文档编号或其他属性快速定位和访问文档的内容。正排索引适合用于需要对文档进行整体检索和展示的场景,但对于包含大量文本内容的数据集来说,正排索引的存储和查询效率可能会受到限制。

2024-02-11 13:04:13 1416 2

原创 RocketMQ生产常见问题

1. 生产者使用事务消息机制。2. Broker配置同步刷盘+Dledger主从架构。3. 消费者不要使用异步消费。4. 整个MQ挂了之后准备降级方案。

2024-02-10 02:10:52 800

原创 SpringBoot整合RocketMQ

对于事务消息机制,最关键的事务监听器需要通过@RocketMQTransactionListener注解注入到Spring容器当中。在这个注解当中可以通过rocketMQTemplateBeanName属性,指向具体的RocketMQTemplate子类。一个RocketMQTemplate实例只能包含一个生产者,也就只能往一个Topic下发送消息。如果需要往另外一个Topic下发送消息,就需要通过@ExtRocketMQTemplateConfiguration()注解另外声明一个子类实例。

2024-02-10 02:10:20 375

原创 RocketMQ事务消息

由于RocketMQ与消费者端有失败重试机制,所以,只要消息成功发送到RocketMQ了,那么可以认为Branch2.1,Branch2.2,Branch2.3这几个分支步骤,是可以保证最终的数据一致性的。在此基础上,RocketMQ提出了事务消息机制,采用两阶段提交的思路,保证Main Branch1和Branch2之间的事务一致性。他的基础诉求是通过RocketMQ的事务机制,来保证上下游的数据一致性。​ 3、其实,了解了事务消息的机制后,在具体执行时,可以对事务流程进行适当的调整。

2024-02-09 02:19:16 1067

原创 RocketMQ客户端实现多种功能

异步发送的机制能够比较好的兼容消息的安全性以及生产者的高吞吐需求,是很多MQ产品都支持的方式。但是异步发送机制也并不是万能的,毕竟异步发送机制对消息生产者的主线业务是有侵入的。但是,这里还是会造成一种分裂,消息最终是由Consumer来处理,但是消息却是由Broker推送过来的,也就是说,Consumer无法确定自己将要处理的是哪些消息。使用同步发送的机制,我们就可以在消息生产者发送完消息后,对发送失败的消息进行补救。

2024-02-09 01:35:31 1089

原创 RocketMQ下载安装及基本使用

RocketMQ是阿⾥巴巴开源的⼀个消息中间件,在阿⾥内部历经了双⼗⼀等很多⾼并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的⼀个顶级项⽬。早期阿⾥使⽤ActiveMQ,但是,当消息开始逐渐增多后,ActiveMQ的IO性能很快达到了瓶颈。于是,阿⾥开始关注Kafka。但是Kafka是针对⽇志收集场景设计的,他的⾼级功能并不是很贴合阿⾥的业务场景。尤其当他的 Topic过多时,由于Partition⽂件也会过多,这就会加⼤⽂件索引的耗时,会严重影响IO性能。

2024-02-08 17:59:10 923

原创 Netty的序列化之MessagePack

Netty中使用MessagePack序列化对象。

2024-02-08 17:31:17 342

原创 Netty中使用编解码器框架

每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换。这种转换逻辑由编解码器处理,编解码器由编码器和解码器组成,它们每种都可以将字节流从一种格式转换为另一种格式。如果将消息看作是对于特定的应用程序具有具体含义的结构化的字节序列—它的数据。那么编码器是将消息转换为适合于传输的格式(最有可能的就是字节流)。而对应的解码器则是将网络字节流转换回应用程序的消息格式。因此,编码器操作出站数据,而解码器处理入站数据。

2024-02-07 00:41:37 1686

原创 Netty中解决粘包/半包

假设客户端分别发送了两个数据包 D1 和 D2 给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下 4 种情况。1. 服务端分两次读取到了两个独立的数据包,分别是 D1 和 D2,没有粘包和拆包。2. 服务端一次接收到了两个数据包,D1 和 D2 粘合在一起,被称为 TCP 粘包。3. 服务端分两次读取到了两个数据包,第一次读取到了完整的 D1 包和 D2 包的部分内容,第二次读取到了 D2 包的剩余内容,这被称为 TCP 拆包。

2024-02-07 00:39:17 974

原创 深入理解Netty及核心组件使用—下

从开发人员的角度来看,Netty 的主要组件是 ChannelHandler,它充当了所有处理入站和出站数据的应用程序逻辑的容器。ChannelHandler 的方法是由网络事件触发的。事实上,ChannelHandler 可专门用于几乎任何类型的动作,例如将数据从一种格式转换为另外一种格式,例如各种编解码,或者处理转换过程中所抛出的异常。

2024-02-06 00:52:28 1315

原创 深入理解Netty及核心组件使用—中

如果一个消息或者任何其他的入站事件被读取,那么它会从 ChannelPipeline 的头部开始流动,但是只被处理入站事件的 Handler 处理,也就是解压(入)Handler、解密(入)Handler、 授权(入) Handler,最终,数据将会到达 ChannelPipeline 的尾端,届时,所有处理就都结束了。在这种情况下,数据将从链的尾端开始流动,但是只被处理出站事件的 Handler 处理,也就是加密(出) Handler、 压缩(出)handler,直到它到达链的头部为止。

2024-02-06 00:48:58 958

原创 深入理解Netty及核心组件使用—上

Bootstrap 是 Netty 框架的启动类和主入口类,分为客户端类Bootstrap和服务器类ServerBootstrap两种。Channel 是 Java NIO 的一个基本构造。它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或者多个不同的 I/O 操作的程序组件)的开放连接,如读操作和写操作,目前,可以把 Channel 看作是传入(入站)或者传出(出站)数据的载体。因此,它可以被打开或者被关闭,连接或者断开连接。

2024-02-05 13:36:39 1821

原创 深入理解Linux内核之IO多路复用下

阻塞的原理是:操作系统为了支持多任务,实现了进程调度的功能,会把进程分为“运行”和“等待”等几种状态。为了更好的理解epoll,我们先看select是如何做的,服务端需要管理多个客户端连接,而 recv 只能监视单个 socket,假如能够预先传入一个 socket 列表,如果列表中的 socket 都没有数据,挂起进程,直到有一个 socket 收到数据,唤醒进程。首先,我们需要知道,数据是通过网线传输到网卡上的,网卡收到网线传来的数据,经过硬件电路的传输,最终将数据写入到内存中的某个地址上。

2024-02-05 13:34:13 1008

原创 深入理解Linux内核之IO多路复用上

在选择 select,poll,epoll 时要根据具体的使用场合以及这三种方式的自身特点。1、表面上看 epoll 的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和 poll 的性能可能比 epoll 好,毕竟 epoll 的通知机制需要很多函数回调。2、select 低效是因为每次它都需要轮询。但低效也是相对的,视情况而定,也可通过良好的设计改善。

2024-02-04 00:53:30 1099

原创 深入理解直接内存和零拷贝

零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省 CPU 周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上下文切换而带来的开销可以看出没有说不需要拷贝,只是说减少不必要的拷贝。

2024-02-04 00:51:08 962

原创 深入理解网络编程之BIO和NIO

NIO中Reactor模式的基本组成部分Selector(选择器):Selector是 Reactor 模式的核心,负责监听各个通道上的事件,如连接、接收、读取和写入事件。通过 Selector,一个单独的线程可以有效地管理多个通道,使得系统可以在一个线程内同时处理多个连接。Channel(通道):Channel 是数据的载体,可以是文件、套接字等。通道向 Selector 注册,告诉 Selector 哪些事件它关心,然后 Selector 将根据事件的发生情况通知对应的通道。

2024-02-03 00:10:47 1084

原创 深入理解网络通信和TCP/IP协议

计算机网络的标准定义是:利用通信线路将地理上分散的、具有独立功能的计算机系统 和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递 的系统。计算机网络从覆盖范围上划分可以分为三类:局域网、城域网、广域网。局域网 LAN(作 用范围一般为几米到几十公里)、城域网 MAN(界于 WAN 与 LAN 之间)、广域网 WAN(作用 范围一般为几十到几千公里)。

2024-02-03 00:08:12 1146

原创 Kafka常见生产问题详解

比如,在原有Topic下,可以调整Producer的分区策略,让Producer将后续的消息更多的发送到新增的Partition里,这样可以让各个Partition上的消息能够趋于平衡。思路是可行的,但是重试的次数,发送消息的数量等都是需要考虑的问题。PageCache缓存中的消息是断电即丢失的。因为如果业务逻辑异步进行,而消费者已经同步提交了Offset,那么如果业务逻辑执行过程中出现了异常,失败了,那么Broker端已经接收到了消费者的应答,后续就不会再重新推送消息,这样就造成了业务层面的消息丢失。

2024-02-02 01:05:57 1529

原创 Kafka核心参数详解

在RecordAccumulator中,会针对每一个Partition,维护一个Deque双端队列,这些Dequeue队列基本上是和Kafka服务端的Topic下的Partition对应的。​然后,Sender对读取出来的消息,会以Broker为key,缓存到一个对应的队列当中。但是如果消费者没有提交Offset,Broker就会认为这个消息还没有被处理过,就会重新往对应的消费者组进行推送,不过这次,一般会尽量推送给同一个消费者组当中的其他消费者实例。这是一个从0开始单调递增的数字。

2024-02-02 01:04:28 1412

原创 Kafka客户端实战

构建Producer分为三个步骤:1. 设置Producer核心属性:Producer可选的属性都可以由ProducerConfig类管理。比如ProducerConfig.BOOTSTRAP_SERVERS_CONFIG属性,显然就是指发送者要将消息发到哪个Kafka集群上(目前用的非集群)。这是每个Producer必选的属性。2. 构建消息:Kafka的消息是一个Key-Value结构的消息。其中,key和value都可以是任意对象类型。

2024-02-01 16:21:00 894

原创 Kafka下载安装及基本使用

Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐量的数据流,并将数据实时地分发到多个消费者中。Kafka消息系统由多个broker(服务器)组成,这些broker可以在多个数据中心之间分布式部署,以提供高可用性和容错性。Kafka的基本架构由生产者、消费者和主题(topic)组成。

2024-02-01 02:27:42 1426

原创 Zookeeper服务注册与发现实战

Zookeeper注册中心的优点:1. 高可用性:ZooKeeper是一个高可用的分布式系统,可以通过配置多个服务器实例来提供容错能力。如果其中一个实例出现故障,其他实例仍然可以继续提供服务。2. 强一致性:ZooKeeper保证了数据的强一致性。当一个更新操作完成时,所有的服务器都将具有相同的数据视图。这使得ZooKeeper非常适合作为服务注册中心,因为可以确保所有客户端看到的服务状态是一致的。3. 实时性:ZooKeeper的监视器(Watcher)机制允许客户端监听节点的变化。

2024-01-31 16:07:09 843

原创 Zookeeper分布式锁实战

在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。目前分布式锁,比较成熟、主流的方案:1. 基于数据库的分布式锁。这种方案使用数据库的事务和锁机制来实现分布式锁。虽然在某些场景下可以实现简单的分布式锁,但由于数据库操作的性能相对较低,并且可能面临锁表的风险,所以一般不是首选方案。

2024-01-31 14:51:43 939

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除