大型分布式网站架构设计与实践
  • 推荐0
  • 收藏2
  • 浏览483

大型分布式网站架构设计与实践

陈康贤 (作者) 

  • 书  号:978-7-121-23885-7
  • 出版日期:2014-08-29
  • 页  数:460
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:董英
本书主要介绍了大型分布式网站架构所涉及的一些技术细节,包括SOA架构的实现、互联网安全架构、构建分布式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了大型分布式网站架构设计的核心原理,并通过一些架构设计的典型案例,帮助读者了解大型分布式网站设计的一些常见场景及遇到的问题。

大型分布式网站技术全貌

2008年,淘宝网随着访问量/数据量的巨增,以及开发人员的增长,原有的架构体系已经无法支撑,于是在那一年淘宝网将系统改造为了一个大型分布式的网站。作者目前就职于阿里集团,清晰地看到了目前淘宝这个大型分布式网站的架构体系,这个架构体系其实是非常多方面的技术的融合,要掌握好最重要的首先是看清全貌,但这也是最难的。本书向大家展示了一个大型分布式网站需要的技术的全貌。
翻看各大型网站的架构演变过程,会发现其中有一个显著的共同点是在某个阶段网站的架构体系改造为服务化的体系,也就是常说的SOA,SOA系统之间以服务的方式来进行交互,这样就保证了交互的标准性,对于一个庞大的多人开发的网站而言这至关重要,所以在实现SOA时重要的第一点是实现基本的服务方式的请求/响应,除了这点外,对于访问量巨大的网站而言,主要都是采用可水平伸缩的集群方式来支撑巨大的访问量,这会涉及在服务交互时需要做负载均衡的处理,较为简单的一种方式是采用硬件负载均衡设备,这种方式一方面会增加不少成本,另一方面会导致单点的巨大风险,因此目前各大网站多数采用软件负载的方式来实现服务的交互,如何去实现SOA是大型分布式网站的必备基础技能。
基于服务化主要是为了解决网站多元化、开发人员增加及访问量增加带来的水平伸缩问题,但数据量增长会带来更多复杂的问题,大型网站都是严重依赖缓存来提升性能的,数据量增长带来的效应就是单机会无法缓存所有的数据,需要引入分布式的缓存;数据量增长对于持久型的存储而言就更为复杂,通常会需要采用分库分表、引入NoSQL等方式来解决,对于带来的模糊查询等需求就更加复杂了,而现在的大型网站多数都有很多用户产生的数据,这也就导致了随着访问量的增长,多数情况下用户产生的数据量也会暴涨,因此数据量增长带来的这些问题也是必须学会如何去解决的。
近几年以来网站的安全形势越来越严峻,这里有一个关键的原因是多数开发在安全方面了解的知识比较少,导致开发的系统在安全上会非常欠缺考虑,但其实对于一个网站而言,安全是基本,尤其是电子商务类网站,一旦出现安全问题,很容易丧失难得建立起来的信任,因此在开发一个大型网站的时候安全的意识非常重要。
网站的稳定性是衡量一个网站的重要指标,对于一个大型网站而言,网站一两个小时不可用会引起严重的公众事件,如何去保障一个庞大的网站的稳定性,涉及不少技术知识。要保障网站的稳定性,首先最重要的是监控,要清楚地知道网站目前的运行状况、有问题的点的状况等,没有监控的网站就像是一辆没有油表的车;监控主要是帮助发现问题,在出现问题后最重要的不是去找到bug并修复,而是如何有效快速地恢复,例如最典型的有效手段是优雅降级(也就是James Hamilton那篇著名的《On Designing and Deploying Internet-Scale Services》中的Gracefully Degrade);在快速恢复了后,则需要定位出造成问题的根本原因,这需要很多经验、扎实的基本功和对各类排查工具的掌握。
对于一个大型网站而言,最宝贵的部分通常是积累下来的数据,怎样用上这些数据来提升帮助业务,除了对商业玩法的掌握外,技术上的难度也非常高,大数据技术也是近几年的热门话题,离线计算、实时流式计算等,都是现在的火热话题,涉及的技术点也非常多,对于一个大型网站的技术掌控者而言,这也是需要了解的知识点。
对于一个大型网站的架构师而言,最重要的是掌控一个网站的技术发展过程,很好地去控制每个阶段需要做什么,并确保每个阶段需要的技术布局是完善的,避免有空白点,相信本书涵盖的方方面面的知识点会给读者提供有效的帮助。


林昊(http://hellojava.info)
阿里巴巴集团资深技术专家
写于阿里巴巴西溪园区
2014年8月


前  言


在大型网站架构的演变过程中,集中式的架构设计出于对系统的可扩展性、可维护性以及成本等多方面因素的考虑,逐渐被放弃,转而采用分布式的架构设计。分布式架构的核心思想是采用大量廉价的PC Server,构建一个低成本、高可用、高可扩展、高吞吐的集群系统,以支撑海量的用户访问和数据存储,理论上具备无限的扩展能力。分布式系统的设计,是一门复杂的学问,它涉及到通信协议、远程调用,服务治理,系统安全、存储、搜索、监控、稳定性保障、性能优化、数据分析、数据挖掘等各个领域,对任何一个领域的深入挖掘,都能够编写一本篇幅不亚于本书的专门书籍。本书结合作者在阿里巴巴及淘宝网的实际工作经历,重点介绍大型分布式系统的架构设计,同时,为避免过度专注于理论而使得内容显得空洞,作者穿插介绍了很多实践的案例,尽量让每一个关键的技术点都落到实处,相信能够帮助读者更好地理解本书的内容。
内容大纲
全书共5章,章与章之间几乎是相互独立的,没有必然的前后依赖关系,因此,读者可以从任何一个感兴趣的专题开始阅读,但是,每一章的各个小节之间的内容是相互关联的,因此,最好按照原文的先后顺序阅读。
第1章主要介绍企业内部SOA(Service Oriented Architecture,即面向服务的体系结构)架构的实现,包括HTTP协议的工作原理,基于TCP协议和基于HTTP协议的RPC实现,如何实现服务的路由和负载均衡,HTTP服务网关的架构。
第2章主要介绍如何保障互联网通信的安全性,包括一些常见攻击手段的介绍;常见的安全算法,如数字摘要、对称加密、非对称加密、数字签名、数字证书的原理和使用;常用通信认证方式,包括摘要认证、签名认证,以及基于HTTPS协议的安全通信;另外还介绍了通过OAuth协议的授权过程。
第3章介绍一些分布式系统所依赖的基础设施,包括分布式缓存,持久化存储。持久化存储又涵盖了传统的关系型数据库MySQL,以及近年来开始流行NOSQL数据库如HBase、Redis,消息系统及垂直化搜索引擎等。
第4章介绍如何保障系统运行的稳定性,包括在线日志分析、集群监控、流量控制、性能优化,以及常用的Java应用故障排查工具和典型案例。
第5章介绍如何对海量数据进行分析,包括数据的采集、离线数据分析、流式数据分析、不同数据源间的数据同步和数据报表等。
本书并不假设读者在Java领域有很深的技术水平,但是,结合作者本人的工作经验和使用习惯,书中的大部分案例代码均采用Java来编写,并且运行在Linux环境之上,因此,读者最好对Java环境下的编程有一定的了解,并且熟悉Linux环境下的基本操作,以便能够更加顺利地阅读本书。
致谢
首先,要感谢我的家人,特别是我的妻子,在我占用大量周末、休假的时间进行写作的时候,能够给予极大的宽容、支持和理解,并对我悉心照顾且承担起了全部的家务,让我能够全身心地投入到写作之中,而无须操心一些家庭琐事,没有你的支持和鼓励,这本书是无法完成的。
同时,要感谢阿里巴巴及淘宝网,给我提供了合适的环境和平台,使自己的技能能够得以施展,并且,身处在一群业界的技术大牛中间,也得到了很多学习和成长的机会。,另外,还要感谢我的主管飞悦对于写作开明的态度,以及一直以来的鼓励与支持,并在日常的工作中给予我的很多帮助。
最后,还要感谢博文视点的编辑们,本书能够这么快出版,离不开他们的敬业精神和一丝不苟的工作态度。
感悟
一年多以前,在接到编辑约稿即将开始动笔之前,自己曾信心满满地认为,应该能够比较顺利地完成这本书,因为写的内容自己都比较熟悉,而且平时工作当中也有一些笔记积累,不是从零开始的。但当真正开始写了以后才知道,理解领悟和用文字表达出来完全是两个层面的事情,日常工作中一些很普遍很常见的设计思路,可能是由一次次失败和挫折得到的经验教训演变而来。很多时候我们只知道how,而忽略了what和why,要解释清楚what、why、how,甚至是why not,并没有想象中的那么容易。当然,通过写作的过程,自己也将这些知识点从头到尾梳理了一遍,对这些知识的认识和理解也更加深入和全面。每次重新回过头来审阅书稿时,都会觉得某些知识点讲述得还不够透彻,需要进行补充,抑或是感觉对某些知识点的叙述不够清晰和有条理,还能够有更好的表述方式。但是,书不能一直写下去,在本书完稿之时,自己并没有想象中那样的兴奋或者放松,写作时的那种“战战兢兢,如履薄冰”的感觉,依然萦绕在心头,每一次落笔,都担心会不会因为自己的疏忽或者理解上的偏差,从而误导读者。由于时间的因素和写作水平的限制,书中难免会有错误和疏漏之处,恳请读者批评和指正。如有任何问题或者是建议,也可以通过如下方式与作者联系:

博客:chenkangxian.iteye.com
微博:http://weibo.com/u/2322720070


陈康贤
2014年5月于杭州

目录

目  录

第1章 面向服务的体系架构(SOA) 1
本章主要介绍和解决以下问题,这些也是全书的基础:
HTTP协议的工作方式与HTTP网络协议栈的结构。
如何实现基于HTTP协议和TCP协议的RPC调用,它们之间有何差别,分别适应何种场景。
如何实现服务的动态注册和路由,以及软负载均衡的实现。
1.1 基于TCP协议的RPC 3
1.1.1 RPC名词解释 3
1.1.2 对象的序列化 4
1.1.3 基于TCP协议实现RPC 6
1.2 基于HTTP协议的RPC 9
1.2.1 HTTP协议栈 9
1.2.2 HTTP请求与响应 15
1.2.3 通过HttpClient发送HTTP请求 16
1.2.4 使用HTTP协议的优势 17
1.2.5 JSON和XML 18
1.2.6 RESTful和RPC 20
1.2.7 基于HTTP协议的RPC的实现 22
1.3 服务的路由和负载均衡 30
1.3.1 服务化的演变 30
1.3.2 负载均衡算法 33
1.3.3 动态配置规则 39
1.3.4 ZooKeeper介绍与环境搭建 40
1.3.5 ZooKeeper API使用简介 43
1.3.6 zkClient的使用 47
1.3.7 路由和负载均衡的实现 50
1.4 HTTP服务网关 54
第2章 分布式系统基础设施 58
本章主要介绍和解决如下问题:
分布式缓存memcache的使用及分布式策略,包括Hash算法的选择。
常见的分布式系统存储解决方案,包括MySQL的分布式扩展、HBase的API及使用场景、Redis的使用等。
如何使用分布式消息系统ActiveMQ来降低系统之间的耦合度,以及进行应用间的通信。
垂直化的搜索引擎在分布式系统中的使用,包括搜索引擎的基本原理、Lucene详细的使用介绍,以及基于Lucene的开源搜索引擎工具Solr的使用。
2.1 分布式缓存 60
2.1.1 memcache简介及安装 60
2.1.2 memcache API与分布式 64
2.1.3 分布式session 69
2.2 持久化存储 71
2.2.1 MySQL扩展 72
2.2.2 HBase 80
2.2.3 Redis 91
2.3 消息系统 95
2.3.1 ActiveMQ & JMS 96
2.4 垂直化搜索引擎 104
2.4.1 Lucene简介 105
2.4.2 Lucene的使用 108
2.4.3 Solr 119
2.5 其他基础设施 125
第3章 互联网安全架构 126
本章主要介绍和解决如下问题:
常见的Web攻击手段和防御方法,如XSS、CRSF、SQL注入等。
常见的一些安全算法,如数字摘要、对称加密、非对称加密、数字签名、数字证书等。

如何采用摘要认证方式防止信息篡改、通过数字签名验证通信双方的合法性,以及通过HTTPS协议保障通信过程中数据不被第三方监听和截获。
在开放平台体系下,OAuth协议如何保障ISV对数据的访问是经过授权的合法行为。
3.1 常见的Web攻击手段 128
3.1.1 XSS攻击 128
3.1.2 CRSF攻击 130
3.1.3 SQL注入攻击 133
3.1.4 文件上传漏洞 139
3.1.5 DDoS攻击 146
3.1.6 其他攻击手段 149
3.2 常用的安全算法 149
3.2.1 数字摘要 149
3.2.2 对称加密算法 155
3.2.3 非对称加密算法 158
3.2.4 数字签名 162
3.2.5 数字证书 166
3.3 摘要认证 185
3.3.1 为什么需要认证 185
3.3.2 摘要认证的原理 187
3.3.3 摘要认证的实现 188
3.4 签名认证 192
3.4.1 签名认证的原理 192
3.4.2 签名认证的实现 193
3.5 HTTPS协议 200
3.5.1 HTTPS协议原理 200
3.5.2 SSL/TLS 201
3.5.3 部署HTTPS Web 208
3.6 OAuth协议 215
3.6.1 OAuth的介绍 215
3.6.2 OAuth授权过程 216
第4章 系统稳定性 218
本章主要介绍和解决如下问题:
常用的在线日志分析命令的使用和日志分析脚本的编写,如cat、grep、wc、less等命令的使用,以及awk、shell脚本的编写。
如何进行集群的监控,包括监控指标的定义、心跳检测、容量评估等。
如何保障高并发系统的稳定运行,如采用流量控制、依赖管理、服务分级、开关等策略,以及介绍如何设计高并发系统。
如何优化应用的性能,包括前端优化、Java程序优化、数据库查询优化等。
如何进行Java应用故障的在线排查,包括一系列排查工具的使用,以及一些实际案例的介绍等。
4.1 在线日志分析 220
4.1.1 日志分析常用命令 220
4.1.2 日志分析脚本 230
4.2 集群监控 239
4.2.1 监控指标 239
4.2.2 心跳检测 247
4.2.3 容量评估及应用水位 252
4.3 流量控制 255
4.3.1 流量控制实施 255
4.3.2 服务稳定性 260
4.3.3 高并发系统设计 265
4.4 性能优化 277
4.4.1 如何寻找性能瓶颈 277
4.4.2 性能测试工具 285
4.4.3 性能优化措施 292
4.5 Java应用故障的排查 314
4.5.1 常用的工具 314
4.5.2 典型案例分析 331
第5章 数据分析 337
本章主要介绍和解决如下问题:
分布式系统中日志收集系统的架构。
如何通过Storm进行实时的流式数据分析。
如何通过Hadoop进行离线数据分析,通过Hive建立数据仓库。
如何将关系型数据库中存储的数据导入HDFS,以及从HDFS中将数据导入关系型数据库。
如何将分析好的数据通过图形展示给用户。
5.1 日志收集 339
5.1.1 inotify机制 339
5.1.2 ActiveMQ-CPP 343
5.1.3 架构和存储 359
5.1.4 Chukwa 362
5.2 离线数据分析 369
5.2.1 Hadoop项目简介 370
5.2.2 Hadoop环境搭建 374
5.2.3 MapReduce编写 384
5.2.4 Hive使用 389
5.3 流式数据分析 403
5.3.1 Storm的介绍 404
5.3.2 安装部署Storm 407
5.3.3 Storm的使用 418
5.4 数据同步 422
5.4.1 离线数据同步 423
5.4.2 实时数据同步 429
5.5 数据报表 431
5.5.1 数据报表能提供什么 431
5.5.2 报表工具Highcharts 432
参考文献 445

读者评论

  • 分布式这个题材最近越来越火爆,相关的微服务,大数据的技术也是层出不穷,本书中最大的收获是了解了这个领域需要考虑那些问题和常见解决方法,而不是具体怎么解决问题。

    测试一哥发表于 2017/3/3 16:48:44
  • 这本书最大的优势应该是将大型分布式网站架构所需的全部技术都讲到了,对于架构师来说,首先就应该有这种全局意识。另外淘宝可以说是世界上最大的分布式网站,作者对这个架构体系有全面清晰的认识,并且亲自参与了其中的工作,所以书的内容很实战,也包括一些技术细节和自己的经验,实属难得。

    华少007发表于 2017/3/3 9:45:01
  • 微服务这几年很火,它的实现方式是不是也是分布式的一种或者是衍生品?

    测试一哥发表于 2017/2/20 15:13:17
    • 推荐你看看《分布式服务框架原理与实践》,它们之间的关系讲得很明白。

      董英发表于 2017/3/3 9:29:07

相关博文

  • 专访阿里陈康贤:我所理解的网站架构

    Jessica瑾妞 2017-03-17

    【编者按】CSDN在日前策划了架构主题月活动:《互联网应用架构面面观》,就架构的方法面面进行各种形式探讨交流。今天,我们就网站架构这一话题,线上专访了阿里淘宝技术部技术专家陈康贤,著有《大型分布式网站架构设计与实践》一书,请他分享他的技...

    Jessica瑾妞 2017-03-17
    428 0 0 0