比如一个网站预计访问量日PV为10亿。
我的理解:用户在客户端访问服务器,是通过IP地址访问的。并且每个用户访问的IP是一样的。如果10亿PV集中在10个小时内,每小时有1亿PV。可以认为在忙时一秒的访问量可以达到百万甚至千万次。
1.对于一台2G赫兹的服务器,可以处理的机器指令为20亿条。考虑到服务器不能满载,也不能只运行一个服务,那么一台服务器足够响应这么多的访问量吗?
2.如果一台服务器不能响应,那么工程中是采用多台服务器协同的方法吗???如果这样的话,对于同一个IP地址,怎么把访问请求分配到不同服务器上???分配请求的也是一台服务器吧,这台服务器又是需要响应所有的IP请求的呢(呃,绕到第一个问题了)?(是不是我想错了????)
3.一条服务器可能宕机,如果宕机了,原来的请求是如何转移到备用服务器上的???
13 个解决方案
#1
一个PV为10亿的网站,访问量和并发量的确挺大了。推荐一篇文章吧,大型网站使用的具体技术可能千差万别,但是思路都是差不多的。
一个大型的网站网站应该由如下6个子系统组成
负载均衡系统
反向代理系统
Web服务器系统
分布式存储系统
底层服务系统
数据库集群系统
具体内容看下面链接
http://blog.csdn.net/21aspnet/article/details/6582530
一个大型的网站网站应该由如下6个子系统组成
负载均衡系统
反向代理系统
Web服务器系统
分布式存储系统
底层服务系统
数据库集群系统
具体内容看下面链接
http://blog.csdn.net/21aspnet/article/details/6582530
#2
>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。
>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
对于10亿的网站这句话已经不对了。
>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
#3
首先感觉楼主设想的确实有点理想化,实际架设一个网站考虑的是各个硬件的配合,而不只是CPU的频率。
“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。
高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:
1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。
“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。
高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:
1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。
#4
你看的C10M和我看的怎么不一样。我看到的C10M是直接绕开os的内核代码,一概用自己写的用户态网络堆栈,直接和网卡DMA数据。到了这个级别硬件提高反而又是线性的了,因为瓶颈在内存和cpu缓存那里。
#5
我说的意思是一样的,就是这时候被卡在OS层,如果不改变OS,仅提高硬件已经不好使了,或者效果不明显了。
而绕开OS,这个感觉一般人都做不出来啊。
#6
这个东西极为有用。。。
多谢指教
#7
>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。
:::我去查看了资料,意识到了这个问题。多谢指教。。。
>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?
#8
>如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?
写自己的网卡驱动,然后用户态程序直接从网卡读取数据,自己分析包。os部分本身不需要动。
写自己的网卡驱动,然后用户态程序直接从网卡读取数据,自己分析包。os部分本身不需要动。
#9
C10M能解决的仅仅是高并发连接问题,实际上一般都是依赖于专业硬件实现的。
不要妄想一台机器既能高并发又能实用,分布式服务才是重点。
不要妄想一台机器既能高并发又能实用,分布式服务才是重点。
#10
#11
这么大访问量,不是一台服务器能完成的了,首先网络带宽要先保证可以让那么多客户端同时访问,不然服务器性能再好数据被堵发不出去都等于0,可能要几万G的带宽,自己算一下,ISP也不可能给你这么大带宽的线路,就算给了,可能网络瓶颈反而是在ISP的传输网络了,所以整个架构上必须采用服务器集群,分布式部署,根据客户端的的分布情况在不同地方部署服务器,让流量及服务器负荷分散到全国各各地,乃至世界各地,即所谓的分布式.这对于超大访问量的服务器系统部署才是上策.之后才考虑每台服务器的性能问题.
#12
这个问题需要的知识太多了。。。。
android应用服务器开发Q群:283949820
android应用服务器开发Q群:283949820
#13
应用集群 分布式,负载均衡,
缓存,队列服务,数据库集群,读写分离,
表切割等等,涉及的知识太多了,一点一点了解吧...
缓存,队列服务,数据库集群,读写分离,
表切割等等,涉及的知识太多了,一点一点了解吧...
#1
一个PV为10亿的网站,访问量和并发量的确挺大了。推荐一篇文章吧,大型网站使用的具体技术可能千差万别,但是思路都是差不多的。
一个大型的网站网站应该由如下6个子系统组成
负载均衡系统
反向代理系统
Web服务器系统
分布式存储系统
底层服务系统
数据库集群系统
具体内容看下面链接
http://blog.csdn.net/21aspnet/article/details/6582530
一个大型的网站网站应该由如下6个子系统组成
负载均衡系统
反向代理系统
Web服务器系统
分布式存储系统
底层服务系统
数据库集群系统
具体内容看下面链接
http://blog.csdn.net/21aspnet/article/details/6582530
#2
>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。
>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
对于10亿的网站这句话已经不对了。
>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
#3
首先感觉楼主设想的确实有点理想化,实际架设一个网站考虑的是各个硬件的配合,而不只是CPU的频率。
“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。
高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:
1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。
“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。
高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:
1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。
#4
你看的C10M和我看的怎么不一样。我看到的C10M是直接绕开os的内核代码,一概用自己写的用户态网络堆栈,直接和网卡DMA数据。到了这个级别硬件提高反而又是线性的了,因为瓶颈在内存和cpu缓存那里。
#5
我说的意思是一样的,就是这时候被卡在OS层,如果不改变OS,仅提高硬件已经不好使了,或者效果不明显了。
而绕开OS,这个感觉一般人都做不出来啊。
#6
这个东西极为有用。。。
多谢指教
#7
>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。
:::我去查看了资料,意识到了这个问题。多谢指教。。。
>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?
#8
>如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?
写自己的网卡驱动,然后用户态程序直接从网卡读取数据,自己分析包。os部分本身不需要动。
写自己的网卡驱动,然后用户态程序直接从网卡读取数据,自己分析包。os部分本身不需要动。
#9
C10M能解决的仅仅是高并发连接问题,实际上一般都是依赖于专业硬件实现的。
不要妄想一台机器既能高并发又能实用,分布式服务才是重点。
不要妄想一台机器既能高并发又能实用,分布式服务才是重点。
#10
#11
这么大访问量,不是一台服务器能完成的了,首先网络带宽要先保证可以让那么多客户端同时访问,不然服务器性能再好数据被堵发不出去都等于0,可能要几万G的带宽,自己算一下,ISP也不可能给你这么大带宽的线路,就算给了,可能网络瓶颈反而是在ISP的传输网络了,所以整个架构上必须采用服务器集群,分布式部署,根据客户端的的分布情况在不同地方部署服务器,让流量及服务器负荷分散到全国各各地,乃至世界各地,即所谓的分布式.这对于超大访问量的服务器系统部署才是上策.之后才考虑每台服务器的性能问题.
#12
这个问题需要的知识太多了。。。。
android应用服务器开发Q群:283949820
android应用服务器开发Q群:283949820
#13
应用集群 分布式,负载均衡,
缓存,队列服务,数据库集群,读写分离,
表切割等等,涉及的知识太多了,一点一点了解吧...
缓存,队列服务,数据库集群,读写分离,
表切割等等,涉及的知识太多了,一点一点了解吧...