Timeline: 8.1投递,8.9打了个电话说明天空出个面试名额让我一次面完。基本上是面完十分钟出结果,二面算法题没做出来秒挂,只能说效率真的高。
- 日志收集器promtail原理 以守护进程方式运行在每个node上监听指定目录下的文件创建和删除对活跃的日志文件,分配打标签后推送给loki
- loki架构:Distributor分发器,Ingrester接收器,Querier查询器,读写分离分发器
- Distributor原理 根据元数据和一致性哈希算法,将日志分批并行发送到多个ingrester接收器上接收器
- Ingrester原理 Ingrester是一个有状态的组件,负责构建和刷新chunk,当chunk达到一定的数量或时间后刷新到存储中去。loki以chunk的方式压缩并存储日志,并使用对应的Index索引将chunk存储在数据库中
- Querier原理:可以从数据库中查看index索引,确定哪些chunk块匹配,也可以直接从ingrester中获取chunk
在mysql中,索引是使用B+树实现的。B+树是一种多路平衡树,它只在叶子节点存放数据,在非叶子节点存放索引,因此它的搜索效率是比较稳定的,相对来说也可以更加矮胖,减少I/O次数。B+树的叶子节点中存在双向链表,有利于范围查询。此外,B+树中的非叶子节点中存在着许多冗余节点,这能让B+树在插入删除时保证结构稳定,效率更高
- 聚簇索引也就是主键索引,它的叶子节点存放数据,通过索引能够直接获得所有的数据。非聚簇索引也就是二级索引,它的叶子结点上存放着主键索引,需要通过回表根据主键索引再次查询才能获得数据。
- 索引的优点是,它可以加快数据的查询速度,其缺点是创建和维护索引需要耗费时间,保存索引也需要耗费空间,且使用索引时,需要根据一定的规则去建立使用,否则查询没有走索引的时候,会造成查询速度减慢。
- 在建立索引的时候,一般最好在频繁使用where,order by,group by查询的列上建立索引,且这些列上不能用NULL值,也最好不要在频繁变动的字段上建立索引。建立索引的时候,最好建立覆盖索引,减少回表次数,对多字段的查询最好能建立联合索引,字符串类的索引最好建立前缀索引。
- 在使用索引的时候,要注意查询的时候符合最左匹配原则,比如模糊查询不要模糊最左的字段,不在索引列上进行计算、函数等操作,查询条件使用or时两个列都要用到索引。
- k8s是一个开源的容器编排平台,可以自动完成部署、管理和拓展容器化应用。使用k8s可以跨主机编排容器,更充分利用硬件资源,控制和自动化应用的部署和更新并且动态拓展应用与资源。
[1,2,3,4] [5,6,7,8] [9,10,11,12] 打印成 [1] [2,5] [3,4,9] [4,7,10] [8,11] [12]