揭秘大型网站架构进化之路

转载 2018年01月03日 00:00:00

丁浪,非著名架构师。关注高并发、高可用的架构设计,对系统服务化、分库分表、性能调优等方面有深入研究和丰富实践经验。热衷于技术研究和分享。

声明:版权归丁浪作者本人所有,转载请联系作者本人。

互联网上有很多关于网站架构的各种分享,有些主要是从运维和基础架构的角度去分析的(堆机器,做集群),太关注技术细节实现,普通的开发人员基本看不太懂。

本文第一章节将主要介绍大型网站基础架构的扩展,第二章节则重点从应用程序的角度去介绍网站架构的扩展和演变。


一,大型网站基础架构的扩展


草根时期,快速开发网站并上线。当然,通常只是先试水,用户规模也没有形成,经济能力和投入也非常有限。


有一定的业务量和用户规模了,想提升网站速度,于是,缓存出场了。


市场反响还不错,用户量每天在增长,数据库疯狂读写,逐渐发现一台服务器快撑不住了。于是,决定把DB和APP做分离。


单台数据库也感觉快撑不住了,一般都会尝试做“读写分离”。由于大部分互联网“读多写少”的特性所决定的。Salve的台数,取决于按业务评估的读写比例。



数据库层面是缓解了,但是应用程序层面也出现了瓶颈,由于访问量增大,加上早期程序员水平有限写的代码也很烂,人员流动性也大,很难去维护和优化。所以,很常用的办法还是“堆机器”。



加机器谁都会加,关键是加完之后得有效果,加完之后可能会引发一些问题。例如非常常见的:页面输出缓存和本地缓存的问题,Session保存的问题......


到这里,已经基本做到了DB层面和应用层面的横向扩展了,可以开始关注一些其它方面,例如:站内搜索的精准度,对DB的依赖,开始引入全文索引。

Java领域用的较多的是Lucene、Solr等,而php领域用的比较多的是sphinx/coreseek。


到目前为止,一个能够承载日均百万级访问量的中型网站架构基本介绍完了。


二,从应用程序的角度去看架构扩展


在做扩展满足了基本的性能需求后,我们会逐渐关注“可用性”(也就是我们通常听别人吹牛时说的SLA、几个9)。如何保证真正“高可用”,也是个难题。

几乎主流的大中型互联网公司,都会有用到类似的架构,只是节点数不同而已。


还有一招用的比较多的,那就是动静分离。可以需要开发人员配合(把静态资源放独立站点下),也可以不需要开发人员配合(利用7层反向代理来处理,根据后缀名等信息来判断资源类型)。有了单独的静态文件服务器之后,存储也是个问题,也需要扩展。多台服务器的文件怎么保持一致,买不起共享存储怎么办?分布式文件系统也派上用场了。


还有一项目前国内外用的非常普遍的技术CDN加速。目前该领域竞争激烈,也已经比较便宜了。国内南北互联网问题比较严重,使用CDN可以有效解决这个问题。

CDN的基本原理并不复杂,可以理解为智能DNS+Squid反向代理缓存 ,然后需要有很多机房节点提供访问。



截止目前为止,都没有怎么去改动应用程序的架构,或者说通俗点,都不怎么需要大面积的修改代码。

如果上面那些手段都用光了,还是支撑不住怎么办?不停的加机器也不是办法啊?

随着业务越来越复杂,网站的功能越来越多,虽然部署层面是采用的集群,但是应用程序架构层面还是“集中式”的,这样会导致很多耦合,不便于开发、维护,而且容易“一荣俱损”。所以,通常会把网站拆分出不同的子站点来单独宿主。


应用都拆了,由于单个数据库的连接,QPS,TPS,I/O处理能力都非常有限,DB层面也可以去做垂直分库操作


拆分应用和DB之后,其实还是会有很多问题。不同的站点,里面可能会有相同逻辑和功能的代码。当然,对于一些基础的功能我们可以封装DLL或者Jar包去到处提供引用,但是这种强依赖也很容易造成一些问题(版本问题、依赖关系等处理起来非常麻烦)。这样,传说中的SOA的价值就得到体现了。


应用、服务之间还是会出现一些依赖问题,这时候,高吞吐量的解耦利器出现了




最后,还介绍一个大型互联网公司都用的绝技--分库分表。个人经验,不是业务发站和各方面非常迫切,不要轻易走这一步。

因为分库分表谁都会干,关键是拆完之后怎么办。分库分表主要考虑以下几个维度:横向拆分,纵向拆分,分布式数据访问层,数据库中间件(代理)

推荐阅读:

技术:分布式事务架构实践

技术:分布式唯一ID极简教程

分享:2T架构师学习资料干货分享

觉得有帮助?请转发给更多人!

架构师小秘圈,聚集10万架构师的小圈子!不定期分享技术干货,行业秘闻!汇集各类奇妙好玩的话题和流行动向!长按左侧图片,扫码加入架构师微信群!

大型网站电商网站架构案例和技术架构的示例

1.大型网站电商网站架构案例 大型网站架构是一个系列文档,欢迎大家关注。本次分享主题:电商网站架构案例。从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型。除具备功能需求外,...
  • he90227
  • he90227
  • 2016年03月04日 10:20
  • 11390

各种大型网站技术架构

引言近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各...
  • qw1w1w
  • qw1w1w
  • 2014年10月26日 22:37
  • 2610

大型网站电商网站架构案例和技术架构的示例

1.大型网站电商网站架构案例 大型网站架构是一个系列文档,欢迎大家关注。本次分享主题:电商网站架构案例。从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型。除具备功能需求外,...
  • he90227
  • he90227
  • 2016年03月04日 10:20
  • 11390

揭秘:58同城数据库架构设计思路(最全集锦)

2015-04-28 51CTO技术博客 如果说程序员与工程师最大的遗憾,那么就是没有关注“51CTO技术博客” 58同城数据库架构设计思路 58和赶...
  • likika2012
  • likika2012
  • 2015年05月05日 01:41
  • 2837

Web前端--黑客技术揭秘(菜鸟知识)

一,Web安全的关键点 1.同源策略是众多安全策略的一个,是Web层面上的策略,非常重要。 2.同源策略规定:不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源。 3.同域要求两个站点同协议,...
  • ljiechang
  • ljiechang
  • 2014年06月03日 23:28
  • 3530

中大型网站架构演变之路.pdf

  • 2017年12月20日 09:42
  • 2.1MB
  • 下载

从运维角度看中大型网站架构的演变之路

一个成熟的网站架构并不是一开始设计就具备高可用、高伸缩、高性能等特性的,它是随着用户量和业务线不断增加,基础架构才逐渐健壮的。在发展初期,一般都是从0到1,不会一上来就整一些大而全的架构,也很少人这么...
  • gredn
  • gredn
  • 2017年08月04日 10:16
  • 132

从运维角度看中大型网站架构的演变之路

前言 网上有很多文章类似于我今天要分享的课程,有架构师写的,有运维写的,还有开发些的,偏重点都不同,今天我以咱们运维角度全面讲解。 一个成熟的网站架构并不是一开始设计就具备高可用、高伸缩、高...
  • zhenliang8
  • zhenliang8
  • 2017年09月28日 07:56
  • 223

从运维角度看中大型网站架构的演变之路

从运维角度看中大型网站架构的演变之路 网上有很多文章类似于我今天要分享的内容,有架构师写的,有运维写的,还有开发些的,偏重点都不同,今天我将从运维角度全面讲解。 一个成熟的网站架构并不是...
  • huangshulang1234
  • huangshulang1234
  • 2017年11月29日 09:25
  • 79

从运维角度看中大型网站架构的演变之路

本文虽说是从运维的角度看大型网站的演变之路,但是从开发角度上看,也非常值得借鉴和研习 前言 网上有很多文章类似于我今天要分享的课程,有架构师写的,有运维写的,还有开发些的,偏重...
  • supingemail
  • supingemail
  • 2017年08月04日 10:48
  • 254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:揭秘大型网站架构进化之路
举报原因:
原因补充:

(最多只允许输入30个字)