李智慧 · 高并发架构实战课
李智慧
同程艺龙交通首席架构师,前 Intel & 阿里架构师,《大型网站技术架构》作者
23286 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 26 讲
李智慧 · 高并发架构实战课
15
15
1.0x
00:00/00:00
登录|注册

14 | 百科应用系统设计:机房被火烧了系统还能访问吗?

你好,我是李智慧。
百科知识应用网站是互联网应用中一个重要的类别。很多人上网是为了获取知识,而互联网上的信息良莠并存,相对说来,百科知识应用网站能为普通人提供较为可信的信息。因此,百科知识网站虽然功能单一、设计简单,但是依然撑起了互联网的一片天空:维基百科是全球访问量 TOP10 的网站,百度百科是百度的核心产品之一。
我们准备开发一个供全球用户使用的百科知识应用系统,系统名称为“Wepedia”。
Wepedia 的功能比较简单,只有编辑词条和搜索查看词条这两个核心功能。但是 Wepedia 的设计目标是支撑每日 10 亿次以上的访问压力。因此设计目标主要是简单、高效地支持高并发访问,以及面对全球用户时保证 小时高可用。

概要设计

Wepedia 的整体架构,也就是简化的部署模型如图。
在梳理 Wepedia 整体逻辑之前,先说明下架构图中核心组件的作用。
用户在 Web 端查看一个百科词条的时候,首先通过 GeoDNS 进行域名解析,得到离用户最近的数据中心所属的 CDN 服务器的 IP 地址。用户浏览器根据这个 IP 地址访问 CDN 服务器,如果 CDN 服务器上缓存有用户访问的词条内容,就直接返回给用户;如果没有,CDN 会访问和自己在同一个区域的 Wepedia 的数据中心服务器。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

百科知识应用网站的设计和架构对于支撑高并发访问和全球用户的需求提供了重要参考。Wepedia系统通过GeoDNS进行域名解析,利用CDN服务器和多级负载均衡实现高效的访问处理。多数据中心架构不仅提供用户就近访问服务,还具备容灾备份功能,通过数据同步保证数据一致性。在性能优化方面,Wepedia采用了多种策略,包括缓存、存储、数据库等方面的优化,以及使用CDN缓存、Nginx和Apache服务器集群、PHP服务器硬件改善和开源组件优化等,有效减轻了服务器压力,提升了系统性能。文章还提到了异地多活的多机房架构策略,即将数据中心分布在多个不同地点的机房里,以提高系统的处理能力和改善用户体验。同时,文章还提出了一个思考题,即词条编辑者修改词条的时候可能会导致数据和图片同步不一致的问题,需要解决这个问题以保证用户体验。整体而言,本文介绍了Wepedia系统的架构设计和性能优化策略,为构建高可用、高性能的百科知识应用系统提供了有益的参考和借鉴。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《李智慧 · 高并发架构实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • ABC
    老师,请教个问题。在很多地方都提到PostgreSQL比 MySQL好用的多,但为什么现在主要还是用MySQL用的多一些呢?

    作者回复: 没有比较过两者,如果是事实的话,我觉得可能原因是MySQL的社区更庞大,资料更完善,历史更悠久。 本质上两个都是商品,决定市场占有率的因素有很多。一个新商品要抢占老商品的市场,好一点是不够的,必须要好好几倍,甚至要好一个数量级才行。成功的例子redis干掉memcached,智能机干掉功能机;没成功的例子更多,典型的基于JVM的各种语言,都动不了Java的地位。

    2022-04-02
    3
  • ball
    老师想问下,php为什么要跑在apache上。似乎nginx + fpm方式更常用一些?

    作者回复: 谢谢指教,学习了~

    2022-08-24归属地:北京
    1
  • neohope
    对当前场景,可否这样: 1、每次上传图片时,都生成一个唯一文件UUID,词条中仅记录图片的唯一UUID。 2、在服务器返回词条时,先通过文件UUID判断是否完成同步,如果完成同步拼接本地服务地址,如果没有完成同步拼接主站点地址。 3、服务器还可以直接缓存网页,对于已经同步全部图片的,设置较长超时时间。对于没有完成全部图片同步的,设置较短超时时间。 4、刷新页面缓存时,判断MD5码,如果页面变动,主动通知CDN等,原页面失效;或直接推送新版本。 5、缓存页面时,可以前1%热点话题放内存,前5%话题放到SSD 6、 Tex公式转图片,可以用类似逻辑

    作者回复: 这个方案也是可行的,只是在查询词条时候的复杂度和性能都不太好,数据一致的问题需要在正常业务逻辑中处理,耦合性也不太好。 Otter的做法是在数据同步的时候进行检查,如果有图片,就把数据和图片打包在一个同步块内进行同步,保证数据和图片是一致的。同时把这部分逻辑放在数据同步的时候实现,对正常业务流程没有影响,耦合性更加友好一点。

    2022-05-04
    2
    1
  • HappyHasson
    怎么保证读一致呢? 一个在从数据中心的写请求后立即请求读。这时候主数据中心的数据还未同步到从中心,读请求读到的数据不是最新的。这种读不一致的问题不需要解决吗

    作者回复: 百科词条的编辑需要经过审核的,写请求不会立即生效。

    2023-05-24归属地:广东
  • neohope
    老师好,想咨询您一个问题: 在多个数据中心之间,保持数据库的双A同步时,otter的单项回环补救机制,确实可以保证双中心数据最终是一致的。 但在一些极端情况下,业务上要如何处理的呢。比如: 货物A,双地库存一致都为200,同一时刻杭州卖了150件,US库也卖了150件,扣库存都可以成功,但最终超卖了。这种情况,业务上要如何处理的呢。 感谢!

    作者回复: 库存服务这样对数据一致性有强要求的场景,建议多数据中心之间采用主从结构,类似文中设计,库存写操作只能到主数据中心完成

    2022-05-04
    2
  • 花轮君
    思考题,是否将词条内容以及照片都设定对应的版本号,进行读取数据的时候只展示最新相同版本的数据,保证展示的数据的准确性

    作者回复: 很不错的思路。这个方案虽然检查版本号对响应性能有影响,而且数据同步延迟也会更长,但确实可以保证数据的准确性。

    2022-04-05
  • ABC
    还有另外一个思路,如果图片不大,可以base64转码,直接和词条存在一起,但这会导致相同图片出现冗余数据。

    作者回复: 赞,很不错的思路

    2022-04-02
  • ABC
    老师,可以图片服务器集群存储,然后各个数据中心不同步图片,直接从图片服务器集群访问图片吗

    作者回复: 这个方案没有达到异地多活的目标啊,可用性和性能都没有改善

    2022-04-02
  • Lance-Yanh
    从数据中心重放DDL的时候同步或异步检查图片是否同步完成,进一步确定是否延时重放DDL或主动同步完图片再重放。这样可以吗?老师

    作者回复: 很不错的方案,不过,编辑词条是高并发的,你的方案我担心会导致数据串行处理,数据同步延时太长了。

    2022-03-27
  • javaadu
    思考题,图片和文字属于某一个词条,那就将这个词条作为数据同步的最小粒度,利用词条信息将文本和图片绑定在一起

    作者回复: 赞,具体实现细节呢,如何绑定?如何同步数据?

    2022-03-25
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部