• Home
  • Учебник по ExtJS
  • О сайте
  •  



    Подсказки по созданию масштабируемых приложений

    Google App Engine позволяет создавать масштабируемые приложения намного проще, чем это делается на традиционных платформах, и правильно спроектированные приложения будут одинаково хорошо обслуживать от одного пользователя до миллиона. Что означает фраза, что приложения Google App Engine должны быть «правильно спроектированы»? Мы приводим несколько простых подсказок, при использовании которых, вы будете уверены, что ваше приложение надежно справится с высокой нагрузкой.

    • Избегайте конфликтов при работе с объектами хранилища. Если каждый запрос вашего приложения выполняет чтение и запись определенного объекта, то латентность приложения будет возрастать по мере того, как увеличивается его трафик, так как чтение и запись одного объекта происходит последовательно. Одним из таких примеров является использование глобального счетчика, то есть объекта, который содержит число обращений к странице и обновляется при каждом запросе. Есть несколько интересных способов реализации других алгоритмов по работе с такими объектами, одним из них является кэширование, которое будет рассмотрено ниже.
    • Избегайте использования больших групп объектов. Любые два объекта, которые имеют одного объекта-предка будут принадлежать к одной группе. Все операции записи в группы объектов являются последовательными, таким образом использование больших групп приведет к тому, что производительность приложения при работе с популярными объектами одной группы быстро деградирует. Вместо этого возьмите за правило использовать небольшие локализованные группы объектов.
    • Сохраняйте умеренно. Операция записи отнимает в системе больше ресурсов, чем операция чтения; примите это к сведению при работе с моделями данных. Если в какой-то части приложения вы можете избежать сохранения данных, так и стоит поступить.
    • Определите функцию main() для повторного использования кода. Экземпляры вашего приложения остаются запущенными какое-то время после получения запроса пользователя, поэтому есть шанс, что другой запрос будет отправлен в рабочий экземпляр приложения. В коде приложения можно определить функцию main, как показано в следующем примере:
      def main():
          application = webapp.WSGIApplication(_URLS, debug=True)
          wsgiref.handlers.CGIHandler().run(application)
      
      if __name__ == '__main__':
          main()

      Приложение может повторно использовать глобальные переменные, таким образом несмотря на то, что не будет гарантии, что следующий запрос попадет на запущенный экземпляр приложения, вы получите преимущества по кэшированию объектов и вычисляемых выражений. Этот пример работает просто: App Engine обнаружит определение функции main() и вызовет ее вместо проведения повторного импортирования модуля.

    • Профилируйте свой код. Вы можете использовать профайлер языка Python для того, чтобы изучить производительность своего кода.

    Есть еще какие-то предложения по оптимизации web-приложения под App Engine? Добавьте их к этому посту!

    Leave a Reply