
架构设计
文章平均质量分 94
秦怀
这个作者很懒,什么都没留下…
展开
-
面试官说:你来设计一个短链接生成系统吧
引言相信大家在生活中,特别是最近的双十一活动期间,会收到很多短信,而那些短信都有两个特征,第一个是几乎都是垃圾短信,这个特点此处可以忽略不计,第二个特点是链接很短,比如下面这个:我们知道,短信有些是有字数限制的,直接放一个带满各种参数的链接,不合适,另外一点是,不想暴露参数。好处无非以下:太长的链接容易被限制长度短链接看着简洁,长链接看着容易懵安全,不想暴露参数可以统一链接转换,当然也可以实现统计点击次数等操作那背后的原理是什么呢?怎么实现的?让你实现这样的系统,你会怎么设计呢?【来自于原创 2021-12-04 15:34:38 · 423 阅读 · 0 评论 -
【实战问题】-- 布隆过滤器的三种实践:手写,Redission以及Guava(2)
前面我们已经讲过布隆过滤器的原理【实战问题】-- 缓存穿透之布隆过滤器(1),都理解是这么运行的,那么一般我们使用布隆过滤器,是怎么去使用呢?如果自己去实现,又是怎么实现呢?文章目录布隆过滤器手写布隆过滤器Redis实现Google GUAVA实现关于作者布隆过滤器再念一次定义:布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在 1970 年提出的,它实际上是由一个很长的二进制向量和一系列随机hash映射函数组成(说白了,就是用二进制数组存储数据的特征)。譬原创 2021-05-13 14:23:45 · 731 阅读 · 4 评论 -
【实战问题】-- 缓存穿透之布隆过滤器(1)
前面我们提到,在防止缓存穿透的情况(缓存穿透是指,缓存和数据库都没有的数据,被大量请求,比如订单号不可能为-1,但是用户请求了大量订单号为-1的数据,由于数据不存在,缓存就也不会存在该数据,所有的请求都会直接穿透到数据库。),我们可以考虑使用布隆过滤器,来过滤掉绝对不存于集合中的元素。布隆过滤器是什么呢?布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的,它实际上是由一个很长的二进制向量和一系列随机hash映射函数组成(说白了,就是用二进制数组存储原创 2021-03-27 15:05:16 · 400 阅读 · 0 评论 -
【实战问题】-- 缓存穿透,缓存击穿和缓存雪崩的区别以及解决方案
平时我们使用缓存的方案,一般是在数据库中存储一份,在缓存中同步存储一份。当请求过来的视乎,可以先从缓存中取数据,如果有数据,直接返回缓存中的结果。如果缓存中没有数据,那么去数据库中取出数据,同时更新到缓存中,返回结果。如果数据库中也没有数据,可以直接返回空。关于缓存,一般会有以下几个常见的问题缓存穿透缓存穿透是指,缓存和数据库都没有的数据,被大量请求,比如订单号不可能为-1,但是用户请求了大量订单号为-1的数据,由于数据不存在,缓存就也不会存在该数据,所有的请求都会直接穿透到数据库。如果被恶意用户利原创 2021-03-22 16:54:51 · 336 阅读 · 0 评论 -
【实战问题】-- 聊聊礼品领取的架构设计中setnx相关的细节
前面讲解到实战问题】-- 设计礼品领取的架构设计以及多次领取现象解决?,如果出现网络延迟的情况下,多个请求阻塞,那么恶意攻击就可以全部请求领取接口成功,而针对这种做法,我们使用setnx来解决,确保只有一个请求可以进入接口请求。 public String receiveGitf(int activityId,int giftId,String uid){ // isExist判断活动是否存在,内部包括redis和数据库请求,省略 if(isActivityExis原创 2021-03-19 09:20:36 · 358 阅读 · 0 评论 -
【实战问题】-- 高并发架构设计以及超领现象解决?
现在 有一个场景,领取礼品,每个用户有次数限制,用户通过前端点击,调用了应用A的接口,里面调用了服务B,服务B里面去调用了服务C,注意服务C是其他部门的服务。服务C负责真正的发放礼品。(假设这个服务C我们是不可修改的,A,B是自己团队负责的,并且可能出现高并发的情况)我们应该如何做这个次数限制呢?假设每次领取礼品的活动有一个activityId,一个用户一个活动可以领取一件礼品,礼品有giftId,不可以多领,每个用户对应一个uid。查询是否可以领取首先对于前端而言,进入系统,首先需要获取用户是否原创 2021-03-18 13:46:01 · 475 阅读 · 1 评论