[读书笔记]大型分布式网站架构设计与实践.分布式缓存

news/2024/4/27 14:41:35/文章来源:https://blog.csdn.net/weixin_33730836/article/details/88966112

前言:本书是对分布式系统架构涉及到的相关技术的一本科普书籍。由于很难作为开发参考,只能但求了解。所以通篇浅读,对分布式系统进行大致的了解。因为写的非常好,感觉非常有意思,自己也做不出总结。所谓的读书笔记也就演变成了摘抄。

简介

一个大型、稳健、成熟的分布式系统的背后,往往会设计众多的支撑系统,我们将这些支撑系统成为分布式系统的基础设施。除了前面所介绍的分布式协作及配置管理系统ZooKeeper,我们进行系统架构设计所依赖的基础设施,还包括分布式缓存系统、持久化存储、分布式消息系统、搜索引擎、以及CDN系统、负载均衡系统、运维自动化系统等,还有实时计算系统、离线计算系统、分布式文件系统、日志收集系统、监控系统、数据仓库等。

分布式缓存

在高并发环境下,大量的读、写请求涌向数据库,磁盘的处理速度与内存显然不在一个量级,从减轻数据库的压力和提供系统响应速度两个角度来考虑,一般都会在数据库之前加一层缓存。由于单台机器的内存资源和承载能力有限,并且如果大量使用本地缓存,也会使相同的数据被不同的节点存储多份,对内存资源造成较大的浪费,因此才催生出了分布式缓存。
接下来将介绍分布式缓存的典型代表memcache,以及分布式缓存的应用场景。最为典型的场景莫过于分布式session。

memcache

memcache是一款开源的高性能的分布式内容对象缓存系统,被许多大型网站所采用,用于在应用中减少对数据库的访问,提高应用的访问速度,并降低数据库的负载。为了在内存中提供数据的高速查找能力,memcache使用key-value形式存储和访问数据,在内存中维护一张巨大的HashTable,使得对数据查询的时间复杂度降低到O(1),保证了对数据的高性能访问。内存的空间总是有限的,当内存没有更多的空间来存储新的数据时,memcache就会使用LRU(Least Recently Used)算法,将最近不常访问的数据淘汰掉,以腾出空间来存放新的数据。memcache存储支持的数据格式也是灵活多样的,通过对象的序列化机制,可以将更高层的对象转换成为二进制数据,存储在缓存服务器中,当前端应用需要时,又可以通过二进制内容反序列化,将数据还原成原有对象。

memcache客户端与服务端通过构建在TCP协议之上的memcache协议来进行通信,协议支持两种数据的传递,这两种数据分别为文本行和非结构化数据。文本行主要用来承载客户端的命令及服务端的响应,而非结构化数据则主要用于客户端和服务端数据的传递。由于非结构化数据采用字节流的形式在客户端和服务端之间进行传输和存储,因此使用方式非常灵活,缓存数据存储几乎没有任何限制,并且服务端也不需要关心存储的具体内容及字节序。

memcache的分布式实现

memcache本身并不是一种分布式的缓存系统,它的分布式是由访问它的客户端来实现的。一种比较简单的实现方式是根据缓存的key来进行Hash,当后端有N台缓存服务器时,访问的服务器为hash(key)%N,这样可以将前端的请求均衡地映射到后端的缓存服务器。但这样也会导致一个问题,一旦后端某台缓存服务器宕机,或者是由于集群压力过大,需要新增缓存服务器时,大部分的key将会重新分布。对于高并发系统来说,这可能会演变成一场灾难,所有的请求将如洪水般疯狂地涌向后端的数据库服务器,而数据库服务器的不可用,将会导致整个应用的不可用,形成所谓的“雪崩效应”。

consistent Hash算法

使用consistent Hash算法能够在一定程度上改善上述问题。该算法早在1997年就在论文Consistent hashing and random trees中被提出,它能够在移除/添加一台缓存服务器时,尽可能小地改变已存在的key映射关系,避免大量key的重新映射。

consistent Hash的原理是这样的,它将Hash函数的值域空间组织成一个圆环,假设Hash函数的值域空间为0~(2的32次方-1),也就是Hash值是一个32位的无符号整型,整个空间按照顺时针的方向进行组织,然后对相应的服务器节点进行Hash,将他们映射到Hash环上,假设有4台服务器分别为node1,node2,node3,node4,它们在环上的位置如图所示。
image
接下来使用相同的Hash函数,计算出对应的key的Hash值在环上对应的位置。根据consistent Hash算法,按照顺时针方向,分布在node1与node2之间的key,它们的访问请求会被定位到node2,而node2与node4之间的key,访问请求会被定位到node4,以此类推。
假设有新的节点node5增加进来时,假设它被Hash到node2与node4之间,那么受影响的只有node2和node5之间的key,它们将被重新映射到node5,而其他key的映射关系将不会发生改变,这样避免了大量key的重新映射。
当然上面描绘的知识一种理想的情况,各个节点在环上分布得十分均匀。正常情况下,当节点数据较少时,节点的分布可能十分不均匀,从而导致数据访问的倾斜,大量的key被映射到同一台服务器上。为了避免这种情况的出现,可以引入虚拟节点的机制,对每一个服务器节点都计算多个Hash值,每一个Hash值都对应环上一个节点的位置,该节点称为虚拟节点,而key的映射方式不变,只是多了一步从虚拟节点再映射到真实节点的过程。这样,如果虚拟节点的数量足够多,即使只有很少的实际节点,也能够使key分布得相对均衡。

分布式session

对于大型分布式网站来说,支撑其业务的远远不止一台服务器,而是一个分布式集群,请求在不同服务器之间跳转。那么如何保持服务器之间的session同步呢?传统网站一般通过将一部分数据存储在cookie中,来规避分布式环境下session的操作。这样做的弊端很多,一方面cookie的安全性一直广为诟病,另一方面cookie存储数据的大小是有限制的。随着移动互联网的发展,很多情况下还得兼顾移动端的session需求,使得采用cookie来进行session同步的方式的弊端更为凸显。分布式session正是在这种情况下应运而生的。
对于系统可靠性要求较高的用户,可以将session持久化到DB中,这样可以保证宕机时会话不易丢失,但缺点也是显而易见的,系统的整体吞吐将受到很大的影响。另一种解决方案便是将session统一存储到缓存集群上,如memcache,这样可以保证较高的读、写性能,这一点对于并发量大的系统来说非常重要;并且从安全性考虑,session比较是有有效期的,使用缓存存储,也便于利用缓存的失效机制。使用缓存的缺点是,一旦缓存重启,里面保存的会话也就丢失了,需要重新建立会话。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_707123.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云一键建站产品,阿里云自营建站-中小企业建站首选

阿里云推出的自营建站服务,这对于中小企业来说简直是福利了,现在一般的公司都开始有了自己的官网,有可能就是因为你的官网设计的标准,大气,客户就会对你的信任度增加,从而促进一笔不小的订单,这…

windows rt_如何在Windows RT上轻松将网站添加到Flash白名单

windows rtMicrosoft’s Surface RT and other Windows RT-based machines include the Flash browser plugin, but it only runs on websites Microsoft has whitelisted. We have covered how you can add any website to the Flash whitelist, but now there’s an easier w…

找到特定ip地址 修改ip_您如何找到网站的IP地址?

找到特定ip地址 修改ipWhether you are in it just for a bit of geeky fun, or are seriously wanting to know the answer, how do you find out the IP address for a website? Today’s SuperUser Q&A post looks at the answer, and how to know if more than one we…

打印墨水调钢笔墨水_如何节省墨水并改善网站打印质量

打印墨水调钢笔墨水Printing out web pages you want a hard copy of can be a little hit and miss. Unlike other documents, it is not easy to tell exactly how many pieces of paper will be needed, and whether or not there will be any awkward clipping. Add to thi…

使用sql服务器发送贺卡_创建和发送免费电子贺卡的最佳网站

使用sql服务器发送贺卡With the holiday season upon us, it’s time to pull out the holiday card list and get writing. However, how would you like to save some money this year and also help save the environment? 随着假期的到来,是时候抽出节日贺卡清…

wdcp mysql密码_WDCP提示无法连接mysql及创建站点提示mysql密码不正确

一、wdcp系统访问提示无法连接mysql1、可能是mysql服务没启动,首先ssh登陆服务器,然后执行service mysqld restart重启mysql再访问试下,如果无法启动,先用df -lh查看下home分区有没有挂载,如果没有挂载尝试先重启&…

网站运行java_定制化Azure站点Java运行环境(5)

Java 8下PermGen及参数设置在上一章节中,我们定制化使用了Java 8环境,使用我们的测试页面打印出了JVM基本参数,但如果我们自己观察,会发现在MXBeans中,没有出现PermGen的使用数据,初始大小等信息&#xff0…

chromebook刷机_如何将网站添加到您的Chromebook架子上

chromebook刷机Bookmarks are great to keep your favorite sites nearby, but they aren’t the fastest option out there. Instead, why not add shortcuts for your favorite websites right on the Chromebook shelf? 书签可以很好地将您喜欢的网站保留在附近&#xff0c…

chromebook刷机_如何为不支持Chrome操作系统的网站欺骗Chromebook用户代理

chromebook刷机Not all browsers handle websites the same, and if they don’t support your operating system or browser, you could be denied access. Luckily, you can spoof the user agent on Chrome OS to make it look like you use a completely different system.…

jhope代码分析以及网站结构

如下图所示,为Extjs部分代码提供的网页结构:网站看上去本来是这样的前端采用ExtJS,与后台的SpringMVCSpringHibernate进行数据交互。之前分析过登录的过程,不赘述在loginController处理登录返回结果的最后,如下语句也就…

从购买域名到nginx,flask搭建自己的网站

搭建一个只属于自己的网站? 一、注册域名(可选*) 1.注册阿里云账号 网址:登录(注册) 2.购买域名:阿里云域名注册 有一元域名、免费域名等。 购买过程中需要创建信息模板(必须完成邮箱真实…

win10任务栏和开始菜单_如何将网站固定到Windows 10任务栏或开始菜单

win10任务栏和开始菜单Having quick access to frequently-used or hard to remember websites can save you time and frustration. Whether you use Chrome, Firefox, or Edge, you can add a shortcut to any site right to your Windows 10 taskbar or Start menu. 快速访问…

kompozer如何启动_使用KompoZer创建网站

kompozer如何启动Are you looking for a way to easily start creating your own webpages? KompoZer is a nice basic website editor that will allow you to quickly get started and become familiar with the process. 您是否正在寻找一种轻松创建自己的网页的方法&#…

pageadmin CMS网站建设教程:站点添加自定义字段

首先看看pagedmin默认的站点设置都有什么,如下图: 这里只有一些最基本的参数设置,用过3.0版本或用过其他公司开发的cms的用户应该有这种体验,在站点设置中可以设置logo图片,备案号,底部内容等等。 那么为什…

在Teams中对网站的URL特殊解析

Teams中有一个不太被大家注意的扩展点,名字叫Link unfurling,就是对于一些特殊域名的URL进行特别的解释。 可能这么说,大家还是无法理解,我们看一下下面这个图,当用户在message输入框中输入了一窜url后,Te…

震惊的网站,都是干货

分享15个鲜为人知的的小众网站,每一个可以让你打开新世界的大门,让你震惊。 1:仿知网 https://www.cn-ki.net/ 仿知网是一个完全可以代替知网的精品网站;是一个非常强大的论文搜索网站。 首先这个网站的论文检索结果和知网的搜索结…

【渗透过程】嘉缘网站 --测试

声明:本片文章测试网站为测试靶场 信息收集阶段: 首先使用了一些常见的扫描工具:nmap 御剑 使用nmap扫描端口 发现网站开放了 135 139 445 3306 等端口 这里可以看到网站开放了一些危害较高端口:135 225等 使用御剑扫描到一些敏感…

html广告条效果,css3炫酷网站banner广告动画特效

这是一款可以用来遮罩网站banner或广告的动画特效插件。该特效使用的是 CSS3 animations。注意不是所有的浏览器都支持 CSS3 animations。如果你对 CSS3 animations还不了解,建议你先阅读W3C CSS Animations。HTMLhtml结构如下:Lost at sea?Relax - wev…

一步一步SharePoint 2007之五:向网站中添加一个子网站

一步一步SharePoint 2007之五:向网站中添加一个子网站摘要感受完看到成果的激动,感受完邻家女孩的漂亮、可爱和端庄,不要停止,来,让我们一起来动手打造心目中的完美女神吧!本篇文章将介绍如何向一个网站中添…

匿名用户访问用发布站点模板创建网站的列表项时要求登录的问题解决

因为发布站点中的一个Feature被打开了,造成将列表FormPage的查看给Lock了,所以需要登录,将其关闭就OK了。哈哈。英文KB:Users are unexpectedly prompted to enter their credentials when they access a list in a Windows Share…