`
thinkerAndThinker
  • 浏览: 284645 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Web网站的几个并发量级

 
阅读更多

评价一个网站的“大小”,处于视角的不同,有很多种衡量的方法,类似文章数,页面数之类的数据非常明显,也没有什么可以争议的。但对于并发来说,争议非常之多,这里就从一个技术的角度开始,谈谈几个Web网站的数量级。

相信很多人谈论一个网站的热度,总免不了会询问日均PV,同时在线人数、注册用户数等运营数据,说实话从技术角度来说,这几个数值没有一个可以放在一起比较的——一个静态网站的PV跟一个SNS类/Web Game网站的PV根本就不是一回事。由于互联网有一个传说中的“3秒定律”,可能当下更多的网站技术指标要求1.5秒以内加载整页,或者至少可以达到阅读的标准。如果要较真什么“同时在线”,毫不客气的说,对于HTTP这类短链接的网络协议来说,在WebSocket还不普及的时代,能统计在线纯属扯淡,唯一能做的只是取个时间段,计算下访问用户而已。这些依然可以换算成QPS(Quest Per Second每秒请求数)。就并发而言,我唯一推崇的只有理论最大QPS和悲观QPS。

 

这里就大致根据理论最大QPS,给网站做几个分类

50QPS以下——小网站

没什么好说的,简单的小网站而已,就如同本站这样,你可以用最简单的方法快速搭建,短期没有太多的技术瓶颈,只要服务器不要太烂就好。

50~100QPS——DB极限型

大部分的关系型数据库的每次请求大多都能控制在0.01秒左右,即便你的网站每页面只有一次DB请求,那么页面请求无法保证在1秒钟内完成100个请求,这个阶段要考虑做Cache或者多DB负载。无论那种方案,网站重构是不可避免的。

300~800QPS——带宽极限型

目前服务器大多用了IDC提供的“百兆带宽”,这意味着网站出口的实际带宽是8M Byte左右。假定每个页面只有10K Byte,在这个并发条件下,百兆带宽已经吃完。首要考虑是CDN加速/异地缓存,多机负载等技术。

500~1000QPS——内网带宽极限+Memcache极限型

由于Key/value的特性,每个页面对memcache的请求远大于直接对DB的请求,Memcache的悲观并发数在2w左右,看似很高,但事实上大多数情况下,首先是有可能在次之前内网的带宽就已经吃光,接着是在8K QPS左右的情况下,Memcache已经表现出了不稳定,如果代码上没有足够的优化,可能直接将压力转嫁到了DB层上,这就最终导致整个系统在达到某个阀值之上,性能迅速下滑。

1000~2000QPS——FORK/SELECT,锁模式极限型

好吧,一句话:线程模型决定吞吐量。不管你系统中最常见的锁是什么锁,这个级别下,文件系统访问锁都成为了灾难。这就要求系统中不能存在中央节点,所有的数据都必须分布存储,数据需要分布处理。总之,关键词:分布

2000QPS以上——C10K极限

尽管现在很多应用已经实现了C25K,但短板理论告诉我们,决定网站整体并发的永远是最低效的那个环节。我承认我生涯中从未遇到过2000QPS以上,甚至1.5K以上的网站,希望有此经验的哥们可以一起交流下

分享到:
评论

相关推荐

    SimpleWebServer 是一款使用Java基于NIO编写的超轻量级开源.zip

    SimpleWebServer的基本工作流程包括以下几个步骤: 1. **监听端口**:服务器启动后,会创建一个ServerSocketChannel并绑定到指定的端口,然后进入监听状态。 2. **接收连接**:当客户端发起HTTP请求时,服务器的...

    毕业设计:新闻大数据搜索系统 (完整代码运行)

    它通常包括以下几个关键组件: 1. **数据采集**:使用Python的网络爬虫框架,如Scrapy,从各种新闻网站抓取实时更新的新闻内容。Python的requests库用于发送HTTP请求,BeautifulSoup或lxml库解析HTML文档,提取所需...

    以太坊数据收集器.zip

    该项目的核心部分可能包括以下几个关键知识点: 1. **以太坊API接口**:数据收集通常涉及与以太坊节点通信,如使用Web3.js或Ethers.js等库通过HTTP或WebSocket接口调用JSON-RPC API。这些API允许获取交易历史、区块...

    LR使用过程及性能测试数据分析

    - **页面概率测试**:选择网站中最常访问的几个页面(如首页、下载页、个人管理页等)进行测试。 - **功能点测试**:针对具体的功能模块(如用户注册)进行深入测试。 **2.4 测试范围界定** 假设当前测试目标为...

    超轻量级的Ajax库-ajax.js

    `ajax.js`的源码可能非常简洁,通常包含以下几个核心功能: - **创建XMLHttpRequest对象**:这是Ajax的核心,用于与服务器进行异步通信。在不同的浏览器环境下,创建方式可能会有所不同,但大多数现代浏览器都支持`...

    这是一个大数据实战项目

    它主要包括以下几个组件: - **HDFS(Hadoop Distributed File System)**:用于存储数据。 - **MapReduce**:用于处理数据。 - **YARN(Yet Another Resource Negotiator)**:用于资源管理和任务调度。 - **...

    HealthConnect

    这个项目可能涉及到了以下几个关键知识点: 1. **Java编程语言**:Java是面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性而著名。HealthConnect的基础就是Java,开发者用它来编写业务逻辑、数据...

    AWS-app-worker:AWS nodejs,与travis相连,从队列中获取订单,处理文件,更新sampleDB中的数据,下载文件上传到S3

    在这个项目中,我们主要关注的是AWS的几个关键组件: 1. **SQS (Simple Queue Service)**:这是一个完全托管的消息队列服务,用于在分布式系统组件之间传递消息。在这个应用中,SQS被用来存储订单请求,等待worker...

Global site tag (gtag.js) - Google Analytics