谈到大型分布式网站架构设计,想起了前几年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架构实现,互联网安全架构、构建分布式网站所常用的技术、网站系统稳定性保障和海量数据分析等内容,深入阐述了大型分布式网站架构设计原理。本书中提供的架构设计典型案例,可以帮助读者了解大型分布式网站设计常见问题和场景。本书作者结合了自己实际工作经历展开论述,初入门者一个比较系统的学习大型分布式网站构架设计中解决分析问题的思路和方法,当然也可供业界同行参考,给日常工作带来启发。
相关推荐
分布式数据库架构揭秘,原理与实践兼备,极具借鉴意义
阿里巴巴集团技术丛书——淘宝一线团队实践 大型分布式网站架构设计与实践 Storm 实战:构建大数据实时计算试读样
软件架构专家温昱老师新作——《一线架构师实践指南》试读样章 本书致力于为一线架构师,以及软件企业提供务实有效的架构设计方法指导。 本书从架构师经常遇到的困惑出发,总结软件架构设计中经常遇到的问题,提出...
Spring cloud与docker高并发微服务架构设计实施(试读)
《响应式Web设计实践》试读干货,响应式——适应浏览器的不同——Web设计实践
分布式系统常用技术及案例分析
余晟倾情作序,业界专家力荐,展现了一幅完整的App后台开发蓝图
高校退学试读预警机制的探索与实践(全文).docx
Java语言程序设计(基础篇)(英文版·第10版)试读版
产品圣经《Web信息架构》重磅新版 北极熊迈向移动|硬件|未来
本书是为那些熟悉.NET框架但希望了解如何改进编码方式以及如何运用设计模式、设计原则和最佳实践来提高代码的可维护性和适应性的ASP.NET开发者而写的。那些以前已经体验过设计模式的读者可能希望跳过本书的第Ⅰ部分...
本书是一本关于设计原则、编程实践、测试驱动开发的指南,旨在帮助C++ 程序员用测试驱动开发方法构建高性能解决方案。全书共11 章,涵盖测试驱动开发的基本工作方式、潜在好处、怎样利用测试驱动开发解决设计缺陷、...
作者根据自己的亲身经历和某些大型企业的案例,讲述了如何创建高稳定性的软件系统,分析设计和实现中导致系统出现问题的原因。本书分为四个部分,每部分内容都由一个研究案例引出。第一部分介绍了如何保证系统的生存...
《Java程序设计《Java程序设计大学教程》试读版 大学教程》试读版 《Java程序设计大学教程》试读版
3GPP系统架构演进(SAE)原理与设计,实在是没找到全本的,只找到了试读的第四章,找的时候发现CSDN上还没有相关资源就发上来了。
以Java语言为载体,通过讨论Java程序设计的一般过程和方法,重点讲述程序设计基础、面向对象程序设计、算法与数据结构、GUI程序设计和Web程序设计的知识,并涉及计算机科学基础、数据和控制、程序设计理论、软件工程...
游戏界华人之光陈星汉隆重作序力荐 其恩师扛鼎力作|享誉全球|入门正宗
程序设计语言实践之路配套光盘,原光盘中包括多个版本的Adobe Reader,总计达150M,摘除掉这些文件后,现约15M,由于本人上传文件不能超过15M,压成两个包进行上传。 光盘中包括课后习题、探索以及部分试读章节,请...
数字化专项 架构参考模型