摘要:
GFS是Google在2003年提出的一个分布式文件存储系统,是Google三剑客之一。GFS主要适用于大文件的顺序读取以及追加写。 GFS由一个master和多个chunck server构成。master负责维护文件和块命名空间、文件到块的映射和每个块副本的位置,以及对块租约、chunck se 阅读全文
摘要:
当我们对链表等数据结构进行并发读写时,通常会通过读写锁进行保护。但是,每一次对读写锁的操作都必须直接在内存中进行,不能够使用cache,这也就导致了读写锁的效率其实是比较低的。即使是在没有写者的情况下,每一次上读锁仍然需要访问内存。更严重的是如果多个CPU同时执行到CAS指令,每一次CAS指令的执行 阅读全文
摘要:
MapReduce是Google在2004年发表的论文《MapReduce: Simplified Data Processing on Large Clusters》中提出的一个用于分布式的用于大规模数据处理的编程模型。 原理 MapReduce将数据的处理分成了两个步骤,Map和Reduce。M 阅读全文
摘要:
在Kafka中,发送的消息是字节数组,因此就需要一个方法来将消息对象序列化为字节数组,在消费者端再反序列化为对象。最常用的序列化格式就是JSON了。虽然JSON对人类非常友好,但是对于机器来说,更容易进行序列化和反序列化的格式还是二进制的格式。 Protobuf(Protocol buffers)是 阅读全文
摘要:
消息引擎(消息队列)是后端最常用的中间件,其主要功能有解耦、异步、削峰。而Kafka是Apache开发的最常用的消息引擎之一。 安装 直接到Kafka的官网下载二进制包然后解压就行了,Kafka需要Java的运行环境。首先启动Zookeeper作为Kafka的服务协调工具,之后启动Kafka就行了。 阅读全文
摘要:
最后一个实验是要实现一个IP路由表,只需要实现添加路由表项和前缀匹配两个部分,不涉及路由协议。这个实验就很简单了,就20行代码就差不多了。 实验的关键在于如何存储路由表,最简单当然也是最慢的方法就是直接保存在一个数组中,然后一个个匹配过去,时间复杂度为O(n)。 一种方法是通过哈希表来进行改进,但哈 阅读全文
摘要:
第五个实验主要的内容是ARP地址解析协议。ARP协议位于IP层的底部,用于将下一跳的IP地址转换成MAC地址传给数据链路层。在主机中一般会有一个ARP缓存表,用于缓存最近的IP和MAC地址对应信息。ARP数据包是封装在以太网帧当中发送。 ARP请求的源IP地址和源MAC地址设置为本机的IP和MAC地 阅读全文
摘要:
Lab1-4 分别是完成一个流重组器,TCP接收端,TCP发送端,TCP连接四个部分,将四个部分组合在一起就是一个完整的TCP端了。之后经过包装就可以进行TCP的接收和发送了。 代码全部在github上了。 Lab1 流重组器 这一个实验是要实现一个流重组器,传入数据的片段以及起始位置,之后对其进行 阅读全文
摘要:
CS144的实验就是要实现一个用户态TCP协议,对于提升C++的水平以及更加深入学习计算机网络还是有很大帮助的。 第一个Lab是环境配置和热身,环境按照文档里的配置就行了,前面两个小实验就是按照步骤来的,就不细讲了。 Writing webget 这一个实验是要用他封装好的socket库写一个简单的 阅读全文
摘要:
最后一个实验了,代码在Github上。 这一个实验其实挺简单的,就是要实现网卡的e1000_transmit和e1000_recv函数。不过看以前的实验好像还要实现上层socket相关的代码,今年就只有网卡驱动了。 虽然实验文档里面给了一本400多页的网卡文档,但其实也不需要怎么读这本厚厚的文档,实 阅读全文