如何设计一个大型高性能高并发网站

时间:2021-07-19 17:57:32
我是一个在学搭建网站的知识小白,跪求各位高手指点啊。
比如一个网站预计访问量日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

#2


>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。

>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。

#3


首先感觉楼主设想的确实有点理想化,实际架设一个网站考虑的是各个硬件的配合,而不只是CPU的频率。

“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。

高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:

1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。

#4


引用 3 楼 gogdizzy 的回复:
首先感觉楼主设想的确实有点理想化,实际架设一个网站考虑的是各个硬件的配合,而不只是CPU的频率。

“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。

高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:

1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。

你看的C10M和我看的怎么不一样。我看到的C10M是直接绕开os的内核代码,一概用自己写的用户态网络堆栈,直接和网卡DMA数据。到了这个级别硬件提高反而又是线性的了,因为瓶颈在内存和cpu缓存那里。

#5


引用 4 楼 FancyMouse 的回复:
你看的C10M和我看的怎么不一样。我看到的C10M是直接绕开os的内核代码,一概用自己写的用户态网络堆栈,直接和网卡DMA数据。到了这个级别硬件提高反而又是线性的了,因为瓶颈在内存和cpu缓存那里。


我说的意思是一样的,就是这时候被卡在OS层,如果不改变OS,仅提高硬件已经不好使了,或者效果不明显了。
而绕开OS,这个感觉一般人都做不出来啊。

#6


引用 1 楼 yongtree 的回复:
一个PV为10亿的网站,访问量和并发量的确挺大了。推荐一篇文章吧,大型网站使用的具体技术可能千差万别,但是思路都是差不多的。
一个大型的网站网站应该由如下6个子系统组成
 
负载均衡系统
反向代理系统
Web服务器系统
分布式存储系统
底层服务系统
数据库集群系统

具体内容看下面链接

http://blog.csdn.net/21aspnet/article/details/6582530

这个东西极为有用。。。
多谢指教

#7


引用 2 楼 FancyMouse 的回复:


>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。
:::我去查看了资料,意识到了这个问题。多谢指教。。。

>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?

#8


>如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?
写自己的网卡驱动,然后用户态程序直接从网卡读取数据,自己分析包。os部分本身不需要动。

#9


C10M能解决的仅仅是高并发连接问题,实际上一般都是依赖于专业硬件实现的。
不要妄想一台机器既能高并发又能实用,分布式服务才是重点。

#10


该回复于2013-07-15 09:03:52被管理员删除

#11


这么大访问量,不是一台服务器能完成的了,首先网络带宽要先保证可以让那么多客户端同时访问,不然服务器性能再好数据被堵发不出去都等于0,可能要几万G的带宽,自己算一下,ISP也不可能给你这么大带宽的线路,就算给了,可能网络瓶颈反而是在ISP的传输网络了,所以整个架构上必须采用服务器集群,分布式部署,根据客户端的的分布情况在不同地方部署服务器,让流量及服务器负荷分散到全国各各地,乃至世界各地,即所谓的分布式.这对于超大访问量的服务器系统部署才是上策.之后才考虑每台服务器的性能问题.

#12


这个问题需要的知识太多了。。。。 如何设计一个大型高性能高并发网站

android应用服务器开发Q群:283949820

#13


应用集群 分布式,负载均衡,
缓存,队列服务,数据库集群,读写分离,
表切割等等,涉及的知识太多了,一点一点了解吧...

#1


一个PV为10亿的网站,访问量和并发量的确挺大了。推荐一篇文章吧,大型网站使用的具体技术可能千差万别,但是思路都是差不多的。
一个大型的网站网站应该由如下6个子系统组成
 
负载均衡系统
反向代理系统
Web服务器系统
分布式存储系统
底层服务系统
数据库集群系统

具体内容看下面链接

http://blog.csdn.net/21aspnet/article/details/6582530

#2


>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。

>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。

#3


首先感觉楼主设想的确实有点理想化,实际架设一个网站考虑的是各个硬件的配合,而不只是CPU的频率。

“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。

高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:

1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。

#4


引用 3 楼 gogdizzy 的回复:
首先感觉楼主设想的确实有点理想化,实际架设一个网站考虑的是各个硬件的配合,而不只是CPU的频率。

“每小时1亿pv,峰值每秒百万或千万”,这种任务就很变态,有点像12306了,当然这个是电子商务,更加复杂。

高并发,主要看瓶颈在哪里,一般来说,cpu的频率反而是最不重要的。据我所知,有以下几点:

1 内存足够大,数据在内存中是最快的,存储在内存、SSD硬盘、普通硬盘,访问速度逐渐递减。
2 带宽与CDN,没有足够的带宽,那每个用户都会很卡,而为了不影响其他用户,一般都会进行限速设置,保证能提供一定数量的请求,CDN可以对一些静态资源的下载加速。
3 网站自身的软件系统(包括算法和数据组织等)的性能,包括使用的第三方软件。
4 操作系统的限制(之前有一个C10K问题,后来又引申出了C10M问题,楼主有兴趣可以搜索一下),C10M那篇文章提到,操作系统提供的轮询(或事件通知)模式,决定了所能支持的最大并发连接数,这时候硬件提高的性价比已经微乎其微了。

你看的C10M和我看的怎么不一样。我看到的C10M是直接绕开os的内核代码,一概用自己写的用户态网络堆栈,直接和网卡DMA数据。到了这个级别硬件提高反而又是线性的了,因为瓶颈在内存和cpu缓存那里。

#5


引用 4 楼 FancyMouse 的回复:
你看的C10M和我看的怎么不一样。我看到的C10M是直接绕开os的内核代码,一概用自己写的用户态网络堆栈,直接和网卡DMA数据。到了这个级别硬件提高反而又是线性的了,因为瓶颈在内存和cpu缓存那里。


我说的意思是一样的,就是这时候被卡在OS层,如果不改变OS,仅提高硬件已经不好使了,或者效果不明显了。
而绕开OS,这个感觉一般人都做不出来啊。

#6


引用 1 楼 yongtree 的回复:
一个PV为10亿的网站,访问量和并发量的确挺大了。推荐一篇文章吧,大型网站使用的具体技术可能千差万别,但是思路都是差不多的。
一个大型的网站网站应该由如下6个子系统组成
 
负载均衡系统
反向代理系统
Web服务器系统
分布式存储系统
底层服务系统
数据库集群系统

具体内容看下面链接

http://blog.csdn.net/21aspnet/article/details/6582530

这个东西极为有用。。。
多谢指教

#7


引用 2 楼 FancyMouse 的回复:


>并且每个用户访问的IP是一样的
对于10亿的网站这句话已经不对了。
:::我去查看了资料,意识到了这个问题。多谢指教。。。

>一台服务器足够响应这么多的访问量吗?
只是维持连接的话没问题。并行10M连接一台x86机器是做得到的。当然不能用os提供的网络堆栈,得自己写。
如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?

#8


>如何理解重写网络堆栈?是重新写os代码,重新编译内核吗?
写自己的网卡驱动,然后用户态程序直接从网卡读取数据,自己分析包。os部分本身不需要动。

#9


C10M能解决的仅仅是高并发连接问题,实际上一般都是依赖于专业硬件实现的。
不要妄想一台机器既能高并发又能实用,分布式服务才是重点。

#10


该回复于2013-07-15 09:03:52被管理员删除

#11


这么大访问量,不是一台服务器能完成的了,首先网络带宽要先保证可以让那么多客户端同时访问,不然服务器性能再好数据被堵发不出去都等于0,可能要几万G的带宽,自己算一下,ISP也不可能给你这么大带宽的线路,就算给了,可能网络瓶颈反而是在ISP的传输网络了,所以整个架构上必须采用服务器集群,分布式部署,根据客户端的的分布情况在不同地方部署服务器,让流量及服务器负荷分散到全国各各地,乃至世界各地,即所谓的分布式.这对于超大访问量的服务器系统部署才是上策.之后才考虑每台服务器的性能问题.

#12


这个问题需要的知识太多了。。。。 如何设计一个大型高性能高并发网站

android应用服务器开发Q群:283949820

#13


应用集群 分布式,负载均衡,
缓存,队列服务,数据库集群,读写分离,
表切割等等,涉及的知识太多了,一点一点了解吧...