基于维基百科的网站架构分析
架构师课程 --week 4-- 课后作业
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
这张图刻画的是2012年时维基百科的网站架构。我们从左至右,可以将整个架构切分为前端,服务端,后端,这三个板块:
前端部分
可以关注图中红色的线路。对于维基百科而言,80%以上的用户请求可以通过前端服务返回,请求根本不会到达应用服务器。
对于用户发出的请求,首先到达GeoDNS,它是一个可以根据用户IP解析出用户所在地理位置的服务器,然后将用户请求分发给距离最近的数据中心。即CDN(Content Distribute Network)加速。CDN的本质仍然是一个缓存,部署在运营商的机房,这些运营商又是终端用户网络服务的提供商,所以当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器是最快的。
对于不能得到响应的请求,将通过LVS (Linux Virtual Server)负载均衡的分发到Squid集群中的Squid反向代理服务器中。热点词条被缓存在这里,大量请求可直接返回响应。对于图片,也是从一个专用的图片服务器中读取,如果没有对应的图片,图片服务器再向服务端发送生成请求。对于缓存没有命中的词条,将再通过一个LVS发送到Apache应用服务器集群。如果有词条信息更新,应用服务器使用Invalidation Notification服务通知Squid缓存失效,重新访问应用服务器更新词条。
服务端
主要以图中蓝色模块MediaWiki为中心展开的服务。MediaWiki由70%的PHP代码和30%的JS代码构成,是一个免费的开源引擎。尽量使用免费开源的软件去部署网站的服务也是节省开销的方法。
后端
使用分布式缓存Memcached节约存储开销和读取速度。使用读写分离,对主数据库进行写操作,从复制的从数据库中读取数据。
以下是2020年最新的维基百科架构,经历了部分技术的替代之后依旧遵循了LAMP结构的部署。
学习总结
互联网架构的演化从最初走到今天,各个模块进行了细化和丰富,使用的技术进行了优化,但是最初的结构依然存在。每一个技术的更迭,每一种解决方案的出现,都是为了把产品推向高性能,高可用,易扩展,可伸缩的目标。
解决方案:
分层
分割
分布式
集群
缓存
异步
冗余
自动化
安全
架构设计的核心要素(目标):
高性能
高可用
可伸缩
可扩展
安全
架构常用方案一览:
前端:
APP及Web开发技术
浏览器及HTTP优化技术
CDN
动静分离
图片服务
反向代理
DNS
网关及应用层架构:
网关架构
负载均衡
动态页面静态化
业务拆分
服务层架构:
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
存储层架构:
分布式文件
分布式关系数据库
NoSQL数据库
后台架构:
大数据平台
搜索引擎
推荐引擎
数据仓库
运维与安全:
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
本文参考: 《大型网站技术架构-核心原理与案例分析》--李智慧
如果对维基百科的架构设计有兴趣,可参考 https://www.youtube.com/watch?v=6r4qHVawVNQ
版权声明: 本文为 InfoQ 作者【莫莫大人】的原创文章。
原文链接:【http://xie.infoq.cn/article/c88ad8c166113bd522af1c473】。文章转载请联系作者。
评论