只用了几百行代码写的百度搜索引擎

Posted 高级Java面试题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只用了几百行代码写的百度搜索引擎相关的知识,希望对你有一定的参考价值。

前言

不知道大家有没有这样的经历,明明感觉自己这个技术掌握的还行,能写在简历里肯定是有点自信的,但是被面试官一问,就感觉啥也不是

当我从面试的大楼里出来的时候脑袋里还是昏昏沉沉的,你压根不知道我经历了什么,我就面试一个开发岗位,有必要问我这么多

后来咨询了一下我在阿里的师兄,他是这么说的:现在的就业竞争很激烈,在考察技术的时候不单单是停留在应用层面,底层的原理你也要有所了解,这样在遇到不可控问题的时候你才能游刃有余的解决掉。
跟他谈了蛮久,了解到我一些问题后,直接给了我一份他的学习笔记,让我回去用两个星期啃完,大家一起来看看吧
由于篇幅影响,只展示一下大概内容吧

Spring技术内幕深入解析Spring架构与设计原理

Spring核心实现

image

事故背景

公司最近安排了一波商品抢购活动,由于后台小哥操作失误最终导致活动效果差,被用户和代理商投诉了。经理让我带同事们一起复盘这次线上事故。

什么原因造成的?

抢购活动计划是零点准时开始,

22:00 运营人员通过后台将商品上线

23:00后台小哥已经将商品导入缓存中,提前预热

抢购开始的瞬间流量非常大,按计划是通过Redis承担大部分用户查询请求,避免请求全部落在数据库上。

缓存命中

如上图预期大部分请求会命中缓存,但是由于后台小哥预热缓存的时候将所有商品的缓存时间都设置为2小时过期,所有的商品在同一个时间点全部失效,瞬间所有的请求都落在数据库上,导致数据库扛不住压力崩溃,用户所有的请求都超时报错。

实际上所有的请求都直接落到数据库,如下图:

缓存雪崩

什么时候发现的?

凌晨01:02 SRE 收到系统告警,登录运维管理系统发现数据库节点 CPU和内存飙升超过阈值,迅速联系后台开发人员定位排查。

为什么没有早点发现?

由于缓存设置过期时间是2小时,凌晨1点前缓存可以命中大部分请求,数据库服务处于正常状态。

发现时采取了什么措施?

后台小哥通过日志定位排查发现问题后,进行了一系列操作:

首先通过API Gateway(网关)限制大部分流量进来

接着将宕机的数据库服务重启

再重新预热缓存

确认缓存和数据库服务正常后将网关流量正常放开,大约01:30 抢购活动恢复正常。

如何避免下次出现?

这次事故的原因其实就是出现了缓存雪崩,查询数据量巨大,请求直接落到数据库上,引起数据库压力过大宕机。

在业界解决缓存雪崩的方法其实比较成熟了,比如有:

  • 均匀过期
  • 加互斥锁
  • 缓存永不过期

(1)均匀过期

设置不同的过期时间,让缓存失效的时间点尽量均匀。通常可以为有效期增加随机值或者统一规划有效期。

缓存key过期时间均匀分布

(2)加互斥锁

跟缓存击穿解决思路一致,同一时间只让一个线程构建缓存,其他线程阻塞排队。

互斥访问

(3)缓存永不过期

跟缓存击穿解决思路一致,缓存在物理上永远不过期,用一个异步的线程更新缓存。

异步更新缓存

读者福利

由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴

关注+点赞后,点击这里获取完整面试题(含答案)!

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

更多笔记分享

[外链图片转存中…(img-WLb5RdXZ-1624696527990)]

[外链图片转存中…(img-IF0CfQyY-1624696527990)]

更多笔记分享

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

以上是关于只用了几百行代码写的百度搜索引擎的主要内容,如果未能解决你的问题,请参考以下文章

几百行代码完成百度搜索引擎,真的可以吗?

别再只用百度搜东西了,这个搜索引擎让人惊艳!

百度网盘目录搜索引擎上线了

类似于百度搜索 和新浪微博秀 那样js插件写法,那个是怎么写的

如何在自己的网站引入百度搜索引擎

希望百度搜索能尽快搜到自己写的博文方法