`
huangxx
  • 浏览: 322571 次
  • 来自: ...
社区版块
存档分类
最新评论

使用开源软件,设计高性能可扩展互动网站 - zt

阅读更多

上次我们以LiveJournal为例详细分析了一个小网站在一步一步的发展成为大规模的网站中性能优化的方案,以解决在发展中由于负载增长而引起的性能问题,同时在设计网站架构的时候就从根本上避免或者解决这些问题。

今天我们来看一下在网站的设计上一些通常使用的解决大规模访问,高负载的方法。我们将主要涉及到以下几方面:

1、 前端负载
2、 业务逻辑层
3、 数据层

LJ性能优化文章中我们提到对服务器分组是解决负载问题,实现无限扩展的解决方案。通常中我们会采用类似LDAP的方案来解决,这在邮件的服务器以及个人网站,博客的应用中都有使用,在Windows下面有类似的Active Directory解决方案。有的应用(例如博客或者个人网页)会要求在二级域名解析的时候就将用户定位到所属的服务器群组,这个时候请求还没到应用上面,我们需要在DNS里解决这个问题。这个时候可以用到一款软件bind dlz,这是bind的一个插件,用于取代bind的文本解析配置文件。它支持包括LDAP,BDB在内的多种数据存储方式,可以比较好的解决这个问题。

另外一种涉及到DNS的问题就是目前普遍存在的南北互联互通的问题,通过bind9内置的视图功能可以根据不同的IP来源解析出不同的结果,从而将南方的用户解析到南方的服务器,北方的用户解析到北方的服务器。这个过程中会碰到两个问题,一是取得南北IP的分布列表,二是保证南北服务器之间的通讯顺畅。第一个问题有个笨办法解决,从日志里取出所有的访问者IP,写一个脚本,从南北的服务器分别ping回去,然后分析结果,可以得到一个大致准确的列表,当然最好的办法还是直到从运营商那里拿到这份列表(update:参见这篇文章)。后一个问题解决办法比较多,最好的办法就是租用双线机房,同一台机器,双IP,南北同时接入,差一些的办法就是南北各自找机房,通过大量的测试找出中间通讯顺畅的两个机房,后一种通常来说成本较低,但效果较差,维护不便。

另外DNS负载均衡也是广泛使用的一种负载均衡方法,通过并列的多条A记录将访问随即的分布到多台前端服务器上,这种通常使用在静态页面居多的应用上,几大门户内容部分的前端很多都是用的这种方法。

用户被定位到正确的服务器群组后,应用程序就接手用户的请求,并开始沿着定义好的业务逻辑进行处理。这些请求主要包括两类静态文件(图片,js脚本,css等),动态请求。

静态请求一般使用squid进行缓存处理,可以根据应用的规模采用不同的缓存配置方案,可以是一级缓存,也可以是多级缓存,一般情况下cache的命中率可以达到70%左右,能够比较有效的提升服务器处理能力。Apache的deflate模块可以压缩传输数据,提高速度,2.0版本以后的cache模块也内置实现磁盘和内存的缓存,而不必要一定做反向代理。

动态请求目前一般有两种处理方式,一种是静态化,在页面发生变化时重新静态页面,现在大量的CMS,BBS都采用这种方案,加上cache,可以提供较快的访问速度。这种通常是写操作较少的应用比较适合的解决方案。

另一种解决办法是动态缓存,所有的访问都仍然通过应用处理,只是应用处理的时候会更多的使用内存,而不是数据库。通常访问数据库的操作是极慢的,而访问内存的操作很快,至少是一个数量级的差距,使用memcached可以实现这一解决方案,做的好的memcache甚至可以达到90%以上的缓存命中率。10年前我用的还是2M的内存,那时的一本杂事上曾经风趣的描述一对父子的对话:

儿子:爸爸,我想要1G的内存。

爸爸:儿子,不行,即使是你过生日也不行。

时至今日,大内存的成本已经完全可以承受。Google使用了大量的PC机建立集群用于数据处理,而我一直觉得,使用大内存PC可以很低成本的解决前端甚至中间的负载问题。由于PC硬盘寿命比较短,速度比较慢,CPU也稍慢,用于做web前端既便宜,又能充分发挥大内存的优势,而且坏了的话只需要替换即可,不存在数据的迁移问题。

下面就是应用的设计。应用在设计的时候应当尽量的设计成支持可扩展的数据库设计,数据库可以动态的添加,同时支持内存缓存,这样的成本是最低的。另外一种应用设计的方法是采用中间件,例如ICE。这种方案的优点是前端应用可以设计的相对简单,数据层对于前端应用透明,由ICE提供,数据库分布式的设计在后端实现,使用ICE封装后给前端应用使用,这路设计对每一部分设计的要求较低,将业务更好的分层,但由于引入了中间件,分了更多层,实现起来成本也相对较高。

在数据库的设计上一方面可以使用集群,一方面进行分组。同时在细节上将数据库优化的原则尽量应用,数据库结构和数据层应用在设计上尽量避免临时表的创建、死锁的产生。数据库优化的原则在网上比较常见,多google一下就能解决问题。在数据库的选择上可以根据自己的习惯选择,Oracle,MySQL等,并非Oracle就够解决所有的问题,也并非MySQL就代表小应用,合适的就是最好的。

前面讲的都是基于软件的性能设计方案,实际上硬件的良好搭配使用也可以有效的降低时间成本,以及开发维护成本,只是在这里我们不再展开。

网站架构的设计是一个整体的工程,在设计的时候需要考虑到性能,可括展性,硬件成本,时间成本等等,如何根据业务的定位,资金,时间,人员的条件设计合适的方案是件比较困难的事情,但多想多实践,终究会建立一套适合自己的网站设计理念,用于指导网站的设计工作,为网站的发展奠定良好的基础。 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2116625

分享到:
评论

相关推荐

    香山开源高性能RISC-V处理器.pdf

    香山开源高性能RISC-V处理器-包云岗PPT-仅供各位学习使用

    基于Java的高性能MySQL集群中间件Mycat-Server设计源码

    Mycat-Server是一款开源、高性能、高可靠性、可弹性扩展的分布式数据库中间件,旨在构建企业级数据库集群,支持事务、ACID特性,并增强MySQL功能,通过数据分片技术优化资源利用,提升数据库整体性能。

    开源力量公开课第21期-用开源软件构建App的高效服务端-祈宏

    - **技术竞争**:在App的竞争中,不仅前端应用和UI设计至关重要,后端系统的性能、可扩展性和维护成本也是决定因素之一。 - **性能**:高性能的服务端可以确保App响应迅速,用户体验良好。 - **成本**:开源技术通常...

    网站架构及高性能并发服务器设计

    很早之前开始收集整理的网站架构及高性能并发服务器设计的一些好的案例及实际优化经验。 实际优化经验:  初创网站与开源软件 6  谈谈大型高负载网站服务器的优化心得! 8  Lighttpd+Squid+Apache搭建高效率...

    开源软件成熟度评估及选型指南,完整扫描版

    《开源软件成熟度评估及选型指南》内容主要来自近几年我们对开源软件评估与应用选型的研究成果,以及对优秀的开源软件的筛选整理。内容主要面向那些希望将开源软件部署在其应用环境中,或利用开源软件进行二次开发的...

    freescada开源wpf组态软件

    2. **脚本语言**:内建的脚本引擎支持用户编写自定义逻辑,可以用于处理复杂的控制逻辑或实现特定功能,如数据处理、报警触发等,增强了软件的灵活性和可扩展性。 3. **设备驱动**:FreeSCADA提供了一套驱动程序...

    一个开源的杀毒软件。。

    4. **C++编程**:ClamWin的源码是用C++编写的,这是一门强大的系统级编程语言,适用于开发高性能的应用程序,尤其是像杀毒软件这样需要快速响应和低级别访问硬件的程序。 5. **编译与构建流程**:通过`build.bat`和...

    网易开源open source in netease.pptx

    Pomelo框架的设计目标是提供一个高性能、可扩展的游戏服务器架构,能够满足大型在线游戏的需求。Pomelo框架的核心组件包括: * Runtime Architecture:Pomelo框架的runtime架构设计,能够提供高性能和可扩展的游戏...

    开源项目-astroflow-astroflow-go.zip

    Astroflow-astroflow-go 是一个开源的日志处理库,专为追求快速、优美、结构化且可扩展的日志记录需求而设计。它以其高效能、模块化的架构和对插件的良好支持,为开发者提供了一种强大的工具,帮助他们更好地管理和...

    基于thinkphp6 + elementui的开源免费可商用的高性能商城系统

    SparkShop(星火商城)是基于thinkphp6 + elementui的开源免费可商用的高性能商城系统;包含小程序商城、H5商城、公众号商城、PC商城、App,支持页面diy、秒杀、优惠券、积分、分销、会员等级。营销功能采用插件化的...

    开源软件--拍牌软件

    沪牌软件自动拍牌,C# 源代码 自己编写可用于实战,只为学习共同进步 开发者资源 可以帮助辅助拍牌:提高速度

    OpenHPC开源HPC解决方案.pdf

    OpenHPC是一种功能强大、可靠、可扩展和高性能的HPC解决方案,旨在使HPC系统易于部署、管理和使用。OpenHPC支持开源软件,提供了流数据处理、消息处理和存储等功能,非常适合高性能计算和人工智能应用。

    开源的php个人网站系统

    为了提升网站性能,可以采用缓存技术(如Memcached或Redis)、优化数据库查询、使用CDN服务、压缩静态资源等方式。 总的来说,开源的PHP个人网站系统为个人开发者提供了自由、灵活的建站工具。通过深入理解PHP语言...

    面向物联网的开源RISC-V处理器设计和开发(胡振波)2

    RISC-V以其模块化、可扩展性以及简洁的设计理念,成为了近年来备受瞩目的开放指令集。 RISC-V架构与微架构的区别在于,前者是公开的指令集规范,后者则是依据ISA实际构建的处理器硬件。不同的微架构设计会导致性能...

    企业数据库软件选型5款主流开源数据库.pdf

    PostgreSQL是一个功能强大且可靠的开源数据库,具有高性能、可扩展性和高可用性等特点。PostgreSQL支持多种编程语言,包括C、C++、Java、Python等,并且支持多种操作系统,包括Windows、Linux和Unix等。 5. ...

    java web 开源 物流软件

    综上所述,这款Java Web开源物流软件提供了一个完整的物流解决方案,结合B/S架构的易用性和Java的稳定性能,为物流行业带来了高效、灵活的选择。通过开源社区的支持,软件能够持续迭代和优化,满足日益复杂和个性化...

    最新开源PLC编缉软件,可用vsstudio 直接编译

    标题中的“最新开源PLC编缉软件,可用vsstudio 直接编译”揭示了这个项目是一个基于Visual Studio(VS)开发环境的开源编程工具,用于编程逻辑控制器(PLC)。PLC是工业自动化系统中用于控制机械设备或生产过程的...

Global site tag (gtag.js) - Google Analytics