如果说1980年代是PC的时代,1990年代是互联网的时代,那么当下呢?当下是移动互联网的时代。移动互联网的基本要义,一言以蔽之,就是把手机与网站相连,每部手机在网站上都有独立的个人空间,成为手机的镜像。
一部小小的手机里面,可能同时装载着数十个软件。而且在同一时刻,可能好几个软件在同时运行。另外,还得时刻准备暂停运行,把手机CPU等资源让给电话通 话等优先级别高的工作。还有,时刻需要准备应付网络连接中断,手机电池耗尽等等情况。总之,手机软件的结构设计,是做小的艺术。
移动网站的架构设计,与手机软件的架构设计有着本质的不同。如果说手机软件的特点在于小,那么网站的特点在于大。仅中国就有几亿手机用户,作为服务于移动 业务的网站,它的质量来自于是否能够同时为大规模并发用户提供服务,是否能够处理海量数据,是否能够在需要扩大网站吞吐量的时候,只需要增加机器,而不需 要对网站架构做大手术。这是做大的艺术。
提到做大规模网站,大家一定会想到云计算,想到Google File System,Chubby, BigTable,MapReduce等等。这些技术固然很好,但是它们仅仅是构成一个大型网站的技术要素。实际构建一个大型网站时,光知道技术要素是不够的,还得明白如何把各个要素有机地结合到一起。
“Flickr 网站架构研究”(http://www.ccthere.com/article/2357486)是一篇值得反复阅读的好文章。这篇文章不仅对一个大型 网站的架构进行了系统解剖,逐条梳理,而且行文深入浅出。可惜这样的文章不多见。关于大型网站实例的讨论,散落在各处,而且内容零散。
学习和掌握构建大型网站的架构,需要汇总散落的文章,梳理零散的内容。做好这项工作很有意义,但是也比较困难。我们的体会是,不妨抓住以下几个主题,逐个分析大型网站的实例,然后横向比较。
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
不论预先设想有多周密,实际运行时,总会遇到这样那样的意外情况。譬如敏感词的出现,往往事先没有征兆。所以,在设计系统架构时,应该给网管提供必要工具,应付突发事件。
分享到:
相关推荐
11 海量分布式存储系统Doris的高可用架构设计分析 12 网购秒杀系统架构设计案例分析 13 大型网站典型故障案例分析 第4篇 架构师 14 架构师领导艺术 15 网站架构师职场攻略 16 漫话网站架构师 附录A 大型网站...
1.大型网站架构演化 2.大型网站架构模式 3.大型网站核心架构要素 4.网站高性能架构5.网站的高可用架构6.网站伸缩性架构7.网站的可扩展架构8.网站的安全架构9. 淘宝网的架构演化案例分析10. 维基百科的高性能架构...
在大型互联网架构设计中,我们面对的是海量的数据处理、高并发...总的来说,大型互联网架构设计是一门综合了技术、管理、优化和创新的复杂艺术。随着技术的不断发展,架构师需要持续学习,以适应日新月异的互联网环境。
综上所述,大型企业信息系统的架构设计是一门综合艺术,需要兼顾企业的环境约束、业务目标以及技术实现。设计者需要具备深入的业务理解、扎实的技术基础以及对未来的预见性,以构建能够支持企业长期发展的信息系统...
《大型网站技术架构:核心原理与案例分析》是一本深入探讨和分析大型互联网公司架构设计核心原理的图书,由资深架构师李智慧著作,由电子工业出版社出版。这本书不仅详细剖析了大型网站的技术架构模式,还通过丰富的...
系统架构设计是信息技术领域中的关键环节,它涉及构建大型软件系统的整体结构和组织方式。在本教程中,作者可能涵盖了以下几个主要知识点: 1. **架构模式与原则**:架构模式是经过验证的设计解决方案,例如微服务...
### 大型SNS网站数据库设计精要 在构建大型社交网络服务(SNS)时,...综上所述,大型SNS网站数据库设计是一门艺术,也是一种科学,需要综合考虑技术、业务和成本等多个维度,才能构建出既高效又经济的数据库系统。
本书的第1版广获好评,版权被中国台湾和美国两家大型出版社引进,第2版根据读者的反馈和作者对操作系统的最新研究成果对第1版进行了大幅优化和重写,使其内容质量更上一层楼。本书在众多关于Linux内核的书中独树一帜...
通过以上内容可以看出,软件架构设计不仅是一门技术,更是一门艺术,它要求架构师具备深厚的理论基础、丰富的实践经验以及持续的学习态度。只有深刻理解软件架构的基本原理,并结合项目的具体情况进行创新和优化,...
在探讨大型JavaScript应用程序架构模式的过程中,我们首先需要理解架构模式的重要性以及它们如何帮助开发者构建更加稳定、可维护和可扩展的应用程序。今天,我们将深入研究几种关键的架构模式,特别是那些适用于从中...
大型室内精装修工程可能涉及到酒店、商场、办公楼或高端住宅等多种场所,每种类型的装饰标准和要求都有所不同,因此设计时需兼顾实用性和艺术性。 其次,施工组织设计应包含以下几个核心部分: 1. 工程概况:介绍...
在软件开发过程中,架构设计是至关重要的一步,它决定了系统的整体结构、组件间的交互方式以及技术选型。...通过学习和实践,开发者能更好地掌握软件架构设计的艺术,从而构建出高效、稳定且易于维护的系统。
此外,还会讨论设计模式和架构模式,如工厂模式、单例模式、微服务架构等,这些在大型网站设计中频繁使用,能有效提升代码的可维护性和可扩展性。 接着,本书将重点关注Java中间件的实践,如Spring框架的应用,包括...
在数字化时代,大型电商平台如京东面临着海量用户请求、高并发、数据安全等挑战,因此其背后的应用架构设计至关重要。本文将深入探讨京东应用架构的关键要素,包括分层架构、微服务化、分布式系统、缓存策略、数据库...
《计算机软件架构的艺术》是一本深入探讨软件设计与架构的著作,旨在帮助读者掌握系统架构师所需的关键技能。软件架构是构建大型复杂系统的核心,它决定了系统的可扩展性、可维护性和性能。这本书将引领我们走进这个...
本书的第1版广获好评,版权被中国台湾和美国两家大型出版社引进,第2版根据读者的反馈和作者对操作系统的最新研究成果对第1版进行了大幅优化和重写,使其内容质量更上一层楼。本书在众多关于Linux内核的书中独树一帜...
《软件体系结构的艺术》这本书是系统...通过对《软件体系结构的艺术》的学习,无论是初入行业的新人还是经验丰富的专家,都能提升自己在系统架构设计方面的知识和技能,为构建高质量、可持续的软件系统奠定坚实基础。
【应用架构本质1】 在构建大型的IT系统时,...总之,应用架构设计是一门艺术和科学,需要根据企业的具体情况来定制。正确地理解和应用各种架构模式,可以帮助构建出既满足当前需求又能适应未来发展变化的高效系统。