BC/NW 2015  1 (26) 7:1

ВЫПОЛНЕНИЕ РЕСУРСОЕМКИХ ЗАДАЧ ПРИ ПРОЕКТИРОВАНИИ ВЕБ-ПРИЛОЖЕНИЙ

 

Салов Н.А., Лазарев Д.А. , Окунев Б.В.

 

В настоящее очевидна тенденция к усложнению функциональных требований к веб-приложениям, что ведет к увеличению потребляемых ими ресурсов. В связи с этим актуальной становится задача эффективной организации выполнения ресурсоемких задач. Наиболее популярным языком программирования, используемым при проектировании веб-приложений, является PHP, и именно к нему авторами предлагается подход по эффективной реализации ресурсоемких задач  [1].

При нехватке ресурсов приложение, реализованное на PHP, может неожиданно закончить свою работу, что может нарушить консистентность данных веб-приложения. Классическим выходом из данной ситуации является разбиение алгоритма на части, выполнение которых по отдельности не приводит к израсходованию выделенных ресурсов. Проблема данного подхода заключается в том, что выделение таких частей алгоритма часто затруднено – сложно соотнести затраты ресурсов на отдельные части программного кода. Возможным вариантом является подход, основанный на регистрации функции, тело который выполняется при каждом тике (событии, которое случается каждые N низкоуровневых операций, выполняемых парсером внутри блока declare). Регистрация такой функции происходит с помощью конструкции register_tick_function. Таким образом, предлагается осуществлять проверку на время выполнения скрипта с помощью функции microtime(), а также на количество потребленной памяти с помощью функции memory_get_usage(). После определения данных показателей они сравниваются с пороговыми значениями, выделяемыми скрипту веб-сервером, получив настройки конфигурации, используя функцию ini_get(). При достижении заданного порога от выделенных ресурсов предлагается «заморозка» состояния скрипта с помощью функции serialize() с последующей записью в базу данных и остановка работы скрипта. При следующем запуске работа «замороженных» задач продолжается по описанной выше схеме.

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

Литература

1. «Usage Statistics and Market Share of Server-side Programming Languages for Websites, October 2014» [Электронный ресурс]. URL: http://w3techs.com/technologies/overview/programming_language/all (дата обращения: 09.10.2014).