学习和掌握构建大型网站的架构,需要汇总散落的文章,梳理零散的内容。做好这项工作很有意义,但是也比较困难。我们的体会是,不妨抓住以下几个主题,逐个分析大型网站的实例,然后横向比较。
1. Database
数据存储历来是麻烦,尤其是需要存储海量数据的时候,往往单个数据库容量不够,甚至一个数据库集群也不够。常见的解决办法是分割,譬如按用户ID把海量数据分割成若干块,每块存储到一个独立的数据库里去。但是分割的做法降低了join操作的效率。
Google Bigtable的效率如何?好处是什么,缺陷是什么?Bigtable对什么样的情景最适用?根据Bigtable原理实现的开源软件,Hadoop/HBase的运行效率如何?
2. Cache
用户访问网站时,通常读的操作比写的操作更频繁。为了提高读的操作,不妨把相关内容缓存到内存里,减少Disk IO的消耗。
MemCached 最近大热,Wikipedia, YouTube, Digg, Twitter等等大型网站都在用MemCached作为缓存工具。SquidCache和Varnish等等工具,也与缓存沾边。Twitter的做法是把MemCached和Varnish结合起来,同时使用。什么样的内容,应该用什么样的缓存工具?不同的工具间如何协调?各大网站的实际运行的结果,有哪些经验和教训?
3. File System
有些内容,既没必要存放在数据库里,也不适合存放在缓存中,譬如log 和images。在这种情况下,我们需要文件系统。当有海量内容需要存放在文件系统中时,我们需要使用分布式文件系统。Google File System对于什么样的情景适用,什么样的情景不适用?分布式文件系统常常需要相应的锁机制,保证并发的读写操作不相互干扰。Chubby有什么好处?什么情形下不适用?
据说MogileFS更适合存储大量的,但是单体尺寸不大的文件,譬如images。而Google File System更适合存放大尺寸但是数量不多的文件。有没有可能把小尺寸的多个文件,合并成一个大文件,然后存储到Google File System中去。在这种情况下,比较MogileFS与Google FS的性能,是否有高下之分?
4. Thread Management
一套工序通常由若干任务组成。多线程的办法是由一根线程全权负责整套工序的操作。另外一个办法是把工序斩成几段,每一段由一根或几根线程负责,这种办法称为工作台。
常见的是多线程的办法。但是工作台的做法有利于集中计算资源处理繁重的任务,避免瓶颈的出现。但是缺陷是需要在不同线程之间,传递记录中间状态的数据。什么样的情形适合用多线程,什么时候用工作台?
5. Scheduler
同一个网站通常会提供多种服务,不同的服务需要调用不同的业务逻辑。有些业务逻辑可以在同一台服务器上完成,但是当业务逻辑复杂的时候,需要调用多台服务器合作完成。不同服务的受众对象不同,流量也不同,不同时段的流量也不同,同一时段不同服务的流量也不同,所以需要动态地分配计算资源。这是 scheduler的工作。
Scheduler给不同服务器分配工作时,最简单的办法是启动预先安装在该服务器上的相关程序。由于不能保证每个程序都十分完美,当一个程序发生错误时,应当避免整个服务器因此而崩溃,影响其它工作的正常进行。是否需要动用virtual machine,实现各个不同工作之间相互隔绝?
6. Signal Flow and Data Flow
大型网站后台系统经常由众多服务器组成,服务器与服务器之间时不时会发生数据交换,譬如Web Server解析完用户请求后,把请求转发给某一台App Server,这一台App Server完成了部分工作后,把中间数据转发给下一台App Server。而第二台App Server完成任务后,整个工作就结束了,结果应该返回给Web Server。
问题是如何让第一台App Server如何知道应该把中间结果给第二台App Server,而第二台App Server又如何知道它的目的地是Web Server?一个比较有效率的做法,是区别数据流和控制流。Server与Server之间常设通道,专供控制流使用,传递指令去控制数据流的发送。数据流不占用控制流通道,只有在需要时,才建立数据流的通道。
控制流和数据流的组织,需要结合具体的业务逻辑,才能优化设计,减少带宽消耗,缩短数据传输的时间。
7. Instrumentation
网站后台各个部分是否运转正常,哪里是瓶颈,哪里空闲。这些都需要实时监控。不仅及时避免整个后台系统的崩溃,而且可以分析各个部分运行的规律,从而找到优化系统的途径。
问题是,应该选用什么样的监控工具,才能够尽量减少对系统程序的干扰,同时提供有价值的信息?
8. Anti-abuse
通常网站面对的是形形色色的用户,绝大多数用户的行为是友好的,但是不排除少数用户蓄意恶作剧。如果事先没有设计防范措施,少数恶意用户的胡作非为,会干扰其他用户享受正常的服务。
问题是,如何防范并且及时制止恶意行为的发生?
9. Exception Handling
不论预先设想有多周密,实际运行时,总会遇到这样那样的意外情况。譬如敏感词的出现,往往事先没有征兆。所以,在设计系统架构时,应该给网管提供必要工具,应付突发事件。
相关推荐
通过学习这个资源集合,开发者和架构师能够掌握构建大型网站所需的技能,了解如何在Windows和Linux环境下实现高可用、高性能的系统。同时,它也强调了持续学习和适应快速变化的技术环境的重要性。
构建大型网站架构是一个循序渐进的过程,需要随着业务的发展和技术的进步不断调整和优化。从最初的 Web 服务与数据库分离,到利用缓存技术缓解数据库压力,再到扩展 Web 服务器群集提高并发处理能力,每一步都旨在...
在IT行业中,大型网站架构是构建高可用、高性能、高并发系统的核心所在。随着互联网的快速发展,用户量的剧增,传统的单体架构已经无法满足需求,因此大型网站的架构经历了从简单到复杂,从单一到分布式的发展过程。...
在IT行业中,大型网站架构是构建可扩展、高可用、高性能和高安全性的网络应用程序的关键。这个主题涵盖了许多技术和策略,旨在处理大量并发用户、大数据量以及复杂的业务逻辑。本案例将深入探讨一些核心概念和实践,...
在构建大型电商微服务架构的过程中,我们将会逐步深入地探讨并实施一系列关键技术和实践,确保项目的稳健性和可扩展性。本课程将分为三个主要阶段,每个阶段都旨在提升系统的复杂性和成熟度,以适应日益增长的业务...
在本课程“从无到有构建大型电商微服务架构”的第二阶段中,我们将深入探讨如何利用Java技术栈来设计和实现一个高效的微服务架构。这一阶段涵盖了微服务设计的关键概念和最佳实践,对于想要构建可扩展、高可用的电商...
从文档中可以了解到,凤凰架构是一套结合作者实践经验的理论总结,旨在帮助技术人员理解和掌握构建现代分布式系统的关键技术点,如微服务、服务网格、无服务架构等。微服务架构通过将单一应用程序划分成一组小服务,...
《大型网站技术架构演进与性能优化》这本书深入探讨了互联网行业中大型网站在技术架构上的发展路径和性能优化策略。随着互联网的飞速发展,大型网站的架构设计和性能优化成为了决定企业竞争力的关键因素。本篇文章将...
《大型网站技术架构书籍》是针对互联网行业中高并发、复杂度高的大型网站设计与实现的一类专业读物...通过深入学习,读者不仅可以提升自己的技术能力,还能掌握解决实际问题的方法和思路,以应对日益复杂的互联网环境。
这本书旨在帮助读者理解并掌握构建大规模、高性能、高可用性的网站所需的关键技术与实践策略。以下是该书可能涉及的一些核心知识点: 1. **网站架构演进**:大型网站从最初的单体架构到分布式服务,再到微服务架构...
本文档主要探讨了像Facebook、淘宝、豆瓣这样的大型网站如何构建其基础架构,虽然并未深入到每个细节,但对于理解这些知名网站的架构设计思路具有很大帮助。 一、基础架构概述 大型网站的基础架构通常包括前端、...
Java作为业界广泛使用的后端开发语言,其在构建大型网站中的应用尤为突出。以下是对这一主题的详细解读: 1. **系统架构演变**:大型网站的发展通常经历单体架构、垂直拆分、水平扩展、分布式服务化、微服务化等...
在大型网站架构演变的过程中,需要逐步构建并掌握一系列关键技术与概念: 1. **Web服务器与数据库的物理分离**:理解不同组件之间的依赖关系及其对性能的影响。 2. **页面缓存技术**:包括Squid等工具的使用方法...
《大型网站技术架构:核心原理与案例分析》一书深入探讨了构建和优化大型网站背后的关键技术和策略。大型网站架构是互联网行业中一个至关重要的领域,它涉及到如何处理高并发访问、海量数据存储、高可用性、性能优化...
通过对大型分布式网站架构设计的理解,我们不仅能够掌握分布式系统的基本概念和发展趋势,还能够深入了解如何有效地设计和实现一个高效、可靠且可扩展的分布式网站。这其中包括了负载均衡、数据一致性、故障恢复以及...
企业架构可能包含多个层次,如应用架构、数据架构、业务架构和技术架构,它们之间需要协调一致,以提供稳定且灵活的信息服务。 其次,"电子商务平台架构图"揭示了如何构建一个能够处理大量交易、支持高并发的在线...
《大型分布式网站架构设计与实践》一书正是为了帮助读者更好地理解和掌握分布式系统的设计原则与实践方法而编写的。 #### 二、大型分布式网站架构的核心概念 1. **分布式系统基础**: - **定义**:分布式系统是由...
这本书详细介绍了分布式架构的核心概念、设计原则和实践经验,旨在帮助读者掌握构建大型分布式网站所需的关键技术。 分布式网站架构设计的核心目标是提高系统的可用性、可伸缩性和容错性。在这一过程中,以下几个...
### 大型网站架构演变详解 #### 架构演变第一步:物理分离Web服务器与数据库 在网站初期,可能仅有一台服务器集成了Web服务与数据库服务。随着网站流量的增加,这种架构会面临性能瓶颈,因为Web应用和数据库之间...