大型网站系统架构的演化
原创转自:http://blog.jobbole.com/77748/
前言
成熟的大型网站(如淘宝、JD.com 等)的系统架构设计并非具有高性能、高可用性、安全性等完整功能。它总是随着用户量的增加和业务功能的扩展而发展和改进。在这个过程中,开发模式、技术架构、设计思路也发生了重大变化,甚至技术人员也从几个人演变成一个部门甚至一条产品线。所以一个成熟的系统架构是随着业务的扩展而提炼的,不是一蹴而就的;具有不同业务特征的系统将有自己的重点。比如淘宝需要解决海量产品信息的搜索、下单、支付。例如,腾讯需要解决数亿用户的实时消息传输,而百度需要处理海量搜索请求。它们都有自己的业务特点,系统架构也不同。尽管如此,我们也可以从这些不同的网站背景中识别出可以广泛应用于大型网站系统架构的通用技术和手段。下面,我们将介绍大型网站系统的演进过程,以了解这些技术和手段。
一、最初的网站架构
初始体系结构涉及在单个服务器上部署应用程序、数据库和文件,如图所示:
2、 应用、数据、文件的分离
随着业务的扩展,单台服务器已不能满足性能要求。因此,应用程序、数据库和文件部署在不同的服务器上,并根据服务器的用途配置不同的硬件,以达到最佳的性能结果。
3、 利用缓存提高网站性能
在优化硬件性能的同时,软件也用于优化性能。在大多数网站系统中,缓存技术用于提高系统性能。缓存的使用主要来自热数据的存在,大多数网站访问量都随之而来28原则(即80%访问请求最终落在20%因此我们可以缓存热点数据,减少这些数据的访问路径,并改善用户体验。
实现缓存的常用方法是本地缓存和分布式缓存。当然,也有CDN、反向代理等。本地缓存,顾名思义,是指在应用程序服务器上本地缓存数据,这些数据可以存储在内存或文件中,OSCache它是常用的本地缓存组件。本地缓存的特点是速度快,但由于本地空间有限,缓存的数据量也有限。分布式缓存的特点是可以缓存海量数据,非常容易扩展。它经常在门户网站中使用,其速度不如本地缓存快。常用的分布式缓存是Memcached、Redis。
四、 使用集群提高应用服务器性能
应用服务器作为网站的入口,承载着大量的请求,我们经常通过应用服务器集群共享请求数量。在应用服务器前面部署负载均衡服务器,调度用户请求,并根据分发策略将用户请求分发到多个应用服务器节点。
常用的负载均衡技术硬件包括F5价格相当昂贵,有可用的软件LVS、Nginx、HAProxy。LVS它是一个四层负载平衡系统,根据目标地址和端口选择内部服务器,Nginx它是一个七层负载平衡和HAProxy支持四层或七层负载均衡,可根据消息内容选择内部服务器。因此LVS分发路径优于Nginx和HAProxy,具有更高的性能,并且Nginx和HAProxy它更具可配置性,例如能够执行动态和静态分离(根据请求消息的特征选择静态资源服务器或应用程序服务器)。
五、 数据库读写分离与数据库表分区
随着用户数量的增加,数据库成为最大的瓶颈。提高数据库性能的常用方法是读/写分离和表分区。读写分离,顾名思义,将数据库划分为读写库,通过主备功能实现数据同步。数据库拆分和表拆分分为水平拆分和垂直拆分,而水平切换涉及拆分数据库的大表,例如用户表。垂直细分切换基于不同的业务,例如将用户和产品业务相关的表放在不同的数据库中。
六、使用CDN和反向代理以提高网站性能
如果我们的服务器都部署在成都的机房里,四川用户的访问速度更快,而北京用户的访问速度更慢。这是因为四川和北京属于中国电信和中国联通的不同发达地区,北京用户需要通过互联网路由器经过很长的路径才能访问成都的服务器,并且返回路径相同,因此数据传输时间相对较长。对于这种情况,它经常被使用CDN解决,CDN将数据内容缓存到运营商的机房,允许用户在访问前从最近的操作员那里获取数据,大大减少了网络访问的路径。相对专业CDN运营商包括兰迅和网津。
反向代理部署在网站的机房中。当用户的请求到达时,将首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户。如果没有缓存的数据,应用服务器会继续获取数据,这也降低了获取数据的成本。反向代理具有Squid,Nginx。
7、 使用分布式文件系统
随着用户数量和业务量的不断增加,生成的文件越来越多,单个文件服务器已经无法满足需求。需要分布式文件系统支持。常用的分布式文件系统包括NFS。
八、使用NoSql和搜索引擎
对于海量数据查询,我们使用nosql使用搜索引擎添加数据库可以实现更好的性能。并非所有数据都需要放置在关系数据中。常用NOSQL有mongodb和redis搜索引擎有lucene。
9、 将应用服务器拆分为业务板块
随着业务的进一步扩展,应用程序变得非常繁琐。此时,我们需要将应用程序拆分为业务段,例如新闻、网页、图像等。每个业务应用程序负责相对独立的业务操作。企业之间的数据库通信或共享是通过消息实现的。
10、 构建分布式服务
此时,我们发现各种业务应用程序会使用一些基本的业务服务,例如用户服务、订单服务、支付服务和安全服务,这是支持每个业务应用程序的基本要素。我们提取这些服务,并使用分段的服务框架来构建分布式服务。淘宝Dubbo这是一个不错的选择。
小结
大型网站的架构会根据业务需求不断改进,并根据不同的业务特点进行具体的设计和考虑。本文仅讨论常规大型网站所涉及的一些技术和方法。
参考资料:
大型网站的技术架构 ——李志辉
大规模运维计划 ——唐文
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除