支撑200并发_从入门到高手,高并发网站成神之路!

news/2024/5/12 18:07:18/文章来源:https://blog.csdn.net/weixin_42501881/article/details/112589566

8a743ac8e60b85ac6e9b893209460b28.png

高并发网站,不是设计出来的,是一步步调整出来的。一,什么是高并发
高并发是互联网分布式系统架构设计中必须考虑的因素之一,通常指:通过设计保证能够同时并行处理很多请求。
高并发指标:
响应时间:系统对请求做出响应时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统响应时间。
吞吐量:单位时间内处理的请求数量。
每秒查询量QPS:每秒响应请求数。在互联网这个指标和吞吐量区分的没有这么明显。
并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度代表系统并发用户数。二,创业初期系统
假如我们现在有一家创业公司,注册用户10万,每天有10%的用户访问系统也就是1万的活跃用户。按照二八原则,每天高峰用户会达到80%,也就是8000人。假如每个人活跃4小时,每个人提交20次表单,也就是说有16万次提交在4小时内,平均每秒10次。
按照互联网通常配置应用服务4核8G,数据库服务16核32G。
比如每次请求对数据库3次请求,也就是说每秒30次。
按照这台数据库配置,支撑是绝对没有问题的。三,集群部署
在CEO带领下公司得到了高速发展,注册用户达到了500万。此时日活用户50万,高峰时对系统每秒请求是500次。然后对数据库请求1500次,这个时候会怎样?
按照上面业务系统配置,如果业务逻辑比较重,比较消耗CPU,此时的机器CPU可能负载过高。
然后数据库层面,以上述配置,对于1500次每秒请求,基本还是可以接受。
所以此时需要做的一件事情,就是把系统集群化部署。
在前面挂一个负载均衡层,把请求均匀的打到系统层面,比如再加一台应用服务器,这样每台应用服务器请求只有250/s。

b785970b16c656a586202224e0301091.png

四,数据库分库分表+读写分离
此时用户注册达到1000万,日活跃用户100万。对系统每秒请求1000次,系统层面可以继续通过集群化方式来扩容,通过负责均衡层把请求均匀分布。
此时对于数据库层面请求3000/s。
通常来说,对于普通的16核32G机器配置,一般的线上经验是:不要让其每秒请求支撑超过2000,一般控制在2000左右。
所以需要对数据库进行分库分表+读写分离。每个主库至少挂一个从库。
假如读写并发3000/s,这其中1000写,2000读。
这样分库后主库写500/s,从库读1000/s

814e3c41631b2972874ea38fd4d72fd2.png

五,数据库进一步拆分
公司业务迅速发展,注册用户达到了2000万!每天活跃用户200万!每天表单新增数据50万条!高峰请求量达到了1万!
同时公司带来了两轮融资,估值达到了几亿美金!一只朝气蓬勃的幼年独角兽诞生的节奏。
经过一段时间的运行现在表中数据已经到了两三千万条数据,勉强还能支撑。
但是,眼看数据库访问性能越来越差,单表数据量越来越大!
然后高峰请求现在是1万,系统可以部署20台机器,平均每台支撑500请求,还能抗的住,没啥大问题。但数据库层面呢?
首先我们考虑一个问题,如何是数据库支撑每秒上万并发请求?
上面我们说了,单台数据库每秒请求不要超过2000,所以我们可以部署5台机器,
比如订单表,我们拆分到5个库中,db_order_01,db_order_02,db_order_03,db_order_04,db_order_05。
这样每天50万条数据,均分到每个库中10万条。如图

263ae7ef0b086ec630fd22a4c8680c58.png


但上述数据库架构还有一个问题,那就是单表数据量还是很大,如果订单一年有一亿条,每个表就有2000万,这也是太大了。
比如可以把订单表拆分为1000张表,这样1亿数据量分散到每个表中数据只有10万条,然后这1000张表分散到这5台数据库里。
写入数据库时候,需要路由两次,对订单Id进行hash后取模获取数据库地址,然后再根据表数据量取模,路由到那张表上。
这样1亿数据量每张表一年才10万条,10年才百万级数据量。
当然这5台数据库需要配置从库,毕竟在2000请求中,按照二八原则,有400写,1600读。这样主库的请求只有400/s,从库1600/s。

d11ecd2fc6272a866f25bf051f1fd8d6.png


具体的分库分表落地的时候,需要借助数据库中间件来实现分库分表和读写分离,大家可以自己参考 sharding-jdbc 或者 mycat 的官网即可,里面的文档都有详细的使用描述。六,缓存集群引入
业务不断发展,每秒1万访问已不在是高峰,系统需要支撑每秒几万的访问。但是不能仅仅考虑数据库层面的分库分表了,大家要知道“数据库其实本身不是用来承载高并发请求的”。
这个时候我们要结合业务,一般的业务都是写少读多,80%-90%访问的是热数据。这样我们可以把热数据放在缓存中。
另外缓存单机承载的并发量都在每秒几万,甚至每秒数十万,对高并发的承载能力比数据库系统要高出一到两个数量级。

a6271ededfd70cc7c27a376e7510dbf2.png

七,引入消息中间件集群
其实在高并发下,有一些请求是允许异步执行等待几十秒,甚至几分钟后落库。
此时完全可以引入消息中间件,然后基于MQ做一个削峰填谷。比如就以平稳的100/s的速度消费出来然后落入数据库中即可,此时就会大幅度降低数据库的写入压力。
消息中间件系统本身也是为高并发而生,所以通常单机都是支撑几万甚至十万级的并发请求的。

fde94866a60de348cd32b40202308a3c.png

八,总结
1,整个架构:可采用分布式架构,利用微服务架构拆分服务部署在不同的服务节点,避免单节点宕机引起的服务不可用!
2,负载均衡:使用nginx等对访问量过大的服务采用负载均衡,实现服务集群,提高服务的最大并发数,防止压力过大导致单个服务的崩溃!
3,WAF的部署,虽然WAF的接入必然会带来一定性能影响,但安全太重要了,对网站的防护必不可少,我们用的是ShareWAF这款产品为了减少对性能的影响,部署时,我们将其部署在了负载均衡之后。
3,数据库:采用主从复制,读写分离,甚至是分库分表,表数据根据查询方式的不同采用不同的索引比如b tree,hash,关键字段加索引,sql避免复合函数,避免组合排序等,避免使用非索引字段作为条件分组,排序等!减少交互次数,一定不要用select *!
4,加缓存:使用诸如memcache,redis,ehcache等缓存数据库定义表,结果表等等,数据库的中间数据放缓存,避免多次访问修改表数据!登录信息session等放缓存实现共享!诸如商品分类,省市区,年龄分类等不常改变的数据,放缓存,不要放数据库!同时要避免缓存雪崩和穿透等问题的出现导致缓存崩溃!
5,使用消息中间件:对服务之间的数据传输,使用诸如rabbit mq,kafka等等分布式消息队列异步传输,防止同步传输数据的阻塞和数据丢失!
6,多线程:现在的服务器都是多核心处理模式,如果代码采用单线程,同步方式处理,极大的浪费了CPU使用效率和执行时间
7,CDN加速:如果访问量实在过大,可根据请求来源采用CDN分流技术,避免大流量完成系统崩溃!
8,避免低效代码:不要频繁创建对象,引用,少用同步锁,不要创建大量线程,不要多层for循环!

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

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

相关文章

怎么用python自己写个网站_如何用Python搭建一个网站?

原标题:如何用Python搭建一个网站? 首先呢,你只有Python语言基础,现在想使用Python搭建一个网站。网站类似于豆瓣读书http://book.douban.com/,具体功能不需要豆瓣读书那么多。实话跟你说吧,有点难度,毕竟…

mysql建站工具_解说 Navicat for MySQL 创建工具

Navicat for MySQL 是一套管理和开发 MySQL 或 MariaDB 的理想解决方案,支持单一程序,可同时连接到 MySQL和MariaDB。这个功能齐备的前端软件为数据库管理、开发和维护提供了直观而强大的图形界面,给 MySQL 或 MariaDB 新手以及专业人士提供了…

Vue-cli seo 使用prerender-spa-plugin插件预渲染

使用vue-cli打包项目一般为spa项目,众所周知单页面应用不利于SEO,有ssr(服务端渲染)和预渲染两种解决方案,这里我们只讨论预渲染 vue-cli有2.0和3.0版本,解决方法是不一样的,我们要分开讨论。 vue-cli2.0版本 1.安装…

ASP.NET网站开发——用户控件与HttpHandle

用户控件与HttpHandle 一、用户控件 含义:用户控件是能够在其中放置标记和web服务器控件的容器,可以被看作一个独立的单元,拥有自己的属性和方法,并可被放入到ASPX页面上,其工作原理与ASP.NET页面非常相似。也可以这样…

ASP.NET网站开发——成员资格和角色管理

成员资格和角色管理 一、成员资格简介 ASP.NET成员资格支持下列功能: (1)创建新用户和密码。 (2)将成员资格信息(用户名、密码和支持数据)存储在Mixrosoft SQL ActiveDirectory或其他数据存储区。 &#xf…

ASP.NET网站开发——个性化用户配置概述

个性化用户配置概述 一、<profile>配置节 设置<profile>配置节时&#xff0c;经常对其中的三部分进行配置&#xff1a; 1.<profile>自身属性设置 2.<profile>配置节的字节<properties>属性设置 3.<profile>配置节的子节点<providers>…

ASP.NET网站开发——安全验证

安全验证 一、ASP.NET的安全模式 1.安全的必要性&#xff1a; &#xff08;1&#xff09;构造特殊的链接地址&#xff0c;导致文件内的数据泄漏。 &#xff08;2&#xff09;数据库泄露。 &#xff08;3&#xff09;安全防范的首要策略&#xff1a;所有的HTTP访问都要经过IIS&a…

ASP.NET网站开发——数据缓存技术

数据缓存技术 缓存概念&#xff1a;缓存是一种在计算机中广泛用来提高性能的技术。在web应用程序的上下文中&#xff0c;缓存用于在Http请求间保留页或者数据&#xff0c;并在无需多创建的情况下多次使用它们。 目的&#xff1a;节省应用程序处理时间和资源 缓存体系&#xff1…

毕业设计-电子商务网站(一)

个人觉的毕业设计对自己编码水平有很大的磨练&#xff0c;建议大家独立完整的完成自己的毕业设计&#xff0c;即使多花一些时间也无所谓。 设计毕业设计的时候建议大家先设计页面&#xff0c;再解决数据交互上的问题。 接下来我将为大家展示我的毕业设计&#xff0c;希望对大…

毕业设计-电子商务网站(二)

个人觉的毕业设计对自己编码水平有很大的磨练&#xff0c;建议大家独立完整的完成自己的毕业设计&#xff0c;即使多花一些时间也无所谓。 设计毕业设计的时候建议大家先设计页面&#xff0c;再解决数据交互上的问题。 接下来我将为大家展示我的毕业设计&#xff0c;希望对大…

网站跨域问题思维导图总结

自己学习总结了一些思维导图(持续更新中)&#xff0c;后面附有GitHub链接 ,分享给大家。https://github.com/panjianlong13/MindMapSummary

写个自己比较满意的用户注册系统(未来网站的一部分)(一)

学了那么久&#xff0c;是时候做一个可以让自己觉得满意的网站。但是因为要考四级&#xff0c;没太多时间&#xff0c;所以先写一部分。决定先写个用户注册系统。只是把想要复习的都用上&#xff0c;并没有考虑什么性能效率&#xff0c;也许不会打算用到的技术有c# &#xff0c…

18岁少女创社交网站成全球最年轻亿万富翁

“美女创业家”凯瑟琳库克 MyYearbook.com网站页面 网站在全美青少年中人气第一&#xff0c;广告年收入千万美元 现年18岁的美国少女凯瑟琳库克再度创造网络神话。目前&#xff0c;由她于3年前创建的MyYearbook.com网站成为全美第三大社交网站&#xff0c;并在全美校园少男少女…

[Debug实践]windbg解决网站服务器高CPU问题 转

[Debug实践]windbg解决网站服务器高CPU问题 高CPU是网站服务器常见的一种故障&#xff0c;很多windbg教程中都拿高CPU做例子。3月份我在公司服务器上也碰到一次&#xff0c;整个debug过程十分顺利且常规&#xff0c;但最终找到的原因却很有意思&#xff0c;与一个挂马行为有关。…

让个人pc上的iis网站可以在Internet上访问

背景&#xff1a; 相信很多人&#xff08;学生、工作的程序员&#xff09;都遇到过这种情况&#xff0c;自己做了个小网站&#xff08;给客户的演示项目、小的测试网站等&#xff09;&#xff0c;想让让局域网意外的人可以通过Internet访问你的网站&#xff0c;想让他们给你提点…

网站DIV+css弹性+固宽布局案例

当今用户的显示器越来越大的今天&#xff0c;之前的1024*768固宽布局有点越来越不合时宜&#xff0c;对大屏幕的用户而言&#xff0c;两侧空空的留白给人第一眼的印象是严重的屏幕浪费&#xff0c;作为网页设计师的你有责任给这一批用户一个良好的用户界面。 当然为了减少这种屏…

30个与众不同的国外优秀网站设计案例

当你开始设计网站的时候&#xff0c;脑海中应该有一个丰富的配色方案和字体方案。这个网络竞争激烈的时代&#xff0c;如何吸引用户到你的网站是非常有挑战是一件事。从设计角度来说&#xff0c;精美的有创意的网站能吸引住用户并让用户记住你的网站。因此&#xff0c;今天这篇…

使用模板创建站点

在WebMatrix的欢迎屏幕上有几种默认的选择&#xff0c;其中一个是从模板创建网站。我们选择它&#xff0c;WebMatrix又提供了几种友好的模板选择&#xff1a;空白站、入门网站、面包店、照片库和日历。 使用模板创建网站就是简单的点选模板名称&#xff0c;设置网站名称&#x…

PS网页设计教程III——在Photoshop中设计优雅的网站布局设计

作为编码者&#xff0c;美工基础是偏弱的。我们可以参考一些成熟的网页PS教程&#xff0c;提高自身的设计能力。套用一句话&#xff0c;“熟读唐诗三百首&#xff0c;不会作诗也会吟”。 本系列的教程来源于网上的PS教程&#xff0c;都是国外的&#xff0c;全英文的。本人尝试翻…

关于网站下拉导航的设置

网站的导航很多都是下拉的方式&#xff0c;如下图所示&#xff1a; 就是一种下拉菜单&#xff0c;导航的数据是以ul、li相互嵌套的方式存在的。 ------------------------------------------ <div class"head"><div class"logo"></div>&…