大型网站架构(2) 历史演变(下)

这篇文章本来准备前几天就得写的,谁也没想到这段时间公司的RC太多了,含酸苦逼的加班,加班。。。所以在大一点的公司上班,写代码的责任心一定要强,或许就因为你的一些小bug,给公司带来不少损失。。。这在以前公司真的没多大体会的。

好了,继续说说架构的演变,从第四代架构中可以看到,我们通过做应用程序层的负载均衡可以比较完美的解决了在整个架构中让应用程序层不再成为瓶颈,通过A10,我们可以让用户的访问请求分发到集群中的任何一台服务器上,当访问量继续膨胀的时候,我们就可以继续在集群中增加服务器来解决负载的压力,达到系统的可伸缩性,现在我们的业务规模像滚雪球一样越来越大,用户数暴增。。。这时候我们缓存中的数据也越来越多,虽然我们用了缓存,但是大量的“缓存过期重新读取”和“缓存不命中",导致数据库压力非常大,这时候数据库的压力成为了我们架构中的瓶颈。

五: 第五代架构

既然数据库成为了我们第四代架构的瓶颈,这时候必须解决数据库的压力问题,最常见的做法也就是“读写分离”,将写和读的库进行拆分来缓解数据库的压力。

现在我们做了多个库,写的时候进主库,然后数据库分发到从库中,然后应用程序在从库中读取,这里为了让数据库对应用程序更加透明,我们通常加一个“数据访问层”,在携程里面就是在企业库上进行了一层封装以及安全性采用了all in one 模式,可以看到第五代架构对数据库的压力有了很大的缓解。

经过几个月业务喷井式的发展之后,我们会发现数据库检索越来越慢,单表数据量已经差不多爆炸了。。。已经严重影响到系统性能,用户抱怨不断,这时候“数据检索”成为了我们系统的严重瓶颈。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/web/Skills/

六:第六代架构

既然检索成了瓶颈,我们必须对数据库进行拆分,尽可能的减少检索中的数据量规模以及尽可能的优化算法。

1:业务分库

我们将不同的业务分摊到不同的业务服务器上,而不是将其耦合在一个数据库里面,从而建立起数据库集群,分流应用层对数据库的压力。

2:分表

可以采用时间划分,将三个月之后的数据放入到历史表里面,当前表只保存三个月之内的数据,而从极大提供单表的检索能力。

3:采用nosql

nosql就是为了web而生,分词,系统日志等等,一样都让不少nosql,而且nosql有其天生的负载均衡。

4:优化算法

栈,队列,二叉树,哈希 等等变换和非变换的数据结构在这种大数据的场景下可以得到灵活运用,这也是区分高级程序员和低等码农的一条参考标准。

当你的架构到这个程度的时候,差不到公司的人数也过千了,这时候我们的业务会分成很多产品线的,比如:机票事业部,酒店事业部,旅游度假事业部,攻略社区事业部,每个事业部只会负责自己的产品架构,从而将我们的架构再次细分,从技术角度看,这些事业部又可以提炼出公共的部门,比如登录模块,订单处理等等这些可复用的模块,可以相应的成立公共平台事业部和框架架构部,当

这个架构继续往下发展的话,就有了现在的各种云,也就成了各种变钱的工具了,就比如现在的博客园托管在阿里云之上。。。

终于在今天,结束了高层重视的IVR项目的所有事情,最后祭奠一下,自从猪猪侠拿到那些所谓的数据,导致我们连续加班的日日夜夜。

作者:cnblogs 一线码农

时间: 2024-08-03 21:18:24

大型网站架构(2) 历史演变(下)的相关文章

大型网站架构体系的演变(上)

互联网上有很多关于网站架构的各种分享,有些主要是从运维和基础架构的角度去分析的(堆机器,做集群),太关注技术细节实现,普通的开发人员基本看不太懂. 本文上篇将主要介绍大型网站基础架构的扩展,下篇则重点从应用程序的角度去介绍网站架构的扩展和演变. 草根时期,快速开发网站并上线.当然,通常只是先试水,用户规模也没有形成,经济能力和投入也非常有限. 有一定的业务量和用户规模了,想提升网站速度,于是,缓存出场了. 市场反响还不错,用户量每天在增长,数据库疯狂读写,逐渐发现一台服务器快撑不住了.于是,决定

大型网站架构体系的演变(下)

接着上篇的继续 在做扩展满足了基本的性能需求后,我们会逐渐关注"可用性"(也就是我们通常听别人吹牛时说的SLA.几个9).如何保证真正"高可用",也是个难题. 几乎主流的大中型互联网公司,都会有用到类似的架构,只是节点数不同而已. 还有一招用的比较多的,那就是动静分离.可以需要开发人员配合(把静态资源放独立站点下),也可以不需要开发人员配合(利用7层反向代理来处理,根据后缀名等信息来判断资源类型).有了单独的静态文件服务器之后,存储也是个问题,也需要扩展.多台服务器

大型网站架构演变

之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的.ebay的,都是非常值得参考 的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂 的技术,于是有了写这篇文章的想法,在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系,希望能给 想从事互联网行业的同学一点初步的概念,:),文中的不对之处也请各位多给点建议,让本文真正起到抛砖引玉的效果.

大型网站架构系列:负载均衡详解(3)

原文:大型网站架构系列:负载均衡详解(3) 软件负载均衡概述 Ngnix负载均衡 Lvs负载均衡 Haproxy负载均衡 本次分享总结 一.软件负载均衡概述 硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用.因此软件负载均衡在互联网领域大量使用.常用的软件负载均衡软件有Nginx,Lvs,HaProxy等.本文参考大量文档,部分为直接拷贝,参考出处见负载均衡详解(4). 二.Ngnix负载均衡 Ngnix是一款轻量级的Web服务器/反向代理服务器,工作在七层Htt

大型网站架构系列:消息队列(二) (转)

本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka).[第二篇的内容大部分为网络资源的整理和汇总,供大家学习总结使用,最后有文章来源] 本次分享大纲 消息队列概述(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息队列应用场景(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息中间件示例(见第一篇:大型网站架构系列:分布式消息队列(一)) JMS消息服务 常用消息队列 参考(推荐)资料 本

大型网站架构系列:负载均衡详解(1)

原文:大型网站架构系列:负载均衡详解(1) 面对大量用户访问.高并发请求,海量数据,可以使用高性能的服务器.大型数据库,存储设 备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访 问量大,并发量高,海量数据的问题. 从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统.分布式和业务拆分解决 了,从集中到分布的问题,但是每个部署的独立业务还存在

大型网站架构系列:负载均衡详解(4)

原文:大型网站架构系列:负载均衡详解(4) 本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法.具体参考文章,详见最后的链接.   三.LVS负载均衡 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,用来实现Linux平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器. 基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/

大型网站架构不得不考虑的几点问题

前言:这两天机器坏了,正在送修中,写个系列的大型http://www.aliyun.com/zixun/aggregation/11116.html">网站架构的文章,希望对有志在互联网做出一番事业的站长朋友们一些帮助. 注意:这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构.我们这里不讨论是PHP还是JSP

作为大型网站架构必须考虑的十大问题

这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构了,我们以高负载高数据交换高数据流动性的网站为例 比如海内,开心网等类似的web2.0系列架构.我们这里不讨论是PHP还是JSP或者.NET环境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面对的. 这里讨论一下大型网站需要注意和考虑的问题 1.海量数据的处理 众所周知,对于一些相对小的站点

[SiS预览版]发起一个用于讨论大型网站架构的开源项目

问题描述 项目名称:SailinginSun(阳光下远航)简称:SiS开发语言:Java说明:SiS的目标是用于讨论大型网站架构,会做些类似于Discuz和PHPWind的功能,但在功能上不会那样丰富,因为主要关注的焦点在于项目的设计和架构.同时,SiS的另外一个主要作用是作为一个有详细文档,详细注释,代码规范的中文开源项目,提供给初学者学习(这在国外也很少见).以下是较详细的介绍开发语言:Java首次架构目标:数据库:将数据库表进行水平拆分,根据情况采用hash分区和冷热表(将不常访问的数据放