没有合适的资源?快使用搜索试试~ 我知道了~
首页架构思维提升:从分布式到职业生涯设计
"分布式架构设计,架构之路.pdf"文档深入探讨了架构设计在IT领域的核心价值和实践方法。作者强调了架构并不仅仅局限于架构师的角色,而是每个人都应该具备的一种思维方式。架构是一种全局视角,它涉及到系统各个部分的整合、关键细节的规划与设计,以及如何通过整体优化来驱动个人和项目的成功。 课程内容包括以下几个方面: 1. 联网架构的前世今生:从网络架构的历史变迁出发,帮助理解架构的演变过程,为后续的学习奠定基础。 2. 分布式架构关键技术:重点讲解分布式系统的构建原则,如缓存策略、消息队列的设计应用、分布式数据库的选择和管理,这些都是实现高可用性和性能的关键。 3. 互联网架构的核心要素:剖析互联网架构的核心组件,如负载均衡、API设计、服务发现等,这些是现代软件设计中的基石。 4. 架构设计案例分析:通过实际项目案例,展示架构设计在解决问题和优化性能中的作用,提供实战经验的学习。 5. 架构师成长攻略:针对想学习架构的人,作者分享自身的经验和策略,包括优秀架构师的特点,如何入门架构,以及如何提升架构思维,以应对工作中的挑战和职业发展。 通过这门10课时的课程,学习者不仅能掌握分布式架构的基础知识,还能提升自己的系统思考能力,从而在职场中脱颖而出,实现更好的职业发展。因此,无论你是技术开发者还是希望提升自我,理解并实践架构思维都是至关重要的,它能够帮助你在复杂的技术环境中做出明智的决策,推动项目的成功。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/12332712/bg10.jpg)
如下图所示,前端 Web 服务器和 Web 服务器分为两层,⽤户请求接⼊的时候,先接⼊前端 Web 服
务器,其上可以加⼀层反向代理服务器来代理前端 Web 服务器的 HTTP 请求。如果⽤户请求的数据
已经包含在这个反向代理服务器中,就可以直接返回;如果没有,就再把 HTTP 请求提交给前端
Web服务器,前端 Web 服务器会把请求发给后⾯的 Web 服务器。在 Web 服务器和前端 Web 服务
器之间还可以再加⼀层反向代理服务器。如果前端 Web 服务器的请求在这⼀层的反向代理服务器中
存在,那么这⼀层反向代理服务器可以直接将数据返还;如果不存在,再将请求下发给Web服器。"
通过这样的⽅式,极⼤地减少了前端 Web 服务器或者是 Web 服务器的访问压⼒,同时提⾼了系统
的响应性能。"
内容分发⽹络 CDN 缓存"
所谓的 CDN 是指在⽤户请求的前端(尽量前的前端)为⽤户提供数据服务。CDN 并不存在于我们
的数据中⼼,也不存在于⽤户的访问系统⼀端,它介于两者之间,作为⽹络服务商的缓存服务。⽤
户进⾏互联⽹访问的时候,需要通过互联⽹⽹络服务商提供的⽹络链接才能够连接到数据中⼼,那
么⽹络服务商就可以在⾃⼰提供的⽹络服务的机房⾥进⾏⼀次缓存操作,提供⼀次缓存服务。如下
图所示。"
![](https://csdnimg.cn/release/download_crawler_static/12332712/bg11.jpg)
客户端第⼀次访问 example.com 的时候,访问数据中⼼,数据中⼼返回 HTML ⻚⾯以后,客户端
解析 HTML,HTML ⾥⾯还各种 js ⽂件、css ⽂件、图⽚等,这些静态资源访问的就是 CDN 服务
器。CDN 服务器检查⾃⼰是否有需要的静态资源,如果有,就⽴即返回给客户端;如果没有,就⾃
⼰访问数据中⼼,获得需要的静态资源后,缓存在 CDN 服务器上后,再返回客户端。"
!"
所以 CDN 缓存也叫作⽹络访问的“第⼀跳”,⽤户请求先到达的是互联⽹⽹络服务商的机房。在机房
⾥⾯部署 CDN 服务器,提供缓存服务。如果 CDN 中存在⽤户请求的 Web 响应内容,那么就可以"
直接通过 CDN 进⾏返回;如果 CDN 中不存在,那么 CDN 会把这个请求通过后⾯的⽹络连接,把
它发到系统的数据中⼼去。数据中⼼返回的结果依然是先通过 CDN 服务器,CDN 服务器就可以把
数据缓存在⾃⼰的本地,供后⾯的⽤户请求操作响应。"
通读缓存"
上⾯讲到的代理缓存、反向代理缓存、CDN 缓存,都是通读缓存。它代理了⽤户的请求,也就是说
⽤户在访问数据的时候,总是要通过通读缓存。"
!"
当通读缓存中有需要访问的数据的时候,直接就把这个数据返回;如果没有,再由通读缓存向真正
的数据提供者发出请求。其中重要的⼀点是客户端连接的是通读缓存,⽽不是⽣成响应的原始服务
器,客户端并不知道真正的原始服务器在哪⾥,不会直接连接原始服务器,⽽是由通读缓存进⾏代
理。"
旁路缓存"
和通读缓存相对应的叫作旁路缓存。前⾯提到的 key、value 这样的对象缓存就属于旁路缓存。旁路
缓存和通读缓存不同。旁路缓存是客户端先访问旁路缓存中是否有⾃⼰想要的数据,如果旁路缓存
中没有需要的数据,那么由客户端⾃⼰去访问真正的数据服务提供者,获取数据。客户端获得数据
以后,会⾃⼰把这个数据写⼊到旁路缓存中,这样下⼀次或者其他客户端去读取旁路缓存的时候就
可以获得想要的数据了。"
在这⾥插⼊讲解⼀下各种介质数据访问的延迟,以便对数据的存储、缓存的特性以及数据的访问延
迟有⼀个感性的认识。! ! !!"
! ! ! !"
![](https://csdnimg.cn/release/download_crawler_static/12332712/bg12.jpg)
"
如上图所示,访问本地内存⼤概需要 100ns 的时间;使⽤ SSD 磁盘进⾏搜索,⼤概需要 10万ns 时
间;数据包在同⼀个数据中⼼来回⼀次的时间,也就是在同⼀个路由环境⾥进⾏⼀次访问,⼤概需
要 50万ns 时间,也就是 0.5ms;使⽤⾮ SSD 磁盘进⾏⼀次搜索,⼤概需要 1000万ns,也就是
10ms 的时间;按顺序从⽹络中读取 1MB 的数据也是需要 10ms 的时间;按顺序从传统的机械磁
盘,即⾮ SSD 磁盘,读取 1MB 数据,⼤概需要 30ms 的时间;跨越⼤⻄洋进⾏⼀次⽹络数据传
输,⼀个来回⼤概需要 150ms 的时间。其中,1s 等于 1000ms,等于 10亿ns。"
合理使⽤缓存对象"
缓存虽然效率⾮常⾼,使⽤缓存也⾮常简单,但是缓存并不是⽆所不能的,使⽤缓存的时候需要注
意合理使⽤缓存对象。"
注意频繁修改的数据"
缓存数据是为⼀次写⼊多次读取准备的,但是如果写⼊的数据很快就被修改掉了,数据还没来得及
读取就已经失效或者更新了,系统的负担就会很重,使⽤缓存也就没有太多的意义。⼀般说来,数
据的读写⽐例⾄少在 2:1 以上,缓存才有意义。"
注意没有热点的访问数据"
上⾯提到缓存是⼀次写⼊多次读取的数据,但是如果写⼊的数据并不会被多次读取,也就是所谓的
没有热点,这时候使⽤缓存也是没有意义的。"
!"
我们常⻅的、⽇常使⽤的数据通常都是有热点的。⽐如说在淘宝中,那些热⻔的商品可能会被⼏百
万⼏千万次的访问,那些冷⻔的商品可能⼀次访问都没有,热⻔商品数据就是有热点的,就需要缓
存。在微博中也是,那些微博⼤V们的微博会被⼏百万⼏千万的粉丝访问,他们的微博数据也是有热
点的,⽽那些没有⼏个粉丝的博主的微博,⼏乎不会被访问,这些数据是没有热点的。所以缓存存
储的就是淘宝上那些热⻔的商品,微博上那些⼤V的微博,它们都是有热点的缓存,这些数据都能实
现⼀次写⼊多次甚⾄⾮常多次的读取,这种缓存就有效果。但还是有⼀些业务场景数据是没有热点
的,那么这⼀类业务场景数据就不需要使⽤缓存。"
注意数据不⼀致和脏读"
缓存中的数据有可能和主存储数据库中的数据不⼀致。这个问题主要是通过失效时间来解决的,也
就是说这个业务能够容忍的失效时间之内,保持缓存中的数据和数据库中的数据不⼀致,⽐如说淘
宝的商品数据,如果卖家在对商品的数据进⾏了编辑,这个时候可能买家是看不到这些被更新过的
数据的,可能需要⼏分钟的时间,⽐如是 3 分钟,那么 3 分钟之内,卖家编辑的数据买家是看不到
的,但这种延迟通常是可以接受的。"
!"
![](https://csdnimg.cn/release/download_crawler_static/12332712/bg13.jpg)
如果某些业务场景对更新⾮常敏感,必须要实时看到,这个时候就不能够使⽤失效时间进⾏缓存过
期处理了,可能需要进⾏失效通知。当数据进⾏更新的时候,⽴即清除缓存中的数据,下次访问这
个数据的时候,缓存必须要重新从主数据库中去加载,才能够得到最新的数据。"
注意缓存雪崩"
因为热点数据主要是从缓存中去读取的,⽽热点数据是数据访问压⼒最⼤的⼀类数据。这些数据都
从缓存中读取,极⼤地降低了数据库的访问压⼒。"
!"
⽽数据库整个系统也是在有缓存的情况下进⾏设计的,数据库的处理能⼒是强依赖缓存的。如果缓
存忽然崩溃了,那么所有的访问压⼒就都会传递到数据库上去。数据库不能够承受这样的访问压
⼒,可能也会崩溃。数据库崩溃了以后,应⽤程序访问不到数据库,请求不断超时,负载压⼒不断
升⾼,应⽤程序服务器也会崩溃,最后导致整个⽹站所有服务器崩溃。这就是缓存雪崩。这种情况
下系统甚⾄⽆法启动,因为系统启动后,新的访问压⼒⼜过来,依然是那么⼤,还是会崩溃。"
!"
这时候重启缓存也是没有⽤的,因为重启的话缓存中是没有数据的。我们刚才也讲到,对象缓存是
通过加载数据库中的数据并写⼊到缓存中才有数据的。重新启动的缓存没有数据,它就不能够承担
提供数据读操作的能⼒。所以,对缓存有重点依赖的系统,需要特别关注缓存的可⽤性。缓存⽤的
部分数据丢失可以到数据库中加载,但是如果全部的缓存数据都丢失了,可能导致整个系统都会崩
溃,特别需要注意。"
分布式对象缓存"
下⾯看⼀下分布式对象缓存,如下图所示。"
"
分布式对象缓存是系统架构中⽐较重要的⼀部分内容。所谓的分布式对象缓存是指对象缓存以⼀个
分布式集群的⽅式对外提供服务,多个应⽤系统使⽤同⼀个分布式对象缓存提供的缓存服务。这⾥
的缓存服务器是由多台服务器组成的,这些服务器共同构成了⼀个集群对外提供服务。所以使⽤分
布式对象缓存的⼀个重要问题就是,数据进⾏读写操作的时候,如何找到正确的缓存服务器进⾏读
写操作。如果第⼀次写⼊数据的时候写⼊的是 A 服务器,但是数据进⾏缓存读操作的时候访问的是
B 服务器,就不能够正确地查找到数据,缓存也就没有了效果。"
!"
那么,如何才能找到正确的缓存服务器呢?以 Memcached 服务器集群为例,我们来看⼀下分布式
对象的缓存模型,如下图。"
![](https://csdnimg.cn/release/download_crawler_static/12332712/bg14.jpg)
"
当需要进⾏分布式缓存访问的时候,依然是以 Key、value 这样的数据结构进⾏访问。如上图所示的
例⼦中就是 BEIJING 作为 Key,⼀个 DATA 数据作为它的 value。当需要进⾏分布式对象访问的时
候,应⽤程序需要使⽤分布式对象缓存的客户端 SDK。⽐如说 Memcached 提供的⼀个客户端 API
程序进⾏访问,客户端 API 程序会使⽤⾃⼰的路由算法进⾏路由选择,选择其中的某⼀台服务器,
找到这台服务器的 IP 地址和端⼝以后,通过通讯模块和相对应的服务器进⾏通信。"
!"
因为进⾏路由选择的时候,就是使⽤缓存对象的 key 进⾏计算。下⼀次使⽤相同的 key 使⽤相同路
由算法进⾏计算的时候,算出来的服务器依然还是前⾯计算出来的这个服务器。所以通过这种⽅法
可以访问到正确的服务器进⾏数据读写。服务器越多,提供的缓存空间就越⼤,实现的缓存效果也
就越好。通过集群的⽅式,提供了更多的缓存空间。"
!"
那么,路由算法⼜是如何进⾏服务器路由选择的?主要算法依然是上⾯讲到的哈希表的路由算法,
也就是取模算法。"
!"
⽐如说,我们这⾥缓存服务器集群中有 3 台服务器,key 的哈希值对 3 取模得到的余数⼀定在 0、
1、2 三个数据之间,那么每⼀个数字都对应着⼀台服务器,根据这个数字查找对应的服务器 IP 地
址就可以了。使⽤余数取模这种⽅式进⾏路由计算⾮常简单,但这种算法也有⼀个问题,就是当服
务器进⾏扩容的时候,⽐如说我们当前的服务器集群有 3 台服务器,如果我们 3 台服务器不够⽤
了,需要添加 1 台服务器,这个时候对 3 取模就会变成对 4 去取模,导致的后果就是以前对 3 取模
的时候写⼊的数据,对 4 取模的时候可能就查找不到了。"
!"
上⾯也讲过缓存雪崩的情况,实际上如果使⽤取模算法进⾏服务器添加,因为除数的变化会导致和
缓存雪崩⼀样的后果,也就是说前⾯写⼊缓存服务器集群中的缓存数据,添加了 1 台服务器后很多
数据都找不到了,类似于雪崩,最后会导致整个服务器集群都崩溃。"
!"
我们添加服务器的主要⽬的是提⾼它的处理能⼒,但是不正确的操作可能会导致整个集群都失效。
解决这个问题的主要⼿段是使⽤⼀致性哈希算法。"
⼀致性哈希算法"
⼀致性哈希和余数哈希不同,⼀致性哈希⾸先是构建⼀个⼀致性哈希环的结构。⼀致性哈希环的⼤
⼩是 0~2 的 32 次⽅减 1,实际上就是我们计算机中⽆符号整型值的取值范围,这个取值范围的 0
和最后⼀个值 2 的 32 次⽅减 1 ⾸尾相连,就构成了⼀个⼀致性哈希环,如下图所示。"
剩余99页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/b4bbd5fe10264af2b2546529ebe73fd3_qq_34640722.jpg!1)
大佛plus
- 粉丝: 4
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 岩石滑动与断层冲击地压:声发射特征分析
- 新时代煤炭工业八大战略新取向剖析
- 开采强度对华亭矿区冲击地压危险性的影响分析
- 新安煤矿探采对比:影响安全生产的关键因素与技术支撑
- 210MW循环流化床锅炉引风机变频改造优化与节能效果
- 浅埋煤层开采沉陷预测:方法应用与影响分析
- 优化巷道过陷落柱支护方案:数值模拟与现场试验
- 坚硬顶板定向断裂爆破技术:安全高效采煤新方案
- 北航2019算法课作业解析:投资策略与凸子多边形优化
- 断层破碎带垮冒下堆积体边界抗力分布关键影响因素
- 哈拉沟选煤厂优化末煤系统提高效率与处理能力
- 瓦斯涌出影响下采动煤体蠕变失稳研究
- 提升煤矿装载效率的可控箕斗定量装载设备设计
- 水分调控下烟煤瓦斯吸附特性对比研究
- 重介质悬浮液密度控制硬件设计与选型探讨
- 坚硬顶板巷道支护参数设计:现场测试与数值分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)