随笔分类 - go
go语言
摘要:今天和大家聊聊作为一个后端开发,在实际工作中,我们如何打造一个高并发的系统? 如下图所示,大概有六个层面,我们结合具体的场景直播间签到去一一细说。 一、前端 1、打散请求:即把用户的接口分散一点去请求后端,尽量不要集中在某一时刻。 场景:比如直播间讲师发起了一个签到,用户去点击签到,调用签到请求接口
阅读全文
摘要:一、使用场景 试想一个场景,有一个配置服务系统,里面存储着各种各样的配置,比如直播间的直播信息、点赞、签到、红包、带货等等。这些配置信息有两个特点: 1、并发量可能会特别特别大,试想一下,一个几十万人的直播间,可能在直播开始前几秒钟,用户就瞬间涌入进来了,那么这时候我们的系统就得加载这些配置信息。此
阅读全文
摘要:有这样一个经典的读写锁问题,假设读锁和写锁之前互斥,读锁和读锁之间不互斥。现在做一个实验: 1、线程A加一个读锁 ,然后不释放; 2、然后线程B想加一个写锁,会被线程A的读锁阻塞; 3、然后有个线程C尝试去加一个读锁。 按照上面的步骤,步骤3 能加锁成功吗? 使用go语言的sync.RWMutex模
阅读全文
摘要:一、kafka副本机制 所谓的副本机制(Replication),也可以称之为备份机制,通常是指分布式系统在多台网络互联的机器上保存有相同的数据拷贝。kafka的副本概念实际上是在分区(partition)层级下定义的,每个分区配置有若干个副本。根据 Kafka 副本机制的定义,同一个分区下的所有副
阅读全文
摘要:接着上篇,我们继续聊聊kafka的那些事儿。 一、消费者组 消费者组,即 Consumer Group,是 Kafka 的一大亮点设计。一个组内可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的 ID,这个 ID 被称为 Group ID。组内的所有消费者协调在一
阅读全文
摘要:一般高并发的业务都是某个时间段的请求量特别大,比如本人负责的直播业务,基本上一天就两个高峰段:早上和晚上的特定时间段。其它的时间里,流量基本都比较平稳。那么面对流量高峰,我们可以采取哪些措施呢?常见的有服务器和DB提前扩容、监控告警(盯监控)、流量削峰、加缓存、网关限流、服务降级等措施,具体问题具体
阅读全文
摘要:数据聚合处理,指的是在某个请求或者脚本处理中,我们不会把这个数据立刻响应给前端或者立刻发送给下游,而是对数据先进行聚合处理一下,等到达某个阈值(时间或者量级),再响应给前端或者发送给下游。 举个实际的业务场景:直播间有一个做任务的功能,用户满足购买了多少金额我们就会给该用户发放一些奖励。此时如果有用
阅读全文
摘要:一、选择GO的原因 作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比GO快很多。现在工作中也还是有一些老项目在使用PHP,但21年之后的新项目基本上就都
阅读全文
摘要:缓存击穿、缓存穿透、缓存雪崩是使用Redis的三个经典问题,上篇文章讲了缓存击穿,今天就讲下剩下的两个问题。 一、缓存穿透 定义:缓存穿透是指查询一个根本不存在的数据,缓存层和DB层都不会命中。这样缓存永远不会生效,这些请求最终都会访问数据库。引起DB的压力瞬间变大,导致服务不可用。 问题:试想一个
阅读全文
摘要:缓存击穿,Redis中的某个热点key不存在或者过期,但是此时有大量的用户访问该key。比如xxx直播间优惠券抢购、xxx商品活动,这时候大量用户会在某个时间点一同访问该热点事件。但是可能由于某种原因,redis的这个热点key没有设置,或者过期了,那么这时候大量高并发对于该key的请求就得不到re
阅读全文
摘要:工作7年有余了,B端和C端业务都做过不少,打算整理分享一些自己在实际工作中所遇到的高并发的场景和解决方案,也是对自己本人职业生涯中的一些经验的总结和感悟。与其他博文略有不同的是,这些基本上都是自己实际工作中遇到的,并且线上的解决和处理方案,即真正的理论和实践的结合。 先交代下背景,本人目前所负责的业
阅读全文
摘要:作为一个5年的phper,这两年公司和个人都在顺应技术趋势,新项目慢慢从php转向了go语言,从2021年到现在,笔者手上也先后开发了两个go项目。在学习go语言的过程中也学习并总结了一些相关的东西,这篇文章就分享下自己踩过的一些坑吧。 1、函数的写法 问题: func main() { fmt.P
阅读全文