试读《大型分布式网站架构设计与实践》

         谈到大型分布式网站架构设计,想起了前几年12306网站出现的问题。一个好的网站构架对于网站的稳定运行至关重要,虽然我们在网站建设初期希望能够设计一个很好的架构,但随着用户量的增加,网站业务功能的扩展,旧的构架将不能适应新的业务需求,必须对架构进行设计优化。也就是说网站架构将会随着需求的不断改进而逐步完善和演化的。网站架构的设计优化从硬件与软件两个方面来进行。

         网站最初架构设计时,可以将应用程序、数据库、文件都部署在一台服务器上。随着业务的不断扩展,一台服务器已经不能满足性能要求,此时可以把应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。随着用户访问的不断增大,需要使用负载均衡技术、缓存技术、CDN、服务器集群技术、数据库分库分区分表技术、搜索引擎技术等提供网站性能。

         在应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。F5是负载均衡技术硬件代表,但价格比较昂贵。软件方面有著名的LVSNginxHAProxyLVS工作在四层,根据目标地址和端口选择内容服务器,而NginxHAProxy工作在七层,根据报文内容选择内部服务器。对内容的分发还可以采用CDN技术,CDN基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。国内比较专业的CDN运营商有蓝汛、网宿。

         缓存实现常见的方式是本地缓存、分布式缓存。本地缓存就是将数据缓存在应用服务器本地,可以存储在内存或者文件中,OsCache就是常用的本地缓存组件。本地缓存的特点是速度很快,但因为本地空间有限因而缓存数据量也有限。而分布式缓存可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,常用的分布式缓存是MemcachedRedis。当数据库与应用程序间的IO成为系统性能的最大瓶颈,可以采用缓存技术。另外还有反向代理技术,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的成本。反向代理技术代表有SquidNginx

         当网站存储数据量很大时,需要部署数据库集群,采用数据库读写分离,分库分表技术手段。读写分离就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切分则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务的不同来切分,如用户业务、商品业务相关的表放在不同的数据库中。

         随着网站业务的扩展,需要处理的文件越来越多,单台文件服务器不能满足性能要求了,此时可以考虑部署分布式文件系统,例如HDFS等。针对海量数据查询与分析,可以使用搜索引擎技术与NoSQL数据库以满足性能要求。搜索引擎相关技术有LuceneSolrElasticSeachNoSQL数据库有HbaseRedisMongodb等。随着网站业务进一步扩展,还需要对应用程序进行拆分,让每个业务应用应当相对独立工作,各业务应用之间通过消息机制来完成数据交换。

        《大型分布式网站架构设计与实践》试读章节介绍了在构建大型分布式网站时所依赖的一些技术。内容涵盖上述介绍的大部分内容。从本书目录可以看到本书涉及内容比较全面,包括SOA架构实现,互联网安全架构、构建分布式网站所常用的技术、网站系统稳定性保障和海量数据分析等内容,深入阐述了大型分布式网站架构设计原理。本书中提供的架构设计典型案例,可以帮助读者了解大型分布式网站设计常见问题和场景。本书作者结合了自己实际工作经历展开论述,初入门者一个比较系统的学习大型分布式网站构架设计中解决分析问题的思路和方法,当然也可供业界同行参考,给日常工作带来启发。

猜你喜欢

转载自dreamone.iteye.com/blog/2142711