如今主流的三种存储类型分别是:块存储、文件存储和对象存储。这三者都是分布式存储中的概念,由不同的网络存储协议实现。 注意分布式存储指的是底层的存储系统,为了满足不同的访问需求,往往一个分布式存储系统,可以同时提供文件存储、块存储和对象存储这三种形式的服务。因为要存放的数据非常多,单一服务器所能连接的物理介质是有限的,提供的 IO 性能也是有限的,所…
概述 Raft 是一种分布式共识算法,相比于 Paxos,它最大的特性就是易于理解。为了达到这个目标,Raft 主要做了两方面的事情: 问题分解:把共识算法分为三个子问题,分别是领导者选举(leaderelection)、日志复制(log replication)和安全性(safety)。 状态简化:对算法做出一些限制,减少状态数量和可能产生的变动…
为什么需要 EPOLLONESHOT? epoll 有两种触发的方式:LT(水平触发)和ET(边缘触发)。对于前者,只要存在着事件就会不断的触发,直到处理完成;而后者只触发一次相同事件,或者说只在从非触发到触发两个状态转换的时候才触发。 想象这样一种情况,当前是多线程在处理,一个 socket 事件到来,数据开始解析。这时候这个 socket 又来…
CAP原理 CAP原理指的是:在一个分布式系统(互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。也就是说,在分布式系统的设计中,没有一种设计可以同时满足这3个特性。 强一致性(C)…
面向对象 多态的底层实现 多态的实现分为静态多态和动态多态: 静态多态(编译时多态):通过函数重载(overload)、模板(templates)和运算符重载来实现,它的调用在编译时就已经确定。 动态多态(运行时多态):通过继承、函数重写(override)和虚函数,依赖虚函数表(vtable)和虚函数表指针(vptr)实现动态绑定。 那么虚函数的…
进程/线程/协程 进程: 进程是操作系统进行资源分配的基本单位,每个进程都有自己独立内存空间。 由于每个进程都有独⽴的内存空间,创建和销毁进程的开销较⼤。 进程间切换需要保存和恢复整个进程的状态(栈、寄存器虚拟内存、文件句柄、打开的文件资源信息等),因此上下⽂切换的开销较高。 由于进程间相互隔离,进程之间的通信需要使⽤⼀些特殊机制,如管道、消息队列…
一次完整的 HTTPS 通信流程 HTTPS = HTTP + TLS/SSL,通信过程包括: 建立 TCP 连接(三次握手) TLS/SSL 握手 客户端和服务器协商 TLS 版本与加密算法(客户端发送第一个随机数) 服务器发送数字证书(包含公钥)(服务器发送第二个随机数) 客户端核实数字证书的真实性,若为真,则取出公钥,用公钥加密后传输数据(包…