web网站高并发解决办法

news/2024/5/18 23:43:40/文章来源:https://blog.csdn.net/qq_42690811/article/details/94915258

声明:这是我看过的最好的关于高并发文章的讲解,本人这里也是引用他人的文章。

先附送这位尊敬的作者的好文章连接:https://www.cnblogs.com/elivn/p/9144353.html
以下是我的抄录

1. 什么是高并发?

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

2. 如何提升系统的并发能力

互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。

垂直扩展:提升单机处理能力。垂直扩展的方式又有两种:
(1)增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;
(2)提升单机架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间

在互联网业务发展非常迅猛的早期,如果预算不是问题,强烈建议使用“增强单机硬件性能”的方式提升系统并发能力,因为这个阶段,公司的战略往往是发展业务抢时间,而“增强单机硬件性能”往往是最快的方法。

不管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。

水平扩展:只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,以及互联网公司架构各层常见的水平扩展实践,是本文重点讨论的内容。

3. 常见的互联网分层架构

在这里插入图片描述
常见互联网分布式架构如上,分为:
(1)客户端层:典型调用方是浏览器browser或者手机应用APP
(2)反向代理层:系统入口,反向代理
(3)站点应用层:实现核心应用逻辑,返回html或者json
(4)服务层:如果实现了服务化,就有这一层
(5)数据-缓存层:缓存加速访问存储
(6)数据-数据库层:数据库固化数据存储

整个系统各层次的水平扩展,又分别是如何实施的呢?

4. 分层水平扩展架构实践

反向代理层的水平扩展
在这里插入图片描述
反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。

站点层的水平扩展
在这里插入图片描述
站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。
当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。

服务层的水平扩展
在这里插入图片描述
服务层的水平扩展,是通过“服务连接池”实现的。
站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发。如果需要优雅的进行服务层自动扩容,这里可能需要配置中心里服务自动发现功能的支持。

数据层的水平扩展
在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,以达到扩充系统性能的目的。

互联网数据层常见的水平拆分方式有这么几种,以数据库为例:
按照范围水平拆分
在这里插入图片描述
每一个数据服务,存储一定范围的数据,上图为例:
user0库,存储uid范围1-1kw
user1库,存储uid范围1kw-2kw

这个方案的好处是:
(1)规则简单,service只需判断一下uid范围就能路由到对应的存储服务;
(2)数据均衡性较好;
(3)比较容易扩展,可以随时加一个uid[2kw,3kw]的数据服务;
不足是:
(1)请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大;

按照哈希水平拆分
在这里插入图片描述
每一个数据库,存储某个key值hash后的部分数据,上图为例:
user0库,存储偶数uid数据
user1库,存储奇数uid数据

这个方案的好处是:
(1)规则简单,service只需对uid进行hash能路由到对应的存储服务;
(2)数据均衡性较好;
(3)请求均匀性较好;
不足是:
(1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移;

这里需要注意的是,通过水平拆分来扩充系统性能,与主从同步读写分离来扩充数据库性能的方式有本质的不同。

通过水平拆分扩展数据库性能:
(1)每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升;
(2)n个服务器上的数据没有交集,那个服务器上数据的并集是数据的全集;
(3)数据水平拆分到了n个服务器上,理论上读性能扩充了n倍,写性能也扩充了n倍(其实远不止n倍,因为单机的数据量变为了原来的1/n);

通过主从同步读写分离扩展数据库性能:
(1)每个服务器上存储的数据量是和总量相同;
(2)n个服务器上的数据都一样,都是全集;
(3)理论上读性能扩充了n倍,写仍然是单点,写性能不变;

缓存层的水平拆分和数据库层的水平拆分类似,也是以范围拆分和哈希拆分的方式居多,就不再展开。

5. 总结

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。前者垂直扩展可以通过提升单机硬件性能,或者提升单机架构性能,来提高并发性,但单机性能总是有极限的,互联网分布式架构设计高并发终极解决方案还是后者:水平扩展。

互联网分层架构中,各层次水平扩展的实践又有所不同:
(1)反向代理层可以通过“DNS轮询”的方式来进行水平扩展;
(2)站点层可以通过nginx来进行水平扩展;
(3)服务层可以通过服务连接池来进行水平扩展;
(4)数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;

各层实施水平扩展后,能够通过增加服务器数量的方式来提升系统的性能,做到理论上的性能无限。

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

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

相关文章

爬取网站的数据,对返回为json格式的利用json模块进行处理以及json的常用方法

Json数据: JavaScript Object Notation, 一种轻量型数据交换格式, 便于阅读和交换数据.数据的返回是一个json格式 from urllib.request import urlopenurl "http://ip-api.com/json/110.84.0.129" urlObj urlopen(url)# 服务端返回的页面信息, 此处为字…

某招聘网站“数据分析”相关岗位招聘信息爬取并分析

确定目标 简单分析数据分析相关岗位的薪酬状况及技能要求;尝试数据分析从数据获取到数据分析报告撰写的整个数据分析流程,学习爬虫、数据清洗、数据分析相关技巧。 数据获取 获取的岗位数据来源于某招聘网站,采取爬虫的方式获取,岗位搜索…

【网站流量分析】某网站网站流量分析报告(CNZZ统计)

某网站流量分析报告 1思维导图2流量分析2.1趋势分析2.2对比分析2.3当前在线 3来源分析3.1来源分类3.2搜索引擎3.3搜索词3.4受访界面 4访客分析4.1区域分布4.2运营商4.3终端4.4新老访客4.5忠诚度4.6活跃度4.7用户结构 5结论与建议5.1结论5.2建议 1思维导图 2流量分析 2.1趋势分…

大流量网站的底层系统架构

动态应用,是相对于网站静态内容而言, 是指以c/c、php、Java、perl、.net等 服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通 常与数据库系统、缓存系统、分布式存储系统等密不可分。 大型动态应用…

某网站电商运营数据分析案例

PHPStat是目前国内最专业的电子商务数据分析运营平台,专注为电子商务企业提供网站访客转化行为、订单分析、商品分析、页面转化分析、营销转化分析的整体优化解决方案。目前PHPStat已经成功为苏宁易购、湖南卫视快乐购、天天网、某网站、鸿星尔克、高鸿商城、以纯旗…

MySQL在大型网站的应用架构演变

MySQL在大型网站的应用架构演变 【编者按】作为最流行的开源数据库,MySQL被广泛应用在Web应用程序以及其它中小型项目上。然而不可忽视的是,在许多大型IT公司中,MySQL在高度优化和定制化后,已逐渐偏离了原有的开源版本&#xff0c…

大型网站技术架构探讨

 目录: 1、大型网站架构的目标与挑战 2、网站架构演变及其技术脉络 3、架构设计理论与原则 何为“大型”网站? 没有统一的判断标准,流量大小是一个重要指标(日均流量至少IP>1,000,000才算大型网站&…

如何构建高扩展性网站?

 阅读目录 主要内容 化简方程 分布工作 横向扩展设计 使用正确的工具 不要做重复的工作 积极利用缓存 从错误中吸取教训 数据库原则 容错设计与故障控制 避免或分发状态 异步通信和消息总线 其他原则 参考 主要内容 本书从多个方面围绕高…

精选31个网站界面设计实践教程

设计一个网站从来都不是一件容易的事。如果你去询问一位在该行业有丰富经验的网页设计师,他会告诉你以前根本没有太多关于Web设计/开发的资源、文章和各种沟通交流平台,更不用说高质量免费教程了。 如果您打算建立自己的个人网站或者重新设计您的博客的主…

10个提高网站可用性的实用技巧

不论是企业网站、个人博客,或者购物网站、游戏网站,我们都希望能吸引访问者并且给他们留下愉快的访问体验。 可用性是用户体验的一种度量,它可以用访问者完成网站功能的方便程度来描述——无论是通过自身知识还是通过学习新方式来完成这种功能…

基于ASP.NET的网站发布、打包和安装

安装配置环境: 操作系统:Win7旗舰版 Visual Studio版本:VS2010 一、在发布、打包和安装网站之前,首先需要安装配置IIS。Win7默认已安装IIS。 1、打开IIS管理器功能。 打开控制面板-->程序->打开或关闭Windows功能 2、打…

ASP.NET网站发布中的错误类型

错误类型1&#xff1a; 解决方法&#xff1a;删除配置文件web.config里面的 <authentication mode"Windows" />行。 错误类型2&#xff1a; 分析&#xff1a;.Net Framework的版本不对应&#xff0c;要求Framework版本为4.0。 解决方法&#xff1a; 1、安装4.…

fastjson反序列化方法JSON.parseObject(String str,ClassT clazz)

fastjson这一工具包帮助我们进行java对象和json格式的字符串之间的相互转换。对象到字符串的过程&#xff0c;我们称之为序列化&#xff1b;反之&#xff0c;我们称为反序列化。 现在我们就来谈谈fastjson提供的反序列化方法&#xff0c;本篇只讨论按照指定的字节码返回相应对…

视频网站套上CDN是什么效果?

1、什么是CDN加速&#xff1f; 内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;是在现有 Internet 中增加的一层新的网络架构&#xff0c;由遍布全国的高性能加速节点构成。这些高性能的服务节点都会按照一定的缓存策略存储您的业务内容&#xff0c…

CMU-CSAPP-深入理解计算机系统-P1-courseoverview

首先让我们看一个实例 原因是数据是如何在内存中布局。C不会进行边界检查&#xff0c;容易崩溃 这两种程序功能是一样的 但是他们的时间完全不一样

1001、单机安装基于LNMP结构的WordPress网站、web与数据库服务分离

project 第1部分 文章目录 project 第1部分project1 整体架构一、单机安装基于LNMP&#xff08;Linux Nginx Mysql PHP&#xff09;结构的WordPress网站1、 基本环境准备2、配置nginx3、配置数据库服务器4、部署wordpress 二、web与数据库服务分离准备数据库服务器自由扩展&…

阿里云——手把手教你搭建个人网站

言归正传&#xff0c;阿里算是做云服务最早的一批了&#xff0c;当时的其他几家有名气的现在基本都死了&#xff0c;只有阿里这支部队熬过来了&#xff0c;就我了解的几家云商做个简单的介绍&#xff1a; 青云&#xff1a;有情怀有理想&#xff0c;不过短板也很明显&#xff0c…

Servlet+JSP+MySQL社交网站

在网站架构上&#xff0c;采用MVC设计模式&#xff0c;实现将网站的页面显示与业务逻辑分离&#xff0c;使其各司其职&#xff1b;在数据库操作上&#xff0c;利用DAO模式&#xff08;Data Access Object数据存取对象&#xff09;技术&#xff0c;将程序中的类对象映射成为数据…

《大型网站系统与JAVA中间件实践》pdf版电子书网盘附下载链接+仪式感技术书阅读法

附Java/C/C/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全&#xff1a; 书单导航页&#xff08;点击右侧 极客侠栈 即可打开个人博客&#xff09;&#xff1a;极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50本&#xff08;珍藏版) ②【算法…

《大型网站技术架构:核心原理与案例分析李智慧》pdf版电子书网盘附下载链接+仪式感技术书阅读法

附Java/C/C/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全&#xff1a; 书单导航页&#xff08;点击右侧 极客侠栈 即可打开个人博客&#xff09;&#xff1a;极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50本&#xff08;珍藏版) ②【算法…