维基百科(Wikipedia)网站架构设计分析
Date: 2020/6/30 V1.0
Author:Jessie
网站背景:
维基百科是全球第6大网站。全球三个数据中心、十几个人维护。本文通过对Wikipedia网站架构的设计中用到的技术方案和手段的描述,从而分析大型互联网站应用系统的设计和解决的问题。
网站架构:
先介绍各个技术部分:
LVS:基于 Linux 的开源负载均衡服务器。
DNS:Domain Name Service 域名解析。GeoDNS:基于开源域名服务器软件 BIND(Berkeley Internet Name Domain)的增强版本。用于就近机房(数据中心),返回数据中心的LVS负载均衡服务器的地址。
Squid :反向代理缓存服务器。
Apache(PHP开发):应用服务器集群。
Lighttpd:开源的应用服务器,用做图片服务器。
Memcached:无中心高性能的开源分布式缓存系统。
MySQL:开源的关系数据库管理系统。
Lucene:由 Apache 出品,Java 开发的开源全文搜索引擎。
维基百科网站优化:
1. 应用服务和数据服务分离
应用服务处理大量的业务逻辑;数据库服务器需要快速的磁盘检索和数据缓存,需要更快的硬盘和更大的内存。
应用和数据分离后,不同的服务器承担不同的服务角色,提高网站的并发处理能力和改善数据的存储空间。
维基的网站中:
MySQL数据库服务(橙色)和应用服务(紫色)分离。
2. 使用缓存改善网站的性能
将大部分业务访问集中在一小部分的数据上,通过将这部分数据缓存在内存中,将数据存放在距离计算最近的位置加快处理速度,减少数据库的访问压力。
维基的网站中:
分布式对象缓存:Memcached(紫色部分):无中心高性能的开源分布式缓存系统,稳定、可靠、历久弥新,是网站分布式缓存服务必备的。 过期失效。缓存不更新,直接删除。删除后,下次访问没有则重新构建数据后加载入缓存。
3. 应用服务器集群、负载均衡调度服务器
改善网站的并发处理能力,实现系统的可伸缩性。通过负载均衡调度服务器,将用户浏览器的请求分发到应用服务器任一台服务器上。通过集群负荷分担,避免造成应用服务器的压力。
维基的网站中:
LVS: 负载均衡服务器
4. 分布式静态资源
将网站的静态资源,如:JS、CSS,Logo图片等资源独立分布部署,采用独立的域名,(动静分离)。可以减轻应用服务器的负载压力,加快浏览器并发加载的速度。
维基的网站中:
Lighttpd:用于静态图片的服务器。
5. 使用反向代理加速网站响应
反向代理的基本原理是缓存。都是加快用户访问速度,减轻后端服务器的负载压力。
反向代理,属于网站前端架构的一部分。部署在网站的中心机房,当用户请求到达中心机房后,首先访问反向代理服务器,如果反向代理服务器中缓存用户的请求资源,则将其直接返回用户。
维基的网站中:
如图中:Squid :反向代理缓存服务器。大约部署有数十台服务器,请求通过 LVS 负载均衡地分发到每台 Squid 服务器,热点词条缓存在这里,大量请求可直接返回响应,请求无需发送到 Apache 服务器,减轻应用负载压力。Squid 缓存不能命中的请求再通过 LVS 发送到 Apache 应用服务器集群,如果有词条信息更新,应用服务器使用 Invalidation Notification 服务通知 Squid 缓存失效,重新访问应用服务器更新词条。
版权声明: 本文为 InfoQ 作者【架构5班杨娟Jessie】的原创文章。
原文链接:【http://xie.infoq.cn/article/b5690db0996d6644fc3834555】。文章转载请联系作者。
评论