从邓明学习的后端笔记

1.Elasticsearch 和 MongoDB 的概念

这两个我都没有接触过,而且因为自己没有接触过也不会写在简历上,所以被问到的主要和数据库,缓存相关的就是 MySQL 和 Redis,最多是被问到是否了解消息队列。

它们都是 NoSQL 的数据库,Elasticsearch 的直译是弹性的搜索,它支持动态的扩容缩容,使用倒排索引,支持由关键词到文档的快速搜索,MongoDB 是文档型数据库,它的结构和 MySQL 的区别是 MySQL 每个数据记录格式固定,MongoDB 没有这个要求。

2.关于高性能高并发和高可用

在这里面对于高性能和高可用的支持是更多的,因为高并发可能相对更困难,成本更高,高性能的支持比如不要使用跨页查询,由业务维护之前搜索的位置,使用索引的方式比如 MongoDB 查询的没有索引使用索引,高可用比如分区存储多份且同一个的不同副本在不同的机器。

高可用的一种方法是使用 singleflight,这个在减少锁竞争,减少数据库的压力的时候都可以用。

3.关于 kafka 要解决的问题以及方法

kafka 是非常经典的消息队列,它的作用包括异步处理,削峰填谷和解耦。在具体使用场景比如秒杀场景就可以把判断是否有库存和扣减和创建订单分开异步处理。

第一个解决的问题消息可靠性?

可靠性包括三部分第一个生产者发送的没有正常被接收,可以通过 ack 和回表查询解决,第二个是 bRokeR 宕机还没持久化消息丢失,解决方法可以设置持久化频率,第三个是消费者异步处理的时候没有处理完成就标记已经消费,解决方法可以是处理完再移动偏移量。

第二个解决的问题是消息重复的问题?

这个主要是避免业务做多次操作,比如多次扣减钱,多次扣减库存,可以通过数据库的唯一键唯一索引实现,问题是插入索引和业务是两个操作可能出现部分成功的问题,所以要保证同时完成或者同时失败才可以。

如果消费者支持本地事务,就使用本地事务,先插入唯一索引再进行业务操作,如果不支持就使用分布式事务,可以使用两阶段提交的思路,如果第二个措施失败就补偿。

第三个解决的问题是消息积压的问题?

这里要考虑比如是短期还是长期,短期可能就不用处理自然就慢慢处理完,如果是长期,首先考虑我们的并发量需要的分区数目,这取决于消费者消费能力,broker 能放入的速度,其次是看能不能对消费者做业务优化加快速度、能不能使用批量操作、能不能异步处理,异步处理要避免上面说的标记成功但是没有真的处理业务成功的问题。

第四个是延迟消息的实现?

kafka 不原生支持延迟消息,可以使用一个定时任务中间件由它在时间到达后推送消息实现或者可以使用一个 topic 它的不同 partition 表示不同延迟的消息,然后由消费者在达到对应 partition 的时间段之后去把消息移动到真正的队列中去处理。

使用每个消息启动一个定时器的方法也可以但是成本不可以接受。

总结 感觉 Elasticsearch 和 MongoDB 确实没有被问到过也没有了解过 所以更多是知识层面的学习,kafka 的话从最开始知道是进程间通信的方式也渐渐掌握了一些相关知识。

相关推荐
岑梓铭31 分钟前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记
机器学习之心33 分钟前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
Rabitebla13 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件14 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
一个天蝎座 白勺 程序猿14 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
楚山之石15 小时前
【Nat Biomed Eng】Connectome 2.0 超高梯度扫描仪:500 mT/m 与 600 T/m/s 把活体人脑微观结构分辨推进到亚微米级
图像处理·学习·数据分析·mri
坤坤子吖17 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
YLCHUP21 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
LGL6030A21 小时前
Java学习历程31——初识Spring Boot
java·spring boot·学习