- 博客(243)
- 收藏
- 关注
原创 Flink
负责执行计算任务,同时,Flink 提供客户端 Client 来管理集群和提交任务,Flink 集群采取 Master - Slave 架构,Master 的角色为。,负责集群和作业管理,Slave 的角色是。
2024-09-26 10:27:24
718
原创 Flink CDC
位于高低水位线之间、与被捕获表相关的 binlog 事件(上图中的黄色方块)即为全量数据在读取阶段发生的数据变化,CDC source 会将这部分增量数据合并至现有快照,合并完成后即可获得与源数据库完全一致的实时快照,并且在此过程中无需对数据库进行加锁,不会影响线上业务的正常运行。在读取全量数据时,Flink CDC source 会首先将数据表中的已有数据根据主键分布切分成多个 chunk(如上图中的绿色方块所示),并将 chunk 分发给多个 reader 进行并发读取。
2024-09-26 10:06:52
461
原创 Debezium
允许用户实时地从数据库中捕捉到数据的变化(如插入、更新和删除操作),并将这些变化以结构化的数据流的形式提供给其他系统进行处理和分析。在这种情况下,Debezium不会通过Kafka Connect运行,而是作为一个嵌入到定制Java应用程序中的库运行。以插件的形式,部署在 Kafka Connect 上,在上图中,中间的部分是 Kafka Broker,而 Kafka Connect 是单独的服务,需要下载 debezium-connector-mysql 连接器,解压到。
2024-09-23 15:55:21
832
原创 Doris
Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程,主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。,主要负责数据存储、查询计划的执行。这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大的降低了一款分布式系统的运维成本。在使用接口。
2024-09-23 11:26:53
1119
原创 MPP架构
是一种数据库或计算架构,通过高度并行的处理能力来处理和分析大型数据集。该架构利用多个处理节点或服务器来并行执行计算任务,从而显著提高性能和处理速度。
2024-09-23 10:53:35
375
原创 ShardingSphere事务
ShardingSphere支持将普通的数据库连接池,转换为支持XA事务的连接池,对HikariCP, Druid和DBCP2连接池内置支持,无需额外配置。其它连接池需要用户实现的SPI接口进行扩展。
2024-09-13 11:28:24
663
原创 Elasticsearch合并
在Elasticsearch中,合并是一个重要的操作,它有助于提高索引的性能和效率。合并主要涉及将多个小段(segments)合并为更大的段,以减少查询延迟和提高存储效率。在Elasticsearch中,数据首先被写入到内存中,随着写入操作,数据会被持续写入到称为“段”的数据结构中。每个段都是一个不可变的、索引的结构,段在创建后不会再修改。随着时间的推移,会产生多个小段,尤其是在数据频繁写入时。
2024-09-04 10:41:46
764
原创 Elasticsearch优化
在创建索引时,提前定义字段的映射和类型,避免使用动态映射。根据需求明确各字段的索引属性,减少不必要的字段索引。:在适合的情况下,可以使用 Elasticsearch 的聚合功能来预先计算报表数据,减少后续请求时的计算量。:合并小的段为更大的段,以减少查询的延迟。:根据数据规模合理设置索引的主分片数量,避免过多的分片导致管理开销增加,或过少的分片导致资源利用不均。:对于经常性的查询,使用过滤器以提高性能,因为缓存的过滤结果可以被重用。:尽量只请求需要的字段,避免返回不必要的数据,以减少IO和处理时间。
2024-09-03 17:40:46
1082
原创 Elasticsearch文档值
文档值是将字段的数据存储在磁盘上的一种方式,使得字段的值以列式结构存储。这种存储方式使得对字段的高效检索和聚合成为可能,尤其是在处理大量文档时。
2024-09-03 17:26:05
654
原创 Elasticsearch检索原理
每个分片执行完查询后,会将结果(文档ID及其相关性得分)发送回协调节点(coordinating node)。结果合并:协调节点将来自不同分片的结果合并成一个统一的结果集,通常按得分排序。聚合结果整合:如果查询中包含聚合操作,协调节点将合并各分片中的聚合结果。
2024-09-03 17:23:27
505
原创 Elasticsearch集群架构
Elasticsearch是一种分布式搜索引擎,基于Apache Lucene构建,支持全文搜索、结构化搜索、分析和实时数据处理。
2024-09-03 17:00:49
708
原创 Elasticsearch在高并发下如何保证读写一致性
Elasticsearch 的每个索引都有一个“刷新”操作,这个操作会将内存中的操作记录(如新增、更新、删除)刷新到磁盘,使得这些操作可被搜索到。:对于一些写操作(如日志数据等),可以考虑采用异步处理的方式,减小直接对外部请求的影响。:在一些情况下,您可能希望等待操作完成(特别是在批量写入后),然后显式调用。:通过配置合适数量的副本分片,可以分摊读请求的压力,提高查询响应能力。:例如,可以设置旧索引只读,并将写入新索引的数据,这样可提升写入性能。:将不同时间段的数据划分为不同的索引,减少单个索引的压力。
2024-09-03 15:28:10
1153
1
原创 RabbitMQ和Kafka的区别
RabbitMQ:Kafka:RabbitMQ:Kafka:RabbitMQ:Kafka:RabbitMQ:Kafka:
2024-08-30 16:52:18
974
原创 RabbitMQ的TLL
RabbitMQ支持两种过期时间如果两种方法一起使用,则消息的 TTL 以两者之间较小的那个数值为准。消息在队列中的生存时一旦超过设置 TTL 值时,就会变成"死信" (Dead Message) ,消费者将无法再收到该消息。
2024-08-30 16:28:22
857
原创 RabbitMQ核心架构
Producer:负责产生消息。Connection:RabbitMQ客户端和代理服务器之间的TCP连接。Channel:建立在连接之上的虚拟连接,RabbitMQ操作都是在信道中进行。Broker:一个Broker可以看做一个RabbitMQ服务节点或者服务实例。Exchange:生产者发送消息到交换器,交换器根据路由key投递到相应的队列。Queue:存储消息的队列。RoutingKey:路由键,指定消息的路由规则。BindingKey:绑定键,关联交换器和队列。
2024-08-30 00:01:18
1426
原创 Redis过期键监听
在 Redis 中,为了监听过期键事件,需要使用 Redis 的功能。这一功能允许客户端订阅某些事件的发生,比如键过期、键删除等。
2024-08-29 15:11:53
1730
原创 浏览器输入URL后的过程
TCP 连接建立成功后,浏览器会发送一个 HTTP 请求给服务器,这个请求包含了 URL、请求方法(GET、POST 等)、请求头等信息。获得 IP 地址后,基于三次握手(TCP 三次握手过程),浏览器与服务器建立 TCP 连接,以确保通信的可靠性。服务器接收到 HTTP 请求后,会根据请求路径和参数处理请求,并生成 HTTP 响应。服务器将处理结果封装成 HTTP 响应,返回给浏览器。浏览器首先检查本地缓存中是否有该URL的资源,如果有且未过期,则直接从缓存中加载资源。
2024-07-11 11:28:46
903
原创 Synchronized和ReentranLock区别
在Java中,关键字和类都可以用于解决多线程之间的同步问题,但它们在使用方式和提供的功能上存在一些差异。
2024-06-13 11:28:07
598
原创 MySQL深分页优化
MySQL中的深分页问题通常是指当我们通过LIMIT语句查询数据,尤其是在翻到较后面的页码时,性能会急剧下降。例如,查询第1000页的数据,每页10条,系统需要跳过前9990条数据,然后才能获取到所需的记录,这在大数据集上非常低效。传统的深分页实现方法通常是使用OFFSET和LIMIT这会导致数据库扫描大量不需要的行然后抛弃它们,才能获取到真正需要的数据。
2024-06-06 11:41:17
1282
原创 PostgreSQL和MySQL架构模型的区别
在这种模型下,每个数据库连接被分配给一个新的服务器进程(或者说是数据库进程)。这样做的优点是提高了系统的稳定性和隔离性,因为每个进程的崩溃不太可能影响到其他进程,从而提高了系统的可靠性。但是,这种模型也意味着更高的系统资源消耗(尤其是内存),因为每个连接都需要其自己的进程和相应的系统资源。在多线程模型中,线程较进程轻量,共享内存空间,因此创建和销毁线程的开销小于进程。多线程模型的一个潜在缺点是,不当的线程管理可能会影响系统的稳定性和性能,因为一个线程的崩溃有可能影响到同一进程中的其他线程。
2024-06-06 09:41:57
580
原创 MySQL数据库的InnoDB 和 MyISAM存储引擎之间的区别
特性InnoDBMyISAM事务支持支持 ACID 事务不支持外键支持支持不支持锁定机制行级锁(Row-level Locking)表级锁(Table-level Locking)崩溃恢复日志文件支持崩溃恢复仅支持简单的检查和修复工具表空间管理使用表空间文件每个表有单独的表结构和数据索引文件文件扩展名.ibd(数据和索引)全文索引从 MySQL 5.6 开始支持内置全文索引支持数据完整性支持参照约束和外键不支持参照完整性检查数据读取速度。
2024-05-16 09:41:00
416
原创 MySQL千万级别表如何高性能添加字段和索引
尽管存在短暂的锁表时刻,但由于大部分操作都是在临时表上进行,因此不会明显地阻塞表的访问。会在一个非常短的时间窗口内停止对原表的写操作,将原表重命名为备份表,然后将临时表重命名为原表名,这样就完成了表结构的更改。在操作成功完成后,原表的触发器会被删除,如果一切正常,备份表也会被删除(取决于具体的参数配置),完成整个流程的清理工作。数据复制期间,对原表的插入、更新和删除操作会通过触发器同步到临时表,确保临时表数据的实时更新。首先根据原表的结构创建一个新的临时表,并对这个临时表应用所需的表结构变更。
2024-05-15 17:25:45
631
原创 电商秒杀系统设计
秒杀活动会在短时间内吸引大量用户,系统需要能够处理高峰时期的大量并发请求:在秒杀中,面临的一个严重系统挑战是如何确保在数以万计的用户同时抢购有限的商品时,如何正确、实时地扣减库存,以防止超卖现象。:防止恶意用户或机器人利用脚本进行快速抢购,挤压正常用户的抢购机会,甚至在秒杀商品数量有限的情况下进行恶意抢购和放空。:系统需要能够抗住短时间内的高并发压力,同时随着用户数量的增长和业务的发展,系统的可扩展性也是一个挑战。
2024-05-11 11:49:14
874
1
原创 上传文件客户端签名直传
上传文件的客户端签名直传是一种常用的将文件直接上传到云存储服务如Amazon S3、阿里云OSS等云服务上的技术手段。这种方法通常用于减轻服务器负担,并提高上传效率。
2024-05-08 17:49:12
491
原创 Java Synchronized原理
关键字是 Java 中提供的一种基本的同步机制,它用于控制对共享资源的并发访问,以确保在任何时刻,只有一个线程可以执行一个方法或一块代码。
2024-04-28 15:17:15
260
原创 Java atomic类
Java 的 atomic 类是一种利用 CAS(Compare And Swap)操作实现的无锁(lock-free)同步机制。现代的 CPU 都支持这种低级别的原子操作。CAS 包含三个操作数 —— 内存位置(V)、预期的原值(A)和新值(B)。如果内存位置的值与预期值 A 相匹配,那么处理器会自动将该位置的值更新为新值 B,否则处理器不做任何操作。整个比较和交换的操作是一个原子操作。这种机制有效应用在多线程环境,避免了线程阻塞,并降低了线程上下文切换带来的开销。这段代码在使用方法时,会调用。
2024-04-28 15:06:07
226
原创 CompletableFuture
是Java 8引入的一种增强的Future模型,旨在解决传统Future模型的限制,支持更复杂的异步编程场景。它在包下,实现了Future和接口。提供了一种异步执行任务的方式,并能在任务完成时对其结果进行处理。以下是:通过,你可以构建复杂的异步任务链。可以串联多个任务,无需阻塞等待上一个任务完成即可定义下一个任务。任务之间可以通过串行(thenApply, thenAccept, thenRun)或并行(thenCombine, thenCompose)的方式组织。:可以显式地完成一个。
2024-04-28 11:17:08
359
1
原创 CountDownLatch 与 CompletableFuture 对比
使用场景:CountDownLatch通常用于一次性事件的等待,如启动服务前等待多个服务初始化完成;而CompletableFuture用于构建复杂的异步编程,它支持更丰富的操作,如转换结果、组合多个阶段、处理错误等。功能性:CompletableFuture 提供了更加丰富的功能,能够代表一个异步计算的结果,同时也能被链式地处理;CountDownLatch 更简单且专一,只用于在一个时间点上同步多个线程的行为。CompletableFuture是可以多次使用的,并且它的每个阶段都可以独立处理。
2024-04-28 11:11:38
651
原创 常见加密算法
在对称加密算法中,加密(编码)和解密(解码)使用的是同一个密钥。也就是说,发送方和接收方必须事先共享同一密钥,并且保守这个密钥不被第三方得知。
2024-04-25 10:19:55
778
3
原创 RBAC权限模型
提供了对角色分配的限制,比如互斥角色(不允许一个用户同时拥有两个冲突的角色),先决条件角色(用户必须拥有某个角色才能被分配另一个角色),以及数量限制(对于某个角色的用户数量做出限制)。权限是对资源的访问控制,它定义了可以对资源执行的操作,如读取、写入、删除或修改。当用户登录系统时,会创建一个会话,在此会话中,用户的角色被激活,允许用户通过其角色执行权限操作。是最完整的RBAC模型,结合了RBAC1和RBAC2,包括角色层次和权限约束。扩展了基础RBAC,包含角色的继承,允许一个角色继承另一个角色的权限。
2024-04-19 10:33:29
617
原创 Spring 依赖注入
DI(依赖注入)是实现IoC的一种手段。在Spring框架中,DI指的是组件所依赖的其他组件被Spring容器注入到它们中去,而不是通过组件自己去创建或查找依赖。这样,组件的创建和依赖的解析都是由外部容器(即Spring框架)负责的,因此实现了松耦合和更高程度的模块化。依赖注入让组件之间的依赖关系更容易管理和更换,它也有助于单元测试,因为可以很容易地将真实依赖替换为mock对象。
2024-04-17 17:26:28
411
原创 MySQL执行计划
key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)rows:估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。id:select子句或表执行顺序,id相同,从上到下执行,id不同,id值越大,执行优先级越高。ref:关联的字段,常量等值查询,显示为const,如果为连接查询,显示关联的字段。
2024-04-17 14:28:42
707
原创 Redis数据倾斜
Redis 数据倾斜问题通常出现在分布式 Redis 环境中,尤其是 Redis 集群环境。这意味着一部分节点承载了比其他节点更多的数据或者接收的请求更多,导致负载不均衡。数据倾斜可能会对性能和可扩展性造成影响。针对Redis的数据倾斜问题,可能需要综合考虑应用逻辑、key设计、集群配置和负载均衡策略多个方面,采取一种或多种措施进行缓解。在实践中,通常需要根据具体的业务场景和倾斜状况来选择最合适的解决办法。
2024-04-08 13:54:12
792
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人