Netty学习笔记(一)-概览 简介Netty是一个应用于网络编程领域的NIO网络框架,通过屏蔽底层Socket编程细节,封装了提供上层业务使用的API,简化了网络应用的开发过程。Netty需要关注以下几点: IO模型、线程模型 事件处理机制 API接口的使用 数据协议、序列化的支持 Netty的IO模型是基于非阻塞IO实现的,底层通过JDK NIO中的Selector实现,Selector可以同时轮询多个Channel,采 2022-08-06 中间件 > Netty
Linux文件管理模块分析 硬盘文件系统inode与块的存储硬盘读写时以扇区为单位,文件系统中读写数据最小单位为块,一个块(簇)内部是相邻的几个扇区,在Linux中的ext文件系统,默认大小为4K。 文件的元数据存放在inode中,ext4中定义如下: struct ext4_inode { __le16 i_mode; /* File mode */ __le16 i_uid; /* Low 16 bit 2022-07-23 Linux
Linux内存管理模块分析 概述内存管理主要分为三个方面: 管理物理内存:只有内核中负责内存管理的模块可以使用 管理虚拟内存:每个进程看到的都是独立且互不干扰的虚拟空间 物理内存和虚拟内存的转换:上述两者的映射关系 无论是内核态程序还是用户态程序,都使用虚拟内存,虚拟内存空间布局如下: 内核空间部分:存放内核进程的程序 用户空间部分:存放用户进程的程序,从最低位开始,逐个段如下: Text Segment:存放二进制 2022-07-17 Linux
Linux进程管理模块分析 二进制程序执行编译过程源代码文件会经过以下的步骤生成可执行文件(CSAPP): 预处理:预处理过程会将头文件嵌入代码中,定义宏展开,生成.i文件 编译:编译生成汇编语言程序,生成.s文件 汇编:汇编器as将汇编语言翻译成机器指令,打包成.o文件,这被称为Relocatable File 链接:链接器ld将链接库和重定位文件合并,生成可执行文件 编译process.c内容如下: #include 2022-07-14 Linux
短网址系统设计总结 需求评估 输入数据:一个长网址、过期时间和一个自定义的别名 输出数据:自定义别名或者随机生成的短网址,过期时间之前访问都会被重定向到原始地址。 读多写少 实现原理:将短网址redirect到长网址(301/302跳转) 约束: 过期即失效 短网址唯一 支持自定义短网址 QPS要求、低延迟、可靠性、安全性 系统设计可行解 写 输入长域名,判断是否存在 生成一个未使用的短网址,并进行持 2022-07-10 系统设计 #系统设计
Kafka学习笔记(四)-集群工作机制 Controller机制Controller主要作用是在Zookeeper的帮助下管理和协调整个Kafka集群(在zk中存储集群元数据)。Kafka集群中会有一个或多个Broker,其中一个Broker会被选举为Controller,它负责管理整个集群中所有分区和副本的状态,其工作职责包括以下内容: Topic管理:完成对Kafka的Topic的创建删除、分区增加等操作。 分区重分配:新的Bro 2022-07-06 中间件 > Kafka
Kafka学习笔记(三)-通信协议 协议设计需要进行网络传输的中间件都会拥有自己的一套通信协议,这往往会成为该组件的性能瓶颈,需要考虑的优化点较多。Kafka自定义了基于TCP的二进制通信协议,Kafka2.0中,一共有43种协议类型,每个都有对应的请求和响应,与HTTP协议类似,它同样有RequestHeader和RequestBody。其中RequestHeader结构如下: api_key:API标识,例如PRODUCE、F 2022-07-03 中间件 > Kafka
分析Linux中的Zero-Copy技术 传统IO的流程零拷贝技术是对传统IO的性能优化,在介绍零拷贝之前,先简单了解一下传统IO中,数据流向的过程: 用户进程发起read()调用,从用户态切换至内核态,DMA从文件中读取数据,并存储在IO Buffer(内核态) 请求得到的数据从IO Buffer拷贝到用户态Buffer(从内核态切换到用户态),然后返回给用户进程。 用户进程调用write()将数据输出到网卡中,此时将从用户态切换到内 2022-06-30 Linux