大型网站技术架构(六)网站的伸缩性架构

news/2024/5/10 12:08:54/文章来源:https://blog.csdn.net/weixin_33991727/article/details/93720228

为什么80%的码农都做不了架构师?>>> hot3.png

 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能,通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。

1、网站架构的伸缩性设计

网站的伸缩性设计可以分成两类,一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的 功能;后者是集群内的多台服务器部署相同的服务,提供相关的功能。

1.1 不同功能进行物理分离实现伸缩

         纵向分离:即分层后分离,将业务处理流程上的不同部分分离部署,实现系统伸缩性。


         横向分离:即分割业务后分离,将不同的业务模块分离部署,实现系统伸缩性。

1.2 单一功能通过你集群规模实现伸缩

       当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车。
      集群伸缩性又分为应用服务器集群伸缩性和数据服务器集群伸缩性。数据服务器集群也可分为缓存数据服务器集群和存储数据服务器集群。

2、 应用服务器集群的伸缩性设计

        所谓应用服务器的伸缩性即:HTTP请求分发装置可以感知或者可以配置集群的服务器数量,可以及时发现集群中新上线或下线的服务器,并能向新上线的服务器分发请求 ,停止向已下线的服务器分发请求。这个HTTP请求分发装置被称为负载均衡服务器。
       负载均衡是网站必不可少的基础技术手段,不但可以实现网站的伸缩性,同时还改善网站的可用性,可谓网站的杀手锏之一。具体的技术实现也多种多样,从硬件实现到软件实现, 从商业产品到开源,应有尽有,但实现负载均衡的基础技术不外以下几种。

2.1 HTTP重定向负载均衡

        HTTP重定向服务器是一台普通的应用服务器,其唯一的功能就是根据用户的HTTP请求计算一台真实的服务器地址,并将真实的服务器地址写入HTTP重定向响应中(响应状态吗302)返回给浏览器,然后浏览器再自动请求真实的服务器。

        这种负载均衡方案的优点是比较简单,缺点是浏览器需要每次请求两次服务器才能拿完成一次访问,性能较差;使用HTTP302响应吗重定向,可能是搜索引擎判断为SEO作弊,降低搜索排名。重定向服务器自身的处理能力有可能成为瓶颈。因此这种方案在实际使用中并不见多。

2.2 DNS域名解析负载均衡

      利用DNS处理域名解析请求的同时进行负载均衡是另一种常用的方案。在DNS服务器中配置多个A记录,如:www.mysite.com IN A 114.100.80.1、www.mysite.com IN A 114.100.80.2、www.mysite.com IN A 114.100.80.3.

      每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回,这样A记录中配置的多个服务器就构成一个集群,并可以实现负载均衡。

      DNS域名解析负载均衡的优点是将负载均衡工作交给DNS,省略掉了网络管理的麻烦,缺点就是DNS可能缓存A记录,不受网站控制。

     事实上,大型网站总是部分使用DNS域名解析,作为第一级负载均衡手段,然后再在内部做第二级负载均衡。 

2.3 反向代理负载均衡

      前面我们已经讲过,反向代理可以缓存资源,改善网站性能,事实上,反向代理业可以做负载均衡,如图所示。

      由于反向代理服务器转发请求在HTTP协议层面,因此也叫应用层负载均衡。优点是部署简单,缺点是可能成功系统的瓶颈。

2.4 IP负载均衡

       IP负载均衡:即在网络层通过修改请求目标地址进行负载均衡。

       用户请求数据包到达负载均衡服务器后,负载均衡服务器在操作系统内核进行获取网络数据包,根据负载均衡算法计算得到一台真实的WEB服务器地址,然后将数据包的IP地址修改为真实的WEB服务器地址,不需要通过用户进程处理。真实的WEB服务器处理完毕后,相应数据包回到负载均衡服务器,负载均衡服务器再将数据包源地址修改为自身的IP地址发送给用户浏览器。

       这里的关键在于真实WEB服务器相应数据包如何返回给负载均衡服务器,一种是负载均衡服务器在修改目的IP地址的同时修改源地址,将数据包源地址改为自身的IP,即源地址转换(SNAT),另一种方案是将负载均衡服务器同时作为真实物理服务器的网关服务器,这样所有的数据都会到达负载均衡服务器。

       IP负载均衡在内核进程完成数据分发,较反向代理均衡有更好的处理性能。但由于所有请求响应的数据包都需要经过负载均衡服务器,因此负载均衡的网卡带宽成为系统的瓶颈。

2.5 数据链路层负载均衡

        顾名思义:数据链路层负载均衡是指在通信协议的数据链路层修改mac地址进行负载均衡,如下图:

        这种数据传输方式又称作三角传输模式,负载均衡数据分发过程中不修改IP地址,只修改目的的mac地址,通过配置真实物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一样,从而达到负载均衡,这种负载均衡方式又称为直接路由方式(DR).

        在上图中,用户请求到达负载均衡服务器后,负载均衡服务器将请求数据的目的mac地址修改为真是WEB服务器的mac地址,并不修改数据包目标IP地址,因此数据可以正常到达目标WEB服务器,该服务器在处理完数据后可以经过网管服务器而不是负载均衡服务器直接到达用户浏览器。

        使用三角传输模式的链路层负载均衡是目前大型网站所使用的最广的一种负载均衡手段。在linux平台上最好的链路层负载均衡开源产品是LVS(linux virtual server)。

2.6 负载均衡算法

 负载均衡服务器的实现可以分成两个部分:
        1、根据负载均衡算法和WEB服务器列表计算得到集群中一台WEB服务器的地址;
        2、将请求数据发送到改地址对应的WEB服务器上。

   常用的负载均衡算法如下几种:
         1、轮询:即将请求依次分发到每台应用服务器上。
         2、加权轮询:根据应用服务器硬件性能情况,在轮询的基础上,安装配置的权重将请求分发到每个服务器。
         3、随机:将请求随机分配到各个应用服务器。
         4、最少连接:记录每个服务器正在处理的连接数,将新到的请求分发到最少连接的服务器上。
         5、原地址散列:根据请求来源的IP地址进行Hash计算,得到应用服务器,这样来自同一个IP地址请求总在同一个服务器上处理。

 

3、分布式缓存集群的伸缩性设计

         分布式缓存服务器集群中不同服务器中缓存的数据不相同,缓存访问请求不可用在缓存服务器集群中的任意一台处理,必须先找到缓存有需要数据的服务器,然后才能访问。 这个特点会严重制约分布式缓存集群的伸缩性设计,因为新上线的缓存服务器没有缓存数据,而已下线的缓存服务器还缓存着网站的许多热点数据。
 分布式缓存集群伸缩性设计的最主要目标即:必须让新上线的缓存服务器对整个分布式缓存集群影响最小,也就是说新加入缓存服务器后应使整个缓存服务器集群中已经缓存的数据 尽可能还被访问到。

3.1 memcached分布式缓存集群访问模型

3.2 分布式缓存的一致性Hash算法

        一致性hash算法通过一个叫做一致性hash环的数据结构实现KEY到缓存服务器的Hash映射,如下图:

        如果使用上面数据结构的话,那么当新添加一台缓存服务器时,只是影响到了其中一台缓存服务器,其他两头缓存服务器的压力并没有得到缓解,因此此方案还是存在问题。 一种替代的方案就是增加一个虚拟层,即把每台缓存服务器虚拟为一组服务器(比如3个虚拟网元)平均放到上面的环里面。这样当新增加缓存服务器时,把新增加的虚拟网元平均分配 到环中,这样就能缓解每台缓存服务器,达到分布式缓存集群高伸缩性。

4、数据存储服务器集群的伸缩性设计

        和缓存服务器集群的伸缩性设计不同,数据存储服务器集群的伸缩性对数据的持久性和可用性提出了更高的要求。具体来说,又可分为关系数据库集群的伸缩性设计和NoSql数据库的伸缩性设计。

4.1 关系数据库集群的伸缩性设计

       主要的关系数据库都支持数据复制功能,使用这个功能可以对数据库进行简单伸缩。
       另外除了利用数据库主从读写分离外,也可以利用业务分隔模式使不同业务的数据表部署在不同的数据库集群上,即俗称的数据分库。但是这种方式的制约条件时跨库不能进行join操作。
       在大型网站的实际应用中,即使使用了分库和主从复制,对一些单表数据任然很大的表还需要进行分片,将一张表拆开分别存储在多个数据库中。
       目前支持分布式数据分片的关系数据库产品主要有开源的Amoeba和Cobar(阿里巴巴),下图为Cobar部署模型。


       Cobar是一个分布式关系数据库访问代理,介于应用服务器和数据库服务器之间。应用程序通过JDBC驱动访问Cobar集群,Cobar服务器根据SQL和分库规则分解SQL,分发到MySQL集群不同 的数据库实例上执行(每个MySQL实例都部署为主/从结构,保证数据高可用)。
       Cobar系统组件模型如下图:

       前端通信模块负责和应用程序通信,接搜到SQL请求(select * from users where userid in (12,22,23))后转交给SQL解析模块,SQL解析模块解析获得SQL中的路由规则查询条件(userid in (12,22,23))再转交给 SQL路由模块,SQL路由模块根据路由规则配置(userid为偶数路由至数据库A,奇数则路由至数据库B)将应用程序提交的SQL分解成两条SQL(select * from users where userid in (12,22);select * from users where userid in (23))转交给SQL执行代理模块,发送至数据库A和数据库B分别执行。 数据库A和数据库B的执行结果返回至SQL执行模块,通过结果合并模块将两个返回结果集合并成一个结果集,最终返回该应用程序,完成在分布式关系数据库中的一次访问请求。

 

       Cobar的伸缩有两点:Cobar服务器集群的伸缩和MySQL服务器集群的伸缩。
       Cobar服务器可以看做是无状态的应用服务器
,因此其集群伸缩可以简单实用负载均衡的手段实现。而MySQL中存储着数据,要保证集群扩容后数据一致负载均衡,必须要做数据迁移,如下图(利用数据同步功能进行数据迁移)。


4.2 NoSQL数据库的伸缩设计

NoSQL主要是指非关系的、分布式的数据库设计模式。一般而言,NoSQL数据库产品都放弃了关系数据库的两大重要基础:以关系代数为基础的结构化查询语言(SQL)和事物一致性保证(ACID),而强化了高可用性和可伸缩性。目前应用最广泛的是Apache HBase

转载于:https://my.oschina.net/zhanghaiyang/blog/551835

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

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

相关文章

python低通滤波函数_「带通滤波器」FIR数字带通滤波器(Python实现) - seo实验室

带通滤波器 数字信号综合设计题目简述:(1)基带信号的产生及调制 def py_init(jidai_1,sin1_hz,zxb1_hz): #(常数,载波频率,基带信号频率) y_sin110*np.sin(2*sin1_hz*np.pi*x) #sinw1产生 a0.5*np.sin(2*zx…

网站漂浮框php,jQuery网站右侧悬浮楼层滚动导航代码

兼容性:IE11IE10IE9IE8IE7IE6FirefoxChromeSafari热度1209℃可做活动宣传页、产品特色介绍页等下载1次所需铜板10个 立即下载(function () {//// Utils//function throttle(fn, delay, scope) {// Default delaydelay delay || 250;var last, defer;return func…

html怎么让图片重叠_IE兼容性问题:网站乱码问题怎么办?

很多网站前端设计师在设计网站的时候,都会碰到网站在快速浏览器下显示正常,在ie下可能就会出现错位的情况!所以我们在设计网站之前一定要先了解IE兼容性问题。关于CSS对IE的兼容问题一直是DIVCSS的一个大问题,因为不通浏览器识别代…

网站封装单个exe_京东偷传用户私密照片惹众怒,网站如何用机器学习掌握用户喜好?...

【新智元导读】电商网站、影音网站是如何在不上传用户本地隐私数据的前提下,获知用户喜好,从而推荐合口味的内容?不需要心理学家,更不需要占星术士,而是通过矢量矩阵,使用协同过滤算法预测出用户的喜欢。最…

网站拒绝访问_Linux Nginx网站服务——3

nginx虚拟主机配置(利用server模块)基于域名的虚拟主机配置(企业级使用)基于端口的虚拟主机配置说明:结合OSI7层模型,熟悉虚拟主机访问原理基于ip地址的虚拟主机配置说明:只要nginx配置文件中涉及ip地址信息修改,都要重新启动 而不…

网站获取ip代码怎么写_一分钟内获取女朋友的精确定位位置(附电脑版的IP定位工具+9大素材网站解析下载方法)...

想要知道对方的位置,首先你要知道她的IP地址,百度一下“获取对方的IP地址”会出现一堆的教程,在这里我就不说那些乱七八糟和那些复杂的方法了,我就讲一下简单实用的方法!首先,我们可以借助一个网站获取她的…

如何设置自定义日志_微信公众号如何设置点击图文消息打开跳转自定义第三方网站...

什么是自定义网站?用户关注公众号之后,点击推送的图文消息,打开微信的网站。使用大鬼图文助手,点击图文消息,可以打开其他的网站。比如,点击图文,打开产品官网或者视频网站。如何设置点击图文消…

火车采集器采集ajax,火车头采集器JavaScript之ajax网站采集实例教程

大部分网站的有些内容需要通过ajax调用,或者隐藏在js里面,需要大家把真实的内容js地址找出来,这就需要一定的火车头采集器的使用经验了,今天给大家分析一个javascript类型的ajax采集实例,具体看下面的介绍今天我们以这…

网站服务器的宽带是1mb是什么意思,宽带网速小知识:1Mbps,1Mb/s,1MB/s是什么意思?...

Mbps是什么意思Mbps是Million bits per second的缩写,MbpsMbit/s即兆比特每秒,它的意思是时间内传输数据的平均比特数,其单位是比特每秒(bps),或千比特每秒(Kbps),或兆比特每秒(Mbps)。换算单位关系为:1Kbps1024bps,1Mbps1024*102…

mysql 数字转大写_php中阿拉伯数字转大写的方法|宏博网络建站小课堂

<?php function intTostr($num) {// 判断是否为数组if(!is_numeric($num)){return "要转换的金额只能为数字!";}// 预定义要转换的字符,自己可以切换一下要转换的方式// $arr array(零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖);$arr array(零, 一, 二, 三, 四, 五…

饶平 php,饶平SEO

站点功能可以对站点的功能模块门户、群组和家园关闭和开启&#xff1b;管理统计、评价、点评和帖子内容以及活动主题进行一些基本的管理操作&#xff0c;功能包括功能模块、管理相关、主题热度、主题评价、帖子点评、活动主题和其他的一些基本操作。操作路径&#xff1a;【后台…

网站输入正确账号密码页面刷新一下_公共英语明天(28号)正式开始报名!报名流程了解一下!...

2020下半年的考试将在7月28号开始报名&#xff0c;明天9:00准时开始报名&#xff01;登录网站http://pets.neea.edu.cn/点击在线报名&#xff0c;登录不上的按提示找回密码或者重新注册。登陆后按以下步骤填写信息即可(电脑报名&#xff01;不要用手机使用。使用报名网站推荐浏…

将gitee page个人网站收录进百度、google和bing(以百度为例)——备忘录

小虎最近想将个人小站添加到各大搜索引擎的索引上&#xff0c;探索了一下成功了&#xff0c;这里分享一下经验。 背景 网站搭建是在环境win10 hexo fluid完成的。 索引添加 在百度搜索平台的站长资源管理添加网站。 选择你的站点属性。 然后进行网站验证&#xff0c;这…

大型网站架构(一)

说道大型网站&#xff0c;就的先说大型网站的特点&#xff1a;高并发&#xff0c;大流量&#xff0c;高可用&#xff0c;海量数据等。下面就说说大型网站的架构演化过程吧。 1、初始阶段的网站架构 初始阶段都比较简单&#xff0c;通常一台服务器就可以搞定一个网站了&#x…

大型网站架构(二)

6、使用反向代理和CDN加上网站相应 提高网站的访问速度&#xff0c;主要手段有使用CDN和反向代理。 CDN和反向代理的基本原理都是缓存&#xff0c;区别在于CDN部署在网络提供商的机房&#xff0c;而反向代理是部署在网站的中心机房&#xff0c;当用户请求到达中心机房后&…

Cisco官方网站悄然换标

10月2日&#xff0c;就在所有中国人欢度国庆佳节之际&#xff0c;可能是思科(cisco)历史上最大的市场活动悄然启动。就在今天&#xff0c;51cto.com记者发现&#xff0c;思科网站全面改版&#xff01;其实&#xff0c;改版的内容不大&#xff0c;主要就是logo的改变。记者发现&…

[导入]日志 20071208(SvcUtil.exe,高并发网站架构)

摘要: &#xff08;1&#xff09;结合SvcUtil加深了一点对WCF的认识。 &#xff08;2&#xff09;听了钱宏武关于网站架构讲座的前半部分。 阅读全文[新闻]Vista Fiji媒体中心已完成文章来源:http://www.cnblogs.com/xingyukun/archive/2007/12/08/987733.html转载于:https://…

在线制作收藏夹ico图标的工具网站

介绍的是一个在线制作ico图标的工具网站&#xff0c;它就是dynamicdrive。你要做的工作就是做一个你想要用做书签的图片&#xff0c;可以是.jpg/.gif/.png/.bmp格式&#xff0c;尽量作成正方行的&#xff0c;已防止转换后图标变形&#xff0c;OK&#xff0c;接下来就去dynamicd…

对于xss和sql注入的防范(美团网站xss例子)

对于xss和sql注入这样的漏洞有很多工具是可以检测的。 也是最常见的web安全问题。 其实这样的问题是很好避免的 只要在应用架构上 统一数据的吞吐,在吞吐的过程中做好数据的校验就ok了 最简单的php的 htmlspecialchars 就可以把一些危险字符进行转译 就可以大大减低xss和…

[Ajax]十个优秀的 Ajax/Javascript实例网站

原始地址&#xff1a;http://supercode.appspot.com/post/13 1.Ajax Rain AjaxRain有很多完美整合AJAX, CSS, DHTML 或 Javascript的实例&#xff0c;有一些Demo的确值得你去看一看&#xff0c;即使你不是网页设计(开发)师。 2.Ajax Daddy Ajax Daddy收集了大量漂亮的Web2.0工…