前言一个成熟的大型网站(如淘宝、京东等)的系统架构并不是为了具备完整的高性能、高可用、安全性而设计的和其他功能。随着业务量的增加,业务功能的扩展也逐渐演变和完善。在这个过程中,开发模式、技术架构、设计思路也发生了很大的变化。甚至技术人员也从几个人发展到一个部门甚至一个产品线。.因此,一个成熟的系统架构是随着业务的扩展而完善的,不是一蹴而就的;不同业务特点的系统都会有自己的侧重点,比如淘宝,需要解决海量商品信息的搜索、下单、支付,比如腾讯,要解决亿级用户的实时消息传递,百度要处理海量的搜索请求,它们都有自己的业务特点,系统架构也不一样。但是,我们也可以从这些不同的网站背景中找出共享的技术。这些技术和手段可以广泛应用于大型网站系统的架构中。下面通过介绍大型网站系统的演进过程来了解这些技术。和手段。一、网站初期架构初期架构、应用、数据库、文件都部署在一台服务器上,如图:2、应用、数据、文件分离随着业务的扩大,一台服务器不再满足性能需求,因此将应用程序、数据库、文件部署在独立的服务器上,并根据服务器的用途配置不同的硬件,以达到最佳的性能效果。3、利用缓存提升网站性能在硬件优化性能的同时,软件也在优化性能。在大多数网站系统中,缓存技术被用来提高系??统性能。使用缓存主要是因为热点数据的存在。有些网站的访问遵循28原则(即80%的访问请求以20%的数据结束),所以我们可以缓存热点数据,减少这些数据的访问路径,提高用户体验。缓存的常见实现方式有本地缓存??和分布式缓存。当然还有CDN、反向代理等,后面再说。本地缓存,顾名思义就是将数据缓存在应用服务器本地,可以保存在内存中,也可以保存在文件中。OSCache是一个常用的本地缓存组件。本地缓存的特点是速度快,但是由于本地空间有限,缓存的数据量也有限。分布式缓存的特点是可以缓存海量数据,而且非常容易扩展。常用于门户网站,速度没有本地缓存??快。常用的分布式缓存有Membercache和Redis。4、使用集群提高应用服务器性能应用服务器作为网站的入口,会承担大量的请求,我们经常会使用应用服务器集群来分摊请求量。应用服务器前端部署负载均衡服务器,对用户请求进行调度,并根据分发策略将请求分发到多个应用服务器节点。常用的负载均衡技术硬件有F5,价格比较贵,软件有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器。Nginx和HAProxy是七层负载均衡,可以根据报文内容选择内部服务器。因此,LVS的分发路径比Nginx和HAProxy更好,性能更高。Nginx和HAProxy可配置性更强,比如可以用于动静分离(根据请求报文的特点,选择静态资源服务器或应用服务器)。5、数据库读写分离和分库分表随着用户数量的增加,数据库成为了***的瓶颈。提高数据库性能的常用手段是进行读写分离和分表。顾名思义,读写分离就是将数据库分为读写数据库,通过主备功能实现数据同步。分库分表分为水平切分和垂直切分,水平切分就是切分一个大的数据库表,比如用户表。垂直细分就是根据不同的业务进行切换。比如用户业务和商品业务相关的表放在不同的数据库中。6、使用CDN和反向代理提高网站性能如果我们的服务器部署在成都机房,四川用户访问速度较快,而北京用户访问速度较慢。北京属于中国电信和中国联通的不同发达地区。北京的用户需要经过很长的一段路径通过互联网路由器访问成都的服务器,返回路径相同,所以数据传输时间比较长。针对这种情况,往往会使用CDN来解决问题。CDN将数据内容缓存在运营商机房,用户访问时首先从最近的运营商处获取数据,大大减少了网络访问的路径。更专业的CDN运营商有蓝讯、网速。反向代理部署在网站机房。当用户请求到达时,首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户。如果没有缓存数据,会继续去应用服务器获取。它还降低了获取数据的成本。反向代理有Squid、Nginx。7、使用分布式文件系统的用户日益增多,业务量越来越大,产生的文件也越来越多。单一的文件服务器已经不能满足需求。需要分布式文件系统支持。常用的分布式文件系统是NFS。8、使用NoSql和搜索引擎对于海量数据的查询,我们可以通过使用NoSQL数据库和搜索引擎来获得更好的性能。并非所有数据都应放在关系数据中。常用的NOSQL有mongodb、redis,搜索引擎有lucene。9.将应用服务器拆分成业务。随着业务的进一步扩大,应用变得非常臃肿。这时候我们就需要把应用拆分成业务。例如,百度分为新闻、网页、图片等服务。每个业务应用负责相对独立的业务操作。企业通过消息或共享数据库进行通信。10、搭建分布式服务这时候我们发现,每个业务应用都会用到一些基础的业务服务,比如用户服务、订单服务、支付服务、安全服务等。这些服务是支持每个业务应用程序的基本元素。我们将这些服务抽取出来,使用分布式服务框架来构建分布式服务。淘宝的Dubbo是个不错的选择。总结大型网站的架构都是根据业务需求不断改进的,会根据不同的业务特点进行具体的设计和考虑。本文仅介绍常规大型网站中涉及的一些技术和方法。本文来自:http://www.cnblogs.com/leefreeman/p/3993449.html
