1.《高性能服务系统构建与实战》基于作者10余年工作经历中踩过的技术神坑,总结整理而成。覆盖面广、逻辑性强,是每一个追求卓越的互联网系统架构师案头必备的宝典。
2. 《高性能服务系统构建与实战》分享了构建高性能服务系统的设计理念和实战经验,并引导读者进行场景实战,知识点横跨系统架构领域和软件架构领域,是架构高大上而实操又接地气的不可多得的好书。
3. 《高性能服务系统构建与实战》内容全面、案例丰富、讲解细致又通俗易懂,业内专家邓柯、应恒、肖友能、刘克、张俭、赵勇联袂力荐。
影响业务系统性能的因素很多,计算机系统的各个层面都有涉及:从硬件、网络、操作系统、中间件、存储,直到自身代码质量。所有技术团队都曾为解决性能问题、提高性能峰值绞尽脑汁,从千头万绪到生不如死。《高性能服务系统构建与实战》基于作者10余年工作经历中踩过的技术神坑,总结整理而成。虽然不能将计算机系统各个层面中影响性能的因素全部介绍完,但还是希望通过讨论业务系统负载层、网络通信层解决性能问题的过程,启发读者,为读者在工作中解决性能问题提供借鉴思路。
《高性能服务系统构建与实战》适合计算机软件领域中立志在架构师职业路线上长期发展的技术人员阅读,无论读者是有一定工作经验的软件工程师、运维工程师还是在校大学生,都适合阅读《高性能服务系统构建与实战》。《高性能服务系统构建与实战》知识点横跨系统架构领域和软件架构领域,所以为了更好地阅读《高性能服务系统构建与实战》,读者至好曾经使用过Linux操作系统,也至好有Java编程语言的使用能力。
银文杰,笔名“说好不能打脸”,博客地址blog.csdn.net/yinwenjie。资深IT屌丝一枚,爱好就是敲敲代码,写写博客,研究研究创业热点。CSDN博客作家,CSDN Java EE知识库特约编辑。曾参与电信行业、物流行业多个核心系统建设,对系统顶层设计、技术线路规划、业务系统性能调整有较丰富的经验;也曾有几年头脑发热拍案创业,兼职市场销售、电话客服、公司保安以及清洁大叔。
当阅读作者的样书后,我就决定把这本书推荐给我的技术团队,不管他们使用的是Java还是PHP进行开发,是一名初级工程师还是一名资深的专家。我本身从事金融行业高性能、高可靠系统设计多年,非常惊喜的看到曾在工作中踩过的多数坑,在本书中都有由浅入深的讲解。
——质数金服 CEO 邓柯
作为一名有10多年工作经验的IT从业者,本人一直希望看到这样一本书,能够将宏观理论与微观操作进行结合,为业内人员提供一个完整复杂业务模型下搭建高性能、高可用性的整体解决方案的书籍,很高兴我今天读到了!
——车上码创始人&CEO; 应恒
互联网服务系统的构建和优化,既需要扎实的计算机科学理论基础,又需要丰富的工程实践。本书内容大部分来自作者的日常工作,覆盖面广、逻辑性强,是每一个追求卓越的互联网系统架构师案头必备的宝典。
——亦非云联合创始人&副总裁 肖友能
作为作者多年的同事、好友,当听说他要出书,且是一本汇集自身多年技术经历的实战经验型书籍时,顿觉甚好!子曾说过:“吾生也有涯,而知也无涯”。作为读者,如果可以通过此书加深自己对各种实战技术的理解,改造自己的思维方式,便可实现对“无涯”知识事半功倍地获悉。
——英博格.EBGbot创始人&CEO; 刘克
通读本书之后更有相见恨晚之意。本书理论朴实而实战丰富,对如何构建一个健壮的高性能服务系统这个复杂主题作了全面而又通俗易懂的精彩介绍,可谓一气呵成,酣畅淋漓地打通了一名码农快速成长为软件架构师的任督二脉,让码农的人生平添一份仗剑走天涯的快意。
——英博格.EBGbot CSO 张俭
当前全球已经进入了大数据和人工智能时代,而它们所依赖的基础是大规模高性能的分布式系统。本书作者从十多年的实践出发,分享了构建高性能服务系统的设计理念和实战经验,并引导读者进行场景实战,是架构高大上而实操又接地气的不可多得的好书,推荐阅读。
——清数科技创始人&《架构大数据》作者 赵勇
第一部分 前序
第1 章 那些年一起踩的坑 2
1.1 性能问题 2
1.2 可用性问题 3
1.3 异常处理问题 4
1.4 系统间依赖问题 4
1.5 系统雪崩问题 7
第2 章 业务系统分解 9
2.1 负载层技术 10
2.2 业务层技术 12
2.3 存储层技术 13
第二部分 负载层技术与设计
第3 章 Nginx 技术 16
3.1 Nginx 中的基本技术理论 16
3.1.1 一致性Hash 算法 16
3.1.2 轮询与加权轮询18
3.2 Nginx 的安装和使用 20
3.3 Nginx 的重要配置讲解 22
3.4 Nginx 的重要设置 25
3.4.1 use [ kqueue | rtsig | epoll | select | poll ] 25
3.4.2 worker_processes 和worker_connections 26
3.4.3 max client 的计算方式29
3.5 Nginx 的常用模块 30
3.5.1 gzip 压缩模块30
3.5.2 rewrite 模块 32
3.5.3 健康检查模块 34
3.5.4 图片动态缩略模块 37
第4 章 LVS 技术 41
4.1 网络协议基础知识 41
4.1.1 链路层报文 42
4.1.2 网络层IP 报文42
4.1.3 传输层TCP 报文 44
4.2 LVS 的三种工作方式 45
4.2.1 LVS-NAT 工作方式45
4.2.2 LVS-DR 工作方式47
4.2.3 LVS-TUN 工作方式49
4.2.4 LVS 调度方式 52
4.3 LVS 设置实战 53
4.3.1 LVS-NAT 方式设置53
4.3.2 LVS-DR 模式设置57
4.3.3 ipvsadm 参数汇总 60
第5 章 其他负载层技术 63
5.1 DNS 和智能DNS 63
5.2 CDN 网络 65
5.3 Keepalived 67
5.4 不得不提的Tengine 68
第6 章 负载层性能实战 69
6.1 负载层技术实战场景 69
6.1.1 负载场景一 69
6.1.2 负载场景二 70
6.1.3 负载场景三 71
6.1.4 负载场景四 72
6.2 方案一:使用Nginx 初步解决性能瓶颈问题 72
6.3 方案二:使用LVS + Keepalived + Nginx 增加吞吐量和稳定性 74
6.4 方案三:使用DNS 和CDN 网络优化整体性能 75
第三部分 系统间通信
第7 章 系统间通信:网络I/O 模型 78
7.1 模型 78
7.1.1 信息格式79
7.1.2 网络协议80
7.1.3 通信方式/框架82
7.2 网络I/O 模型:阻塞模式 82
7.2.1 通信模型概要 82
7.2.2 阻塞模式深入分析 87
7.2.3 问题的根源 91
7.3 网络I/O 模型:同步非阻塞模式——对阻塞模式的改进 93
7.3.1 首次改进97
7.3.2 再次改进99
7.3.3 依然存在问题 101
7.4 网络I/O 模型:多路复用(I/O Multiplex) 101
7.4.1 典型的多路复用I/O 实现 102
7.4.2 Java 对多路复用I/O 技术的支持 103
7.4.3 Java NIO 框架简要设计分析 112
7.4.4 Java 实例改进 114
7.4.5 多路复用I/O 的优缺点 118
7.5 网络I/O 模型:异步I/O 119
7.5.1 Java 对AIO 的支持. 120
7.5.2 Java 提供的 AIO 支持示例 122
7.5.3 还有改进可能 128
7.6 第三方组件:Netty 128
7.6.1 为什么需要Netty 129
7.6.2 Netty 快速上手 130
7.6.3 Netty 中的重要概念 135
7.7 再次审视Netty 的作用 141
7.7.1 对网络I/O 模型的封装 142
7.7.2 对数据信息格式的封装 143
7.7.3 解决了“技术层”框架中的技术问题 146
7.7.4 解决半包问题和粘包问题 148
7.8 不得不提的线程池 152
7.8.1 为什么要使用线程池 152
7.8.2 线程池基本使用 155
7.8.3 ThreadPoolExecutor 逻辑结构和工作方式 156
7.8.4 线程池的等待队列 159
7.8.5 拒绝任务 165
7.8.6 ThreadPoolExecutor 中常用属性总结 168
第8 章 RPC 与系统间调用 170
8.1 RPC 技术原理 170
8.1.1 什么是RPC 170
8.1.2 RPC 要素 171
8.1.3 更泛化的RPC 定义 173
8.1.4 典型的RPC 框架介绍 174
8.1.5 RPC 框架的性能依据 175
8.2 RPC 实践:Apache Thrift 基本使用 176
8.2.1 IDL 格式概要 177
8.2.2 简单的Apache Thrift 代码 181
8.3 RPC 实践:Apache Thrift 深入分析 185
8.3.1 Apache Thrift 与消息格式 185
8.3.2 Apache Thrift 与通信模型 190
8.3.3 Apache Thrift 与线程池 193
8.4 RPC 实践:解决异常问题 193
8.4.1 分布式业务的异常解决思路. 195
8.4.2 事务补偿的简单实现 201
8.5 SOA 和服务治理 224
8.5.1 SOA 概述 225
8.5.2 ESB 概述 227
8.5.3 常见的ESB 产品 229
8.5.4 服务治理框架 231
第9 章 系统间通信:消息队列技术 237
9.1 消息队列原理 237
9.1.1 消息 237
9.1.2 服务结构 238
9.2 消息协议 238
9.2.1 XMPP 协议 239
9.2.2 Stomp 协议 241
9.2.3 MQTT 协议 244
9.2.4 AMQP 协议 248
9.2.5 不得不提的JMS 规范 251
9.3 MQ 实践:ActiveMQ 基本概念和使用 253
9.3.1 ActiveMQ 的简易安装过程 253
9.3.2 ActiveMQ 的其他命令参数 255
9.3.3 在ActiveMQ 中传递Stomp 消息 256
9.3.4 ActiveMQ 中的Queue 和Topics 258
9.3.5 JMS 和协议间转换 260
9.3.6 持久化消息和非持久化消息. 266
9.3.7 持续订阅和非持续订阅 267
9.4 MQ 实践:ActiveMQ 性能优化 267
9.4.1 ActiveMQ 性能优化思路 267
9.4.2 ActiveMQ 中的网络配置 268
9.4.3 ActiveMQ 处理规则和优化 273
9.4.4 ActiveMQ 的持久消息存储方案 285
9.5 MQ 实践:ActiveMQ 集群方案 299
9.5.1 ActiveMQ 高性能方案 300
9.5.2 ActiveMQ 高可用方案 311
9.6 其他MQ技术:Apache Kafka 321
9.6.1 Kafka 设计概要 321
9.6.2 Kafka 集群安装:配置过程 333
9.6.3 Kafka 常用命令 336
第四部分 场景实战
第10 章 场景实战:其他储备知识 340
10.1 数据存储 340
10.1.1 块存储 341
10.1.2 共享存储/共享文件存储 343
10.1.3 对象存储系统 344
10.2 磁盘阵列系统 345
10.2.1 RAID 0 346
10.2.2 RAID 1 347
10.2.3 RAID 10 和RAID 01 348
10.2.4 RAID 5 349
10.3 NoSQL 技术 351
第11 章 场景实战:Kafka 与日志采集 355
11.1 Kafka 应用场景:场景说明 355
11.2 Kafka 应用场景一:侵入式方案 357
11.2.1 设计重点 358
11.2.2 编码过程:生产者和业务系统集成 361
11.2.3 是否使用Spring Integration-Kafka 366
11.2.4 编码过程:消费者端 367
11.3 Kafka 应用场景二:调整侵入式方案 371
11.3.1 方案一的问题所在 371
11.3.2 方案二的解决思路 371
11.3.3 方案二的主要代码示例 377
11.3.4 其他设计思考 380
11.3.5 百度站长统计工具 382
11.4 Kafka 应用场景三:非侵入式方案 383
11.4.1 Apache Flume 介绍 383
11.4.2 设计方案 384
11.4.3 配置过程概要 386
11.4.4 方案三细节说明. 388
第12 章 场景实战:图片服务 392
12.1 需求场景 392
12.2 概要设计阶段 393
12.2.1 分布式文件系统选型 394
12.2.2 缓存系统选型 395
12.2.3 路由层选型 397
12.2.4 架构设计细化 400
12.2.5 其他技术选型 401
12.3 关键技术点考量 403
12.3.1 责任链模式 403
12.3.2 Redis 中的数据结构选择 404
12.3.3 使用Spring Boot 406
12.3.4 其他技术特性 408
12.4 详细设计阶段 412
12.4.1 位图基本知识 412
12.4.2 Nginx 中的Proxy Cache 配置 418
12.4.3 责任链进行图片处理 420
12.4.4 Redis 缓存操作 423
科学的学习方法将大脑的状态分为三个区:舒适区、学习区和恐慌区。在舒适区中你可以基于自己熟悉的知识去做一些习以为常的事情,因为你已经具备了处理这些事情所需要的知识,所以做这些事情一般都会很得心应手。大脑状态处于恐慌区时给你的体验和舒适区刚好相反,由于你不具备处理这些事情的任何知识,或者说处理这些事情已经超出了你最大的知识范围,所以你会对事情的结果感到不确定,甚至沮丧、焦虑、崩溃、放弃。处于恐慌区时是不利于学习的,因为你的大脑思维不能被顺序整理,不能被归纳总结。
学习区又叫作脱离舒适区,处于这个区间的大脑,在做对应的事情时会感觉到挑战,并处于亢奋状态。让大脑进入学习区的事情都有这样的特点:你的大脑可以利用既有知识引申总结新的知识,并对自身知识树的缺失部分进行补全。所以,让大脑脱离舒适区进入非舒适区是个人能力进步的一个根本要素。例如,你可以使用Java 进行编程活动,熟练自如后再在这个基础上学习Groovy、Scala 等编程语言;再例如,你拥有了自己的编程习惯,再在此基础上融入别人的编程方法。以上两个例子都是在同一知识领域体系下的大脑状态区域平移。你也可以让你的大脑状态在不同的知识领域下进行平移,例如做开发的朋友可以去尝试做产品团队、市场团队的一些工作。我的偶像,罗辑思维的罗振宇老师对此有一个非常棒的总结:持续地做你不擅长的事。
总之,不能让自己的大脑在舒适区待得太久。在舒适区待久了的人也有一些共同表现,例如对新生事物天生持抵制态度,听不进去别人的建议,在职场“混资历”,甚至看不得别人取得任何成绩。总之如果有一天你发现自己听到类似“我都工作20 年了,什么没见过?”“像你这样的项目,我当年一个人带20 个!”这样的话,那么讲这种话的人一定是一个让自己在舒适区待得太久的人。不要混资历,不要用你的战术勤奋掩盖你的战略懒惰。
银文杰
2017 年5 月
本书主要的代码示例采用Java 写成,对于一些相对独立章节中的代码,笔者将其整理后形成示例工程。例如实战章节中的日志采集工程、图片服务工程,笔者已经上传到了CSDN的线上资源管理中,可供读者自行下载。本书一共分为四个部分,第一部分对日常开发任务中经常遇到的问题进行了总结,并将这些问题分类,分解出这些问题在整个软件架构中的位置。第二部分、第三部分和读者一起讨论软件架构中的负载层性能设计、业务层性能设计并穿插讲解了一些存储层的设计关注点,其中将详细讨论一些具体的软件/组件应用以及它们的工作原理。第四部分为实践章节,这一部分将基于已经介绍过的知识点和读者一起将它们用于工程实战,对于之前没有涉及的新知识点,也会在其中进行简要说明。
本书大量使用操作系统、Java 知识体系、软件设计中的基础知识,包括但不限于:操作系统线程原理、悲观锁/乐观锁、软件设计模式等。例如本书中至少使用的设计模式包括:命令模式、构建者模式、观察者模式、责任链模式;本书中至少涉及的Java 基础知识包括:有限/无限队列、悲观锁/乐观锁、SPI 规则、concurrent 工具包、状态机;本书还关联至少如下第三方组件:分布式文件系统、Redis、关系型数据库、Keepalived、ZooKeeper。因为篇幅所限,本书并不可能用太多的文字对这些基础知识、第三方组件进行详细介绍,甚至不会专门说明某些技术点。所以本书更适合有一定一线业务系统开发经验的软件工程师阅读,并且在工作过程中使用过Linux 系列操作系统(最好是CentOS),因为本书讲解的知识点、介绍的安装运行方法、讨论的工作原理、描述的操作过程、给出的示例代码环境全部都是基于Linux 操作系统的。如果你想从一名开发人员成长为一名软件架构师,那么本书绝对是你合适的一块“垫脚石”;本书还适合有一定系统运维工作经验的IT 工程师阅读,如果你想完成从传统的IOE系统运维到移动互联网系统领域运维的蜕变,那么本书所介绍的知识也会给你一定的启发。
由于本书内容较丰富,文字讲解部分就占用了相当的篇幅,所以为了尽可能节约篇幅,本书在列举代码段落时往往只保留了主要的代码片段,并以“……”表示代码段落中有省略的片段。另外,如果在代码片段中使用Java 标准注释规范,则将占据多余的空间,所以本书大部分使用了Java 中的单行注释方式对代码目的进行说明。类似成体系的工程示例,如日志采集案例、图片处理案例等,都在相关章节中注明了完整的工程示例下载地址,以便读者查看更详尽的实现方法。最后,本书中多数图片由笔者自行绘制(90%以上),有一部分图片来源于互联网资源,凡是后者笔者都在图片下方进行了明确的说明。
本书成书于笔者对自己博客文章的整理,其中有30%的内容为成书整理时新增。在这个过程中有很多朋友给予笔者帮助,帮助笔者校正博客文章中的错误。特此感谢以下网友(CSDN账号,排名不分先后):amadis_chen、自然的发呆、thisisgpy、ithub_33423142、shadabing、fyc198610、zkq1989、sinat_25444367、Tony_tec、周创、gongfengying、z3133464733、qq_32159081、weixin_33750642、engyong7723131、白糖、a35946729、zzpapzzp、qq_16387501、LX_871225、littlebugu 。
笔者还要感谢家人,他们都以自己的方式在笔者写作期间默默地给予支持。笔者最后还要特别感谢电子工业出版社博文视点编辑付睿老师和参与本书校对整理工作的各位编辑,没有他们的勤劳付出就不会有本书的出版发行。
我最近在学习关于提升系统吞吐量和降低延迟的技术,特别是针对高并发场景下的挑战。这本书的出现,正好填补了我在这方面知识体系中的一些空白。我个人比较喜欢那种有理论有实践,并且能够结合实际项目案例进行讲解的书籍。从这本书的介绍来看,它似乎能够满足我的这一需求。我比较好奇书中关于“服务注册与发现”和“API网关设计”的内容,这在构建分布式微服务系统时是必不可少的环节。我希望书中能够详细讲解这些组件的实现原理,以及在不同规模和复杂度下,如何进行选择和优化。我希望作者能够分享一些他们在实际项目中遇到的典型问题,以及他们是如何通过这本书中提到的技术来解决这些问题的。我期待这本书能够提供一些代码示例或者伪代码,这样更容易理解抽象的概念。
评分在我的工作领域,对服务的高性能要求几乎是常态,从后台数据处理到前台用户交互,每一个环节的延迟都可能对用户体验造成不可逆转的损害。我一直在寻找一本能够系统性地阐述高性能服务系统构建思想的图书,并且最好能提供一些落地实践的指导。《高性能服务系统构建与实战》这个书名,无疑具有强大的吸引力。我比较看重一本书的深度和广度,尤其是在“性能优化”这个课题上,需要有足够的技术深度来支撑,同时也要有足够的广度来覆盖可能遇到的各种问题。我希望书中不仅仅是介绍各种技术名词,更重要的是能够深入剖析这些技术背后的原理,以及在实际应用中应该注意的细节和权衡。例如,在“并发模型选择”这一块,我希望它能详细对比不同并发模型的优缺点,并给出在不同业务场景下的最佳实践。此外,关于“故障容错与降级策略”,这部分内容对于保证系统的稳定运行至关重要,我希望能看到一些具体的实现思路和设计原则。
评分一本我从技术书架上随手抽取的书,封面上“高性能”三个字瞬间吸引了我。我最近正好在负责一个高并发的在线交易系统,老是觉得现有的架构在高峰期有些吃力,响应速度和稳定性都有提升的空间。所以,毫不犹豫地就买下了它,希望能从中找到一些拨开迷雾的指引。打开扉页,书的排版和印刷质量都挺不错的,纸张也比较厚实,摸上去有质感。目录浏览下来,涵盖了从系统设计、网络通信、数据存储到并发控制、负载均衡等一系列与高性能服务系统息息相关的主题,这让我对接下来的阅读充满了期待。特别是其中关于“服务拆分与微服务架构”和“消息队列在异步处理中的应用”这两章,我觉得可能是我目前最迫切需要解决的问题。我希望这本书能提供一些具体的案例和实战经验,而不仅仅是理论的堆砌。毕竟,空谈误国,实战兴邦嘛。我非常期待书中能深入讲解各种设计模式在高性能场景下的应用,以及如何权衡不同技术方案的优劣。
评分我一直对如何构建稳定可靠、响应迅速的服务系统抱有浓厚的兴趣,尤其是当用户量激增,请求如潮水般涌来时,如何让系统依然能游刃有余地处理,这其中的学问着实令人着迷。这本书的标题“高性能服务系统构建与实战”恰好击中了我的痒点。我通常阅读技术书籍会先关注其体系结构是否完整,是否能够提供一个清晰的知识脉络。从我粗略翻阅的章节来看,这本书似乎是从宏观的系统设计原则出发,逐步深入到具体的实现细节,比如网络协议的优化、内存管理策略,甚至到操作系统的底层调优。这一点非常合我胃口,因为很多时候,性能瓶颈往往隐藏在不易察觉的角落。我特别关注书中是否有关于“缓存策略”和“分布式一致性”的章节,这两个概念对我来说是高性能系统的关键。希望书中能提供一些贴合实际的场景分析,并且给出一些可行的解决方案,例如如何设计有效的缓存失效策略,或者在分布式环境下如何保证数据的一致性,同时又不牺牲系统的可用性和性能。
评分作为一名软件开发者,我深知构建一个稳定、高效的服务系统是多么重要。尤其是在当前快速发展的互联网时代,用户对系统性能的要求越来越高。这本书的标题《高性能服务系统构建与实战》吸引了我,因为它直接触及了开发者们普遍关心的问题。我通常在阅读技术书籍时,会着重关注其章节安排是否逻辑清晰,能否循序渐进地引导读者掌握相关知识。从我初步的了解来看,这本书似乎包含了一些关于“数据库性能调优”和“分布式事务处理”的章节,这对我来说是非常有价值的内容。我希望书中能提供一些关于如何识别和解决数据库瓶颈的实用技巧,以及在分布式环境下如何处理复杂的事务,同时又不影响系统的整体性能。如果书中还能提供一些关于性能监控和告警的实现思路,那将是锦上添花了。
评分今天早上下的单,晚上就到了,京东的物流超快,正版书,质量好,关于架构方面的,很实用。
评分物流快服务好推荐购买值得购买,书写的没得说,绝对超值
评分可以学到作者分布式开发的经验,但是书中代码的格式没有缩进,看着比较累。
评分商品很不错,买来很满意,京东购物一直在用
评分不错,值得推荐
评分还可以,面比较广
评分不错不错,内容不错,值得一看
评分还可以,知识点介绍挺全的,部分有代码示例,适合入门级人员
评分好好好
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有