- 博客(38)
- 收藏
- 关注
原创 深入解析:数据库连接池的必要性与优化策略
数据库连接池是确保应用性能和稳定性的关键。通过合理配置和监控,可以最大化连接池的优势,同时避免潜在的问题。希望本文能够为你在数据库连接池的配置和优化上提供指导和启发。
2024-06-17 13:04:39
669
原创 分库分表实践:单 KEY 业务场景
随着业务的快速增长和数据量的爆炸性增加,传统的单体数据库架构已经难以满足性能和扩展性的需求。为了解决这一问题,分库分表技术应运而生,成为支撑大规模业务的重要手段。 分库分表是应对大数据量和高并发场景的有效手段。选择合适的分库分表策略和中间件对于保证系统的可扩展性和高性能至关重要。在设计数据库时,应考虑主键的选择和分表策略,以实现数据的合理分布。同时,业务层和运营侧的需求也应得到充分的考虑,以确保系统的灵活性和可维护性。通过不断优化和实践,我们可以构建出既高效又稳定的数据库架构。
2024-06-15 20:32:40
1275
原创 优化MySQL查询:预读技术在提升性能中的作用
MySQL的预读机制是InnoDB存储引擎的一项重要性能优化技术,旨在减少磁盘IO等待时间,从而提高数据库的读取性能。当连续读取一个extent的页面超过这个阈值时,InnoDB会启动整个后续extent的异步预读操作。MySQL的预读机制通过线性预读和随机预读两种算法,有效地减少了磁盘IO等待时间,提高了数据库的读取性能。在高并发环境下,MySQL的预读机制是优化数据库性能的重要手段之一。在选择MySQL的预读策略(线性预读或随机预读)时,需要根据不同的应用场景来决定。
2024-06-14 07:18:04
786
原创 高效数据架构:分表流程实践
随着业务的不断扩展,数据量激增成为不可避免的现象。当数据量达到某一临界点时,单一的数据表可能无法承载如此庞大的数据量,此时就需要考虑进行分库分表的策略。尽管业界普遍认为数据量达到1000万时就应考虑分表,但实际上,根据笔者所在公司的经验,即便是10亿规模的数据表,在C端业务中依然能够稳定运行。因此,分表的决策应基于对数据规模(数据行、B+树的高度)、数据结构以及业务需求的综合评估。
2024-06-13 07:04:16
660
原创 优化数据库性能:MySQL索引下推技术详解与应用策略
如果使用了索引下推优化,MySQL服务器会将部分过滤条件传递给存储引擎,由存储引擎在索引层面筛选出符合条件的数据项,然后只回表查询这些符合条件的数据项。通过ICP优化,可以在存储引擎层就过滤掉大量不满足条件的数据行,从而减少了数据行检索的数量和服务层过滤的工作量,提高了查询性能。 当查询使用到复合索引,并且WHERE子句中有涉及到非索引列的条件时,ICP能够将涉及到索引列的条件下推到索引扫描的过程中,提前过滤不满足条件的索引项。未使用ICP时,需要回表查询所有。的记录,再进行回表查询,减少了回表次数。
2024-06-12 07:20:16
716
原创 深入解析MySQL Threads_running:监控、诊断与性能优化策略
上述 SQL 语句将启用 performance_schema,这是一个用于监控 MySQL 性能的工具。它包含了许多与性能相关的表,可以通过查询这些表获取更多有用的信息。 在 MySQL 中,Threads_running 是一个用于监控数据库并发连接数的指标。 这条 SQL 语句将显示当前的 Threads_running 值,以及其他与线程相关的状态信息。 可以执行 SQL 语句或者系统命令。等工具可以进一步提升数据库的可观测性,帮助我们快速定位和解决问题。
2024-06-11 17:56:06
1085
原创 优化MySQL连接管理:深入解析max_connections参数与解决Too Many Connections策略
在现代的数据库管理中,合理配置参数对于确保MySQL数据库的稳定性和高效性至关重要。本文将深入探讨的基本概念,分析导致“Too many connections”错误的常见原因,并提供一系列解决方案,以帮助数据库管理员和开发者优化数据库性能。 数据库性能优化是一个持续的过程,需要数据库管理员和开发者不断监控、评估和调整。通过深入理解的作用和影响,以及采取适当的策略来应对连接数限制问题,可以显著提高数据库的稳定性和响应能力。
2024-06-10 08:11:32
2319
原创 深入解析:MySQL连接超时问题排查与优化策略
在现代企业应用中,数据库的稳定性和响应速度是保证业务连续性的关键。MySQL作为广泛使用的数据库系统,其连接超时问题可能成为性能瓶颈,影响用户体验和业务效率。本文将深入探讨MySQL连接超时的原因、影响以及优化策略。 通过深入理解MySQL连接超时的配置、原因和解决方案,我们可以更有效地预防和解决这一常见问题。结合监控工具和最佳实践,可以显著提高数据库的性能和稳定性。在内的多个超时相关参数的当前值。参数修改可以通过命令行或配置文件。
2024-06-09 08:53:28
831
原创 数据库资源评估:构建高效数据架构的基础
这篇文章主要是描述在平时开发的过程中怎么进行合理的资源评估,包括数据量预估、用户行为建模、资源预估、资源预览等等。
2024-06-07 07:33:32
761
原创 MySQL主从同步优化指南:架构、瓶颈与解决方案
在现代数据库架构中,MySQL 主从同步是实现高可用性和负载均衡的关键技术。本文将深入探讨主从同步的架构、延迟原因以及优化策略,并提供专业的监控建议。
2024-06-06 23:22:35
1324
原创 MySQL性能优化:深入理解InnoDB的自适应哈希索引
MySQL的自适应哈希索引(Adaptive Hash Index,简称AHI)是InnoDB存储引擎的一项关键特性,旨在提升查询性能和数据库的整体性能。自适应哈希索引通过动态调整哈希表的大小,使其“刚刚好”,从而优化查询效率。这种索引技术在特定场景下能够显著提升查询性能,是一种高效的索引优化技术。
2024-06-05 20:14:03
773
原创 程序员应该有什么职业素养?
作为一个技术研发我们不应该只埋头专注于技术方案,应该思考我们要做的事情能给组织、公司、用户带来什么业务价值,公司是需要盈利的,只有给公司带来了提效和增长,你的个人价值才能凸显,只关注技术你的个人能力也许可以有很好的提升,但这也许病不一定能延长你的职业周期。这样可以一点点提升个人的影响力,当你晋升的时候也更加轻松。这是一个知识爆炸的时代,我们每天都在接收新的知识,但是往往今天看完明天就忘了,我们应该贪精不贪多,及时对过往的知识进行回顾总结,做笔记也好、写博客也好,都是一个总结梳理的过程。
2024-06-05 07:44:23
232
原创 MySQL事务处理:ACID属性基础与实现概览
本文核心思想就是介绍一下 Mysql ACID 的实现,至于事务、锁、redo 的底层结构及实现原理,后面会单独出文章介绍。之所以这样是不希望一篇文章过长,在闲暇时间就可轻易掌握一个知识点。原子性(Atomicity): 原子性确保事务中的所有操作要么全部完成,要么全部不执行。如果事务中的任何一个操作失败,整个事务都会回滚到开始状态,就像这个事务从未执行过一样。这保证了不会出现只完成部分操作的情况。一致性(Consistency): 一致性确保事务从一个一致的状态转换到另一个一臀的状态。
2024-06-03 19:02:34
1120
原创 MySql 查询缓存
MySQL的查询缓存(Query Cache)是一个在内存中存储SELECT语句及其结果集的机制,目的是避免对相同的查询进行重复的解析、编译和执行,从而提高数据库性能。Mysql 结构图如下:当一个SELECT查询发送到MySQL时,MySQL首先检查查询缓存中是否已经存在该查询的结果。如果查询缓存中存在,并且查询条件和参数完全匹配,MySQL将直接从缓存中返回结果,无需进行进一步的处理。如果查询缓存中不存在,MySQL将执行查询,并将结果存入查询缓存中,以便后续相同查询可以直接使用。
2024-06-02 20:37:50
492
原创 MySql 数据类型选择与优化
因为CPU 不支持对 DECIMAL 的直接计算,所以在 Mysql 5.0 和更高版本中,Mysql 服务器自身实现了 Decimal 的高精度计算。但是,由于是变长的,在 Update 时可能使行长变得比原来更长,这就导致需要做额外的工作,比如导致频繁的页分裂和合并,从而产生大量磁盘碎片。更小的数据类型通常更快,因为它们占用更少的磁盘,内存和CPU缓存,并且处理时需要的CPU周期也更少。Char 类型是定长的,当存储 Char 时, Mysql 会删除所有的末尾空格。NOTE] 慷慨是不明智的。
2024-06-01 19:57:45
916
原创 数据排序的艺术:快速排序及其优化之旅
三向切分的快速排序可以解决这个问题,它将数组分为三部分:小于pivot的元素、等于pivot的元素和大于pivot的元素。快速排序的核心思想是选择一个元素作为基准(pivot),然后将数组分为两部分:一部分包含小于pivot的元素,另一部分包含大于pivot的元素。但是,由于它是递归的,所以它的空间复杂度取决于递归调用栈的深度,最坏情况下为O(n),平均情况下为O(log n)。它是一种分治法策略的应用,广泛用于各种场景,从数据库的查询优化到大数据处理,再到我们日常使用的文件排序。
2024-05-31 21:44:09
435
原创 网络性能的加速器:深入浅出CDN技术
CDN是当今快速、可靠的互联网体验的关键组成部分。在这篇博客中,我们将从基础概念开始,一直讲解到CDN的配置、工作原理、作用、好处以及其架构。让我们开始吧!CDN是现代互联网基础设施的重要组成部分,它通过将内容缓存在全球分布的服务器上,显著提高了网站的性能和用户体验。配置CDN可能需要一些技术知识,但许多CDN提供商都提供了详细的指南和支持。了解CDN的工作原理和架构可以帮助我们更好地利用这项技术,为用户提供更快、更安全的在线体验。希望这篇博客能够帮助你更好地理解CDN的概念和价值。
2024-05-30 15:35:57
531
原创 Go 编程技巧:零拷贝字符串与切片转换的高效秘籍
在深入探讨Go语言中字符串与切片类型转换的高效方法之前,让我们先思考一个关键问题:如何在不进行内存拷贝的情况下,实现这两种数据类型之间的无缝转换?本文将详细解析Go语言中字符串(字符类型)和切片的内部结构,并提出一种避免内存拷贝的转换策略。 在Go语言中,字符串是一种特殊的数据结构,其本质上是一个只读的字节数组。它与Redis中的SDS(Simple Dynamic String)数据类型类似,由字符数组和字符长度组成。
2024-05-29 09:51:54
1013
原创 分布式系统中的智能缓存:有界一致性哈希算法详解
有界一致性哈希算法的核心思想是在一致性哈希的基础上,根据节点的当前负载情况,为每个节点设置一个最大负载限制。当在一致性哈希环上查找节点时,如果一个节点已经达到了其最大负载限制,则会跳过该节点,继续查找下一个节点。 有界一致性哈希算法基于 Google 论文《有界一致性哈希算法》(Consistent Hashing with Bounded Loads),可以用于解决一致性哈希环上的缓存热点问题。 有界一致性哈希算法结合了最少连接策略和一致性哈希策略的优点,既平衡了负载又保持了一致性哈希的优势。
2024-05-28 10:48:20
1319
原创 流量控制的艺术:深入探索分布式限流策略与实践
当资源成为瓶颈时,服务框架需要对消费者做限流,启动流控保护机制。流量控制有多种策略,比较常用的有:针对访问速率的静态流控、针对资源占用的动态流控、针对消费者并发连接数的连接控制和针对并行访问数的并发控制。
2024-05-27 10:11:18
1234
原创 重新思考:Netflix 的边缘负载均衡
在先前关于Zuul 2开源的文章中,我们简要概述了近期在负载均衡方面的一些工作。在这篇文章中,我们将更详细地介绍这项工作的原因、方法和结果。 因此,我们开始从Zuul和其他团队那里学习,并改进我们的负载均衡实现,以进一步减少由服务器过载引起的错误。
2024-05-26 09:42:12
588
原创 探索Go语言的原子操作秘籍:sync/atomic.Value全解析
是一个强大的工具,适用于需要高并发读取的场景。然而,它也有其局限性,特别是在内存使用和写入操作的频率上。在使用Value读多写少Value最适合的场景是读操作远多于写操作。内存效率:频繁的写入可能会因为COW机制导致内存使用增加。类型安全:写入操作要求类型一致性,否则会引发panic。
2024-05-25 11:58:08
1142
原创 揭秘网络编程:同步与异步IO模型的实战演练
在网络编程领域,同步(Synchronous)、异步(Asynchronous)、阻塞(Blocking)与非阻塞(Non-blocking)IO模型是核心概念。尽管这些概念在多篇文章中被广泛讨论,它们的抽象性使得彻底理解并非易事。本文旨在通过具体的实验案例,将这些抽象概念具体化,以助于读者构建清晰的理解框架。
2024-05-24 07:15:14
1227
原创 性能优化利器:揭秘 Go 语言的 go tool trace 分析工具
go tool trace 是 Go 语言提供的一个强大的性能分析工具,它能够对程序运行时的行为进行可视化追踪,帮助开发者深入分析和诊断 GC(垃圾回收)、Goroutine 调度、系统调用阻塞等问题。go tool trace 是 Go 开发者进行性能分析的得力助手。通过上述介绍,我们可以看到它如何帮助我们从不同角度审视程序的运行情况,从而优化性能和解决潜在问题。掌握这一工具,将使你在 Go 语言的性能调优之路上更加得心应手。
2024-05-23 22:04:13
2247
原创 Go 并发秘籍:深入解析 sync.Once 的高效单例模式实现
sync.Oncedone是一个用于标记是否已经执行过操作的字段。m是一个互斥锁,用于保证并发安全。为什么done要放置在第一个变量?done作为第一个字段,是因为它是在“热路径”(hot path)中频繁访问的变量。热路径是指程序中经常执行的代码段。将done放在第一个字段,可以减少 CPU 指令,从而提升性能。这是因为访问结构体的第一个字段不需要计算偏移量,直接通过结构体指针即可访问。
2024-05-22 11:34:35
635
原创 Go语言与Protobuf:如何优雅地处理默认值与空值
/// met://////////////////////////由定义可知,包装器类型是对普通类型进行了一次封装。
2024-05-20 13:08:25
625
原创 一个实验证明 read、write 操作的是 scoket 缓冲
本文主要是通过实验模拟一下 scoket 缓冲区的发送和接收过程,以证明 write,read 操作的是 socket 缓冲区而不是等对端处理完才返回,本质上这也是利用缓存提高性能的一种思路。
2024-05-19 17:58:18
629
原创 微服务可用性之隔离
本文主要微服务场景下服务的可用性保障之隔离。隔离又分为几种情况,动静隔离、读写隔离、热点隔离、资源隔离等场景。 在我们服务的开发过程中一定要多想想,资源、服务之间会不会产生相互影响。比如大促就要考虑做核心服务集群的隔离,视频转码服务就要考虑大视频和短视频的快慢隔离(大、小视频分别投递到不同队列进行处理)。总之要站在全局视角多想想,希望大家都能变的更强。
2024-05-18 21:27:16
649
原创 proto FieldMask 解决部分更新问题
在平时开发的过程中我们经常有部分传参的问题,比如有一个 People 对象,我们只需要更新里面的 name 字段,这个时候我们只需要传递 People.name 就行了,其它 age,sex 等字段就不用传递了,当我们使用 grpc 协议的时候我们往往使用 FieldMask 解决这个问题。
2024-05-17 22:23:03
400
原创 一次讲清 go 闭包及问题
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。
2024-05-16 21:01:05
1328
3
原创 go fasthttp 高性能原理解析
并且开启一个协程调用 workerFunc 方法,该方法 阻塞等待连接对象,并进行后续请求的处理。目前,VertaMedia 在生产环境中成功地使用fasthttp,每个物理服务器可以提供高达200K rps的服务,并支持超过1.5M个并发keep-alive连接。 该函数主要对用户请求进行处理,并通过将 ctx,reader,writer 对象池化减少内存的分配与回收,从而提高程序的性能。 首先初始化 workpool ,设置最大并发数,连接处理函数,空闲连接清理任务。
2024-05-15 22:00:44
392
原创 go context 特性
关于 context 的源码分析网上已经有很多优秀的文章了,本文主要记录一下 context 的使用注意事项和技巧,还有 context 为什是并发安全的。
2024-05-14 18:58:59
661
原创 go 协程使用准则
go 异步编程的便利是其能够流行的一部分原因,仅需一个 go 关键字就可以开启一个异步流程。得益于 goroutine 轻量级的设计和使用的便利性,导致 goroutine 被不正确的使用或滥用。线上由于 goroutine 使用不善导致的 panic、内存泄漏等问题屡见不鲜。 这是一篇关于 goroutine 使用不当会引起的问题以及goroutine使用注意事项,本文旨在提高开发者的协程使用意识,使用协程的时候时刻记住 “永远不要开启你不知道什么时候结束的 goroutine。
2024-05-13 22:29:08
397
原创 go 过载保护 bbr 算法详解
这时我们希望系统在一定的压力之下通过拒绝部分流量达到系统部分可用,通常我们会通过对系统或接口进行限流以达到保护系统的目的,接下来将会介绍常见系统限流算法或手段。换言之,就是找出当前时间戳的滑动窗口的所有桶中,最大的请求计数器的值(单个桶)冷却时间是为了防止系统负载降低后马上放行导致大量流量重新涌入,系统负载上升,如此反复导致的系统抖动,所以冷却一段时间可以给系统一段缓冲期。常见的限流算法有固定窗口、滑动窗口、漏斗、令牌桶,这几种算法都是固定配额的,通常是写死一个固定的值。是否超过系统的最大吞吐量。
2024-05-12 16:24:22
1171
原创 go error 处理
go error 的显示处理事被吐槽的比较多的一个设计,主要是需要不断往上抛 error,会写一堆重复的代码,相比 try … catch 用起来可能没那么爽,以下是一个典型案例。= nil {return err...code intmsg stringline int可以添加一些自定义的错误信息,错误更详实。
2024-05-11 22:11:50
310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人