在 MVCC 机制下,Redo Log 和 Bin Log 主要在事务提交时发挥作用,它们的作用和触发时机如下: 1. 事务执行过程中的日志行为…
概览 在分布式环境下,各个微服务都会有不同的实例,服务注册和服务发现解决了“有哪些可用实例”的问题,剩下面临的就是,“这么多可用实例,我该把请求发给谁?”。直觉来说,大部分人如果听过一些专业名词,此时会直接想到“负载均衡”。那负载均衡到底是什么呢? 负载均衡是在支持应用程序的资源池中平均分配网络流量的一种方法。现代应用程序必须同时处理数百万用户,并以快速、可靠的方式将正确的文本、视频、图像和其他数据返回给每个用户。为了处理如此高的流量,大多数应用程序都有许多资源服务器,它们之间包含很多重复数据。负载均衡器是位于用户与服务器组之间的设备,充当不可见的协调者,确保均等使用所有资源服务器。 ------- aws 事实上负载均衡是手段而不是目的。因此从目的上来说,我们其实不需要搞什么负载均衡,我们的目的就是把请求转发给“最适合”处理这个请求的节点。最适合意味着:- 如果这个请求需要很多内存,那么将它转发给内存多的节点。- 如果这个请求是 CPU 密集的,那么将它转发给…
目前在 Go Web 领域有很多较出名的开源框架,Gin 、Hertz、Echo、Beego、Iris。它们都有各自的特点,并为开发者提供了很好的 API 支持,性能上都很好。 先来看看各个框架的抽象结构 Gin: Engine:…
如何保证缓存和数据库一致性,这是一个老生常谈的话题了。 但很多人对这个问题,依旧有很多疑惑: 到底是更新缓存还是删缓存? 到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库? 为什么要引入消息队列保证一致性? 延迟双删会有什么问题?到底要不要用? … 引入缓存提高性能 我们从最简单的场景开始讲起。 如果你的业务处于起步阶段,流量非常小,那无论是读请求还是写请求,直接操作数据库即可,这时你的架构模型是这样的:…
var ( messageQueue []string // 存储消息的队列 mu sync.Mutex // 用于保护共享资源(messageQueue)的互斥锁…
1.kafka 生产者简介 1.1 生产者传输实体 kafka Producer 发送的数据对象叫做 ProducerRecord,它有四个关键参数: Topic -…
1. Kafka 的功能 Kafka 的核心功能如下: 消息引擎 - Kafka 可以作为一个消息引擎系统。 流处理 - Kafka…
代码设计的目的:把复杂问题搞简单,而不是把简单问题搞复杂 数据结构和算法:大数据量的问题 设计模式或代码设计:复杂代码的问题 避免过度设计: 不要为了应用设计模式而应用 不以破坏代码可读性为前提 不要为了短期不存在的扩展而费神 持续重构优于提前设计
刷帖子,看到有佬吐槽:某个业务缓存数据到期了本来只需要删除这个业务的数据就可以,但是同事把所有缓存数据都删除了,造成数据库宕机……有回复提到缓存击穿和缓存雪崩,于是就去查了资料,之前只是听说,也不知道具体是什么以及解决方法。 缓存击穿 概念 定义: 缓存击穿是指在高并发访问的情况下,某个非常热点的数据突然过期,导致大量请求在缓存中找不到数据,从而直接访问数据库,造成数据库压力瞬间增大。 发生原因: 热点数据过期。 高并发访问热点数据。 影响: 数据库承受大量突发请求,可能导致性能问题。…
索引(Index)是帮助 MySQL 进行高效查询的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构是以某种方式引用(指向)数据,这样就可以在这些数据结构之上实现高级查找算法,这种数据结构就是索引。 索引结构 MySQL 的索引结构是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种: 索引结构描述B+ Tree 索引最常见的索引类型,大部分引擎都支持 B+…