Как мне управлять дорогими отчетными кронами для пользователей, которые посещают редко? - PullRequest
0 голосов
/ 09 сентября 2011

Допустим, у меня есть 5 миллионов пользователей (для легкой математики), которые сильно различаются по количеству посещений в месяц.

User loyalty, in visits per month
1. 1M  <1      visits/month
2. 1M  1-10    visits/month
3. 1M  10-50   visits/month
4. 1M  50-100  visits/month
5. 1M  >100    visits/month

Цель для каждого пользователя - получить доступ к данным, которые занимают (скажем, 1 цикл ЦП)для выборки (например ... в нашей ситуации реальность намного меньше, но с математикой проще 1).

Каждая выборка данных занимает слишком много времени для загрузки в строке, поэтому желательно иметь данные, готовые дляих, когда они приходят.(через crons)

Допустим, чтобы удовлетворить наших самых активных пользователей, нам нужно запускать cron 10 раз в день, чтобы он был готов для них, когда они этого захотят. (я говорю «когда они этого хотят», потому что обычно это 4 раза в течение 8-часового рабочего дня, а не 4 раза в течение 24 часов). Это 1 МБ (пользователи) * 10 (выборки данных) в день,Или (при 1 цикле ЦП на выборку), 10М Циклов ЦП для этих 1М наиболее активных пользователей.Хорошей новостью является то, что они, по крайней мере, используют извлеченные данные.

Однако как насчет наших менее активных пользователей?Какую стратегию вы рекомендуете по-прежнему предоставлять релевантные результаты выборки данных, защищая при этом потерянные циклы ЦП, извлекающие данные, которые никогда или редко будут видны?

Вот диаграмма минимальных циклов, требуемых на основе диаграммы выше.Идеальный ответ был бы как можно ближе к этому.

Group   # Users   Visits/Month  CPU Cycles/Month
  1.      1M      0.1           0.1M
  2.      1M      1             1M
  3.      1M      10            10M
  4.      1M      50            50M
  5.      1M      100           100M
-------------------------------------------------
          5M      161.1         161.1M

Если бы я сделал тот же самый крон, необходимый для того, чтобы группа 5 была довольна для всех, это было бы 500М циклов ЦП (примерно 70% потрачено впустую).

Что вы порекомендуете, чтобы минимизировать потери процессорного времени?Но все же держать нечастых пользователей довольными (потому что мы все еще хотим, чтобы они превратились в активных пользователей).

...