- 博客(79)
- 收藏
- 关注
原创 【C++】I/O多路转接详解(二)
I/O处理单元管理用户连接,一般作为接入层(网关)存在逻辑单元一个逻辑单元是一个用于完成业务的进程或者线程,它分析处理用户数据并将结果传给IO处理单元,直接发给客户端。在集群模式下,一个逻辑单元就是一台逻辑服务器,一般会有多个逻辑单元来进行并行处理任务网络存储单元一般是数据库,缓存,以及文件,或者一台独立服务器。请求队列请求队列是对单元间通信方式的抽象对于服务集群,请求队列是各台服务器之间预先建立的,静态的,永久的TCP连接。
2024-02-05 20:19:12
807
原创 【IM】长连接网关设计探索(一)
DNS劫持是一种网络攻击,通过篡改DNS(Domain Name System)解析结果,将合法的域名解析到错误的IP地址上,从而将用户的请求重定向到恶意网站或者错误的服务器上。服务器认证: HTTPDNS服务器可以使用SSL证书进行身份认证,客户端在与服务器建立连接时验证证书的有效性,确保连接到的是合法的HTTPDNS服务器,防止中间人攻击。显然,在如今的互联网场景下,C10K已经不是所追求的目标,C100K,C1000K是更加现实的需求,但是,C10K问题的提出确实大大推进了服务器设计的发展进程。
2024-02-02 20:46:03
1032
原创 【C++】I/O多路转接详解(一)
在实际的应用场景之中,等待消耗的时间通常是远远高于拷贝的时间的,想要提高IO的效率,很显然,我们需要减少IO过程中等待的比例,换句话说,一个高效的IO,在整个运作周期内,等的比重是很小的,更多的是在进行拷贝。这样的表述是不准确的,原因在于epoll_event结构体作为一个输入输出参数,由用户手动创建,因此不可能优化到零拷贝,大概率是将用户数据拷贝到mmap映射区域,与内核数据关联。可以发现,fd_set是一个结构体,里面有一个 固定大小的 位图, select使用位图种对应的位来表示要监视的文件描述符。
2024-01-30 00:19:41
1001
原创 【IM】如何保证消息可用性(一)
可达有序,不重不漏。可靠性:消息一旦显示发送成功,则一定到达对端一致性:任何时刻消息保证由于发送端的发送顺序一致。
2024-01-28 01:28:05
865
原创 【C++】手把手教你实现自己的SkipList
skiplist基于链表进行升级,用于查找,与平衡搜索树和哈希表的作用是一致的,可以作为key或者k/v的查找模型(kv存储引擎redis,leveldb使用了skiplistskiplist是由William Pugh发明的,最早出现于他在1990年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》。假设每相邻的两个节点升高一层,增加一个指针,让指针指向下下个节点。
2023-12-28 00:18:23
934
原创 【分布式】分片存储服务器
除此之外,我们可以采用一个bucket对应一个engine,而不是之前的全局公用,这样不仅实现更简单,同时,数据迁移时我们直接对整个engine进行拷贝即可,不再需要扫描了。简单来说,就是对于属于一组的分片存储服务器,为避免大规模宕机,它们应该处于不同的可用区当中,但是处于同于个资源池内,因为它们的机型同构(硬件配置相同)。这里同学们理解即可,对于不是生产场景的系统,没有必要去严格划分。完成了配置路由服务器之后,我们来到了对存储服务器的重构。
2023-05-29 20:51:16
703
原创 【分布式】分布式共识算法 --- RAFT
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。要满足CAP理论,而分布式共识算法解决的就是CAP理论中的一致性问题。整个一致性问题分为三种问题:其中线性一致性要求所有线程的操作按照一个绝对的时钟顺序执行,这意味着线性一致性是限制并发的,否则这种顺序性就无法保证。由于在真实环境中很难保证绝对时钟同
2023-05-12 11:37:52
1408
1
原创 【分布式】路由配置服务
那为什么说我们的这个配置服务像zookeeper呢,这是因为除了网关与configserver通信之外,存储服务器也会和configserver进行通信。显然,为了防止单点的出现,我们使用raft来做为该服务的高可用的保障,此后我们只需要关注业务层的拓展即可。这里Dsjorney采用的是实现更简单的第一种,对于go语言,单独开一个协程去轮询访问开销并不大。因此在这里我们引入路由配置服务器,专门负责处理集群路由管理,可以理解为这是一个简单的。那么配置服务器里存储了什么呢?
2023-05-01 16:13:46
908
1
原创 【分布式】数据冗余
与多副本将数据完整复制多份进行分布式存储不同,纠删码将一份数据拆分进行分布式存储,这是如何为做到的呢?删码的英文全称是Erasure Code,所以有时我们也会简称为EC。它可以将 n 份原始数据,增加 m 份数据,并能通过 n+m 份中的任意 n 份数据,还原为原始数据。即如果有任意小于等于 m 份的数据失效,仍然能通过剩下的数据还原出来,在Hadoop3.X中已经支持了该功能当然以上计算只是一个简化的方案,目的是帮助大家理解,真正存储中用的校验方式会比这个复杂得多,但效果是类似的。
2023-05-01 15:01:42
3319
原创 【分布式】一致性哈希和哈希槽
学习完哈希槽,我们会发现,一致性哈希算法的缺点在于对于数据分布,节点位置控制并不友好。因此有人又提出了 “哈希槽”的概念,我们平时经常接触的Redis cluster就选择了哈希槽(slot)来实现流量分发。同样,Dsjourney提供的分布式系统中,也是选择了这一方案,同学们可以在体验页面进行自己的哈希槽配置:为了简化同学们的操作,我们在DsJourney中预定义定义了15个槽,槽中的数字代表了存储服务器组(分片服务器组)的组号(gid)。首先哈希槽其实是两个概念,第一个是哈希算法。
2023-04-30 21:23:44
1832
1
原创 【C++】单调队列 详解
今天我们来讲一下单调队列与栈。这两种数据结构虽然没有在c++的stl中有直接的实现,但是在做题过程中,很容易有单调队列(栈)的使用,尤其是在一些比较难的题目中。目录单调队列1.1 单调队列介绍1.2 单调队列的应用1.2.1 滑动窗口最大值1.2.1.1 题目描述1.2.1.2 结题思路方法一(优先队列)方法二 (单调队列)1.3 单调队列的模拟实现1.4 其他例题单调队列1.1 单调队列介绍单调队列 是 队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队
2022-02-11 20:13:04
8948
7
原创 【C++】二叉搜索树
今天我们来讲一种特殊的二叉树,二叉搜索树。学好二叉搜索树,有助于我们之后对map和set的理解与掌握。目录二叉搜索树概念二叉搜索树操作1. 查找2. 插入3. 删除二叉搜索树实现二叉搜索树应用二叉搜索树性能分析二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉搜索树操作对于二叉搜索树的大部分操作,我们
2022-02-04 15:25:50
966
原创 【C++】深入理解 多态
在上一篇文章,我们了解了继承,今天我们来了解一下多态。目录多态的概念多态的定义及实现1. 多态的构成条件2.虚函数3.虚函数的重写4. 虚函数重写的两个例外5.override 和 final6.重载,重写,隐藏的对比抽象类1. 概念2. 接口继承与实现继承多态的原理1. 虚函数表2. 多态的原理3.动态绑定与静态绑定多态的概念多态指 当完成某行为的时候,不同的对象去完成会产生不同的状态。举个例子:景区买票,普通人买票 为全价买票;学生买票 为半价买票;军人买票为优先买票。多态的定义及实现1
2022-01-25 21:54:43
867
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人