如今主流的三种存储类型分别是:块存储、文件存储和对象存储。这三者都是分布式存储中的概念,由不同的网络存储协议实现。 注意分布式存储指的是底层的存储系统,为了满足不同的访问需求,往往一个分布式存储系统,可以同时提供文件存储、块存储和对象存储这三种形式的服务。因为要存放的数据非常多,单一服务器所能连接的物理介质是有限的,提供的 IO 性能也是有限的,所…
模块化 Raft 集群 kvServer Clerk 客户端 上层 kv 数据库 RPC 一次请求的简化流程图: 客户端请求 (Put / Get / Append) ↓ KvServer::PutAppend() / Get() ↓ KvServer → Raft::Start() 发起日志追加请求 ↓ Raft (复制日志,达成多数派一致) ↓…
概述 Raft 是一种分布式共识算法,相比于 Paxos,它最大的特性就是易于理解。为了达到这个目标,Raft 主要做了两方面的事情: 问题分解:把共识算法分为三个子问题,分别是领导者选举(leaderelection)、日志复制(log replication)和安全性(safety)。 状态简化:对算法做出一些限制,减少状态数量和可能产生的变动…
为什么需要 EPOLLONESHOT? epoll 有两种触发的方式:LT(水平触发)和ET(边缘触发)。对于前者,只要存在着事件就会不断的触发,直到处理完成;而后者只触发一次相同事件,或者说只在从非触发到触发两个状态转换的时候才触发。 想象这样一种情况,当前是多线程在处理,一个 socket 事件到来,数据开始解析。这时候这个 socket 又来…
LCR 078. 合并 K 个升序链表 既然每个链表都是升序的,那么合并后的第一个节点一定是某个链表的头节点 合并后的第二个节点,可能是某个链表的头节点,也可能是第一个节点的下一个节点 所以我们需要把所有可能是下一个节点的节点放在一个集合中,并且最小的可以自动浮起来,即最小堆 /** * Definition for singly-linked l…
CAP原理 CAP原理指的是:在一个分布式系统(互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。也就是说,在分布式系统的设计中,没有一种设计可以同时满足这3个特性。 强一致性(C)…
More content:LeetCode hot100@动态规划&多维动态规划 DP是由前一个状态推导而出,而贪心是在局部直接选择最优 DP五部曲: 确定dp数组以及下标的含义 确定递推公式(状态转移公式) dp数组如何初始化 确定遍历顺序 举例推导dp数组 01背包模板: for(int i = 0; i < weight.siz…
概述 CMake是个一个跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个函数库。 CMake 通过使用简单的配置文件CMakeLists.txt,自动生成不同平台的构建文件(如Makefile、Ninja构建文件、Visual Studio工程文件等),简化了项目的编译和构建过程。CMake…
More content:力扣题记之贪心 121. 买卖股票的最佳时机✅ 简单贪心 也可DP class Solution { public: int maxProfit(vector<int>& prices) { int res = 0; int mny = 0; for(int i = 1; i < prices.s…
面向对象 多态的底层实现 多态的实现分为静态多态和动态多态: 静态多态(编译时多态):通过函数重载(overload)、模板(templates)和运算符重载来实现,它的调用在编译时就已经确定。 动态多态(运行时多态):通过继承、函数重写(override)和虚函数,依赖虚函数表(vtable)和虚函数表指针(vptr)实现动态绑定。 那么虚函数的…