- 博客(250)
- 收藏
- 关注
原创 分布式事务选型和实践
XA是数据库的分布式事务,强一致性,在整个过程中,数据一张锁住状态,即从prepare到commit、rollback的整个过程中,TM一直把持折数据库的锁,如果有其他人要修改数据库的该条数据,就必须等待锁的释放,存在长事务风险。:业务活动管理器管理控制整个业务活动,包括记录维护 TCC 全局事务的事务状态和每个从业务服务的子事务状态,并在业务活动提交时调用所有从业务服务的 Confirm 操作,在业务活动取消时调用所有从业务服务的 Cancel 操作。如果任意本地子事务失败,则补偿已完成的事务。
2024-10-06 12:42:27
1095
原创 分布式id选型与实践
1位:符号位,始终为0。41位:时间戳,精确到毫秒,可使用69年。10位:机器ID,包括5位数据中心ID和5位机器ID。12位:序列号,毫秒内的计数,支持每个节点每毫秒生成4096个ID。在分布式系统中,选择合适的ID生成方案需要综合考虑系统的性能、可用性、实现难度和业务需求。简单场景:对于并发量不高、实现成本低的需求,可以使用UUID或利用中央数据库生成ID。中央数据库生成ID方案在分布式环境下,通过集中管理,确保ID的全局唯一性和有序性。中高并发场景。
2024-10-06 10:58:32
1216
原创 MAC OS使用docker部署RocketMQ,解决宿主机无法访问broker
虽然利用docker启动容器,可以在启动的时候配置端口映射,利用127.0.0.1+映射端口的方式直接访问容器,但是在Broker的连接上,是通过NameServer来获取他的地址,并非通过自己的配置。而NameServer提供的是容器网络内的地址,所以导致在拿到Broker的地址后,无法通过宿主机连接。然后使用以下命令在 docker 端运行 wenjunxiao/mac-docker-connector,** 指令的含义是需要使用 host 网络,并且允许 NET_ADMIN**
2024-09-05 01:37:26
660
原创 高并发系统设计
削峰填谷(Load Shedding and Smoothing):对于流量高峰,采用削峰填谷的策略,例如消息队列、请求缓冲队列、批处理等方式,将瞬时高峰流量平滑处理,减少对系统的冲击。无锁编程和减少锁争用:尽量使用无锁数据结构(如 ConcurrentHashMap)和算法(如 CAS,Compare-And-Swap),避免线程之间的锁竞争,提高并发性能。高效的网络库:使用高效的网络库和框架(如 Netty、Akka、Vert.x)来处理大量的并发连接和请求,优化底层网络性能。
2024-09-03 23:18:22
1174
原创 RocketMQ性能优化:全网最全的一篇
通过监控 RocketMQ 的性能指标和运行状态,可以及时发现问题并进行优化调整。操作系统的配置对 RocketMQ 的性能有显著影响。通过合理的操作系统调优,可以更好地发挥硬件性能,提升 RocketMQ 的消息处理能力。RocketMQ 的写入和消费性能直接影响系统的整体吞吐量和响应时间。通过优化写入和消费策略,可以进一步提升 RocketMQ 的性能。合理选择和配置硬件资源,可以为 RocketMQ 提供更高的吞吐量和更低的延迟。通过优化消息存储策略和数据结构设计,可以提升消息存储和检索的效率。
2024-08-27 23:29:55
2117
原创 Redis性能优化:全网最全的一篇
Redis 的 Hash 适合存储多个字段的对象,当字段较少且值较短时,使用 Hash 可以显著减少内存占用。**使用更紧凑的字符串编码:**Redis 会自动选择适当的字符串编码方式(raw 或 int 编码)。**使用 LZF 压缩 AOF 文件:**如果启用了 AOF(Append Only File)持久化,可以选择使用 LZF 压缩 AOF 文件,减少磁盘和内存的使用。**优化内存分配:**Redis 内部使用 jemalloc 作为内存分配器,可以通过定期优化和整理内存分配来减少内存碎片。
2024-08-27 22:41:04
3339
原创 Redis源码浅析二:命令执行
总结:readQueryFromClient 函数负责从客户端 socket 读取请求数据,将其存储在查询缓冲区中,并根据不同的情况进行处理(如命令解析、复制状态更新等)。如果数据读取不完整或发生错误,它会正确处理这些情况,并确保不会由于某个客户端的异常状态影响到整个 Redis 服务器的稳定性。在redis启动的时候,我们还要关注一个重点,在initServer的时候,会执行aeCreateFileEvent,这里我们还有深入学习一下。看到这里基本上就可以了,不再往下追了,
2024-08-25 23:15:14
567
原创 Redis源码浅析一:redis启动
当输出缓冲区中仍然有未发送的数据时,Redis 需要确保这些数据能在将来继续发送,为此,Redis 在事件循环中为该客户端的 socket 创建一个 可写事件(AE_WRITABLE)。这个事件表示,当客户端的 socket 变为可写状态(即,socket 缓冲区有足够的空间来接收更多数据)时,Redis 的事件循环会触发相应的事件处理器(sendReplyToClient),继续将剩余的数据发送给客户端。回调函数在事件循环进入休眠等待 I/O 事件之前执行,主要用于处理一些需要在阻塞等待之前完成的任务。
2024-08-25 22:27:34
495
原创 Redission源码浅析一:RedissonLock.lock与RedissonLock.tryLock
加锁时,如果没有指定过期时间,则默认过期时间为30s且每隔10s进行锁续期操作。
2024-08-25 21:09:34
1646
原创 Lettuce源码二:执行命令
本文主要介绍了使用发送set命令的主要流程和原理:获取基础连接调用set方法(阻塞等待) -> 封装命令 -> 获取指定槽的节点连接 -> 命令缓存到队列末尾 -> 命令编码 -> 发送到tcp缓冲区 ->redis服务端收到请求、处理并返回响应 -> 客户端tcp缓冲区收到响应报文 -> 响应消息解码 -> 从本地队列头部去除缓存命令 -> 响应写入命令对象 -> 返回响应唤醒调用线程。Lettuce 客户端借助命令队列、响应式编程,实现了tcp。
2024-08-23 16:47:39
966
原创 Mysql 性能调优四:查询优化
在前面几篇中,我们介绍了如何设计最优的库表结构、如何建立最好的索引,这些对于提高性能来说是必不可少的。但这些还不够——还需要合理地设计查询。如果查询写得很糟糕,即使库表结构再合理、索引再合适,也无法实现高性能。
2024-07-30 21:39:44
609
原创 ES性能优化:全网最全的一篇
更多的字段对搜索也是有影响的,ES 非常依赖于底层的文件系统缓存,我们肯定想把更多的数据(index segment)缓存起来,这样可以提升性能。的方式来进行处理的。使用 Bulk 的方式有利于提高写入的性能,这个其实也很好理解,如果链接不是长链接,每写入一条数据都进行一次 TCP 链接的过程,那效率是多低啊。对于写入的耗时还是很明显的,从一开始每个批次 3200 条数据的耗时 4 分 39 秒,一路优化到最后的 3 分 53 秒,需要注意的是,部分配置是有特定的使用场景的。
2024-07-30 14:40:57
3583
原创 Mysql 性能调优二:Schema设计
这个虚假的全0值可能会导致很多问题(可以将MySQL的SQL_MODE配置为不允许使用无意义的日期,对于尚未创建满是坏数据的数据库的新应用程序来说,这是一个特别好的实践)。Mysql可以为整数类型指定宽度,例如,INT(11),这对大多数应用毫无意义:它不会限制值的合法范围,只是规定来Mysql的一些交互工具例如,MySQL命令行客户端)用来显示字符的个数。在任何具有枚举值类型的数据库中,这可能是一个值得商榷的设计决策,因为它实际上应该是一个整数,会被设计为“字典”或“查找”表的外健。
2024-07-29 21:26:32
900
原创 阿里Mysql最佳实践
说明:其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。create_time,update_time 的类型均为datetime 类型, 如果要记录时区信息,那么类型设置为 timestamp。正例:where a =?and b =?order by c;索引:a_b_c正例:where a =?索引:a_b_c反例:索引如果存在范围查询,那么索引有序性无法利用,如:WHERE a > 10 ORDER BY b;索引 a_b 无法排序。
2024-07-28 16:29:18
1390
原创 Mysql 性能调优一:服务端
调整InnoDB缓冲池:使用 innodb_dedicated_server 这个配置会自动优化,可以使用innodb_buffer_pool_instances将缓冲池分割成多个实例,提高并发性能调整relo log日志文件大小:调整innodb_log_file_size, 确保日志文件大小适中,平衡写入性能和故障恢复时间调整relo log buffer大小:调整innodb_log_buffer_size,减少日志写入磁盘的频率,提高写入性能。
2024-07-27 12:59:16
1603
原创 Idea编译报错java: No implementation was created for BrandConverter due to having a problem in the erron
【代码】Idea编译报错java: No implementation was created for BrandConverter due to having a problem in the erron。
2024-07-21 11:16:54
839
1
原创 全网最全的Java集合最佳实践
说明:毕竟泛型是在 JDK5 后才出现,考虑到向前兼容,编译器是允许非泛型集合与泛型集合互相赋值。// 此处抛出 ClassCastException 异常。
2024-07-20 08:00:00
854
原创 Sentinel源码三:滑动窗口
本篇主要还是介绍了滑动窗口进行一个qps等数据的保存和维护的,后续我们将进入flowSlot的源码分析,看看限流是如何运用刚刚统计到的信息进行一个限流判定的。
2024-04-29 08:27:44
2048
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人