基于维基百科的网站架构分析

用户头像
莫莫大人
关注
发布于: 2020 年 07 月 01 日
基于维基百科的网站架构分析

架构师课程 --week 4-- 课后作业

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

这张图刻画的是2012年时维基百科的网站架构。我们从左至右,可以将整个架构切分为前端,服务端,后端,这三个板块:

  1. 前端部分

可以关注图中红色的线路。对于维基百科而言,80%以上的用户请求可以通过前端服务返回,请求根本不会到达应用服务器。

对于用户发出的请求,首先到达GeoDNS,它是一个可以根据用户IP解析出用户所在地理位置的服务器,然后将用户请求分发给距离最近的数据中心。即CDN(Content Distribute Network)加速。CDN的本质仍然是一个缓存,部署在运营商的机房,这些运营商又是终端用户网络服务的提供商,所以当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器是最快的。

对于不能得到响应的请求,将通过LVS (Linux Virtual Server)负载均衡的分发到Squid集群中的Squid反向代理服务器中。热点词条被缓存在这里,大量请求可直接返回响应。对于图片,也是从一个专用的图片服务器中读取,如果没有对应的图片,图片服务器再向服务端发送生成请求。对于缓存没有命中的词条,将再通过一个LVS发送到Apache应用服务器集群。如果有词条信息更新,应用服务器使用Invalidation Notification服务通知Squid缓存失效,重新访问应用服务器更新词条。

  1. 服务端

主要以图中蓝色模块MediaWiki为中心展开的服务。MediaWiki由70%的PHP代码和30%的JS代码构成,是一个免费的开源引擎。尽量使用免费开源的软件去部署网站的服务也是节省开销的方法。

  1. 后端

使用分布式缓存Memcached节约存储开销和读取速度。使用读写分离,对主数据库进行写操作,从复制的从数据库中读取数据。

以下是2020年最新的维基百科架构,经历了部分技术的替代之后依旧遵循了LAMP结构的部署。



学习总结

互联网架构的演化从最初走到今天,各个模块进行了细化和丰富,使用的技术进行了优化,但是最初的结构依然存在。每一个技术的更迭,每一种解决方案的出现,都是为了把产品推向高性能,高可用,易扩展,可伸缩的目标。

  • 解决方案:

  • 分层

  • 分割

  • 分布式

  • 集群

  • 缓存

  • 异步

  • 冗余

  • 自动化

  • 安全

  • 架构设计的核心要素(目标):

  • 高性能

  • 高可用

  • 可伸缩

  • 可扩展

  • 安全

  • 架构常用方案一览:

  • 前端:

  • APP及Web开发技术

  • 浏览器及HTTP优化技术

  • CDN

  • 动静分离

  • 图片服务

  • 反向代理

  • DNS

  • 网关及应用层架构:

  • 网关架构

  • 负载均衡

  • 动态页面静态化

  • 业务拆分

  • 服务层架构:

  • 微服务框架

  • 分布式消息队列

  • 分布式缓存

  • 分布式一致性(锁)服务

  • 存储层架构:

  • 分布式文件

  • 分布式关系数据库

  • NoSQL数据库

  • 后台架构:

  • 大数据平台

  • 搜索引擎

  • 推荐引擎

  • 数据仓库

  • 运维与安全:

  • 数据采集与展示

  • 数据监控与报警

  • 攻击与防护

  • 数据加密与解密



本文参考: 《大型网站技术架构-核心原理与案例分析》--李智慧

如果对维基百科的架构设计有兴趣,可参考 https://www.youtube.com/watch?v=6r4qHVawVNQ



发布于: 2020 年 07 月 01 日 阅读数: 44
用户头像

莫莫大人

关注

还未添加个人签名 2018.07.31 加入

还未添加个人简介

评论

发布
暂无评论
基于维基百科的网站架构分析