零声学院 第九代Linux C/C++后台架构开发成长体系课程 知识点大纲 v9.2 Linux后台工程师专栏 1. 算法与设计专题 排序与查找 插入排序 快速排序 希尔排序 桶排序 基数排序 归并排序 常用算法 布隆过滤器 字符串匹配 KMP算法 回溯算法 贪心算法 推荐算法 深度优先,广度优先 常用的数据结构 平衡二叉树 红黑树 B-树 KMP算法 栈/队列 布隆过滤器 常用的设计模式 单例模式 责任链模式 过滤器模式 发布订阅模式 代理模式 工厂模式 2. 后台组件编程专题 持久化 MySQL MySQL安装配置与远程连接 项目:数据操作源于SQL语句 项目:存储过程与事务处理 项目:SQL函数,运算,临时表 项目:防数据丢失 备份与恢复 项目:MySQL建库建表建索引 消息队列 ZeroMQ ZMQ编译安装与开发环境搭建 项目:publisher-subscriber模式实现 项目:request-response模式实现 项目:Router-Dealer模式实现 项目:史上最快的消息队列—性能分析 缓存 Redis Redis编译安装配置 项目:客户端全局唯一ID保存机制 项目:Redis消息队列机制 发布订阅 项目:Redis事务实战 项目:Redis安全性能,数据备份与恢复 项目:Redis分布式锁详解 反向代理 Nginx Nginx开发介绍 项目:反向代理负载均衡配置详解 项目:自定义协议upstream开发 项目:子域名映射 项目:服务器后台攻击预防 项目:nginx双虚拟主机 Restful Http Http第三方接口实现 项目:异步Http请求 项目:ngrok与Restlet 项目:长连接与短链接 协调服务 ZooKeeper ZK编译安装与C API开发环境 项目:集群管理与服务注册 项目:节点创建与监控 项目:分布式锁的实现 项目:ZK伪集群部署与服务管理 NoSQL MongoDB MongDB安装与开发介绍 项目:MongoDB备份与恢复 项目:MongoDB文档操作 项目:全文检索与正则表达式 项目:MongoDB建库建集合 3. 代码工程化专题 架构工程 管理代码 4. 网络服务专题 源码实现 服务器IO核心— epoll编程实战 客户端多网络连接机制poll 文件IO管理select实战 框架实战 高性能的时间循环 libev 跨平台异步I/O libuv 跨平台的C++库 Boost.Asio 事件通知库 libevent 理论详解 阻塞型 BIO 异步IO AIO 非阻塞型IO NIO 5. 开源框架专题 TCP协议栈 基于DPDK的高性能用户态协议栈 f-stack 基于Netmap单线程协议栈 NtyTcp 精简版tcp协议栈 LWIP 数据库 Redis数据库的C客户端库 hiredis Facebook的嵌入键值的快速存储 RocksDB 用于Sqlite3的C++对象关系映射 hiberlite 国际化 Unicode 和全球化支持的C、C++ 和Java库 IBM ICU 不同字符编码之间的编码转换库 libiconv GNU gettext 压缩 非常紧凑的数据流压缩库 Zlib 快速压缩和解压缩 Snappy 非常快速的压缩算法 LZ4 单一的C源文件,紧缩/膨胀压缩库 Miniz 日志 设计非常模块化,并且具有扩展性 Boost.Log 灵活添加日志到文件,系统日志 Log4cpp 添加日志到你的C++应用程序 templog C++日志库,只包含单一的头文件 easyloggingpp 序列化 快速数据交换格式和RPC系统 Cap'n Proto 协议缓冲,谷歌的数据交换格式 ProtoBuf 高效的跨语言IPC/RPC Thrift 内存高效的序列化库 FlatBuffers XML库 Gnome的xml C解析器和工具包 LibXml2 简单快速的C++CML解析器 TinyXML2 简单快速的XML解析器 PugiXML C++的xml解析器 LibXml++ 脚本 小型快速脚本引擎 Lua 谷歌的快速JavaScript引擎 V8 嵌入式脚本语言 ChaiScript Json库 进行编解码和处理Jason数据的C语言库 Jansson C语言中的JSON解析和打印库 ibjson 轻量级的JSON库 libjson C/C++的Jason解析生成器 Frozen 数学库 高质量的C++线性代数库 Armadillo 数学图形模板库 GMTL 用于个高精度计算的C/C++库 GMP 安全 SSL,TLS和DTLS协议的安全通信库 GnuTLS 功能齐全的,开源加密库 Openssl 有关加密方案的免费的C++库 Cryto++ Web应用框架 高级C++模板头文件库 Eigen 安全快速开源Web服务器 Lighttpd 基于Qt库的web框架 QDjango 高性能的HTTP和反向代理web服务器 Nginx 网络库 C异步网络开发库 Dyad.c 多协议文件传输库 Curl 高速模块化的异步通信库 ZeroMQ C++面向对象网络工具包 ACE 异步事件 事件通知库 libevent 跨平台异步I/O libuv 功能齐全,高性能的时间循环 libev 网络和底层I/O编程的跨平台的C++库 Boost.Asio 协程 纯c版的协程框架 ntyco C++11实现协程库, golang风格 libgo 微信支持8亿用户同时在线的底层IO库 libco 6. 性能测试专题 调试库 Boost测试库 Boost.Test 内存调试性能分析工具 Valgrind 谷歌C++测试框架 GoogleTest 内存分配跟踪库 MemTrack 测试库 单元测试框架 minUnit 测试用例编写 libtap 轻量级的C++单元测试框架 UnitTest++ 自动化测试用例 gtest和luatest 性能工具 高性能代码构建系统 tundra Http压测工具 WRK 网站压测工具 webbench 高性能构建系统 FASTBuild 7. Linux系统专题 系统命令工具 进程间通信设施状态 ipcs Linux系统运行时长 uptime CPU平均负载和磁盘活动 iostat 监控,收集和汇报系统活动 sar 监控多处理器使用情况 mpstat 监控进程的内存使用情况 pmap 系统管理员调优和基准测量工具 nmon 密切关注Linux系统 glances 查看系统调用 strace 基础命令工具 系统进程状态 ps 虚拟内存统计工具 vmstat 控制台的流量监控工具 vnstat 进程监控工具 atop,htop 内存使用状态 free 网络参数工具 Linux网络统计监控工具 netstat 显示和修改网络接口控制器 ethtool 网络数据包分析利刃 tcpdump 远程登陆服务的标准协议 telnet 获取实时网络统计信息 iptraf 显示主机上网络接口带宽使用情况 iftop 磁盘参数工具 磁盘卸载 umount 读取、转换并输出数据 dd 文件系统系统 df 磁盘挂载 mount 日志监控工具 实时网络日志分析器 GoAccess 多窗口之下日志监控 MultiTail 日志分析系统 LogWatch/Swatch 参数监控工具 监控apache网络服务器整体性能 apachetop ftp 服务器基本信息 ftptop IO监控 iotop 电量消耗和电源管理 powertop 监控 mysql 的线程和性能 mytop 系统运行参数分析 htop/top/atop 8. 互联网云盘项目实战专题 项目需求 互联网云盘项目介绍 项目需求规格说明 架构设计和接口说明 工程代码 socket TCP服务器编程 UDP编程与广播多播 fastCGI公共网关 TCP的长连接还是短连接 MYSQL库表设计 Qt客户端 第三方登陆 微信OAuth2授权登陆 fastdfs资料显示 进程间通信方案 Redis远程操作 MySQL数据存储 内存池ringbuffer设计 功能测试 用户连接测试用例 tcp与udp数据包测试用例 用户注册测试用例 内存管理测试用例 数据库吞吐量测试用例 产品发布 自动启动之shell脚本 网络组安全与防火墙 产品上云公网发布 Linux高级互联网架构师专栏 1. 源码分析专题 Nginx源码 Nginx基础架构 HTTP架构 进程间的通信机制 Nginx高级数据结构 slab共享内存 upstream机制设计 Redis源码 Redis存储系统原理 数据模型与键值映射 内存操作与磁盘同步 主从同步,原子操作 底层IO实现解析 skynet源码 多核并发编程 消息队列,线程池 actor消息调度 网络模块实现 时间轮定时器实现 lua/c接口编程 skynet编程精要 ZeroMQ源码 消息模型 发布订阅/推拉模型 通信协议 inproc/ipc/tcp/pgm 性能分析与经典MQ对比 底层网络通信实现机制 zmq系统架构与实现原理 2. 中间件开发专题 高性能组件 如何设计内存池 高并发场景下的消息队列 协程框架的实现 手写线程池 异步请求池 连接池 高并发网络IO select,poll和epoll模型的区别 Linux系统IO模型 理解Linux 服务器高并发编程 网络接入层架构设计 你必须懂得Epoll玩法 并发性 多线程与线程安全 事务的隔离级别 公平锁&非公平锁 CopyOnWrite容器 悲观锁&乐观锁&CAS&ABA问题 事务ACID特性 Web服务 反向代理Nginx 最广泛的web服务器 Httpd 高性能 Web 平台OpenResty 定时调度 分布式定时调度 Opencron 触发器按时启动原理 Linux定时任务cron配置 消息队列 消息总线VS消息队列 Redis 消息推送 如何保证消费者接收消息的顺序 Web安全 CSRF原理及防范 高级Dos攻击-Hash碰撞攻击 脚本注入文件上传漏洞 SQL注入 XSS攻击原理与解决方案 网络协议栈 tcp/udp/ip/eth 多进程实现高并发 滑动窗口 延迟确认 定时重传 流量控制 tcp握手挥手 3. 集群专题 MySQL集群 MySQL Cluster 评估指南 读写分离 分库分表 Binlog机制分析 健全性检查与故障排除 数据模型与查询设计 Redis集群 Redis Cluster方案 节点自动发现 master/slave 选举,集群容错 ASK转向/MOVED转向机制 FastDFS集群 tracker与storage节点 文件上传/下载测试 fastdfs-nginx-module的原理 fastdfs的实现原理 K8S集群 K8S核心组件 无缝对接新应用 快速部署应用与扩展 自动部署、管理容器化 Nginx集群 Nginx的实现原理 经典应用场景 高可用方案的实现机制 LVS与Nginx集群 MongoDB集群 高可用的MongoDB集群方案 文档管理机制与实现 配置分片的表与片键 MongoDB集群环境部署 etcd分布式注册 etcd的概念与集群环境部署 etcd的特性与数据结构 原理及其内部选举机制 etcd集群实现机制 4. Linux系统专题 环境编程 系统文件操作 一切设备接文件 信号量 mmap 共享内存 系统时间 时间戳 定时器 网络IO编程 epoll机制 锁机制 互斥锁 spinlock 条件变量 原子操作 进程/线程 数据同步机制 系统运维 系统日志管理与配置 服务器环境搭建与配置 集成化工具安装 shell命令 文件操作 5. 性能与测试专题 理解性能优化 容量评估 平均QPS 高峰QPS 单机QPS CDN网络加速原理 连接池的性能优化 性能优化方法论 MySQL调优 理解MySQL底层原理 B+Tree机制 索引优化揭秘 SQL语句优化 SQL执行机制详解 测试理论 深度解析 TDD 测试驱动开发 全链路压测经验 Nginx根据IP进行灰度发布 A/B Test 真实流量测试工具 tcpcopy 单元测试minUnit Linux调优 内核代码组织架构 系统IO参数调优配置 网络协议栈参数配置 内核代码编译与内核更换 GCC调优 快速编译工程Makefile编写 编译机制 编译原理 6. 运维统计专题 Jenkins 搭建Jenkins自动化部署环境 test\pre\production 多环境发布 Jenkins集成git实现自动部署 Jenkins多环境配置,权限管理及插件使用 虚拟化 Xen虚拟化搭建与原理详解 KVM经典详解 OpenStack架构知识梳理 开源Linux容器 OpenVZ Docker Dockerfile的编译与镜像编译 Docker-Compose部署与编排 Docker命令与镜像版本提交 Docker的原理 7. 分布式架构专题 架构实战 新浪门户负载均衡方案解析 京东海量存储哈希存储引擎解密 虎牙核心视频直播架构技术揭秘 京东分布式K-V存储设计与挑战 阿里网络故障智能化治理解决方案 小艾叮咚语音核心技术语音合成实战 微信安全开放性云平台架构探秘 爱奇艺大数据平台的构建之路 架构中间件 远程调用rpc从入门到精通 多进程高效通信之共享MM全攻略 Nginx进程间通信剖析 高性能服务器为什么需要内存池 百度大规模时序指标自动异常检测实战 架构策略 订阅者发布者模式实现高并发架构 阿里云Elasticsearch架构解析与性能优化实践 两段提交与多段提交 UDP分片原理分析及其实现方法 Reactor模式和线程池实现高并发服务 架构原理 消息驱动式架构设计方法论 动态域名解析和CDN原理 Zookeeper原理 分布式锁的原理 P2P去中心化原理 应用层协议设计方法论 8. IM实时流媒体项目实战专题 项目需求 IM实时流媒体项目介绍 项目需求规格说明 架构设计和接口说明 工程代码 IM消息服务器 文件传输服务器 文件存储服务器 路由服务器 数据库代理服务器 登陆服务器 HTTP服务器 单聊与群聊 本地持久化 模块化设计 功能测试 用户连接测试用例 tcp与udp数据包测试用例 用户注册测试用例 内存管理测试用例 缓存测试用例 数据库吞吐量测试用例 产品发布 自动启动之shell脚本 持续集成与线上更新 网络组安全与防火墙 产品上云公网发布 挑战网络性能极限DPDK专栏 认识DPDK 主流包处理硬件平台 解读数据包处理能力 软件包处理的潜力 DPDK加速网络节点 DPDK加速计算节点 DPDK加速存储节点 DPDK的方法论 实践回顾理论 Skeleton L3fwd Cache和内存 存储系统 系统架构的演进 内存子系统 Cache系统 Cache地址映射和变换 Cache的写策略 Cache预取 Cache一致性 TBL和巨页 英特尔数据直接DDIO 非统一内存访问NUMA 并行计算 多核性能和可扩展性 追求性能水平扩展 多核处理器 亲和性 DPDK的多线程 指令并发与数据并行 指令并发 单指令多数据 同步互斥机制 原子操作 处理器上的原子操作 Linux内核原子操作 DPDK原子操作实现与应用 读写锁 Linux读写锁核心API DPDK读写锁实现和应用 自旋锁 自旋锁的缺点 Linux自旋锁API DPDK自旋锁实现和应用 无锁机制 Linux内核无锁环形缓冲 DPDK无锁环形缓冲 报文转发 网络处理模块划分 转发框架介绍 DPDK run to completion模型 DPDK pipeline模型 转发算法 精确匹配算法 最长前缀匹配算法 ACL算法 报文分发 PCIe与包处理I/O PCIe事务的角度 异常中断模式 轮询模式 混合中断轮询模式 PCIe上的数据传输能力 Brust收发包的优点 批处理和时延隐藏 利用Intel SIMD指令并行化包收发 网卡DMA描述符环形队列 数据包收发—CPU和I/O Mbuf和Mempool Mbuf Mempool 网卡性能优化 DPDK的轮询模式 异步中断模式 轮询模式 混合中断轮询模式 网卡I/O性能优化 Burst收发包的优点 批处理和时延隐藏 Intel SIMD指令并行转发 平台优化及其配置调优 硬件平台的性能影响 软件平台的性能影响 队列长度及各种阈值的设置 收包队列长度 发包队列长度 收包队列可释放描述符数量阈值 发包队列可释放描述符数量阈值 发包描述符释放阈值 流分类与多队列 多队列 网卡多队列的由来 Linux内核对多队列支持 DPDK与多队列 队列分配 流分类 包的类型 接收方扩展 RSS Flow Director 服务质量 虚拟化流分类的方式 流过滤 流分类技术的使用 DPDK结合网卡Flow Director功能 DPDK结合网卡虚拟化及cloud Filter功能 可重构匹配表 Intel 硬件功能 网卡硬件卸载功能 DPDK软件接口 硬件与软件功能实现 计算及更新功能卸载 VLAN硬件卸载 IEEE1588硬件卸载功能 IP TCP/UDP/SCTP checksum硬件卸载功能 Tunnel硬件卸载功能 分片组包卸载 X86平台的IO虚拟化 X86平台虚拟化概述 CPU虚拟化 内存虚拟化 I/O虚拟化 I/O透传虚拟化 Intel VT-d PCI SR-IOV PCIe网卡透传下的收发包流程 I/O透传虚拟化配置 半虚拟化Virtio Virtio使用 Virtio规范和原理 设备的配置 虚拟队列的配置 设备的使用 Virtio网络设备驱动设计 Virtio网络设备Linux内核驱动设计 基于DPDK用户空间Virtio网络设备驱动设计 加速包处理的vhost优化方案 vhost的演进和原理 Qemu与Virtio-net Linux内核态vhost-net 用户态vhost 基于DPDK的用户态vhost设计 消息机制 地址转换和映射虚拟机内存 vhost特性协商 virtio-net设备管理 vhost中的Checksum和TSO功能卸载 DPDK vhost编程实例 报文收发接口 使用DPDK vhost lib 使用DPDK vhost PMD DPDK与网络功能虚拟化 网络功能虚拟化 OPNFV与DPDK NFV的部署 VNF自身特性的评估 性能分析方法论 性能优化思路 VNF的设计 VNF虚拟网络接口的选择 IVSHMEM共享内存的PCI设备 网卡轮询和混合中断轮询模式的选择 硬件加速功能的考虑 服务质量的保证 实例分析和商业案例 Virtual BRAS Brocade vRouter 5600 Open vSwitch中的DPDK性能加速 虚拟交换机 OVS DPDK加速的OVS OVS的数据通路 DPDK加速的数据通路 DPDK加速的OVS性能 基于DPDK的存储软件优化 基于以太网的存储系统 以太网存储系统的优化 SPDK介绍 基于DPDK的用户态TCP/IP栈 用户态存储驱动 SPDK中iSCSI target实现与性能 全方位分析Linux内核代码专栏 进程管理和调度 进程的优先级 进程生命周期 进程表示 进程类型 命名空间 进程ID号 进程关系 进程管理相关的系统调用 进程复制 内核线程 启动新进程 退出进程 调度器的实现 概观 数据结构 处理优先级 核心调度器 完全公平调度类 数据结构 CFS操作 队列操作 选择下一个进程 处理周期性调度器 唤醒抢占 处理新进程 实时调度类 性质 数据结构 调度器操作 调度器增强 SMP调度器 调度域和控制组 内核抢占和低延迟相关工作 内存管理 (N)UMA模型中的内存组织 概述 数据结构 页表 数据结构 页表项的创建和操作 初始化内存管理 建立数据结构 特定于体系结构的设置 启动过程期间的内存管理 物理内存管理 伙伴系统的结构 避免碎片 初始化内存域和结点数据结构 分配器API 分配页 释放页 内核中不连续页的分配 内核映射 slab分配器 备选分配器 内核中的内存管理 slab分配的原理 实现 通用缓存 进程虚拟内存 进程虚拟地址空间 进程地址空间的布局 建立布局 内存映射的原理 数据结构 树和链表 虚拟内存区域的表示 优先查找树 对区域的操作 将虚拟地址关联到区域 区域合并 插入区域 创建区域 内存映射 创建映射 删除映射 非线性映射 反向映射 数据结构 建立逆向映射 使用逆向映射 用户空间缺页异常的校正 按需分配/调页 匿名页 写时复制 获取非线性映射 设备驱动程序 访问设备 设备文件 字符设备、块设备和其他设备 使用ioctl进行设备寻址 主从设备号的表示 注册 与文件系统关联 inode中的设备文件成员 标准文件操作 用于字符设备的标准操作 用于块设备的标准操作 字符设备操作 表示字符设备 打开设备文件 读写操作 块设备操作 块设备的表示 数据结构 向系统添加磁盘和分区 打开块设备文件 请求结构 BIO 提交请求 I/O调度 ioctl的实现 资源分配 资源管理 I/O内存 I/O端口 总线系统 通用驱动程序模型 PCI总线 USB 虚拟文件系统 文件系统类型 通用文件模型 inode 链接 编程接口 将文件作为通用接口 VFS的结构 结构概观 inode 特定于进程的信息 文件操作 目录项缓存 处理VFS对象 文件系统操作 文件操作 标准函数 通用读取例程 失效机制 权限检查 proc文件系统 /proc的内容 数据结构 初始化 装载proc文件系统 管理/proc数据项 进程相关的信息 系统控制机制 简单的文件系统 顺序文件 用libfs编写文件系统 调试文件系统 伪文件系统 sysfs 数据结构 装载文件系统 文件和目录操作 向sysfs添加内容 系统调用 系统程序设计基础 追踪系统调用 支持的标准 重启系统调用 系统调用的实现 系统调用的结构 访问用户空间 追踪系统调用 中断 中断类型 硬件IRQ 处理中断 数据结构 中断电流处理 初始化和分配IRQ 处理IRQ 软中断 开启软中断处理 软中断守护进程 tasklet 创建tasklet 注册tasklet 执行tasklet 等待队列和完成量 等待队列 完成量 工作队列 页面回收和页交换 概述 可换出页 页颠簸 页交换算法 Linux内核中的页面回收和页交换 交换区的组织 检查内存使用情况 选择要换出的页 处理缺页异常 减缩内核缓存 管理交换区 数据结构 创建交换区 激活交换区 交换缓存 标识换出页 交换缓存的结构 添加新页 搜索一页 数据回写 页面回收 概述 数据结构 确定页的活动程度 收缩内存域 隔离LRU页和集中回收 收缩活动页链表 回收不活动页 交换令牌 处理交换缺页异常 换入页 读取数据 交换预读 发起内存回收 kswapd进行周期性内存回收 在严重内存不足时换出页 收缩其他缓存 数据结构 注册和删除收缩器 收缩缓存 缓存击穿 缓存雪崩 rpc微服务 tars tars的搭建与部署 微服务rpc的原理 演示actor编程思维