iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >大型网站的可伸缩性架构如何设计?
  • 515
分享到

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

2023-06-02 18:06:15 515人浏览 薄情痞子
摘要

1. 网站架构的伸缩性设计1.1. 不同功能进行物理分离实现伸缩纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性。横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。1.2. 单一功能通过集群规模

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.com114.100.40.2 www.mysite.com114.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,但是强化了对于高可用和伸缩性的支持。

--结束END--

本文标题: 大型网站的可伸缩性架构如何设计?

本文链接: https://www.lsjlt.com/news/230869.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 大型网站的可伸缩性架构如何设计?
    1. 网站架构的伸缩性设计1.1. 不同功能进行物理分离实现伸缩纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性。横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。1.2. 单一功能通过集群规模...
    99+
    2023-06-02
  • golang函数并发缓存的可伸缩性设计
    函数并发缓存可以通过内存存储函数计算结果来优化高并发场景下的性能。它使用并发安全映射存储结果,并根据需要实现缓存失效策略。例如,一个用于计算斐波那契数列的并发缓存示例展示了其在避免重复计...
    99+
    2024-05-02
    golang 并发缓存
  • Samza的扩展性和可伸缩性如何
    Samza具有很好的扩展性和可伸缩性,主要体现在以下几个方面: 支持水平扩展:Samza基于Apache Kafka构建,可以很...
    99+
    2024-04-02
  • 大型网站背后的高性能系统架构设计方法是什么
    本文小编为大家详细介绍“大型网站背后的高性能系统架构设计方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“大型网站背后的高性能系统架构设计方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 性能...
    99+
    2023-06-02
  • Load Balance和分布式架构下,Java容器如何保证高可用性和可伸缩性?
    随着互联网应用的快速发展,越来越多的应用走向了分布式架构,同时也出现了越来越多的Java容器,如Tomcat、Jetty、Undertow等。在分布式架构中,负载均衡是一个非常重要的概念,它可以将请求分发到多台服务器上,从而实现高可用性和...
    99+
    2023-09-10
    容器 load 分布式
  • 大型互联网系统架构是怎么设计的
    这篇文章主要介绍“大型互联网系统架构是怎么设计的”,在日常操作中,相信很多人在大型互联网系统架构是怎么设计的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”大型互联网系统架构是怎么设计的”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • Python 异步编程和分布式架构:如何提高应用程序的可伸缩性?
    随着应用程序的不断发展,可伸缩性问题成为了越来越普遍的挑战。如果你的应用程序需要处理大量的并发请求,那么你需要考虑使用异步编程和分布式架构来提高应用程序的可伸缩性。 Python 是一种强大的编程语言,它支持异步编程和分布式架构,可以用来...
    99+
    2023-10-15
    异步编程 编程算法 分布式
  • css中如何实现Flex布局的可伸缩性
    这篇文章将为大家详细讲解有关css中如何实现Flex布局的可伸缩性,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。FlexibilityFlex伸缩布局决定性的特性是让伸缩...
    99+
    2024-04-02
  • 如何用 C++ 函数设计和实现可伸缩的并发系统?
    通过遵循原子性、线程安全性、可重用性原则,并利用线程、锁、原子变量等机制,c++++ 提供了创建可扩展并发系统所需的强大特性,例如并行求和等实战案例中所示。 利用 C++ 函数构建可扩...
    99+
    2024-04-27
    c++ 并发系统
  • web网站的可扩性展架构是什么
    这篇文章主要讲解了“web网站的可扩性展架构是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web网站的可扩性展架构是什么”吧!扩展性(Extensibility) - 指对现...
    99+
    2023-06-02
  • PHP Session 跨域的高可用性架构设计
    概述在处理分布式系统中,跨域的会话管理是一个非常具有挑战性的问题。当服务被设计为水平扩展和高可用性时,会话的状态需要共享和同步,以保持一致性。本文将介绍一种使用 PHP 会话管理解决方案,实现跨域的高可用性架构设计,并提供具体的代码示例。背...
    99+
    2023-10-21
    PHP session 跨域
  • Dreamweaver如何设计网站的demo原型
    这篇文章给大家分享的是有关Dreamweaver如何设计网站的demo原型的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。下载安装Dreamweaver下载Dreamweavercs6,本文提供软件下载,下载安装即...
    99+
    2023-06-08
  • 如何通过SSH实现高可靠性的Linux SysOps架构设计
    要通过SSH实现高可靠性的Linux SysOps架构设计,可以采取以下几个步骤:1. 多节点部署:使用多个节点来实现高可靠性架构。...
    99+
    2023-10-09
    Linux
  • 网站设计中合理架构CSS是怎样的
    这篇文章将为大家详细讲解有关网站设计中合理架构CSS是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、架构CSS在当前浏览器普遍支持的前提下,css...
    99+
    2024-04-02
  • 网站的信息架构怎样设计更合理
    一个合理的网站信息架构应该基于用户的需求和行为习惯,遵循简洁、清晰、易用的原则。以下是一些设计更合理的网站信息架构的建议: 确定...
    99+
    2024-04-17
    建站
  • 如何进行大数据平台架构的设计
    本篇文章为大家展示了如何进行大数据平台架构的设计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  关于大数据平台架构的设计探究。麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面...
    99+
    2023-06-02
  • Golang开发建议:如何设计可扩展的架构
    Golang作为一门现代化的编程语言,在近年来越来越受到开发者的关注和喜爱。它以其优秀的并发能力、高性能和可靠性而闻名。然而,要构建一个可扩展的架构需要额外的考虑和设计。本文将分享一些在Golang开发过程中设计可扩展架构的建议。使用接口在...
    99+
    2023-11-22
    架构设计 可扩展性 Golang开发
  • PHP底层的高可扩展性架构设计与实现
    PHP底层的高可扩展性架构设计与实现随着互联网技术的迅速发展,PHP作为一种广泛应用的后台开发语言,其底层的架构设计和实现变得尤为重要。高可扩展性是一个优秀的框架或语言必须具备的核心特性之一。本文将探讨PHP底层的高可扩展性架构设计与实现,...
    99+
    2023-11-08
    架构设计 高可扩展性 PHP底层
  • 一个成熟的大型网站系统架构演化过程
    这篇文章主要介绍“一个成熟的大型网站系统架构演化过程”,在日常操作中,相信很多人在一个成熟的大型网站系统架构演化过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”一个成熟的大型网站系统架构演化过程”的疑惑有所...
    99+
    2023-06-10
  • 微服务架构中如何处理服务的自动化伸缩和调度?
    随着互联网的不断发展,传统的单一的、封闭的应用架构已经无法满足应用的需求,微服务架构已经成为了越来越多企业的首选架构。微服务架构具有高度的可扩展性、高并发性、可靠性等优点,但是微服务架构中涉及到许多服务的自动化伸缩和调度问题,如何解决这些问...
    99+
    2023-05-17
    微服务架构 自动化伸缩 调度
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作