在线客服
大型分布式网站架构设计与实践图书
人气:45

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

一线工作经验总结,囊括大型分布式网站所需技术的全貌、架构设计的核心原理与典型案例、常见问题及解决方案,有细节、接地气

内容简介

《大型分布式网站架构设计与实践》主要介绍了大型分布式网站架构所涉及的一些技术细节,包括SOA架构的实现、互联网安全架构、构建分布式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了大型分布式网站架构设计的核心原理,并通过一些架构设计的典型案例,帮助读者了解大型分布式网站设计的一些常见场景及遇到的问题。

作者结合自己在及网的实际工作经历展开论述。《大型分布式网站架构设计与实践》既可供初学者学习,帮助读者了解大型分布式网站的架构,以及解决问题的思路和方法,也可供业界同行参考,给日常工作带来启发。

编辑推荐

《大型分布式网站架构设计与实践》看点:

作者一直奋战在Ali baba及Tao bao网一线,书中所讲是其亲身经验的总结,显得更加实战和珍贵。

介绍大型分布式网站架构所涉及的技术细节,通过很多实践案例尽量让每一个关键的技术点都落到实处。

深入讲述大型分布式网站架构设计的核心原理,分享大型分布式网站设计的一些常见场景及遇到的问题。

推荐购买:

《技术管理之巅——如何从零打造高质效互联网技术团队》

《玩转电商系统:深入剖析智慧电商平台》

《微管理——给你一个技术团队,你该怎么管(全彩)》

《网站运维技术与实践》

《Linux运维之道》

作者简介

陈康贤,花名龙隆,技术部研发工程师,2011年加入网,参与了阿里云手机商城、口碑网迁移、店铺建站、offer、支付宝卡宝、生活商城、同学等项目,在分布式系统架构设计、高并发系统设计、系统稳定性保障等领域积累了较为丰富的实践经验。曾在程序员上发表过《漫谈基于http协议的SOA架构》《浅析HTTP平台的安全稳定性架构》两篇文章,对基于HTTP协议的SOA架构有深入研究,在排查解决线上问题和故障方面有丰富的实践经验,擅于利用数据分析解决实际问题,对新技术有浓厚的兴趣。

目录

第1章面向服务的体系架构(SOA) 1

1.1基于TCP协议的RPC 3

1.1.1RPC名词解释 3

1.1.2对象的序列化 4

1.1.3基于TCP协议实现RPC 6

1.2基于HTTP协议的RPC 9

1.2.1HTTP协议栈 9

1.2.2HTTP请求与响应 15

1.2.3通过HttpClient发送HTTP请求 16

1.2.4使用HTTP协议的优势 17

1.2.5JSON和XML 18

1.2.6RESTful和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

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

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

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

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

在线预览

2.1.3 分布式session

传统的应用服务器,如tomcat、jboss等,其自身所实现的session管理大部分都是基于单机的。对于大型分布式网站来说,支撑其业务的远远不止一台服务器,而是一个分布式集群,请求在不同服务器之间跳转。那么,如何保持服务器之间的session同步呢?传统网站一般通过将一部分数据存储在cookie中,来规避分布式环境下session的操作。这样做的弊端很多,一方面cookie的安全性一直广为诟病,另一方面cookie存储数据的大小是有限制的。随着移动互联网的发展,很多情况下还得兼顾移动端的session需求,使得采用cookie来进行session同步的方式的弊端更为凸显。分布式session正是在这种情况下应运而生的。

对于系统性要求较高的用户,可以将session持久化到DB中,这样可以保障宕机时会话不易丢失,但缺点也是显而易见的,系统的整体吞吐将受到很大的影响。另一种解决方案便是将session统一存储在缓存集群上,如memcache,这样可以保障较高的读、写性能,这一点对于并发量大的系统来说非常重要;并且从安全性考虑,session毕竟是有有效期的,使用缓存存储,也便于利用缓存的失效机制。使用缓存的缺点是,一旦缓存重启,里面保存的会话也就丢失了,需要用户重新建立会话。

如图2-4所示,前端用户请求经过随机分发之后,可能会命中后端任意的Web Server,并且Web Server也可能会因为各种不确定的原因宕机。在这种情况下,session是很难在集群间同步的,而通过将session以sessionid作为key,保存到后端的缓存集群中,使得不管请求如何分配,即便是Web Server宕机,也不会影响其他Web Server通过sessionid从Cache Server中获得session,这样既实现了集群间的session同步,又提高了Web Server的容错性。

图2-4 基于缓存的分布式session架构

这里以Tomcat作为Web Server来举例,通过一个简单的工具memcached-session-manager,实现基于memcache的分布式session。

memcached-session-manager是一个开源的高可用的Tomcat session共享解决方案,它支持Sticky模式和Non-Sticky模式。Sticky模式表示每次请求都会被映射到同一台后端Web Server,直到该Web Server宕机,这样session可先存放在服务器本地,等到请求处理完成再同步到后端memcache服务器;而当Web Server宕机时,请求被映射到其他Web Server,这时候,其他Web Server可以从后端memcache中恢复session。对于Non-Sticky模式来说,请求每次映射的后端Web Server是不确定的,当请求到来时,从memcache中加载session;当请求处理完成时,将session再写回到memcache。

以Non-Sticky模式为例,它需要给Tomcat的$CATALINA_HOME/conf/context.xml文件配置SessionManager,具体配置如下:

memcachedNodes="n1:192.168.0.100:11211,n2:192.168.0.101:11211"

sticky="false"

sessionBackupAsync="false"

lockingMode="auto"

requestUriIgnorePattern=".\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

其中:memcachedNodes指定了memcache的节点;sticky表示是否采用Sticky模式;sessionBackupAsync表示是否采用异步方式备份session;lockingMode表示session的锁定模式;auto表示对于只读请求,session将不会被锁定,如果包含写入请求,则session会被锁定;requestUriIgnorePattern表示忽略的url;transcoderFactoryClass用来指定序列化的方式,这里采用的是Kryo序列化,也是memcached-session-manager比较推荐的一种序列化方式。

memcached-session-manager依赖于memcached-session-manager-${version}.jar,如果使用的是tomcat6,则还需要下载memcached-session-manager-tc6-${version}.jar,并且它还依赖memcached-${version}.jar进行memcache的访问。在启动Tomcat之前,需要将这些jar放在$CATALINA_ HOME/lib/目录下。如果使用第三方序列化方式,如Kryo,还需要在Web工程中引入相关的第三方库,Kryo序列化所依赖的库,包括kryo-${version}-all.jar、kryo-serializers-${version}.jar和msm-kryo-serializer. ${version}.jar。

媒体评论

2008年,网随着访问量/数据量的巨增,以及开发人员的增长,原有的架构体系已经无法支撑,于是在那一年网将系统改造为了一个大型分布式的网站。作者目前就职于阿里集团,清晰地看到了目前这个大型分布式网站的架构体系,这个架构体系其实是非常多方面的技术的融合,要掌握好最重要的首先是看清全貌,但这也是最难的。本书向大家展示了一个大型分布式网站需要的技术的全貌。

——集团博学技术专家林昊(毕玄)

网友评论(不代表本站观点)

来自无昵称**的评论:

唯一不足,感觉作者很多地方有明显的小错误,让人看起来会迷惑。

2014-11-14 22:43:02
来自yujiabi**的评论:

好书很多,这本书也不例外,能从这本书里学到很多东西!

2014-09-30 06:08:45
来自yjph83**的评论:

就是送货慢,本来说的 18号送达, 结果19号下午才送达

2014-10-19 16:33:55
来自sorcere**的评论:

有些地方讲的不是很清楚,还有凑字的嫌疑,例如memcached的安装过程写了好几页,大都是安装过程的终端回显,没什么用。

2016-05-25 08:52:21
来自闲庭赏**的评论:

宅急送送到家很好,书的成色比上次好,就是字体有点小,看时间长了,有点累

2016-02-03 19:20:40
来自无昵称**的评论:

刚买,还未来得及看,排版、纸质还行,等看一段时间再来评价

2014-12-24 16:46:15
来自无昵称**的评论:

书还是不错,没有完全看完,不过油墨味道有点重。

2015-03-19 12:41:20
来自无昵称**的评论:

内容广度够,深度还差点,整体还是不错的,值得购买

2015-03-21 17:41:28
来自ll11404**的评论:

比李智慧那本更深入了一些,可以跟着实践一下

2014-11-24 20:29:35
来自北方的**的评论:

双十一活动非常给力啊,it书今天低折扣的活动不多,难得一次,一下子购买了好多书,都是平时7折以上的

2014-11-08 20:52:22
来自无昵称**的评论:

书很好,内容很实用,作者是个很有经验的攻城师

2015-05-14 23:50:38
来自欲敛**的评论:

看了,对自己的眼界有一定的开阔。但是好多东西都不是很详细,只有一个大概的概念。

2015-04-23 13:29:44
来自cserhz**的评论:

书的内容不错的,很多来自实战的经验总结,对有志于成为架构师的人的大局观有很大帮助,推荐购买。

2014-11-20 14:57:09
来自无昵称**的评论:

书收到了,之前是在同学那里看到过,觉得挺好的,还没来得及仔细看!书估计是盗版,心里很不爽!内容应该是很不错的!

2016-05-24 17:02:07
来自无昵称**的评论:

书质量可以,内容感觉太简单了,感觉没有核心原理与案例分析这本书写的好

2015-09-23 18:41:16
来自无昵称**的评论:

每天都在翻啊翻啊的一本书,很有参考价值,书果然不错

2016-04-22 10:11:21
来自无昵称**的评论:

很不错的一本书,刚看了一部分,作者知识面很广

2016-04-28 22:59:47
来自无昵称**的评论:

这本书我推荐,很好,看了一大半,很值得买,不适合新手看

2016-10-21 09:32:15
来自无昵称**的评论:

内容丰富,代码量很足,对于想了解分布式的人来说,是一本非常好书籍。

2015-03-23 14:06:20
来自cnyoky**的评论:

作为新人入手书籍看看还行,虽都有涉及,但是都点到即止,没有深入,而且作为一本技术书籍,文中大量的代码片断,程序截图和工具介绍,实有不妥。

2016-04-23 13:20:47
来自无昵称**的评论:

特别喜欢,超级好的一本分布式书籍,见过最好的一本了!一定会坚持看完!加油!

2016-04-22 22:41:45
来自无昵称**的评论:

不错的书,比李智慧的《大型网站技术架构 核心原理与案例分析》讲得细一些

2015-01-20 13:58:15
来自国学计**的评论:

对于想了解分布式,缓存,大数据,非常适合,该书对各种技术只提供解决方案,原理没有讲。

2016-05-09 20:38:07
来自sun2dlj**的评论:

对于网站架构知识介绍的很全面,很不错的一本书

2015-12-17 10:46:08
来自hinews_**的评论:

此产品相当不错,作者确实是经过实践的心得,但经过此书,不一定能够让大家掌握具体的技术细节,还需要自己消化,实际上写书容易,重要的是怎么样让具体的知识能够让读者吸收的非常好,这是有困难的!

2015-03-24 08:39:42
来自mickey2**的评论:

分布式现在非常火,这本书则详细全面的介绍大型网站分布式开发的方方面面,从入门到精通,值得详细阅读。

2016-04-23 23:39:52
来自匿名用**的评论:

通过通俗的语言和恰当的举例对大型网站架构进行了科普试的普及教育

2017-05-17 09:43:09

免责声明

更多相关图书