1.关于高可用,容错的方案
这个我是从邓明老师讲解的,在第三方服务有问题时,中转的后端业务怎么去处理学到的。
三个分别是,当有可以替换的第三方业务时,如果第三方服务不可用就替换后端调用的第三方服务,第二个是如果错误,需要重试就在后端去做重试,而不是要求客户端重试 这个对客户端是透明的,第三个就是如果要做限流可以在客户端去做限流,不打到后端。
我之前看到一个面经,问如何设计一个支持多个模型的 Agent 系统,考虑的几个点,其中一个就是要使用适配器模式用相同的调用方式去适配不同的模型 API 的调用,这里适配器模式就是刚才说的那种微服务的切换第三方的思路差不多。
2.分库分表相关的问题
分库分表相关的知识包括什么场景下要使用分库分表,什么情况下可以使用分区表或者使用读写分离,如果是写瓶颈需要分库分表。
分库分表下要考虑分布式情况下主键的唯一性,可以使用的算法包括雪花算法,雪花算法可以自己调整段长。
分库分表要考虑跨页查询怎么解决,包括禁止跨页查询,使用全局的查询找 m+n 个,使用局部近似和二次查询。
分库分表要考虑扩容,扩容的容量要考虑预想好三到五年的量。
3.数据库相关知识
首先是和事务相关的内容,数据库的锁,innodb 的锁是通过在索引上加锁实现的,如果没有走索引就会出现变成表锁。
MVCC 是多版本并发控制,是和 undolog 结合起来使用的,MVCC 解决的是读写锁降低读写性能的问题 使用 MVCC,是根据 ReadView 判断是否可见 然后获取 undolog 中的数据。
Redolog 是持久化使用,因为我们的数据在 bufferpool 可能没有刷盘,Redolog 也可能不刷盘,但是因为是顺序写日志,代价更小性能更高。