架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践
  • 推荐4
  • 收藏3
  • 浏览815

架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践

王新栋 (作者) 

  • 书  号:978-7-121-36037-4
  • 出版日期:2019-03-30
  • 页  数:256
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥79.00

相关图书

Zabbix企业级分布式监控系统(第2版)

吴兆松 (作者)

本书基于稳定版本Zabbix 4.0,对Zabbix的各项功能进行了详细而深入的讲解,包括监控系统规划、安装包定制、架构高可用、性能调优、指标数据采集、自动化处...

 

Java微服务测试:基于Arquillian、Hoverfly、AssertJ、JUnit、Selenium与Mockito

Alex Soto Bueno, Jason Porter, Andy Gumbrecht (作者) 刘梦馨 (译者)

本书从实战出发,介绍微服务架构所带来的测试方面的挑战,以及如何利用新的技术来应对这些挑战。通过本书,读者可以学会如何编写微服务架构下的单元测试、组件测试、集成测...

¥89.00

DBA 手记——Oracle 数据安全的警示与原则

盖国强 (作者)

本书以数据安全为主线将众多灾难挽救过程串联在一起,不仅对各个案例的发生过程进行了详细描述,更为读者提供了具体的规避法则。其间穿插介绍了很多新鲜的技术细节和恢复方...

¥99.00

深入理解Apache Dubbo与实战

诣极 林琳 (作者)

本书首先介绍Dubbo的简史、后续的规划和整体架构大图;接着介绍Dubbo环境配置,并基于Dubbo开发第一款应用程序;然后介绍Dubbo内置的常用注册中心的实...

¥79.00

大前端入门指南

任玉刚 (作者)

本书是一本大前端入门书籍,对大前端技术栈进行了全面的讲解,内容涉及HTML/CSS、JavaScript、React Native、Flutter和微信小程序等...

¥89.00

Servlet/JSP深入详解——基于Tomcat的Web开发(畅销书升级版)

孙鑫 (作者)

本书共分3篇,分别为Servlet篇、JSP篇及其应用篇,书中展示了Java Web开发中各种技术的应用,帮助读者快速掌握Java Web开发。 在知识的讲解...

 

本书结合实际的生产实践,分别对网关、平台开放、分布式、MQ、RPC、I/O、微服务、容错的内容做了详细介绍。其中的内容不限于概念,而是会下沉到实践背后的感悟与总结。比如本书详细阐述了网关系统是如何“抗量”,又是如何容错的,以及在每次大促中的备战经验。其他内容也是如此,基于实践,源于实践,比如微服务的实战案例、MQ的各种功能场景、消息推送的实践等讲的皆是实践之道。希望读者可以通过本书了解互联网常用架构知识背后的原理及解决问题之道。
书中介绍的网关、分布式、MQ等知识背后的原理,对于每一位互联网研发人员都有很大的参考意义。

本书内容包括分布式、开放网关、消息推送、RPC、MQ、容错、微服务本身之外的思考、开放平台、互联网场景问题定位与分析等内容。描述每个知识点的各种使用或者适用场景。以及每个场景下可能遇到的问题,以及这种技术我们为什么要使用它及它背后的一些道理。本书还会讲述一些在京东内部已经良好实践的技术应用。
前言


本书的主书名叫作“架构修炼之道”,当提到“道”的时候,我们通常会想起孔子、孟子,或者想起国外一些“大神”写的技术书籍,因此使用该书名可谓十分大胆。但实际想来,“实践是检验真理的唯一标准”,本书中的“道”,就是被检验过的真理、道理,是最普通、最真实的道理。本书还有一个副标题,“亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践”,书中对于这些技术的描述都是我在工作过程中通过反复实践得到的总结和感悟。同时,工作中我们敬畏每一行代码,敬畏每一次线上生产事故,每次大促备战我们都怀着一颗敬畏之心,这些年来在京东的架构实践无疑就是一场修炼。这正是本书名字的由来。
在京东转眼已五年时光,经历过的系统有的已经发生了从千万级、十亿级到百亿级的转变,我对系统如何“抗量”有深刻的切身体会,这些知识在网关之道、I/O之道章节中都有介绍。当我们抗住亿级访问量的时候,系统的容错又是怎样实施的?比如线程池的隔离、快速失败机制的运用等容错知识在容错之道章节中有重点详解。另外本书也讲解了分布式、微服务的知识,在微服务之道一章中,并没有过多叙述微服务的概念,而是直接将工作过程中亲身经历的两个微服务案例给读者呈现出来。这是一本从实践中总结出来的书,读者阅读的时候会发现,书中介绍概念性的东西只是作为切入点,转而迅速去讲解实践的感悟,然后深入某个知识领域去做一次深度探索,比如解读I/O多路复用技术、解读Tomcat中的NIO模型、解读一次RPC调用时间都去哪儿了、详述MQ各种功能场景等,这些内容都是经过实践得出的真知。
本书共10章,第1章网关之道讲述网关的前世今生,以及一个成熟的网关应该具备的能力;第2章开放之道主要在网关的基础上围绕API展开介绍;第3章分布式之道重点介绍常见的事务、锁、限流场景下的知识;第4章MQ之道从基础一直介绍到MQ的常用功能场景;第5章消息推送之道以HTTP和TCP的方式分别介绍生产系统中消息推送的实践;第6章RPC之道着重从RPC的底层原理去思考分析;第7章I/O之道深度解析多路复用技术和Tomcat中的NIO模型;第8章微服务之道以我亲历的两个实践为案例介绍微服务是如何落地的;第9章容错之道结合前面章节的知识重点讲述系统容错的常用方法,以及我所在公司在大促备战中常用的技术;第10章程序之外,我结合自己的真实感受讲述健身锻炼跟程序之间的感悟,以及程序员的硬件装备等内容。相信本书的知识一定可以帮助到读者。
从自己开始写博客的那天起,我便喜欢上了写作,将自己总结的东西发布到技术社区网站上,随后又被网站推荐到首页,再后来又被很多公众号转载。能在互联网这个大环境里与素未谋面的朋友交流,这些经历给我带来了很大的喜悦感与成就感。但写博客终归跟写书不一样,在写博客的时候如有读者留言指正,还可以迅速修改,但写成的书一旦描述不当却是“覆水难收”,写书需要更严谨,因此对自己的要求更加严格。虽然可以用“人非圣贤,孰能无过”为自己开脱,但还是生怕出错会误导读者,古人云“尽信书不如无书”,希望读者可以带着自己的思考阅读本书。
能够完成本书,首先要感谢博文视点的晓猛,没有您就没有这本书。还要感谢京东给我提供了这么好的平台和机会,没有在京东的历练,我也就没有这么丰富的技术阅历来完成本书的写作。感谢我的领导与同事,也感谢我的团队,你们给了我很大的帮助。经常看其他作者的前言,看到最后感谢家人环节的时候总是很有感触,但真正到了自己要写出这番话的时候,才体会到了这份感谢的重量。非常感谢我的爱人,是你全身心照顾我们的儿子,才让我有了足够的业余时间来完成写作,在这期间我很少陪伴你和儿子,对此深感愧疚与歉意。最后要感谢我的父母,是你们养育了我,又辛苦劳作供我读书,点亮了我的生活。

王新栋
2019年1月于北京

目录

目录


第1章 网关之道
1.1 认识API网关
1.1.1 API网关是什么
1.1.2 API网关涵盖的基本功能
1.1.3 API网关架构示例
1.2 一个API的生命周期
1.2.1 什么是API
1.2.2 生命周期
1.2.3 生命周期的过程
1.3 API网关的基石—泛化调用
1.4 如何发布API到网关系统
1.5 管道技术
1.5.1 管道实现
1.5.2 如何获取管道
1.5.3 管道信息传递
1.5.4 管道的优点
1.5.5 责任链模式
1.6 一个传统网关系统有几种“死”法
1.6.1 关注CPU
1.6.2 关注磁盘
1.6.3 关注网络
1.7 Servlet 3异步原理与实践
1.7.1 什么是Servlet
1.7.2 什么是Servlet规范
1.7.3 同步、异步、阻塞、非阻塞
1.7.4 Servlet 3的异步流程
1.7.5 Servlet 3的异步使用步骤
1.7.6 Servlet 3的异步使用示例
1.7.7 Tomcat NIO Connector、Servlet 3.0 Async和Spring MVC Async的关系
1.7.8 Servlet 3非阻塞I/O
1.8 全异步网关
1.9 脱库与多级缓存
1.9.1 脱库
1.9.2 多级缓存
1.10 热更新
1.11 网关系统的七种武器
1.12 本章小结
第2章 开放之道
2.1 认识OAuth 2.0
2.1.1 什么是OAuth 2.0
2.1.2 角色
2.1.3 OAuth 2.0协议流程
2.1.4 采用OAuth 2.0协议的开放平台
2.1.5 京东宙斯开放(授权码方式场景)
2.2 开放平台
2.2.1 一名开发者的基本需求
2.2.2 完整性
2.2.3 稳定性
2.2.4 安全性
2.2.5 整体技术架构
2.2.6 意义
2.3 如何设计一套SPI应用架构
2.3.1 API和SPI区别
2.3.2 术语约定
2.3.3 业务场景
2.3.4 架构实现
2.3.5 测试
2.3.6 SPI是一种思想
2.4 讲一讲越权
2.4.1 什么是越权访问
2.4.2 越权访问的种类
2.4.3 发生越权访问的根本原因
2.4.4 如何避免与解决
2.4.5 开放平台环境下的越权访问
2.5 从Facebook数据泄漏谈开放安全
2.5.1 OAuth 2.0授权
2.5.2 数据加/解密
2.5.3 IP地址白名单
2.5.4 平台内环境
2.6 API治理
2.6.1 性能
2.6.2 可用率
2.6.3 文档可读性
2.7 API经济
2.7.1 API盈利模式
2.7.2 API市场
2.7.3 API经济价值链
2.8 沙箱环境
2.8.1 协同
2.8.2 维护
2.9 本章小结
第3章 分布式之道
3.1 认识分布式
3.2 分布式事务
3.2.1 什么是分布式事务
3.2.2 CAP和BASE理论
3.3 分布式锁
3.3.1 为什么需要分布式锁
3.3.2 分布式锁的实现方式
3.4 分布式限流
3.4.1 计数器
3.4.2 限速器
3.4.3 限流的维度
3.4.4 流量包
3.4.5 再来谈令牌桶
3.5 衡量性能的指标QPS、TPS等
3.5.1 什么是QPS
3.5.2 什么是TPS
3.5.3 什么是RT
3.5.4 什么是并发数
3.6 本章小结
第4章 MQ之道
4.1 认识JMS
4.1.1 JMS的组成
4.1.2 JMS编程模型
4.1.3 JMS消息结构
4.1.4 JMS消息模型
4.2 带着思考理解MQ下的基本概念
4.2.1 生产者—消费者(Producer-Consumer)
4.2.2 空间解耦
4.2.3 时间解耦
4.2.4 观察者模式与发布/订阅
4.3 消费幂等
4.3.1 什么是幂等操作
4.3.2 是什么引起我们关注消费幂等
4.3.3 如何处理消费幂等
4.4 详述MQ各种功能场景
4.4.1 解耦
4.4.2 削峰填谷
4.4.3 最终一致性
4.4.4 广播消费
4.4.5 使用集群消费模拟广播
4.4.6 重试之坑
4.5 数据异构的武器—MQ+canal
4.5.1 定义
4.5.2 常见应用场景
4.5.3 数据异构方向
4.5.4 数据异构的常用方法
4.5.5 binlog和MQ方式
4.6 关于MQ再问自己几个问题
4.6.1 我想自己控制开始消费如何做
4.6.2 为什么需要消息过滤
4.6.3 过期消息是怎么处理的
4.6.4 消息重试的注意点
4.6.5 为什么需要事务消息
4.6.6 消息为什么没有了顺序
4.7 本章小结
第5章 消息推送之道
5.1 认识消息推送
5.2 构建长连接推送系统之HTTP实践
5.2.1 Web网络结构及配置
5.2.2 基本配置
5.2.3 Transfer-Encoding: chunked
5.2.4 HTTP长连接系统组成结构
5.2.5 Session管理
5.2.6 心跳
5.2.7 消息接收的概念
5.2.8 消息推送的概念
5.2.9 消息追踪
5.2.10 HTTP长连接系统时序调用
5.2.11 创建会话(连接)
5.2.12 心跳逻辑
5.2.13 消息接收实例
5.2.14 消息推送实例
5.2.15 半推半拉
5.2.16 系统优化
5.2.17 测试
5.3 构建消息推送系统之Netty实践
5.3.1 启动
5.3.2 创建会话
5.3.3 心跳
5.3.4 发送消息
5.3.5 注销会话
5.3.6 黏包
5.4 一台服务器可以“跑”多少个连接
5.5 一台服务器可以“跑”多少个线程
5.6 弱网络环境
5.7 发送APNs
5.7.1 认识APNs
5.7.2 HTTP/2
5.7.3 Pushy的使用
5.8 本章小结
第6章 RPC之道
6.1 认识RPC
6.2 RPC是如何实现通信的
6.2.1 动态代理
6.2.2 反射
6.2.3 序列化
6.2.4 网络编程
6.3 一次RPC调用时间都去哪儿了
6.4 异步RPC
6.4.1 异步调用
6.4.2 异步监听
6.4.3 callback调用
6.5 本章小结
第7章 I/O之道
7.1 认识I/O
7.2 解读I/O多路复用技术
7.2.1 I/O多路复用概述
7.2.2 用户进程和内核
7.2.3 select和recvfrom
7.2.4 阻塞、非阻塞
7.2.5 适用场景
7.3 解读Tomcat中的NIO模型
7.3.1 Tomcat对I/O模型的支持
7.3.2 Tomcat中NIO的配置与使用
7.3.3 NioEndpoint组件关系图解读
7.3.4 NioEndpoint执行序列图
7.3.5 关于性能
7.4 本章小结
第8章 微服务之道
8.1 认识微服务
8.2 微服务后如何做一次系统梳理
8.2.1 系统分类与演进
8.2.2 梳理目的要搞清楚
8.2.3 如何做
8.2.4 核心功能的核心流程梳理
8.3 朝着微服务的方向去做一次数据库拆分
8.3.1 现状
8.3.2 方法
8.3.3 拆库的步骤(MySQL)
8.4 本章小结
第9章 容错之道
9.1 认识容错
9.2 降级与限流
9.3 线程池隔离
9.3.1 为什么要做线程池隔离
9.3.2 实现一个线程池隔离
9.3.3 线程池隔离的优点
9.3.4 线程池隔离的缺点
9.4 快速失败
9.5 熔断
9.5.1 熔断器介绍
9.5.2 熔断使用注意
9.6 Hystrix的使用
9.6.1 认识Hystrix
9.6.2 线程池隔离
9.6.3 信号量隔离
9.6.4 熔断
9.6.5 回退降级
9.7 大促备战都“备”什么
9.7.1 分离技术
9.7.2 缓存技术
9.7.3 SQL优化
9.7.4 快速失败
9.7.5 降级限流
9.7.6 性能压测
9.8 本章小结
第10章 程序之外
10.1 程序与健身
10.2 程序员的硬件装备
10.3 程序员应该看的四本技术书籍
10.4 程序员应该熟悉的常用定律法则
10.5 知识、数据、工具
参考文献

本书勘误

印次
  • 页码:11  •  行数:4  •  印次: 1

    现在要把 API通网关 这里的通字删除

    molingduzun123 提交于 2019/4/2 0:21:08
    陈晓猛 确认于 2019/4/2 8:14:41
  • 页码:52  •  行数:7  •  印次: 3

    接口提供方的系统开放平台本身并不能保证其稳定性
    改为:开放平台本身并不能保证接口提供方的系统的稳定性

    levinj 提交于 2019/8/21 14:19:17
    陈晓猛 确认于 2019/8/21 15:58:54

读者评论

  • 如果与相对完整的示例代码就更好理解了

    jerryxia发表于 2019/7/9 14:12:13
  • Api发布到网关,将api通过发布平台存储到网关系统, 但配图中却有注册中心,这两点是否有矛盾?或者说发布平台只是为了将外部请求如何对应到内部api ? 然后api的调用就由RPC本身的机制去完成

    benjamin.wang发表于 2019/4/20 23:20:47
    • 感谢提问。注册中心是虚线,是RPC结构里面的一个组件。发布的API是到了一个存储里面,在网关系统启动的时候加载到内存中,然后再利用泛化去调用到API接口提供方。

      superjava发表于 2019/4/22 11:42:13
  • 关于管道技术一节,一个Pipe代表一个功能,将一个Pipe包装成task,在task里面的run方法里面应该执行的是一个Pipe的调用,为何却是获取管道链执行多个Pipe的处理? 没看明白,望指教~!

    benjamin.wang发表于 2019/4/20 23:07:36
    • 网关中会配置多个管道,获取的是一个管道链(池),所以循环执行所有的管道任务。

      superjava发表于 2019/4/22 12:34:47