javaweb⾼并发量⽹站解决⽅案
⼀个⼩型的⽹站,可以使⽤最简单的html静态页⾯就实现了,配合⼀些图⽚达到美化效果,所有的页⾯均存放在⼀个⽬录下,这样的⽹站对系统、性能的要求都很简单。随着互联⽹业务的不断丰富,⽹站相关的技术经过这些年的发展,已经细分到很细的⽅⽅⾯⾯,尤其对于⼤型⽹站来说,所采⽤的技术更是涉及⾯⾮常⼴,从硬件到软件、编程语⾔、数据库、WebServer、防⽕墙等各个领域都有了很⾼的要求,已经不是原来简单的html静态⽹站所能⽐拟的。
⼤型⽹站,⽐如门户⽹站,在⾯对⼤量⽤户访问、⾼并发请求⽅⾯,基本的集中在这样⼏个环节:使⽤⾼性能的服务器、⾼性能的、⾼效率的、还有⾼性能的Web容器。这⼏个解决思路在⼀定程度上意味着更⼤的投⼊。
1、HTML静态化
其实⼤家都知道,效率最⾼、消耗最⼩的就是纯静态化的html页⾯,所以我们尽可能使我们的⽹站上的页⾯采⽤静态页⾯来实现,这个最简单的⽅法其实也是最有效的⽅法。但是对于⼤量内容并且频繁更新的⽹站,我们⽆法全部⼿动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚⾄他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录⼊⾃动⽣成静态页⾯,还能具备频道管理、权限管理、⾃动抓取等功能,对于⼀个⼤型
⽹站来说,拥有⼀套⾼效、可管理的CMS是必不可少的。
除了门户和信息发布类型的⽹站,对于交互性要求很⾼的社区类型⽹站来说,尽可能的静态化也是提⾼性能的必要⼿段,将社区内的帖⼦、⽂章进⾏实时的静态化、有更新的时候再重新静态化也是⼤量使⽤的策略,像Mop的⼤杂烩就是使⽤了这样的策略,⽹易社区等也是如此。
同时,html静态化也是某些策略使⽤的⼿段,对于系统中频繁使⽤数据库查询但是内容更新很⼩的应⽤,可以考虑使⽤html静态化来实现。⽐如论坛中论坛的公⽤设置信息,这些信息⽬前的主流论坛都可以进⾏后台管理并且存储在中,这些信息其实⼤量被前台程序调⽤,但是更新频率很⼩,可以考虑将这部分内容进⾏后台更新的时候进⾏静态化,这样避免了⼤量的数据库访问请求。
2、图⽚服务器分离
⼤家知道,对于Web服务器来说,不管是Apache、IIS还是其他容器,图⽚是最消耗资源的,于是我们有必要将图⽚与页⾯进⾏分离,这是基本上⼤型⽹站都会采⽤的策略,他们都有独⽴的、甚⾄很多台的图⽚服务器。这样的可以降低提供页⾯访问请求的服务器系统压⼒,并且可以保证系统不会因为图⽚问题⽽崩溃。
在应⽤服务器和图⽚服务器上,可以进⾏不同的配置优化,⽐如apache在配置ContentType的时候可以尽量少⽀持、尽可能少的LoadModule,保证更⾼的系统消耗和执⾏效率。
3、数据库集、库表散列
⼤型都有复杂的应⽤,这些应⽤必须使⽤,那么在⾯对⼤量访问的时候,数据库的瓶颈很快就能显现出来,这时⼀台数据库将很快⽆法满⾜应⽤,于是我们需要使⽤数据库集或者库表散列。
在数据库集⽅⾯,很多数据库都有⾃⼰的解决⽅案,Oracle、Sybase等都有很好的⽅案,常⽤的MySQL提供的Master/Slave也是类似的⽅案,您使⽤了什么样的DB,就参考相应的解决⽅案来实施即可。
上⾯提到的数据库集由于在、成本、扩张性⽅⾯都会受到所采⽤DB类型的限制,于是我们需要从应⽤程序的⾓度来考虑改善系统架构,库表散列是常⽤并且最有效的。
我们在应⽤程序中安装业务和应⽤或者功能模块将数据库进⾏分离,不同的模块对应不同的数据库或者表,再按照⼀定的策略对某个页⾯或者功能进⾏更⼩的数据库散列,⽐如⽤户表,按照⽤户ID进⾏表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。
sohu的论坛就是采⽤了这样的架构,将论坛的⽤户、设置、帖⼦等信息进⾏分离,然后对帖⼦、⽤户按照板块和ID进⾏散列数据库和表,最终可以在配置⽂件中进⾏简单的配置便能让系统随时增加⼀台低成本的数据库进来补充系统性能。
4、缓存
缓存⼀词搞技术的都接触过,很多地⽅⽤到缓存。架构和中的缓存也是⾮常重要。这⾥先讲述最基本的两种缓存。⾼级和分布式的缓存在后⾯讲述。
⽅⾯的缓存,对Apache⽐较熟悉的⼈都能知道Apache提供了⾃⼰的缓存模块,也可以使⽤外加的Squid模块进⾏缓存,这两种⽅式均可以有效的提⾼Apache的访问响应能⼒。
⽹站程序开发⽅⾯的缓存,Linux上提供的Memory Cache是常⽤的缓存接⼝,可以在web开发中使⽤,⽐如⽤开发的时候就可以调⽤MemoryCache对⼀些数据进⾏和通讯共享,⼀些⼤型社区使⽤了这样的架构。另外,在使⽤web语⾔开发的时候,各种语⾔基本都有⾃⼰的缓存模块和⽅法,PHP有Pear的Cache模块,Java就更多了,不是很熟悉,相信也肯定有。
5、镜像
镜像是⼤型⽹站常采⽤的提⾼性能和数据安全性的⽅式,镜像的技术可以解决不同接⼊商和地域带来的⽤户访问速度差异,⽐如ChinaNet和EduNet之间的差异就促使了很多⽹站在教育⽹内搭建镜像站点,数据进⾏定时更新或者实时更新。在镜像的细节技术⽅⾯,这⾥不阐述太深,有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路,⽐如Linux上的rsync等⼯具。
6、负载均衡
负载均衡将是⼤型解决⾼负荷访问和⼤量并发请求采⽤的⾼端解决办法。
技术发展了多年,有很多专业的服务提供商和产品可以选择,我个⼈接触过⼀些解决⽅法,其中有两个可以给⼤家做参考。
(1)、硬件四层交换
第四层交换使⽤第三层和第四层信息包的报头信息,根据应⽤区间识别业务流,将整个区间段的业务流分配到合适的应⽤服务器进⾏处理。
第四层交换功能就像是虚IP,指向物理服务器。它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TCP或UDP端⼝地址来决定,在第四层交换中的应⽤区间则由源端和终端IP地址、TCP和UDP端⼝共同决定。
在硬件四层交换产品领域,有⼀些知名的产品可以选择,⽐如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供⾮常优秀的性能和很灵活的管理能⼒。“Yahoo中国”当初接近2000台服务器,只使⽤了三、四台Alteon就搞定了。
(2)、软件四层交换
⼤家知道了硬件四层交换机的原理后,基于OSI模型来实现的软件四层交换也就应运⽽⽣,这样的解决⽅案实现的原理⼀致,不过性能稍差。但是满⾜⼀定量的压⼒还是游刃有余的,有⼈说软件实现⽅式其实更灵活,处理能⼒完全看你配置的熟悉能⼒。
软件四层交换我们可以使⽤Linux上常⽤的LVS来解决,LVS就是Linux Virtual Server,他提供了基于⼼跳线heartbeat的实时灾难应对,提⾼系统的强壮性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满⾜多种应⽤需求,这对于分布式的系统来说必不可少。
⼀个典型的使⽤的策略就是,在软件或者硬件四层交换的基础上搭建squid集,这种思路在很多⼤型⽹站包括搜索引擎上被采⽤,这样的架构低成本、⾼性能还有很强的扩张性,随时往架构⾥⾯增减节点都⾮常容易。
对于⼤型⽹站来说,前⾯提到的每个⽅法可能都会被同时使⽤到,这⾥介绍得⽐较浅显,具体实现过程中很多细节还需要⼤家慢慢熟悉和体会。有时⼀个很⼩的squid参数或者apache参数设置,对于系统性能的影响就会很⼤。
7、最新:CDN加速技术
什么是CDN?
CDN的全称是内容分发⽹络。其⽬的是通过在现有的Internet中增加⼀层新的⽹络,将⽹站的内容发布到最接近⽤户的⽹络“边缘”,使⽤户可以就近取得所需的内容,提⾼⽤户访问⽹站的响应速度。
CDN有别于镜像,因为它⽐镜像更智能,或者可以做这样⼀个⽐喻:CDN=更智能的镜像+缓存+流量导流。因⽽,CDN可以明显提⾼Internet⽹络中信息流动的效率。从技术上全⾯解决由于⽹络带宽⼩、⽤户访问量⼤、⽹点分布不均等问题,提⾼⽤户访问的响应速度。
CDN的类型特点
CDN的实现分为三类:镜像、⾼速缓存、专线。
镜像站点(Mirror Site),是最常见的,它让内容直接发布,适⽤于静态和准动态的数据同步。但是购买和维护新服务器的费⽤较⾼,还必须在各个地区设置镜像服务器,配备专业技术⼈员进⾏管理与维护。对于⼤型⽹站来说,更新所⽤的带宽成本也⼤⼤提⾼了。
⾼速缓存,成本较低,适⽤于静态内容。Internet的统计表明,超过80%的⽤户经常访问的是20%的⽹站的内容,在这个规律下,服务器可以处理⼤部分客户的静态请求,⽽原始的服务器只需处理约20%左右的⾮缓存请求和动态请求,于是⼤⼤加快了客户请求的响应时间,并降低了原始服务器的负载。
CDN服务⼀般会在全国范围内的关键节点上放置缓存服务器。
专线,让⽤户直接访问数据源,可以实现数据的动态同步。
CDN的实例
举个例⼦来说,当某⽤户访问时,⽹站会利⽤全球技术,将⽤户的访问指向到距离⽤户最近的正常⼯作的缓存服务器上,直接响应⽤户的请求。
当⽤户访问已经使⽤了CDN服务的⽹站时,其解析过程与传统解析⽅式的最⼤区别就在于⽹站的授权域名服务器不是以传统的轮询⽅式来响应本地DNS的解析请求,⽽是充分考虑⽤户发起请求的地点和当时⽹络的情况,来决定把⽤户的请求定向到离⽤户最近同时负载相对较轻的节点缓存服务器上。
通过⽤户定位算法和服务器健康检测算法综合后的数据,可以将⽤户的请求就近定向到分布在⽹络“边缘”的缓存服务器上,保证⽤户的访问能得到更及时可靠的响应。javaweb编程技术
由于⼤量的⽤户访问都由分布在⽹络边缘的CDN节点服务器直接响应了,这就不仅提⾼了⽤户的访问质量,同时有效地降低了源服务器的负载压⼒。
附:某CDN服务商的服务说明
采⽤GCDN加速⽅式
采⽤了GCDN加速⽅式以后,系统会在浏览⽤户和您的服务器之间增加⼀台GCDN服务器。浏览⽤户访问您的服务器时,⼀般静态数据,如图⽚、多媒体资料等数据将直接从GCDN服务器读取,使得从主服务器上读取静态数据的交换量⼤⼤减少。
为VIP型虚拟主机⽽特加的VPN⾼速压缩通道,使⽤⾼速压缩的电信<==>⽹通、电信<==>国际(HK)、⽹通<==>国际(HK)等跨⽹专线通道,智能多线,⾃动获取最快路径,极速的动态实时并发响应速度,实现了的动态脚本实时同步,对动态⽹站有⼀个更加明显的加速效果。
每个⽹络运营商(电信、⽹通、铁通、教育⽹)均有您服务器的GCDN服务器,⽆论浏览⽤户是来⾃何处,GCDN都能让您的服务器展现最快的速度!另外,我们将对您的数据进⾏实时备份,让您的数据更安全!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论