谈到大型分布式网站架构设计,想起了前几年12306网站出现的问题。一个好的网站构架对于网站的稳定运行至关重要,虽然我们在网站建设初期希望能够设计一个很好的架构,但随着用户量的增加,网站业务功能的扩展,旧的构架将不能适应新的业务需求,必须对架构进行设计优化。也就是说网站架构将会随着需求的不断改进而逐步完善和演化的。网站架构的设计优化从硬件与软件两个方面来进行。
网站最初架构设计时,可以将应用程序、数据库、文件都部署在一台服务器上。随着业务的不断扩展,一台服务器已经不能满足性能要求,此时可以把应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。随着用户访问的不断增大,需要使用负载均衡技术、缓存技术、CDN、服务器集群技术、数据库分库分区分表技术、搜索引擎技术等提供网站性能。
在应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。F5是负载均衡技术硬件代表,但价格比较昂贵。软件方面有著名的LVS、Nginx与HAProxy。LVS工作在四层,根据目标地址和端口选择内容服务器,而Nginx与HAProxy工作在七层,根据报文内容选择内部服务器。对内容的分发还可以采用CDN技术,CDN基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。国内比较专业的CDN运营商有蓝汛、网宿。
缓存实现常见的方式是本地缓存、分布式缓存。本地缓存就是将数据缓存在应用服务器本地,可以存储在内存或者文件中,OsCache就是常用的本地缓存组件。本地缓存的特点是速度很快,但因为本地空间有限因而缓存数据量也有限。而分布式缓存可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,常用的分布式缓存是Memcached、Redis。当数据库与应用程序间的IO成为系统性能的最大瓶颈,可以采用缓存技术。另外还有反向代理技术,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的成本。反向代理技术代表有Squid,Nginx。
当网站存储数据量很大时,需要部署数据库集群,采用数据库读写分离,分库分表技术手段。读写分离就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切分则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务的不同来切分,如用户业务、商品业务相关的表放在不同的数据库中。
随着网站业务的扩展,需要处理的文件越来越多,单台文件服务器不能满足性能要求了,此时可以考虑部署分布式文件系统,例如HDFS等。针对海量数据查询与分析,可以使用搜索引擎技术与NoSQL数据库以满足性能要求。搜索引擎相关技术有Lucene、Solr、ElasticSeach,NoSQL数据库有Hbase、Redis、Mongodb等。随着网站业务进一步扩展,还需要对应用程序进行拆分,让每个业务应用应当相对独立工作,各业务应用之间通过消息机制来完成数据交换。
《大型分布式网站架构设计与实践》试读章节介绍了在构建大型分布式网站时所依赖的一些技术。内容涵盖上述介绍的大部分内容。从本书目录可以看到本书涉及内容比较全面,包括SOA架构实现,互联网安全架构、构建分布式网站所常用的技术、网站系统稳定性保障和海量数据分析等内容,深入阐述了大型分布式网站架构设计原理。本书中提供的架构设计典型案例,可以帮助读者了解大型分布式网站设计常见问题和场景。本书作者结合了自己实际工作经历展开论述,初入门者一个比较系统的学习大型分布式网站构架设计中解决分析问题的思路和方法,当然也可供业界同行参考,给日常工作带来启发。
相关推荐
分布式存储系统(Distributed Storage System)通常将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大...
这篇论文对于系统架构设计师来说是一份宝贵的参考资料,它展示了如何从实际项目中成功过渡到微服务架构,并揭示了微服务在解决大型系统复杂性、提高敏捷性和可扩展性方面的作用。通过深入理解和实践微服务架构,架构...
根据提供的文件信息,可以看出这份材料主要涉及的是Spring Cloud与Docker在高并发微服务架构设计中的应用,并且提供了关于如何获取该电子书的信息。然而,实际内容并未给出具体的技术细节,而是介绍了如何联系作者...
论企业集成架构设计及应用企业集成架构(Enterprise Integration Arhitecture,EIA) 是企业集成平台的核心,也是解决企业信息孤岛问题的关键。企业集成架构设计包括了企业信息、业务过程、应用系统集成架构的设计。...
信息架构是构建和管理信息环境的一门科学,它跨越了Web设计、用户体验、内容策略以及其它与信息有关的专业。在数字化时代,随着移动设备、物联网(IoT)和人工智能技术的兴起,信息架构的角色和应用领域不断扩展。 ...
云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非...
在分布式、多层结构及基于组件和服务器端程序设计的企业级应用开发中,应用服务器提供的是一个开发、部署、运行和管理、维护的平台,提供软件“集群”功能,可以让多个不同的异构服务器协同工作、相互备份,以满足...
根据提供的信息,我们可以深入挖掘与“软件小设计试读样章”相关的专业知识点。此章节旨在探讨软件设计的核心概念,并通过实例分析来帮助读者更好地理解软件设计的基本原理和技术要点。 ### 软件设计的经典原则 ##...
响应式Web设计是一种网页设计技术,它的核心目标是使得网站能够自动适应不同屏幕尺寸和分辨率的设备,如桌面浏览器、平板电脑和手机。这种设计方法要求设计师和开发者采用灵活的思维方式,克服传统设计中的固定思维...
根据提供的文件信息,内容涉及到游戏设计领域的一本重要著作《游戏设计梦工厂试读样章》,并且提到了游戏设计大师陈星汉及其恩师Tracy Fullerton的作品,以及相关的版权信息和出版社信息。以下是对这些信息的详细...
Lambda架构是大数据平台里最成熟、最稳定的架构,它是一种将批处理和流处理结合起来的大数据处理系统架构,其核心思想是将批处理作业和实时流处理作业分离,各自独立运行,资源互相隔离,解决传统批处理架构的延迟...
论微服务架构及其应用近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件...
企业应用集成(Enterprise Application Integration, EAI)是每个企业都必须要面对的实际问题。面向服务的企业应用集成是一种基于面向服务体系结构(Service-OrientedArchitecture,SOA)的新型企业应用集成技术,强调将...
区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域。从网络层面来讲,区块链是一个对等网络(Peer to Peer, P2P),网络中的节点地位对等,每个节点都保存完整的账本...
《Java语言程序设计(基础篇)(英文版·第10版)》是学习Java编程的经典教材,适合初学者入门。本试读版包含了部分内容,旨在帮助读者了解书中的教学方式和知识体系。以下是根据提供的文件名,结合Java语言基础知识...
随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速...
层次架构作为软件系统设计的一种基本模式,对于实现系统的模块化、可维护性和可扩展性具有至关重要的作用。在软件系统的构建过程中,采用层次架构不仅可以使系统结构更加清晰,还有助于提高开发效率和质量。因此,对...