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


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

文章插图
大型分散式网站架构设计与实践【大型分散式网站架构设计与实践】一线工作经验总结,囊括大型分散式网站所需技术的全貌、架构设计的核心原理与典型案例、常见问题及解决方案,有细节、接地气
基本介绍书名:大型分散式网站架构设计与实践
作者:陈康贤
ISBN:9787121238857
类别:分散式、架构、网际网路、计算机、设计模式、伺服器、网站
页数: 460
定价:79.00元
出版社:电子工业出版社
出版时间:2014-9-1
内容简介《大型分散式网站架构设计与实践》主要介绍了大型分散式网站架构所涉及的一些技术细节,包括SOA架构的实现、网际网路安全架构、构建分散式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了大型分散式网站架构设计的核心原理,并通过一些架构设计的典型案例,帮助读者了解大型分散式网站设计的一些常见场景及遇到的问题 。作者结合自己在阿里巴巴及淘宝网的实际工作经历展开论述 。《大型分散式网站架构设计与实践》既可供初学者学习,帮助读者了解大型分散式网站的架构,以及解决问题的思路和方法,也可供业界同行参考,给日常工作带来启发 。作者简介陈康贤,淘宝花名龙隆,淘宝技术部资深研发工程师,长期在在淘宝分散式环境下耳濡目染,在分散式系统架构设计、高并发系统设计、系统稳定性保障等领域积累了较为丰富的实践经验 。曾在程式设计师上发表过《漫谈基于http协定的SOA架构》《浅析HTTP平台的安全稳定性架构》两篇文章,对基于HTTP协定的SOA架构有深入研究,在排查解决线上问题和故障方面有丰富的实践经验,擅于利用数据分析解决实际问题,对新技术有浓厚的兴趣 。名家推荐2008年,TB网随着访问量/数据量的巨增,以及开发人员的增长,原有的架构体系已经无法支撑,于是在那一年TB网将系统改造为了一个大型分散式的网站 。作者目前就职于阿里集团,清晰地看到了目前TB这个大型分散式网站的架构体系,这个架构体系其实是非常多方面的技术的融合,要掌握好最重要的首先是看清全貌,但这也是最难的 。本书向大家展示了一个大型分散式网站需要的技术的全貌 。——阿里巴巴集团资深技术专家 林昊(毕玄)笔者通过大量的实践来分析分散式网站设计过程中常见的难题并逐步给予解答,通过本书可以对分散式网站设计进行一个系统性学习,值得一阅!——聚划算技术部高级技术专家 刘国华(索尼)当下有规模的网站,都採用分散式的架构实现 。那幺网站如何做到分散式,以及有哪些基础的分散式系统,都是我们的架构师和开发人员想去了解的,而相关的安全问题,以及稳定性、性能、套用的线上问题定位分析等方面的问题也很重要,本书能够比较全面地给读者带来这些相关知识的一个全貌,能够让从业人员对于这些知识有一个比较全面的了解 。而康贤也是一个一直奋战在一线的技术人员,亲身经历的总结会显得更加实战和珍贵 。——TB技术部总监 曾宪杰(华黎)目录第1章 面向服务的体系架构(SOA)1本章主要介绍和解决以下问题,这些也是全书的基础:HTTP协定的工作方式与HTTP网路协定栈的结构 。如何实现基于HTTP协定和TCP协定的RPC调用,它们之间有何差别,分别适应何种场景 。如何实现服务的动态注册和路由,以及软负载均衡的实现 。1.1 基于TCP协定的RPC31.1.1 RPC名词解释31.1.2 对象的序列化41.1.3 基于TCP协定实现RPC61.2 基于HTTP协定的RPC91.2.1 HTTP协定栈91.2.2 HTTP请求与回响151.2.3 通过HttpClient传送HTTP请求161.2.4 使用HTTP协定的优势171.2.5 JSON和XML181.2.6 RESTful和RPC201.2.7 基于HTTP协定的RPC的实现221.3 服务的路由和负载均衡301.3.1 服务化的演变301.3.2 负载均衡算法331.3.3 动态配置规则391.3.4 ZooKeeper介绍与环境搭建401.3.5 ZooKeeper API使用简介431.3.6 zkClient的使用471.3.7 路由和负载均衡的实现501.4 HTTP服务网关54第2章 分散式系统基础设施58本章主要介绍和解决如下问题:分散式快取memcache的使用及分散式策略,包括Hash算法的选择 。常见的分散式系统存储解决方案,包括MySQL的分散式扩展、HBase的API及使用场景、Redis的使用等 。如何使用分散式讯息系统ActiveMQ来降低系统之间的耦合度,以及进行套用间的通信 。垂直化的搜寻引擎在分散式系统中的使用,包括搜寻引擎的基本原理、Lucene详细的使用介绍,以及基于Lucene的开源搜寻引擎工具Solr的使用 。2.1 分散式快取602.1.1 memcache简介及安装602.1.2 memcache API与分散式642.1.3 分散式session692.2 持久化存储712.2.1 MySQL扩展722.2.2 HBase802.2.3 Redis912.3 讯息系统952.3.1 ActiveMQ & JMS962.4 垂直化搜寻引擎1042.4.1 Lucene简介1052.4.2 Lucene的使用1082.4.3 Solr1192.5 其他基础设施125第3章 网际网路安全架构126本章主要介绍和解决如下问题:常见的Web攻击手段和防御方法,如XSS、CRSF、SQL注入等 。常见的一些安全算法,如数字摘要、对称加密、非对称加密、数字签名、数字证书等 。如何採用摘要认证方式防止信息篡改、通过数字签名验证通信双方的合法性,以及通过HTTPS协定保障通信过程中数据不被第三方监听和截获 。在开放平台体系下,OAuth协定如何保障ISV对数据的访问是经过授权的合法行为 。3.1 常见的Web攻击手段1283.1.1 XSS攻击1283.1.2 CRSF攻击1303.1.3 SQL注入攻击1333.1.4 档案上传漏洞1393.1.5 DDoS攻击1463.1.6 其他攻击手段1493.2 常用的安全算法1493.2.1 数字摘要1493.2.2 对称加密算法1553.2.3 非对称加密算法1583.2.4 数字签名1623.2.5 数字证书1663.3 摘要认证1853.3.1 为什幺需要认证1853.3.2 摘要认证的原理1873.3.3 摘要认证的实现1883.4 签名认证1923.4.1 签名认证的原理1923.4.2 签名认证的实现1933.5 HTTPS协定2003.5.1 HTTPS协定原理2003.5.2 SSL/TLS2013.5.3 部署HTTPS Web2083.6 OAuth协定2153.6.1 OAuth的介绍2153.6.2 OAuth授权过程216第4章 系统稳定性218本章主要介绍和解决如下问题:常用的线上日誌分析命令的使用和日誌分析脚本的编写,如cat、grep、wc、less等命令的使用,以及awk、shell脚本的编写 。如何进行集群的监控,包括监控指标的定义、心跳检测、容量评估等 。如何保障高并发系统的稳定运行,如採用流量控制、依赖管理、服务分级、开关等策略,以及介绍如何设计高并发系统 。如何最佳化套用的性能,包括前端最佳化、Java程式最佳化、资料库查询最佳化等 。如何进行Java套用故障的线上排查,包括一系列排查工具的使用,以及一些实际案例的介绍等 。4.1 线上日誌分析2204.1.1 日誌分析常用命令2204.1.2 日誌分析脚本2304.2 集群监控2394.2.1 监控指标2394.2.2 心跳检测2474.2.3 容量评估及套用水位2524.3 流量控制2554.3.1 流量控制实施2554.3.2 服务稳定性2604.3.3 高并发系统设计2654.4 性能最佳化2774.4.1 如何寻找性能瓶颈2774.4.2 性能测试工具2854.4.3 性能最佳化措施2924.5 Java套用故障的排查3144.5.1 常用的工具3144.5.2 典型案例分析331第5章 数据分析337本章主要介绍和解决如下问题:分散式系统中日誌收集系统的架构 。如何通过Storm进行实时的流式数据分析 。如何通过Hadoop进行离线数据分析,通过Hive建立数据仓库 。如何将关係型资料库中存储的数据导入HDFS,以及从HDFS中将数据导入关係型资料库 。如何将分析好的数据通过图形展示给用户 。5.1 日誌收集3395.1.1 inotify机制3395.1.2 ActiveMQ-CPP3435.1.3 架构和存储3595.1.4 Chukwa3625.2 离线数据分析3695.2.1 Hadoop项目简介3705.2.2 Hadoop环境搭建3745.2.3 MapReduce编写3845.2.4 Hive使用3895.3 流式数据分析4035.3.1 Storm的介绍4045.3.2 安装部署Storm4075.3.3 Storm的使用4185.4 数据同步4225.4.1 离线数据同步4235.4.2 实时数据同步4295.5 数据报表4315.5.1 数据报表能提供什幺4315.5.2 报表工具Highcharts432参考文献445序言在大型网站架构的演变过程中,集中式的架构设计出于对系统的可扩展性、可维护性以及成本等多方面因素的考虑,逐渐被放弃,转而採用分散式的架构设计 。分散式架构的核心思想是採用大量廉价的PC Server,构建一个低成本、高可用、高可扩展、高吞吐的集群系统,以支撑海量的用户访问和数据存储,理论上具备无限的扩展能力 。分散式系统的设计,是一门複杂的学问,它涉及到通信协定、远程调用,服务治理,系统安全、存储、搜寻、监控、稳定性保障、性能最佳化、数据分析、数据挖掘等各个领域,对任何一个领域的深入挖掘,都能够编写一本篇幅不亚于本书的专门书籍 。本书结合作者在阿里巴巴及TB网的实际工作经历,重点介绍大型分散式系统的架构设计,同时,为避免过度专注于理论而使得内容显得空洞,作者穿插介绍了很多实践的案例,儘量让每一个关键的技术点都落到实处,相信能够帮助读者更好地理解本书的内容 。内容大纲全书共5章,章与章之间几乎是相互独立的,没有必然的前后依赖关係,因此,读者可以从任何一个感兴趣的专题开始阅读,但是,每一章的各个小节之间的内容是相互关联的,因此,最好按照原文的先后顺序阅读 。第1章主要介绍企业内部SOA(Service Oriented Architecture,即面向服务的体系结构)架构的实现,包括HTTP协定的工作原理,基于TCP协定和基于HTTP协定的RPC实现,如何实现服务的路由和负载均衡,HTTP服务网关的架构 。第2章主要介绍如何保障网际网路通信的安全性,包括一些常见攻击手段的介绍;常见的安全算法,如数字摘要、对称加密、非对称加密、数字签名、数字证书的原理和使用;常用通信认证方式,包括摘要认证、签名认证,以及基于HTTPS协定的安全通信;另外还介绍了通过OAuth协定的授权过程 。第3章介绍一些分散式系统所依赖的基础设施,包括分散式快取,持久化存储 。持久化存储又涵盖了传统的关係型资料库MmySQL,以及近年来开始流行NOSQL资料库如HBase、Redis,讯息系统及垂直化搜寻引擎等 。第4章介绍如何保障系统运行的稳定性,包括线上日誌分析、集群监控、流量控制、性能最佳化,以及常用的Java套用故障排查工具和典型案例 。第5章介绍如何对海量数据进行分析,包括数据的採集、离线数据分析、流式数据分析、不同数据源间的数据同步和数据报表等 。本书并不假设读者在Java领域有很深的技术水平,但是,结合作者本人的工作经验和使用习惯,书中的大部分案例代码均採用Java来编写,并且运行在Linux环境之上,因此,读者最好对Java环境下的编程有一定的了解,并且熟悉Linux环境下的基本操作,以便能够更加顺利地阅读本书 。致谢首先,要感谢我的家人,特别是我的妻子,在我占用大量周末、休假的时间进行写作的时候,能够给予极大的宽容、支持和理解,并对我悉心照顾且承担起了全部的家务,让我能够全身心地投入到写作之中,而无须操心一些家庭琐事,没有你的支持和鼓励,这本书是无法完成的 。同时,要感谢阿里巴巴及TB网,给我提供了合适的环境和平台,使自己的技能能够得以施展,并且,身处在一群业界的技术大牛中间,也得到了很多学习和成长的机会 。,另外,还要感谢我的主管飞悦对于写作开明的态度,以及一直以来的鼓励与支持,并在日常的工作中给予我的很多帮助 。最后,还要感谢博文视点的编辑们,本书能够这幺快出版,离不开他们的敬业精神和一丝不苟的工作态度 。感悟一年多以前,在接到编辑约稿即将开始动笔之前,自己曾信心满满地认为,应该能够比较顺利地完成这本书,因为写的内容自己都比较熟悉,而且平时工作当中也有一些笔记积累,不是从零开始的 。但当真正开始写了以后才知道,理解领悟和用文字表达出来完全是两个层面的事情,日常工作中一些很普遍很常见的设计思路,可能是由一次次失败和挫折得到的经验教训演变而来 。很多时候我们只知道how,而忽略了what和why,要解释清楚what、why、how,甚至是why not,并没有想像中的那幺容易 。当然,通过写作的过程,自己也将这些知识点从头到尾梳理了一遍,对这些知识的认识和理解也更加深入和全面 。每次重新回过头来审阅书稿时,都会觉得某些知识点讲述得还不够透彻,需要进行补充,抑或是感觉对某些知识点的叙述不够清晰和有条理,还能够有更好的表述方式 。但是,书不能一直写下去,在本书完稿之时,自己并没有想像中那样的兴奋或者放鬆,写作时的那种“战战兢兢,如履薄冰”的感觉,依然萦绕在心头,每一次落笔,都担心会不会因为自己的疏忽或者理解上的偏差,从而误导读者 。由于时间的因素和写作水平的限制,书中难免会有错误和疏漏之处,恳请读者批评和指正 。陈康贤2014年5月于杭州