大型网站的可伸缩性架构如何设计?

news/2024/5/20 2:48:05/文章来源:https://blog.csdn.net/javarrr/article/details/89708913

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

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

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

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

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

将不同功能分离部署可以实现一定程度的伸缩性,但是随着网站的访问量逐步增加,即使分离到最小粒度的独立部署,单一的服务器也不能满足业务规模的要求。因此必须使用服务器集群,即将相同服务部署在多态服务器上构成一个集群整体对外提供服务。

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

2.1. HTTP 重定向负载均衡

 

 

 

 

利用 HTTP 重定向协议实现负载均衡。

这种负载均衡方案的优点是比较简单。缺点是浏览器需要两次请求服务器才能完成一次访问,性能较差:重定向服务器自身的处理能力有可能成为瓶颈,整个集群的伸缩性规模有限;使用 HTTP 302 响应码重定向,可能使搜索引擎判断为 SEO 作弊,降低搜索排名。

2.2. DNS 域名解析负载均衡

 

 

 

 

利用 DNS 处理域名解析请求的同时进行负载均衡处理的一种方案。

在 DNS 服务器中配置多个 A 记录,如:

114.100.40.1 www.mysite.com
114.100.40.2 www.mysite.com
114.100.40.3 www.mysite.com

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

DNS 域名解析负载均衡的优点:

  • 将负载均衡的工作转交给了 DNS,省掉了网站管理维护的麻烦。
  • 同时,许多 DNS 服务器还支持基于地理位置的域名解析,即将域名解析成距离用户地理最近的一个服务器地址,这样可以加快用户访问速度,改善性能。

DNS 域名解析负载均衡的缺点:

  • DNS 是多级解析,每一级 DNS 都可能缓存 A 记录,当某台服务器下线后,即使修改了 DNS 的 A 记录,要使其生效也需要较长时间。这段时间,依然会域名解析到已经下线的服务器,导致用户访问失败。
  • DNS 的负载均衡的控制权在域名服务商那里,网站无法对其做更多改善和更强大的管理。

2.3. 反向代理负载均衡

 

 

 

 

大多数反向代理服务器同时提供反向代理和负载均衡的功能。

反向代理服务器的优点是部署简单。缺点是反向代理服务器时所有请求和响应的中转站,其性能可能会成为瓶颈。

2.4. IP 负载均衡

 

 

 

 

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

IP 负载均衡在内核完成数据分发,所以处理性能优于反向代理负载均衡。但是因为所有请求响应都要经过负载均衡服务器,集群的最大响应数据吞吐量受制于负载均衡服务器网卡带宽。

2.5. 数据链路层负载均衡

 

 

 

 

数据链路层负载均衡是指在通信协议的数据链路层修改 mac 地址进行负载均衡。

这种方式又称作三角传输方式,负载均衡数据分发过程中不修改 IP 地址,只修改目的 mac 地址,通过配置真实物理服务器集群所有机器虚拟 IP 和负载均衡服务器 IP 地址一致,从而达到不修改数据包的源地址和目的地址就可以进行数据分发的目的,由于实际处理请求的真实物理服务器 IP 和数据请求目的 IP 一致,不需要通过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。这种负载方式又称作直接路由方式。

在 Linux 平台上最好的链路层负载均衡开源产品是 LVS(Linux Virtual Server)。

2.6. 负载均衡算法

负载均衡服务器的实现可以分为两个部分:

  1. 根据负载均衡算法和 Web 服务器列表计算得到集群中一台 Web 服务器的地址。
  2. 将请求数据发送到该地址对应的 Web 服务器上。

负载均衡算法通常有以下几种:

  • 轮询(Round Robin) - 所有请求被依次分发到每台应用服务器上,即每台服务器需要处理的请求数据都相同,适合于所有服务器硬件都相同的场景。
  • 加权轮询(Weighted Round Robin) - 根据服务器硬件性能情况,在轮询的基础上,按照配置权重将请求分发到每个服务器,高性能服务器能分配更多请求。
  • 随机(Random) - 请求被随机分配到各个应用服务器,在许多场合下,这种方案都很简单实用,因为好的随机数本身就很平均,即使应用服务器硬件配置不同,也可以使用加权随机算法。
  • 最少连接(Least Connection) - 记录每个应用服务器正在处理的连接数,将新到的请求分发到最少连接的服务器上,应该说,这是最符合负载均衡定义的算法。
  • 源地址 Hash(Source Hash) - 根据请求来源的 IP 地址进行 Hash 计算,得到应用服务器,这样来自同一个 IP 地址的请求总在同一个服务器上处理,该请求的上下文信息可以存储在这台服务器上,在一个会话周期内重复使用,从而实现会话粘滞。

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

一致性 HASH 算法

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

4.1. 关系型数据库的伸缩性设计

  • 主从复制 - 主流关系型数据库一般都支持主从复制。
  • 分库 - 根据业务对数据库进行分割。制约条件是跨库的表不能进行 Join 操作。
  • 分表 - 使用数据库分片中间件,如 Cobar 等。

4.2. NoSql 数据库的伸缩性设计

一般而言,Nosql 不支持 SQL 和 ACID,但是强化了对于高可用和伸缩性的支持。

欢迎工作一到五年的Java工程师朋友们加入Java程序员开发: 721575865

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

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

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

相关文章

千万级用户的大型网站,应该如何设计其高并发架构?

目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用分布式缓存抗下读…

react+redux+ant+axios+iframe实现网站门户

一个框架壳子,技术栈reactreduxantaxiosiframe,实现侧边栏与导航栏还有头部,对打开的页签进行缓存,使用iframe与各个子系统页面相连。 对打开的页签进行缓存即使刷新页面的tag也不会丢失,界面如下: 这个实现的功能是侧…

某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万。

http://www.mianwww.com/html/2012/11/17432.html PS: 据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试题的理想环境。 存储结构 首先,我们用一张用户积分表user_score来…

linux服务器做301跳转,网站seo怎么实现301跳转,linux服务器设置301重定向方法!

原标题:网站seo怎么实现301跳转,linux服务器设置301重定向方法! 在SEO优化中,这些已经存在可能已被收录的页面链接,既不能贸然的删除又不能放任不管,由于这跟网站的权重是挂钩的,以是这个时辰301定向就派上用场了。301…

WEB阶段6:过滤器监听器全局字符修改案例用户权限过滤案例装饰者模式过滤敏感词汇统计当前网站在线人数

过滤器&监听器&全局字符修改案例&用户权限过滤案例&装饰者模式过滤敏感词汇&统计当前网站在线人数 回顾 JSP的页面脚本元素 组成部分语法格式JSP代码片段<% Java代码 %>JSP声明<%! 声明全局变量 %>JSP脚本表达式<% 变量值 %>注释<…

扩展 jQuery EasyUI Datagrid 数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)

客户需求&#xff1a; jQuery EasyUI Datagrid 用户列表鼠标悬停/离开数据行时显示人员头像&#xff08;onMouseOver/onMouseOut&#xff09; 如图所示&#xff0c;Datagrid 鼠标悬停/离开数据行时切换了不同的样式显示&#xff1a; 此时用谷歌开发者工具审查鼠标悬停行元素时…

推荐一款在线伪原创工具,很适合做seo的朋友

打开常用浏览器,360极速&#xff0c;UC&#xff0c;谷歌浏览器均可这里就打开谷歌做演示 浏览器中输入http://www.yzcopen.com/选着站长seo工具 找到第一行"文章伪原创"工具 复制自己的文章即可点击生成伪原创 伪原创文章对于各大搜索引擎来说&#xff0c;收录会很不…

分享一波我是怎么让一个新网站IP量一天翻15倍的,腾讯云:DDOS攻击

一直想写一篇文章&#xff0c;和大家分享一下我的一个在线工具网站如何将网站的日IP访问量做到一天翻15倍的技巧。现在想想是时候可以分享一些了&#xff01;正如标题所说&#xff0c;在一定时间内做一个日IP访问量一天翻15倍的的网站有可能吗&#xff1f;当然有可能了。这也是…

查看当前网站的cookie的两种快捷方法

1.在浏览器的地址栏输入&#xff1a;javascript:alert(document.cookie) (不区分大小写)&#xff0c;就会弹出你在当前网页登录的cookie信息。 注意&#xff1a;你把以上复制进入地址栏后会发现&#xff0c;“javascript”字符串消失不见&#xff0c;不管“javascript”里面哪…

大型网站后台架构的演变

随着用户访问量的不断增加&#xff0c;网站的后台也会不断变化以应对需求。本文主要从一个小型网站到大型网站的过度与变化来陈述。 1.1 网站后台架构 主要指由web server 、应用服务器、数据库、存储、监控等组成的网站后台系统。 1.2 架构演变 个人站点后台架构。如图2-1…

大型网站的高可用分析

本文主要分析网站的高可用性&#xff0c;从应用需求、用户角度展开分析。 1.1 高可用性 “高可用性”(High Availability) 通常用来描述一个系统&#xff0c;经过特殊设计&#xff0c;减少停止服务的时间&#xff0c;从而使其服务保持高度的可使用性。 计算机系统的可靠性用…

大型网站后台架构的web server与缓存

网站的web server与缓存 1.1 Web server Webserver 用来解析HTTP协议。当web 服务器接收到一个HTTP请求时&#xff0c;会返回一个HTTP响应&#xff0c;例如送回一个HTML页面。为了处理一个请求&#xff0c;web服务器可以响应一个静态页面或者图片。进行页面跳转&#xff0c;…

大型网站的负载均衡器、db proxy和db

大型网站的负载均衡器、db proxy和db 本文主要分析网站后台架构中的负载均衡器&#xff0c;企业常用的硬件负载均衡器软件负载均衡器、数据库代理服务器和数据库。 1.1 负载均衡 在大型网站部署中&#xff0c;负载均衡至少有三层部署。第一层为web server或者缓存代理之上的…

大型网站的存储

本文主要论述一下常用的存储产品和技术。 1.1 存储 存储设备是网站后台架构中&#xff0c;最底层的部分。也是最重要的部分。因为一旦存储设备出现问题&#xff0c;将直接导致上层的数据层和应用层的服务停止。严重的存储设备的损坏以及不可恢复的数据丢失会给企业造成巨大的…

大型网站的监控、报警与故障转移

本章主要从大型网站的后台监控机制、报警机制和故障转移、服务切换等内容来论述。然后给出一个监控、报警和故障转移的解决方案。 1.1 监控预警 现代大型互联网公司主要有电子商务公司、社交网站公司和搜索引擎公司。在电子商务网站公司中&#xff0c;taobao.com的点击量在国…

【项目记录】移动端购物网站首页/登录页/注册页

1-1初始化 1&#xff09;vue create jingdong 勾选sass语法、哈希路由 删除git相关 2&#xff09;npm run serve启动 1-2目录简介 插件 Vetur高亮显示、Eslint校验语法 入口文件&#xff1a;main.js 1.创建一个APP实例 2.使用router 3.使用store&#xff08;属vuex&#xff0c;…

基于javaweb大棚蔬菜管理系统网站加后台

软件环境&#xff1a;eclipse2020 tomcat9.0 mysql5.5, jdk1.8 开发技术&#xff1a;java, jsp, servlet,layui,bootstrap&#xff0c;ajax 系统功能&#xff1a; 基础功能&#xff1a;登录注册 1、后台管理&#xff08;管理员端&#xff09; &#xff08;1&#xff09;用…

基于javaweb流浪动物救助网站(前端+后端)

一、系统简介 本项目采用eclipse工具开发&#xff0c;layuijspservletjquery技术编写&#xff0c;数据库采用的是mysql&#xff0c;navicat开发工具。 系统一共分为2个角色分别是&#xff1a;领养用户&#xff0c;管理员 二、模块简介 管理员 1、登录 2、个人信息管理 3、…

基于javaweb新闻网站管理系统

一、系统简介 本项目采用eclipse工具开发&#xff0c;jspservletjquery技术编写&#xff0c;数据库采用的是mysql&#xff0c;navicat开发工具。 系统一共分为3个角色分别是&#xff1a;用户&#xff0c;管理员&#xff0c;编辑者 二、模块简介 管理员 1、登录 2、个人信息…

基于javawe城市旅游网站系统

一、系统简介 本项目采用eclipse工具开发&#xff0c;jspservletjquery技术编写&#xff0c;数据库采用的是mysql&#xff0c;navicat开发工具。 系统一共分为2个角色分别是&#xff1a;管理员&#xff0c;用户 二、模块简介 管理员 1、登录 2、个人信息管理 3、用户管理 …