【问题标题】:Separate server for Memcache/Redis?Memcache/Redis 的单独服务器?
【发布时间】:2015-10-06 19:19:39
【问题描述】:

我将 Django 用于我的项目,并将其托管在 Linode 或任何其他托管服务上。另外,如果我想使用 memcache,我需要一个新的 Linode 吗?意味着只有一台服务器就可以了,或者我必须在两台服务器上托管我的网站,一台用于 memcache,一台用于 django? Redis 也一样吗?我还需要单独的 Mysql 服务器吗?

【问题讨论】:

  • memcached/redis 可以在同一台机器上,也可以在不同的机器上。这实际上取决于您的用例。如果您的应用程序的用户群很小且只有一个 linode 实例,那么 memcache 和您的数据库可以都在同一台机器上。如果您扩大到由负载均衡器提供多个 Django linode 实例,那么您需要决定是希望每个实例拥有自己的本地内存缓存还是共享一个专用的内存缓存,并且您的数据库可能在它自己的机器上也是。
  • @MarkGalloway:比方说,如果有人将 memcache 和 MySQL 与 django 一起使用,那么一个 Linode 实例就足够了吗?它可以托管在单台机器上吗?不需要单独的 MySQL 和 Memcache 服务器?
  • 这完全取决于您的应用程序接收多少访问以及每个请求的资源密集程度。不幸的是,唯一的答案是分析。
  • @MarkGalloway:对不起,我没听懂。如果出现上述评论,我需要不同的服务器还是单个服务器?
  • 在最简单的情况下,对于没有收到很多请求的应用程序,将所有内容放在同一台机器上是完全可以接受的。我不知道你在开发什么,也不知道它会有多受欢迎,所以我不能说。从小处着手并根据需求扩大规模?

标签: django redis server memcached linode


【解决方案1】:

我想你不明白没有人是算命的巫师。没有人知道您每秒将收到多少个请求,也不知道每个请求会占用多少 CPU/内存。没有人知道你的代码是如何优化的。没有人知道您的应用程序是读取繁重还是写入繁重。你的用例是你自己的,而且你可能是唯一一个估计它的人。

我对您的唯一实际建议是尝试估计您的服务器数据并在一台机器上对您的设置进行服务器负载和基准测试。如果您对性能不满意,请扩大规模。您可以通过增加 linode 的大小来垂直扩展,也可以通过添加更多 linode 实例来水平扩展。在后一种情况下,您很可能会将您的数据库放在它自己的机器上,并拥有由负载均衡器提供的多个 django 实例。这些 Django 实例可以在一台机器上共享相同的内存缓存,或者它们可以在自己的机器上拥有自己的内存缓存。哪一个更好?我不能告诉你。这又取决于您的用例。

如果我是你,我会把它全部设置在一个 linode 实例上。我会创建我认为接近现实世界的测试数据。然后我会尝试用估计的每秒请求数来测试我的响应时间。我会测量响应时间、缓存命中和内存使用情况。然后我会根据 我的用例 是否对这种性能水平感到满意来决定,因为我真的是唯一知道什么是令人满意的性能的人。此外,添加更多的 linode 资源不一定是我首先尝试提高性能的地方。

可以在此处找到有关优化和基准测试的一些重要提示: https://docs.djangoproject.com/en/1.8/topics/performance/ http://blog.disqus.com/post/62187806135/scaling-django-to-8-billion-page-views http://scottbarnham.com/blog/2008/04/28/django-performance-testing-a-real-world-example/

关于扩展 Django 的深夜阅读可以在很多书中找到,我喜欢这本: https://highperformancedjango.com/

对不起,如果我听起来有点生硬,我只是想让你明白,没有人可以走进这里并给你很大的信心回答。这个问题没有直截了当的答案。

TL;DR 从一个实例开始,只有在您确信自己需要时才进行扩展。

【讨论】:

    【解决方案2】:

    你说的是 Memcached 或 Redis,所以我假设 Redis 的部署不需要持久性,纯粹的内存配置。

    在这种情况下,即使您在一台服务器上运行 Memcached 和 Redis 也不太可能饱和,因为如果您的每秒请求数很高,则限制因素更有可能是单个 Django 实例。

    但是,您应该确保有足够的内存并为 Memcached / Redis 配置适当的最大内存使用量(在两种不同的服务中实现此目的的不同方式)。请注意,在内存压力下,Linux OOM 杀手 可能会杀死您的缓存,所以如果您选择单个实例,这在我看来是明智的第一步,请确保您的 Django 内存使用量加上内存您为缓存分配的内存不足以接近实例可用内存的限制。

    CPU 几乎不会像我说的那样成为问题,因为 Memcached / Redis 非常擅长使用很少的 CPU,所以我无法预见 Django 可以提供页面但实例有问题的设置,因为 CPU 是被缓存烧掉了。

    【讨论】:

    • 好的!意味着只有一个实例就足以减少负载?
    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2011-04-27
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多