首页 > 其他分享 >大型网站技术架构:核心原理与案例分析—第六章:永无止境:网站的伸缩性架构

大型网站技术架构:核心原理与案例分析—第六章:永无止境:网站的伸缩性架构

时间:2023-08-25 10:32:47浏览次数:33  
标签:负载 架构 伸缩性 网站 永无止境 Hash 集群 均衡 服务器


1,网站架构的伸缩性设计
一般说来,网站的伸缩性设计可分为两类,一类是根据功能进行物理分离实现伸缩;一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。
1)不同功能进行物理分离实现伸缩
每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定的服务。具体可分为如下两种情况:
纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统的伸缩性。
横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。
2)单一功能通过集群规模实现伸缩
“当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车。”

2,应用服务器集群的伸缩性设计
1)HTTP重定向负载均衡
HTTP重定向服务器是一台普通的应用服务器,其唯一的功能就是根据用户的HTTP请求计算一台真实的Web服务器地址,并将该Web服务器地址写入HTTP重定向响应中返回给用户浏览器。
缺点是:浏览器需要两次请求服务器才能完成一次访问,性能较差;重定向服务器自身处理能力有可能成为瓶颈,整个集群的伸缩性规模有限;有可能使搜索引擎判断为SEO作弊。
2)DNS域名解析负载均衡
每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回,这样A记录中配置的多个服务器就构成一个集群,并可以实现负载均衡。
DNS域名解析负载均衡的优点是将负载均衡的工作转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦。
缺点是:DNS更新需要一定的时间;DNS负载均衡的控制权在域名服务商那里,网站无法对其做更多改善和更强大的管理。
大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段,即域名解析得到的一组服务器并不是实际提供Web服务的物理服务器,而是同样提供负载均衡服务的内部服务器,这组内部负载均衡服务器再进行负载均衡,将请求分发到真实的Web服务器上
3)反向代理负载均衡
大多数反向代理服务器同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不同Web服务器上。
由于反向代理服务器转发请求在HTTP协议层面,因此也叫应用层负载均衡。优点是和反向代理服务器功能集成在一起,部署简单。缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
4)IP负载均衡
在网络层通过修改请求目标地址进行负载均衡。其在内核进程完成数据分发,较反向代理负载均衡(在应用程序中分发数据)有更好的处理性能,但受限于负载均衡服务器的网卡贷款。
5)数据链路层负载均衡
在通信协议的数据链路层修改mac地址进行负载均衡,又叫做三角传输模式。负载均衡数据分发过程中不修改IP地址,只修改目的mac地址,通过配置真是物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一致,从而达到不修改数据包的源地址就可以进行数据分发的目的。这种负载均衡方式又称直接路由方式DR
在Linux平台上最好的二链路层负载均衡的开源产品是LVS(Linux Virtual Server)
6)负载均衡算法
轮询:所有请求被一次分发到每台应用服务器上
加权轮询:按照配置的权重将请求分发到每个服务器,高性能的服务器能分配更多请求。
随机:请求随机分配到各个服务器
最小链接:记录每个应用服务器正在处理的连接数,将新到的请求分发到最少连接的服务器上
源地址散列:根据请求来源的IP地址进行Hash计算,得到应用服务器,这样来自同一个IP地址的请求总在同一个服务器上处理,请求的上下文信息可以存储在这台服务器上,实现会话粘滞。

3,分布式缓存集群的伸缩性设计
1)Memcached分布式缓存集群的访问模型
应用程序输入需要写缓存的数据<K,V>,API将K输入路由算法模块,路由算法根据K和Memcached集群服务器列表计算得到一台服务编号NODE1,静儿得到该机器的IP地址和端口。API调用通信模块和编号为NODE1的服务器通信,将数据<K,V>写入服务器,完成缓存写操作;
读缓存使用同样的路由算法和服务器列表,通过K值访问相同的服务器去读取相同的缓存。
2)路由算法:
简单的使用余数Hash:用服务器数目初一缓存数据KEY的Hash值,余数为服务器列表下标编号
一致性Hash算法:构造一个长度为0~2^32的整数环,根据节点名称的Hash值,将缓存服务器节点放置在这个Hash环上,然后根据需要缓存的数据的Key值计算得到其Hash值,然后再Hash环上顺时针查找距离这个Key的Hash值最近的缓存服务器节点,完成Key到服务器的Hash映射查找

4,数据存储服务器集群的伸缩性设计
1)关系数据库集群的伸缩性设计
数据库主从读写分离
数据分库:不同业务数据表部署在不同的数据库集群上(限制是:跨库的表不能进行Join操作)
数据表拆分
目前网站在线业务应用中比较成熟的支持数据分片的分布是关系数据库产品主要由开源的Ameoba和Cobar。
Cobar是一个分布式关系数据库访问代理,介于应用服务器和数据库服务器之间。
Cobar的伸缩有两种:Cobar服务器集群的伸缩和MySQL服务器集群的伸缩。
2)NoSQL数据库的伸缩性设计
以HBase为例:其主要依赖其可分裂的HRegion及可伸缩的分布式文件系统HDFS来实现伸缩性

标签:负载,架构,伸缩性,网站,永无止境,Hash,集群,均衡,服务器
From: https://blog.51cto.com/u_2148212/7227236

相关文章

  • 基于springboot的音乐网站
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足,创建了一个计算机管理音乐网站的方案。文章介绍了音乐网站的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数......
  • B/S 架构诞生的历史背景
    B/S架构(Browser/Server架构),又称为Web架构,是一种应用程序的体系结构,将用户界面和业务逻辑分离在不同的层次,通过浏览器作为客户端来访问远程服务器上的应用程序。这一架构的诞生是为了应对日益增长的互联网应用需求,它带来了许多优势,例如跨平台性、易于维护、可扩展性以及低成本......
  • 解耦和扩展后端系统的新兴趋势 - 微服务架构
    本文介绍了微服务架构的概念、优势以及如何解耦和扩展后端系统。我们将讨论微服务架构的关键特征,如何设计和实施微服务,以及一些实际案例。本文旨在帮助开发人员理解和应用微服务架构,以提高系统的可扩展性和可维护性。引言随着互联网应用的不断发展,后端系统的复杂性和规模不断增......
  • 一些学习网站和自己写的两个计算周的函数
    toad:https://blog.csdn.net/zzpl139/article/details/127553557风控指标:https://blog.csdn.net/eroswang/article/details/117735703vintage:https://zhuanlan.zhihu.com/p/163206686风控模型:https://falbang.com/?p=350天池:https://tianchi.aliyun.com/competition/entrance/53183......
  • 架构:第五章:分布式架构的演进
    单一应用架构 适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。缺点:1、性能扩展比较难2、协同开发问题3、不利于升级维护垂直应用架构 通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有......
  • 架构:第七章:基于Dubbo+Zookeeper项目架构
    Dubbo:简单的介绍一下Dubbo?(Dubbo是什么)dubbo就是个服务调用的东东。为什么怎么说呢?因为Dubbo是由阿里开源的一个RPC分布式框架那么RPC是什么呢?就是不同的应用部署到不同的服务器上,应用之间想要调用没有办法直接调用,因为不在一个内存空间,需要通过网络通讯来调用,或者传达调......
  • 架构:第八章:架构师之路
                更多内容请见原文,原文转载自:https://blog.csdn.net/weixin_44519496/article/details/120615813 ......
  • pikachu网站文件包含漏洞
    pikachu网站文件包含漏洞本地文件包含在PHPstudy配置文件中,将allow_url_include的状态打开:Off修改为On(本地主机可不修改allow_url_include)打开本地文件包含模块把file1.php改成1.php,报错出路径构造url(相对路径):加这么多…\是为了保证到达服务器的E盘根目录,可以看到读取是......
  • 提升网站排名:SEO优化的实用策略和技巧
    导言:搜索引擎优化(SEO)是提高网站在搜索引擎中排名的关键策略,有助于提升网站的可见性和流量。本文将分享一些实用的SEO优化策略和技巧,帮助您在竞争激烈的网络世界中脱颖而出。一、关键词研究和优化关键词选择: 选择与您网站内容相关且受众搜索频率较高的关键词。关键词密度: 在......
  • 领域驱动设计(DDD):三层架构到DDD架构演化
    三层架构的问题在前文中,我从基础代码的角度探讨了如何运用领域驱动设计(DDD)来实现高内聚低耦合的代码。本篇文章将从项目架构的角度,继续探讨三层架构与DDD之间的演化过程,以及DDD如何优化架构的问题。三层架构作为一种常见的软件架构模式,将应用程序分为展示层、业务逻辑层和数据访......