描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787115625625
详细解读Linux后端开发,体系化介绍了后端开发人员所需的关键技能;
来自互联网大厂的资审工程师,结合工作实践写作的Linux后端开发的图书;
全面涵盖了构建RPC框架和微服务集群的技术难点,附赠源代码;
帮助读者从零开始构建高效的RPC框架和微服务集群。
本书全面介绍了Linux后端开发的相关知识和技能,涵盖了Linux系统的各种功能和工具、Linux编程的相关知识和技能,以及开发后端服务和应用程序的内容。本书分为15章,主要内容包括Linux后端开发概述,开发环境搭建,服务器运维,shell编程简介,实现简易shell,使用Git管理代码,编译、链接、运行与调试,后端服务编写,网络通信基础,I O模型与并发,公共代码提炼,应用层协议设计与实现,MyRPC框架设计与实现以及微服务集群的构建等。
本书讲解通俗易懂,实例丰富,适合C C 开发人员、Linux后端开发人员、对Linux后端开发感兴趣或者希望从事Linux后端开发的人员阅读,也适合作为高等院校计算机相关专业师生的学习用书及培训学校的教材。
目 录
第 1章 概述1
1.1 本书不会涉及的内容1
1.2 本书专注的内容1
1.3 为什么这么安排1
1.4 Linux是什么2
1.5 后端开发是什么2
1.6 您将学到什么3
1.7 代码目录结构说明3
1.7.1 目录MyRPC4
1.7.2 第三方依赖4
1.8 如何学习Linux后端开发4
1.8.1 坚持不懈的心态4
1.8.2 以问题作为切入点4
1.8.3 动手实践和创造5
1.9 本章小结5
第 2章 开发环境搭建6
2.1 本地开发环境6
2.1.1 代码编辑器6
2.1.2 终端管理器6
2.1.3 测试工具6
2.2 远端运行环境7
2.3 本章小结9
第3章 服务器运维10
3.1 什么是shell10
3.2 shell下的命令行11
3.2.1 命令行的组成11
3.2.2 大部分命令具备的共性11
3.2.3 使用man命令查询在线手册12
3.2.4 命令和文件补全13
3.2.5 命令行的通配符和特殊符号13
3.2.6 内置命令与外部命令13
3.3 基本的命令操作14
3.3.1 屏幕相关14
3.3.2 目录和文件相关14
3.3.3 进程相关21
3.3.4 网络相关22
3.3.5 系统相关22
3.3.6 用户相关24
3.3.7 命令执行相关25
3.3.8 日期相关27
3.4 man的替代工具27
3.5 命令黏合剂:管道机制28
3.5.1 如何使用管道28
3.5.2 行过滤命令grep28
3.5.3 文本分析处理工具awk29
3.5.4 流编辑命令sed30
3.5.5 参数传递命令xargs32
3.5.6 其他常用的辅助命令34
3.6 命令输入 输出的重定向35
3.7 命令的连续执行36
3.8 vi编辑器简介36
3.9 本章小结37
第4章 shell编程简介38
4.1 什么是shell编程38
4.2 “hello world”程序38
4.3 shell的执行过程38
4.4 调试39
4.5 执行方式的不同39
4.5.1 直接执行39
4.5.2 使用bash来执行40
4.5.3 使用source或英文点号“.”来执行40
4.6 变量41
4.6.1 环境变量41
4.6.2 自定义变量41
4.6.3 特殊变量42
4.6.4 在C语言中操作环境变量43
4.6.5 查看进程运行时的环境变量44
4.7 选择与判断44
4.7.1 test命令与判断符号“[]”44
4.7.2 if语句46
4.7.3 case语句47
4.8 循环48
4.8.1 while循环48
4.8.2 until循环48
4.8.3 for循环49
4.8.4 break语句和continue语句50
4.9 函数50
4.10 命令选项51
4.11 本章小结51
第5章 实现简易shell52
5.1 实现的特性52
5.2 执行逻辑52
5.3 实现原理52
5.3.1 命令行解析52
5.3.2 特性实现53
5.3.3 函数介绍53
5.4 编码实现55
5.5 特性测试64
5.6 本章小结65
第6章 使用Git管理代码66
6.1 初始化66
6.1.1 安装Git工具66
6.1.2 设置用户名和邮箱66
6.1.3 创建仓库66
6.1.4 创建readme.md文件67
6.1.5 创建.gitignore文件67
6.2 核心概念67
6.3 常用操作68
6.3.1 查看当前仓库的状态68
6.3.2 添加文件69
6.3.3 删除文件69
6.3.4 回退变更70
6.3.5 查看提交日志70
6.3.6 查看差异71
6.3.7 分支管理71
6.3.8 其他操作73
6.4 团队协作74
6.4.1 同步代码仓库74
6.4.2 创建自己的分支74
6.4.3 推送分支到远程仓库75
6.4.4 发起合入请求75
6.4.5 发布变更75
6.5 本章小结75
第7章 编译、链接、运行与调试76
7.1 单文件程序的编译与链接76
7.1.1 预处理阶段77
7.1.2 编译阶段78
7.1.3 汇编阶段79
7.1.4 链接阶段80
7.1.5 ELF概述80
7.1.6 符号解析与重定位82
7.2 工程项目的编译与链接85
7.2.1 makefile86
7.2.2 一个实例87
7.2.3 实现简易的make命令92
7.2.4 常用的编译和链接选项100
7.3 动态链接与静态链接102
7.4 Linux动态链接库规范103
7.4.1 动态链接库的命名104
7.4.2 动态链接库的三个不同名称104
7.4.3 动态链接库的管理105
7.5 自定义的动态链接库107
7.5.1 相关源代码107
7.5.2 生成携带“so name”的动态链接库108
7.5.3 生成不携带“so name”的动态链接库109
7.6 进程的内存模型110
7.6.1 进程的虚拟地址空间布局110
7.6.2 栈与堆的区别111
7.6.3 经典问题剖析111
7.7 调试程序115
7.7.1 gdb的启动115
7.7.2 gdb常用命令115
7.8 本章小结118
第8章 后端服务编写119
8.1 守护进程119
8.1.1 什么是守护进程119
8.1.2 守护进程如何编写119
8.1.3 代码实现121
8.2 设置资源限制122
8.3 信号处理123
8.4 加载配置功能124
8.5 命令行参数解析125
8.6 日志输出功能125
8.7 服务启停脚本126
8.7.1 加载系统自带的shell函数128
8.7.2 服务相关变量声明128
8.7.3 服务启动函数128
8.7.4 服务停止函数128
8.7.5 服务重启函数128
8.7.6 服务状态查看函数129
8.7.7 case语句129
8.8 本章小结129
第9章 网络通信基础130
9.1 TCP IP协议栈概述130
9.2 物理层与数据链路层132
9.2.1 物理层132
9.2.2 数据链路层132
9.3 网络层133
9.3.1 网际协议的特点133
9.3.2 IP数据报格式133
9.3.3 IP地址135
9.3.4 路由选择138
9.3.5 ARP与RARP139
9.3.6 ICMP145
9.4 传输层156
9.4.1 UDP157
9.4.2 TCP158
9.5 网络编程接口173
9.5.1 TCP网络通信的基本流程173
9.5.2 socket网络编程174
9.6 TCP经典异常场景分析181
9.6.1 场景1:Address already in use181
9.6.2 场景2:Connection refused181
9.6.3 场景3:Broken pipe182
9.6.4 场景4:Connection timeout182
9.6.5 场景5:Connection reset by peer184
9.7 本章小结184
第 10章 I O模型与并发185
10.1 I O模型概述185
10.1.1 阻塞I O185
10.1.2 非阻塞I O185
10.1.3 I O多路复用185
10.1.4 异步I O186
10.2 并发实例——EchoServer186
10.2.1 Echo协议186
10.2.2 协程190
10.2.3 benchmark工具201
10.2.4 单进程204
10.2.5 多进程205
10.2.6 多线程206
10.2.7 进程池1207
10.2.8 进程池2208
10.2.9 线程池209
10.2.10 简单的领导者-跟随者模型210
10.2.11 I O多路复用之select(单进程)-阻塞I O212
10.2.12 I O多路复用之poll(单进程)-阻塞I O214
10.2.13 I O多路复用之epoll(单进程)-阻塞I O216
10.2.14 I O多路复用之epoll(单进程)-Reactor222
10.2.15 I O多路复用之epoll(单进程)-Reactor-ET模式225
10.2.16 I O多路复用之epoll(单进程)-Reactor-协程池226
10.2.17 I O多路复用之epoll(线程池)-Reactor229
10.2.18 I O多路复用之epoll(线程池)-Reactor-HSHA230
10.2.19 I O多路复用之epoll(线程池)-Reactor-MS233
10.2.20 I O多路复用之epoll(进程池)-Reactor-协程池236
10.3 基准性能对比与分析239
10.3.1 非I O复用模型对比239
10.3.2 I O复用模型对比240
10.3.3 epoll下LT模式和ET模式对比240
10.3.4 epoll下协程池模式和非协程池模式对比241
10.3.5 HSHA模式下工作线程和I O线程写应答对比241
10.3.6 MS模式下MainReactor线程是否监听可读事件对比241
10.3.7 epoll下动态和固定超时时间对比242
10.3.8 epoll下进程池和线程池对比242
10.4 本章小结243
第 11章 公共代码提炼244
11.1 参数列表244
11.2 命令行参数解析245
11.3 字符串248
11.4 配置文件读取249
11.5 延迟执行251
11.6 单例模板252
11.7 百分位数计算252
11.8 鲁棒的I O253
11.9 时间处理254
11.10 状态码255
11.11 转换256
11.12 socket选项257
11.13 “龙套”258
11.14 日志文件260
11.15 服务锁262
11.16 本章小结263
第 12章 应用层协议设计与实现264
12.1 协议概述264
12.2 协议分类264
12.2.1 按编解码方式对协议进行分类265
12.2.2 按边界划分方式对协议进行分类265
12.3 协议评判266
12.4 自定义协议的优缺点266
12.4.1 优点266
12.4.2 缺点267
12.5 协议设计267
12.5.1 协议消息格式267
12.5.2 协议设计权衡268
12.6 预备知识268
12.6.1 大小端268
12.6.2 字节序269
12.6.3 字节序的互转270
12.6.4 内存对象与布局272
12.6.5 指针类型的本质272
12.6.6 序列化与反序列化273
12.7 其他协议274
12.7.1 HTTP消息格式275
12.7.2 RESP消息格式276
12.8 协议实现276
12.8.1 协议编解码抽象277
12.8.2 MySvr实现279
12.8.3 HTTP实现284
12.8.4 RESP实现289
12.8.5 混合协议实现293
12.8.6 共性总结295
12.9 本章小结296
第 13章 MyRPC框架设计与实现297
13.1 框架概述297
13.2 并发模型298
13.3 框架具体实现299
13.3.1 服务启动流程300
13.3.2 事件分发流程304
13.3.3 服务器端请求处理流程311
13.3.4 客户端请求处理流程321
13.3.5 分布式调用栈追踪334
13.3.6 超时管理338
13.3.7 本地协程变量管理338
13.3.8 业务层的并发339
13.4 示例服务Echo339
13.4.1 目录结构划分340
13.4.2 服务描述文件340
13.4.3 服务启动341
13.4.4 业务处理341
13.4.5 配置与辅助文件342
13.4.6 通用的服务启停脚本345
13.4.7 接口测试346
13.5 工具集合347
13.5.1 服务代码生成工具myrpcc347
13.5.2 接口测试工具myrpct362
13.5.3 接口压测工具myrpcb365
13.6 本章小结371
第 14章 微服务集群372
14.1 集群架构概述372
14.2 持久化层372
14.2.1 Redis服务373
14.2.2 authstore服务373
14.2.3 userstore服务375
14.3 业务逻辑层379
14.3.1 auth服务379
14.3.2 user服务383
14.4 接入层387
14.4.1 目录结构387
14.4.2 代码与配置388
14.4.3 接口测试389
14.5 本章小结389
第 15章 回顾总结390
15.1 6种思维模式390
15.1.1 不要被编程语言所限制390
15.1.2 掌握多种编程语言是必然的390
15.1.3 计算机本身就是一个状态机391
15.1.4 动手是最好的实践391
15.1.5 依靠工具提高效率和质量391
15.1.6 像工匠一样为自己创造工具391
15.2 写在最后391
评论
还没有评论。