基于Django的Disqus如何支持每月80亿PV

2023-10-07 23:19
文章标签 django 支持 每月 80 pv disqus

本文主要是介绍基于Django的Disqus如何支持每月80亿PV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    现在我们Disqus能够处理一个月80亿PV,每秒处理45000个请求。在把评论发送到很多不同的人的时候,我们学到了一些东西。众所周知Disqus是用Django来处理绝大部分的web流量。在使用任何web框架之时,都要在开发速度 vs 性能、快速上手 vs 定制等之间做取舍。而Disqus更趋向于快速开发和容易上手,同时兼顾性能和灵活定制。

 

那么为什么web框架慢?

表面上,对于web框架的第一印象就是慢,因为在你的应用里有很多你不需要的代码,这是一个正常的印象。在实践中,缓慢往往不是由于膨胀的框架和语言选择造成的。缓慢应该是由于你的请求在你的网络里与其他的服务进行通信的结果。在我们的场景下,这些’其他的服务’是 PostgreSQL、Redis、Cassandra和Memcached。缓慢的数据库查询和网络延迟通常会拖累像Django这样一个健壮框架的性能。

为了规避这些延迟,人们使用各种各样的缓存技术。最常见的方法就是使用Django内建的cache库。

常见的应用缓存如下:

1
2
3
4
5
data = cache.get('stuff')
if data is None:
     data = list(Stuff.objects.all())
     cache.set('stuff', data)
return data

如果你熟悉Django,这应该是个很常用的模式。这种形式的缓存是非常简单明了,并且在大多数情况下都适用。配合Memcached,它就足够快了,但是为了响应一个请求仍然有很多工作需要做。

 

处理每秒45000次请求

我们已经对处理很慢的东西做了缓存。不过在达到每秒45000次请求的时候仍然有很多工作需要做。我们可能会返回JSON,渲染HTML模版,简单的解析HTML或者执行Django中间件。问题是,我们希望能够让这些工作更快返回,让Django来处理它擅长的:只处理唯一的数据。

在每秒45000次请求里面,有多少是唯一的?在这里面有多少请求的返回与下一个返回不一样?你真的需要在返回结果一样的时候做重复的工作吗?我们需要将整个HTTP返回缓存起来以是我们不用做重复工作。

 

介绍Varnish

Varnish是神马?Varnish是工作于负载均衡和Django后端之间,作为HTTP缓存层。这意味着它能够将整个HTTP返回缓存起来,让那些不唯一的请求不用命中Django服务器。

之前,Varnish使我们的一个黑盒子。我们安装并且最小程度的配置它,老实说,它工作的非常棒。但我觉得我们还能做的更多。

我花了一些时间来学习更多关于Varnish和我们能用得上的东西。随着时间的过去,我们能够让每秒数千次请求不用命中Django服务器。今天,在每秒45000次请求里面,只有15000次请求会命中我们的应用服务器。剩下的被Varnish接收,它运行的非常快和有效。

因为这对我们非常有用,也是一段很好的学习经历,这个主题也成为了我近期的一些演讲的主题。

最近,我在芝加哥的DjangoCon大会上有一个演讲。这个演讲是面向不熟悉Varnish的人,用希望来鼓舞和驱动他们学习更多。对我而言,我对这次演讲很兴奋,因为这个主题是很少被应用开发者提到的。这是一个我希望几年前就能听到的演讲,希望能够让人明白HTTP是如何工作,以及如何使用像Varnish这样的工具来管理它的交互。(HTTP for Great Good)

  在那之前,我出席了在纽约举办的VUG7(Varnish 用户组),并且深入介绍了一些解决我们问题的技巧。这次演讲里涉及到很多我们使用的Varnish配置语言。 ( Caching is Hard: Varnish @ Disqus)

 

tl;dr

学习Varnish,它不会解决你全部的问题,但它值得你投入时间来学习它和评估它的价值。

如果这类型的东西很吸引你,并且你跟我一样也喜欢一周至少5天对着电脑吼叫,速度联系我们,我们在招人!

 

(编注:原文评论也精彩,值得一看。)

 

补充信息:

Disqus是一家第三方社会化评论系统,主要为网站主提供评论托管服务。WordPress、Blogger、Tumblr等第三方博客平台均提供了Disqus第三方评论插件。Disqus的主要目标是通过提供功能强大的第三评论系统,将当前不同网站的相对孤立、隔绝的评论系统,连接成具有社会化特性的大网。通过Disqus评论系统所具备的评论回复通知、评论分享和热文分享等社会化功能,网站主可以有效的提高网站用户的活跃度和流量。

用户使用Disqus,在不同网站上评论,无需重复注册账号,只需使用Disqus账号或者第三方平台账号,即可方便的进行评论,且所有评论都会存储、保存在Disqus账号后台,方便随时查看、回顾。而且,当有用户回复自己的评论时,可以选择使用邮箱接收相关信息,保证所有评论的后续行为都可以随时掌握。于此同时,Disqus将社交交友功能也很好的融入到了评论系统中,当用户在某一网站上看到有与自己类似观点的评论时,可对该评论的评论者进行关注,关注后,该评论者以后的所有评论都会显示在自己的账号后台。(摘自百度百科)

这篇关于基于Django的Disqus如何支持每月80亿PV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161092

相关文章

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简