Механизм Приложения Google: Кэш-память или Статическая переменная?

Установите VS для повреждения на исключениях, тогда когда Вы получаете свою ошибку, обычно довольно очевидно, какая строка это идет. Окно отслеживания стека скажет Вам, как Вы добрались там. Не очень еще можно сделать кроме этого.

18
задан Dan McGrath 25 September 2016 в 23:14
поделиться

3 ответа

App Engine масштабируется за счет создания новых экземпляров вашего приложения по мере увеличения числа пользователей, обращающихся к нему. Как сказал друдру, разных пользователей могут обслуживать разные инстансы. В общем, memcache - это самое быстрое место для хранения того, что вы хотите сделать глобально согласованным. Однако в вашем случае есть возможности для улучшения.

Вы упоминаете, что у вас есть список сообщений, и случайным образом выбираете 5 сообщений для показа пользователям. Имеет ли значение, если 2 разных пользователя видят разные наборы из 5? Если вы все равно выбираете случайные, возможно, это не имеет значения. Затем вы можете сохранить полный список сообщений в кэше памяти и вытащить 5 случайных сообщений из кэша памяти и сохранить их в статической переменной.

Во-вторых, что именно вы используете кеширование памяти и как вы его извлекаете? Вы храните целую кучу полных сообщений в кэше памяти, получить их все, а затем выбрать 5? Может быть, вы могли бы просто скачать список сообщений, выбрать 5 и получить только 5 нужных? Если вы думаете, что вас тормозит десериализация, это может помочь. Выполняете ли вы какую-либо обработку сообщений после их получения? Если да, можно ли кэшировать результаты этой обработки?

16
ответ дан 30 November 2019 в 08:33
поделиться

Вы не можете полагаться на статические переменные (или что-то еще в памяти JVM), чтобы они были рядом, когда будет получен следующий запрос, потому что Google может запускать и останавливать виртуальные машины, когда они этого хотят. Судя по всему, они, похоже, предпочитают запускать дополнительные JVM вместо дополнительных потоков в той же JVM, что усугубляет эту проблему.

Но вы должны иметь возможность использовать статические переменные в качестве уровня кеширования, если у вас есть способ загрузить данные из другого места, если они исчезли.

Я бы также не пытался переборщить с использованием памяти там, должна быть квота на то, сколько памяти вы можете использовать.

6
ответ дан 30 November 2019 в 08:33
поделиться

Да, нет гарантии, что ваш экземпляр будет одинаковым для разных пользователей Интернета. В худшем случае вы можете постоянно читать это в статике. Кэш памяти имеет более высокую гарантию доступности. Я бы просто использовал кеш памяти, и в будущем у вашего приложения не должно быть проблем с масштабированием.

3
ответ дан 30 November 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: