大型网站掌握大型网站建设架构的案例分析

评论:本文主要以理论为基础。建议您阅读以下相关阅读,这是关于Flickr的网站结构计划,这是非常实用和有用的。







学习和掌握大型网站的体系结构,需要收集零散的文章和零散的内容,做好这项工作是很有意义的,但也很困难,我们的经验是掌握以下主题,逐一分析大型网站的实例,然后进行横向比较。

1。数据库

数据存储一直是个问题。尤其是在存储海量数据时,单个数据库容量不够。即使是一个数据库集群也是不够的,一个常见的解决方案是分割,例如根据用户ID将海量数据分割成块,每个数据存储在一个独立的数据库中,但是分割方法降低了连接操作的效率。

谷歌的BigTable的效率是什么好处是什么,缺点是什么什么样的情况是最适合Bigtable什么是Hadoop的HBase /运行效率基于BigTable原则实施开源软件

2。隐藏物

当用户访问一个网站时,他们通常读得比他们写的要频繁,为了提高阅读的效率,有必要将相关内容缓存在内存中,以减少磁盘IO的消耗。

memcached最近大热,维基百科、YouTube、Digg、推特等大型网站都使用memcached作为缓存tool.squidcache和油漆工具,和缓存分离。推特的方法是将memcached漆同时使用它。什么样的内容,什么样的缓存工具应该使用不同的工具是如何协调的各大网站的实际运作有哪些经验和教训

三.文件系统

有些东西不需要存储在数据库中,也不适合存储在缓存中,如日志和图片。在这种情况下,我们需要一个文件系统,当有大量的内容需要存储在一个文件系统,我们需要使用一个分布式的文件系统。什么情况不谷歌文件系统适用于什么情况不适用分布式文件系统通常需要一个相应的锁机制来确保并发读写操作不会互相干扰。在什么情况下不适用

这是说,MogileFS更适合存储大量的东西,但大小单大小的文件,如图片,谷歌文件系统更适合存储和扩大规模而不是大量的文件。它可能合并少量的文件到一个大文件然后将其存储在谷歌文件系统。在这种情况下,有比MogileFS和谷歌FS性能更高的分数

4。线程管理

一组进程通常由多个任务组成,多线程的方法是由线程完成整个过程的操作,另一种方法是将进程分成几个部分,每个部分负责一个或多个线程,称为工作台。

常用的方法是多线程的,但是工作台的做法有利于集中计算处理资源的任务很重,避免瓶颈的出现。但缺点是需要不同线程间传递数据,而记录的中间状态,是通过什么样的情况是适合多线程的时候使用一台吗

5。调度程序

相同的网站通常提供各种各样的服务,不同的服务需要调用不同的业务逻辑,业务逻辑可以在同一台服务器上完成的,但当业务逻辑复杂,多个服务器需要被调用来完成。不同的服务有不同的观众,不同的交通量,在不同的时间段不同交通量、不同流量的同时,所以他们需要动态地分配计算资源。这是调度工作。

调度程序将工作分配给不同的服务器的最简单的方法是启动相关的程序安装在服务器上。因为每一个程序不能保证每个程序是完美的。当程序失败时,应该避免整个服务器崩溃,影响其他任务的正常运行。您需要使用虚拟机来隔离工作吗

6。信号流和数据流

大型网站后台系统往往由多台服务器,服务器与服务器之间的数据交换也会时有发生,如用户请求Web服务器分析和转发到应用服务器的请求,应用服务器做了一些工作,提出了数据到应用服务器,应用服务器后二完成了任务,整个工作结束,结果应该返回到Web服务器。

问题是如何让第一个应用服务器知道如何将中间结果提交给第二个应用服务器,第二个应用服务器知道它的目的地是Web服务器吗一个更有效的方法是将数据流与控制流之间,服务器与服务器之间的永久频道致力于控制流使用,通过指令来控制数据流的传输,数据流不占控制流的通道,只有当它是必要的建立数据流的通道。

为了优化设计,降低带宽消耗,缩短数据传输时间,应将控制流和数据流的组织与特定业务逻辑相结合。

7。仪器仪表

网站后台的各个部分是否正常运行,瓶颈在哪里,哪里是空闲的,这些都需要实时监控,不仅要及时避免整个后台系统崩溃,还要分析各个部分的运行规则,从而找到优化系统的方法。

问题是,应该使用什么样的监控工具来最小化对系统程序的干扰,同时提供有价值的信息

8。防滥用

通常网站面临着各种各样的用户,大多数用户的行为是友好的,但并不排除少数用户故意恶作剧,如果没有事先的设计措施,恶意用户就可以玩流氓,干扰其他用户享受正常的服务。

问题是,如何及时防止和制止恶意行为的发生

9。异常处理

无论预想的多么细致,运行时总会出现这样的事故,比如敏感字的出现往往没有征兆,因此在设计系统架构时,应该为网络管理提供必要的应急工具。