Как делают Одиночные элементы в Google App Engine (или в более общем плане в распределенной серверной среде) работа?

Никто, кажется, не упомянул Stroustup Язык Программирования на C++ , который является замечательной книгой, которую должен прочитать каждый программист на C++.

я также думаю что Объясненное Экстремальное программирование: Изменение Объятия должно быть считано каждым программистом и менеджером. Многие идеи в книге общеизвестны теперь, но книга делает интеллектуальный и вдохновляющий отчет о преследовании качества в разработке программного обеспечения.

я был бы второй рекомендации для Knuth и Gang Четыре, которые являются классикой.

10
задан Nick Johnson 26 July 2009 в 15:18
поделиться

3 ответа

The singletons in App Engine Java are per-runtime, not per-webapp. Their purpose is simply to provide a single point of access to the underlying service (which in the case of both Memcache and Users API, is accessed via an RPC), but that's purely a design pattern for the library - there's no per-app singleton anywhere that these methods access.

13
ответ дан 3 December 2019 в 22:01
поделиться

Caches are generally linked up with some sort of distributed replicated cache. For example, GAE uses a custom version of memcached to handle maintaining a shared cache of objects across a cluster, while maintaining the storage state in a consistent state. In general there are lots of solutions for this problem with lots of different tradeoffs to be made in terms of performance and cache coherence (eg, is it critical that all caches match 100% of the time, must the cache be written to disk to protect against loss, etc).

Here are some sample products with distributed caching features (most have documentation describing the tradeoffs of various approaches in great detail:

As you can see, there have been many projects that have approached this problem. One possible solution is to simply share a single cache on a single machine, however, most projects make some sort of replication and distributed failover possible.

3
ответ дан 3 December 2019 в 22:01
поделиться

Я не уверен в специфике GAE, но обычно в веб-приложении такого размера у вас будет несколько процессов, выполняемых на нескольких машинах (а затем балансировка нагрузки между ними). В каждом процессе, если вы используете многопоточный веб-сервер, вы можете обрабатывать несколько запросов. Таким образом, это позволит вам обмениваться объектами между запросами на одном и том же веб-сервере (и, например, синглтон, вы можете создать экземпляр при запуске процесса веб-приложения).

Если веб-сервер не является многопоточным, а скорее многопоточным -process, то, насколько мне известно, вы не можете обмениваться объектами между запросами, не разговаривая с отдельным процессом кэширования.

Документы GAE, похоже, поддерживают то, что они называют «кэшированием приложений», что по сути позволяет вам делать то же самое. вещь, но мне не было ясно из документов, повторяя это, используя многопоточные веб-серверы или какой-либо другой процесс кэширования, который выполняется вместе с веб-серверами.

Я был бы заинтригован, узнав, CacheManager.getInstance () всегда разрешается в один и тот же объект, или если это только один и тот же объект для запросов, обрабатываемых одним и тем же веб-сервером. На самом деле это не имеет значения, так как в любом случае он используется только для связи с отдельным процессом memcached.

0
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

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