搭建大型网站相关技术

大型网站我认为指的是高并发,海量数据,业务复杂的网站,搭建这类网站往往需要多种角度技术优化,本文所述的有些技术我并没有实战经验,在这里只是记录一下,以备后续学习

 一、数据库相关问题                                                                                                      

大型网站一般最容易产生的性能瓶颈就是数据库,因为关系型数据库所能承受的并发链接数是很有限的,可以从以下几点做出优化

1.数据库查询做好足够优化,大多数的网站往往读的次数要远远高于写的次数,尽快将数据取出来,关闭链接,释放资源当然是最简单,也是首要做的。

  • 查询的数据库表字段做好适当的索引;
  • 查询的时候只查需要的字段,不需要的字段不要写;
  • 尽量避免索引失效的查询,例如模糊匹配,In查询;
  • 尽量避免事务性提交,事务会造成锁表,而且处理的不好还容易造成死锁,可以将这种事务转交给程序处理,应用分布式锁可以有效减轻数据库负担,后面还会有简单介绍;
  • 不要用触发器,一般情况
  • 如模糊查询次数较为频繁,数据量较大,建议使用全文搜索引擎,如Lucene,这个是java和.net平台用的较多的,网上资料也非常丰富,http://www.cnblogs.com/MeteorSeed/archive/2012/12/24/2703716.html,其他的就不多说了,这些是最基本的知识

2.切库,切库能有效的避免高并发所带来的压力,也是较为简单的一种方式,切库又分为两种垂直切库和水平切库。

  • 以业务角度,将数据库拆分成两个数据库,分别放在两台服务器上,这种方式叫做垂直切库;
  • 当一张表数据量太庞大,将一张表拆分成多张表,这叫水平分库;

分库首先会带来两个问题

  • 那就是Join查询,当两张表分别放在两个数据库时Join查询的效率时非常低的,要避免这种情况产生,可以将之分为多次查询
  • 当涉及到增删改的时候,事务性提交时,如果涉及到多张表存放在不同数据库,是无法实现的

要尽量避免以上情况就要注意分库的时候拆表的粒度问题,把关联性高的表放在同一个数据库

水平分库更为复杂不光存在以上问题,而且还增加了其它需要解决的问题

  • 上述的两个问题在水平切库时会大大增加了问题的难度,因为拆分的维度变得更大的;
  • 水平分库时还需注意主键的设计将会是一个难题;
  • 还有就是我们要按照什么逻辑将数据存放到那些被拆分的不同的表里;
  • 当表变得越来越多时,不管是开发和维护的工作量还是服务器的管理上都会增加越来越大的压力

1).水平分表时,我们可以根据数据的热度进行拆分,例如订单表我们可以将一个月之类的订单放在一张表里,其余的放在另一张表,这样就能大大提高我们的查询效率

2).水平拆表时我们需要注意被拆分的表主键不可重复,因为这本该是同一张表的,http://www.cnblogs.com/heyuquan/p/3261250.html

3).有时候我们需要从水平拆分的不同表中一起查询数据,这个难度实现起来就有点大了,我们应该尽量避免,实际上大多数情况下我们都无需将所有数据返回,我们应该从业务角度去避免这种情况的产生,很多时候我们都是没有完美的解决方案的,有得必有舍

就像第一点所说的拆分订单之后,我们可以提供两个标签页一个提供查询一个人之内的订单,另一个提供查询历史订单

能在业务角度解决的,尽量避免使用技术去解决,因为这往往会增加风险,所以在这之前应做好充分的评估

3.主从复制,读写分离

读写分离如果数据库的压力过大这时我们可以将数据库进行读写分离,写入单独用一个数据库,做为主库,读取用多个数据库,做为从数据库,做负载均衡,主数据库向从数据库同步数据,但是这会产生一定的延迟性,因为你无法保证读出的数据是不是最新的,所以这需要去评估一下这么做是否合适,http://www.cnblogs.com/netfocus/p/4055346.html    如果既要保证实时性,又要用读写分离,我们可以使用一个中间层,写入数据库的同时,将数据写入中间层,直到确认数据已经同步完成,就将数据从中间层删除,读取时这部分数据先从中间层读取,然后从数据库读取,重复的数据以中间层为准,因为中间层总是最新的,但是有一个问题是我们无法得知数据是否确定已经同步,这个就需要我们去创建一个监控程序用来将从数据库的数据与中间层对比,确认同步完成,这是我的个人想法,还没有实践过

4.队列和分组提交

  • 当主数据库写入同一时间并发量太大很容易造成数据库崩溃,这种情况可以将请求先排入队列,同一时间允许一定数量的任务同时执行,但是这种情况可能会造成延迟响应,但是延迟响应总比直接崩溃的好,关于队列后续还会有简单介绍;
  • Group commit 大量写入请求我们可以将请求分组多次请求做为一次提交,例如多次请求减少某个商品的数量时我们可以将请求做为一次提交同时减去相应的数量,还可以将多个请求放入同一个数据库连接中,因为数据库的链接打开关闭也是非常消耗资源的,这里要把控好相应的尺度

5.缓存

当一组数据经常读取而更新次数不多,允许一定延迟时,我们可以将数据放入缓存中,缓存能够大大的降低数据库的负担,内存的读取速度是磁盘的数万倍,下面还会进行介绍

6.Nosql

现在Nosql的解决方案已经是数不胜数了,例如国内使用较多的Mongodb,http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html,关系型数据库与Nosql数据库的搭配能有效的降低服务的延迟性

二、其它相关问题                                                                                                              

1.分布式应用所面临的问题和解决方式

大型网站为了能够承受住大的访问并发量,web服务器肯定也会进行负载均衡,实现方式有很多种,例如Nginx反向代理,dns负载均衡,ip负载均衡,http://www.open-open.com/lib/view/open1416924842581.html

http://blog.sina.com.cn/s/blog_493a84550102vjlq.html    http://www.cnblogs.com/edisonchou/p/4126742.html    http://www.cnblogs.com/edisonchou/p/4281978.html

分布式系统至少会面临4个问题需要解决

1).如果网站中运用了线程锁,在分布式网站部署在不同地方,如果我们的业务逻辑是同一时间只能有一个线程处理,那么这时我们就需要使用分布式锁了,前面所提到的当大量的行锁、表锁、事务充斥着数据库的时候,数据库会造成很多压力,这里给大家介绍的是减轻数据库锁负担的一种方案,使用zookeeper分布式锁服务,http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.htmlhttp://www.cnblogs.com/shanyou/p/3221990.html

2)网站一般都会有些配置信息,当网站部署于不同地方时,要维护就变得相对麻烦一下,zookeeper也提供了响应的配置管理,

3)网站一般都会有上传图片,海量的图片管理也是一个需要解决的问题,分布式文件系统有很多解决方案,这里介绍一种方式 FastDFS 链接地址    http://www.cnblogs.com/lori/p/3142598.html

4)分布式缓存,分布式缓存有很多解决方案。

2.分布式消息队列

当网站中有大量的任务堆积需要等待处理时,例如短信发送,邮件发送,数据库的操作延时任务,我们一般都是采用队列来处理,下面介绍几种队列组件

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP,下载地址 http://activemq.apache.org/ C# client http://activemq.apache.org/nms/

Beanstalk 是一个简单、快速的消息队列。Beanstalkd之于RabbitMQ,就好比Nginx之于Apache,Varnish之于Squid。后面在项目中使用Beanstalkd的过程中,更发现其简单、轻量级、高性能、易使用等特点,以及优先级、多队列、持久化、分布式容错、超时控制等特性。Beanstalkd 包含多种编程语言的客户端开发包 C# client https://github.com/kr/beanstalkd/wiki/client-libraries

kafka是一种高吞吐量的分布式发布订阅消息系统 http://kafka.apache.org/documentation.html   C# client https://github.com/Jroland/kafka-net

时间: 2024-08-13 21:30:28

搭建大型网站相关技术的相关文章

静态资源文件自动压缩并替换成压缩版本(大型网站优化技术)

原文:静态资源文件自动压缩并替换成压缩版本(大型网站优化技术) 这一次,我总结和分享一项大型网站优化技术,那就是在项目中自动压缩静态资源文件(css.js),并让网站自动加载压缩后的资源文件.当然,这项技术在雅虎35条前端优化建议里也有记载,但它那只是给出一个理论的方案而已,并且采用的是外部压缩工具去压缩,而在我的项目中,是直接通过自己的程序自动化去压缩所有css.js文件,然后让页面直接加载所压缩后的资源,接下来直接进入主题. 本次实验使用的是PHP脚本语言,版本是PHP5.6,是在LINUX

减少HTTP请求之合并图片详解(大型网站优化技术)

原文:减少HTTP请求之合并图片详解(大型网站优化技术) 一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在了前端上,其中大部分时间都在下载页面上的各种组件:图片,样式表,脚本,Flash等等. 减少组件数必然能够减少页面提交的HTTP请求数.这是让页面更快的关键.减少页面组件数的一种方式是简化页面设计.但有没有一种方法可以在构建复杂的页面同时加快响应时间呢?嗯,确实有鱼和熊掌兼得的办法. 这里我们就拿雅

整理收藏一些大型网站架构技术方面的文章

整理收藏一些大型网站架构技术方面的文章,这里就作为一个导航页面吧,也许文章来自博客园好友,或者其他网站,论坛,博客,我知道地址的都会注明,偶尔也会发表一些自己的看法,仅供收藏,以备自己不时查看,也欢迎博客园好友点评 1.收集的php编写大型网站问题集 http://www.cnblogs.com/ruthon/p/4477904.html

大型网站优化技术(一)

存储瓶颈第一篇 1 大型网站定义 首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技术指标角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点 行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那么像hao123这样的网站就是大型网站了,如下图所示: 其实这种网站访问量非常大,并发数也非常高,但是它却能用最为简单的Web技术来实现:我们只要保持网站的充分的静态化,多部署几台服务器,那么就算地球上所有人都用它,网站也能正常运行. 大型网站是技

减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)

原文:减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术) 在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”,那么,这一篇博文将讲解  “ 将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片”. 一.为何选择将图片转成二进制并生成Base64编码,可以在网页中通过url查看

高并发访问和海量数据 大型网站架构技术一览

高并发访问和海量数据 大型网站架构技术一览 林涛 发表于:2016-4-19 12:12 分类:WebServer 标签:并发,海量数据,高并发 44次 大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手.大型网站架构主要就是解决这类问题. 本文内容大部分来自<大型网站技术架构>,这本书很值得一看,强烈推荐. 1.前端架构 前端指用户请求到达网站应用服务器之前经历的环节,通常不包含网站业务逻辑,不处理动态内容

大型网站机构技术机构

大型网站核心架构要素 1. 性能 2. 可用性 3. 伸缩性 4. 扩展性 5. 安全性 瞬时响应:网站的高性能架构 1. 网站性能测试: 1). 不同视角下的网站性能 a. 用户视角的网站性能:用户计算机,网站服务器通信时间,网站服务器处理时间,用户浏览器解析时间等. b. 开发人员视角的网站性能: c. 运维人员视角的网站性能:优化主干网,利用虚拟化技术优化资源利用等 2). 性能测试指标 a. 响应时间:单个请求时间不好计算,可以通过重复执行一万次,测试一万次执行需要的总响应时间之和,然后

【系统架构】 大型网站架构技术一览

本文地址 原文地址 对于大型网站技术的理解,可以从架构技术原理的组织方式以架构要素作为维度,从系统性能.可用性.伸缩性.扩展性.安全性几个角度阐述网站架构的技术要点.还有另一种较为直观的组织方式,是从不同架构层次所使用的网站架构技术这个维度进行描述的. 网站系统架构层次如下图所示: 这个网站架构层次,共分为8个层次,其中数据库中心机房架构是上面所有架构的物理基础:安全架构和数据库采集监控架构是贯穿在各个层次的重要保障,这两个架构主要解决五个业务相关层次的安全问题和数据采集监控问题,是一直都需要关

我对大型网站一些技术的认识与理解

     首先,我作为一个准毕业生来说,真正接触的大型网站技术并不是很多,但是,通过我对一些文章的理解,写下一篇入门级别的大型网站技术      的一面,对此,我还是非常有信心的. 什么是大型网站?        大型网站:它是单位时间内的并发量大小作为指标的.比如,"双11"的时候单位时间内天猫的并发量就上亿次.       细节一:Session的问题       我们知道大型网站都是很多服务器,用户登陆的时候需要带上自己的信息,作为网站也需要用户保持用户状态,那么,很多服务器之间