django 扩展
Posted cppfun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 扩展相关的知识,希望对你有一定的参考价值。
单服务器运行
大多数网络应用开始的时候会在单个服务器上运行,随着流量的增加,您将很快遇到不同软件之间的资源占用。数据库服务器和Web服务器喜欢让整个服务器为自己使用,所以当他们在同一台服务器上运行时,经常会遭遇争夺垄断资源(RAM和CPU),这个阶段可以通过将数据库服务器移动到第二台物理机器,轻松解决此问题。
分离数据库服务器
就Django而言,分离数据库服务器的过程非常简单:您只需将DATABASE_HOST配置更改为数据库服务器的IP或DNS名称,并设置其用户名和密码即可,即使用单独的数据库服务器,我们的架构现在如下图所示。
在这里,我们开始进入通常所谓的n层架构。不要被专业术语惊吓 - 它只是指Web应用栈的不同层次分离到不同的物理机器上而已。
在这一点上,如果您预计未来需要满足超出单个数据库服务器的请求或吞吐量,请开始考虑连接池或数据库读写分离等措施,这些都是不错的建议。
分离媒体服务器
单独的web服务器设置仍然存在一个很大的问题:同时处理动态和静态内容,从专业的角度,这两个活动分离后,我们的应用会表现得最好。
因此,下一步是将媒体(即不需要Django视图生成的内容)分离到专用服务器上,如下图所示。
理想情况下,媒体服务器应针对静态媒体响应进行处理,这背后需要精简Web服务器。 nginx是这里的首选。对于更多的或沉重的静态内容(照片,视频等)的站点,移动到单独的媒体服务器是必要的,这个应该是扩展的第一步。
然而,这一步可能有点棘手。如果您的应用涉及文件上传,Django需要能够将上传的媒体写入媒体服务器。如果媒体存储在另一台服务器上,那么您需要在网络上进行媒体写入。
实现负载均衡和备用
目前,我们尽可能将架构任务分解开来,这个三服务器的配置应该可以处理非常大的流量(这种架构可以满足每天大约1000万次的点击)如果你进一步发展,你需要开始增加备用服务器。
您可以看到,如果您的三台服务器中的一台服务器访问失败,那么您的整个站点不得不暂停服务。因此,当您添加备用服务器时,您不仅可以提高吞吐量,还可以提高整个应用的可靠性。
在不同硬件上运行的Django应用的多个副本相对容易 - 只需将所有代码复制到多台机器上,并启动所有这些代码。但是,您将需要另一个软件来分配这多个服务器上的应用请求流量:负载均衡器。
您可以租用负载均衡器,但是还有一些高品质的开源软件实现。如 Apache的mod_proxy是一个选项,但是我们发现Perlbal太棒了。这是一个负责负载均衡和反向代理的软件,由memcached的作者编写。
现在我们的架构开始看起来更加复杂,如下图所示。
请注意在上图中,Web服务器被称为集群,所以后端web服务器的数量基本上是可变的。一旦你有一个负载均衡器在前面,你可以轻松地添加和删除后端Web服务器,而不需要一秒钟的停机时间。
更多扩展
随着应用的访问处理更加海量,接下来的几个步骤是最后一个步骤:
当您需要更多数据库性能时,您可能需要复制数据库服务器。 mysql包括内置复制功能; PostgreSQL可以通过Slony和pgpool进行复制和连接池。
如果一个负载均衡器不够,您可以在前面添加更多的负载均衡器。
如果一个媒体服务器不够,您可以添加更多媒体服务器,并使用负载均衡集群分发负载。
如果您需要更多缓存存储,则可以添加专用缓存服务器。
在任何阶段,如果群集性能不佳,可以向群集添加更多服务器。
经过几次迭代之后,大型架构可能如下图所示。
虽然我们在每个级别上只显示了两到三台服务器,但是您可以添加多少个服务器在里面,这没有限制。
性能调优
如果你有巨额的资金,你可以继续投入硬件来解决问题。 但对于我们其他人来说,性能调整是必须的。
不幸的是,性能调优相对科学来讲更像是一门艺术,关于性能调优的东西很难表达。 如果您真要部署大型Django应用程序,您应该花费大量的时间学习如何调整每一层。
明天我们将介绍我们多年来发现的几个Django特定的调优技巧。
以上是关于django 扩展的主要内容,如果未能解决你的问题,请参考以下文章
扩展 django 用户 django-rest_framework 给了我 KeyError