В прошлый раз мы рассказали о слоистой архитектуре во фреймворке yii, а сейчас хотим поделиться кодом.
В своей работе мы активно используем open source-решения и поэтому решили поделиться собственными разработками, которые могут быть полезны сообществу. Сегодня это расширения для, наверное, лучшего в мире PHP-фреймворка yii:
Sphinx — это высокопроизводительная система полнотекстового поиска, которую вы наверняка хорошо знаете. Расширение позволяет реализовать как процедурный, так и объекто-ориентированный подход к формированию запросов и работе с данными. Расширение полностью интегрировано в yii и позволяет мониторить свою работу с помощью стандартных средств фреймворка. Для работы на серверах, где не установлено C++-расширение для PHP, поддерживается режим работы через скриптовую бибилиотеку.
К примеру, попробуем найти не более 30 записей среди пользователей по имени Василий:
Стало ощутимо компактней, чем при использовании оригинальной библиотеки для Sphinx.
Подробности — на странице расширения на сайте yii: www.yiiframework.com/extension/dgsphinxsearch
RabbitMQ — быстрый сервер обмена сообщениями, написанный на отказоустойчивом языке Erlang.
Расширение упрощает работу не только с RabbitMQ, но и с любыми MQ-серверами, поддерживающими протокол AMQP, и позволяет отправлять и получать сообщения c сервера, а также поддерживает отладочный режим работы, когда непосредственного соединения с сервером не происходит.
Чтобы отправить сообщение в обменник «outbox», делаем:
Чтобы получить сообщение из очереди «inbox», которая подписана на обменник «outbox», делаем:
Страничка расширения: www.yiiframework.com/extension/amqp
В yii встроена весьма удобная система логирования и профилирования. В базовой поставке она позволяет сохранять логи в файловую систему, в базу или выводить в браузер. Мы добавили специальный LogRoute, который направляет логи в MQ-сервер.
Удобство решения проявляется, когда есть потребность анализировать взаимодействие нескольких отдельных приложений, взаимодействующих через REST- или SOAP-интерфейс и ведущих логи на разных серверах.
www.yiiframework.com/extension/cmqlogroute — инструкция по подключению довольно проста и сводится к настройке конфига приложения.
Pinba — это средство мониторинга серверов и профилирования кода. Благодаря тому, что пакеты на сервер отправляются асинхронно, передача не влияет на производительность вашего приложения. Pinba сама собирает суммарную статистику по выполнению каждого скрипта и позволяет использовать её в реальном времени.
Для отправки логов в Pinba достаточно подключить DGPinbaLogRoute в качестве yii-логера и вызывать привычные для yii:
Подробнее здесь: www.yiiframework.com/extension/dgpinbalogroute
Следующий шаг мы видим в визуализации собранной статистики и планируем поделиться соответствующим модулем.
APIClient — это PHP-обёртка для нашего продукта API 2ГИС. Сам продукт позволяет приложениям получать справочные данные 2ГИС по более чем 1 млн организаций и создавать на их базе local search-сервисы или использовать их на уже существующих городских порталах, тематических сайтах и других проектах.
Расширение облегчает задачи по интеграции и позволяет разработчику абстрагироваться от реализации REST-запросов и работать с API сразу из PHP-кода. Рассмотрим на примере, как этим пользоваться.
К примеру, тут мы получаем список из 10 геообъектов в 100 метрах от точки 82.901886,54.991984 в xml-формате:
А теперь мы ищем 10 компаний по запросу «пиво» в окрестностях Арбата в Москве:
Если мы захотим получить ответ в виде объектов, достаточно заменить ‘xml’ на ‘object’.
Полный список методов указан в документации к API на api.2gis.ru
* * *
Полный список расширений для yii, которые выкладывают наши команды разработки, можно найти на сайте фреймворка по тегу 2GIS: www.yiiframework.com/extensions/?tag=2GIS
Конечно, это не все, чем нам хотелось бы поделиться. В дальнейшем мы планируем выложить расширение для ActiveRecord, которое умеет работать с несколькими серверами баз данных одновременно, и таскменеджер, который позволяет запускать различные задачи, контролируя их очередность и количество. Если описанные приложения окажутся востребованными, мы продолжим делать свой маленький вклад в большое и важное движение Open Source.
В своей работе мы активно используем open source-решения и поэтому решили поделиться собственными разработками, которые могут быть полезны сообществу. Сегодня это расширения для, наверное, лучшего в мире PHP-фреймворка yii:
- DGSphinxSearch
- AMQP(RabbitMQ)
- MQLogRouter
- DGPinbaLogRoute
- DGApiClient
DGSphinxSearch
Sphinx — это высокопроизводительная система полнотекстового поиска, которую вы наверняка хорошо знаете. Расширение позволяет реализовать как процедурный, так и объекто-ориентированный подход к формированию запросов и работе с данными. Расширение полностью интегрировано в yii и позволяет мониторить свою работу с помощью стандартных средств фреймворка. Для работы на серверах, где не установлено C++-расширение для PHP, поддерживается режим работы через скриптовую бибилиотеку.
К примеру, попробуем найти не более 30 записей среди пользователей по имени Василий:
$userlist = Yii::App()->sphinx->select('name')->from(‘users’)->where(‘Василий’)->limit(0, 30)->search();
Стало ощутимо компактней, чем при использовании оригинальной библиотеки для Sphinx.
Подробности — на странице расширения на сайте yii: www.yiiframework.com/extension/dgsphinxsearch
AMQP
RabbitMQ — быстрый сервер обмена сообщениями, написанный на отказоустойчивом языке Erlang.
Расширение упрощает работу не только с RabbitMQ, но и с любыми MQ-серверами, поддерживающими протокол AMQP, и позволяет отправлять и получать сообщения c сервера, а также поддерживает отладочный режим работы, когда непосредственного соединения с сервером не происходит.
Чтобы отправить сообщение в обменник «outbox», делаем:
Yii::App()->rabbitMQ->exchange('outbox')->publish('Привет!', '');
Чтобы получить сообщение из очереди «inbox», которая подписана на обменник «outbox», делаем:
Yii::App()->rabbitMQ->queue('inbox')->get();
Страничка расширения: www.yiiframework.com/extension/amqp
MQLogRouter
В yii встроена весьма удобная система логирования и профилирования. В базовой поставке она позволяет сохранять логи в файловую систему, в базу или выводить в браузер. Мы добавили специальный LogRoute, который направляет логи в MQ-сервер.
Удобство решения проявляется, когда есть потребность анализировать взаимодействие нескольких отдельных приложений, взаимодействующих через REST- или SOAP-интерфейс и ведущих логи на разных серверах.
www.yiiframework.com/extension/cmqlogroute — инструкция по подключению довольно проста и сводится к настройке конфига приложения.
DGPinbaLogRoute
Pinba — это средство мониторинга серверов и профилирования кода. Благодаря тому, что пакеты на сервер отправляются асинхронно, передача не влияет на производительность вашего приложения. Pinba сама собирает суммарную статистику по выполнению каждого скрипта и позволяет использовать её в реальном времени.
Для отправки логов в Pinba достаточно подключить DGPinbaLogRoute в качестве yii-логера и вызывать привычные для yii:
Yii::beginProfile();
…..;
Yii::endProfile();
Подробнее здесь: www.yiiframework.com/extension/dgpinbalogroute
Следующий шаг мы видим в визуализации собранной статистики и планируем поделиться соответствующим модулем.
DGApiClient
APIClient — это PHP-обёртка для нашего продукта API 2ГИС. Сам продукт позволяет приложениям получать справочные данные 2ГИС по более чем 1 млн организаций и создавать на их базе local search-сервисы или использовать их на уже существующих городских порталах, тематических сайтах и других проектах.
Расширение облегчает задачи по интеграции и позволяет разработчику абстрагироваться от реализации REST-запросов и работать с API сразу из PHP-кода. Рассмотрим на примере, как этим пользоваться.
К примеру, тут мы получаем список из 10 геообъектов в 100 метрах от точки 82.901886,54.991984 в xml-формате:
$list = Yii::App()->apiClient->geoSearch(array(
'q' => '82.901886,54.991984',
'radius' => 100,
'limit' => 10,
), 'xml');
А теперь мы ищем 10 компаний по запросу «пиво» в окрестностях Арбата в Москве:
$list = Yii::App()->apiClient->search(array(
'where' => 'Москва Арбат',
'what' => 'пиво',
'limit' => 10,
), 'xml');
Если мы захотим получить ответ в виде объектов, достаточно заменить ‘xml’ на ‘object’.
Полный список методов указан в документации к API на api.2gis.ru
* * *
Полный список расширений для yii, которые выкладывают наши команды разработки, можно найти на сайте фреймворка по тегу 2GIS: www.yiiframework.com/extensions/?tag=2GIS
Конечно, это не все, чем нам хотелось бы поделиться. В дальнейшем мы планируем выложить расширение для ActiveRecord, которое умеет работать с несколькими серверами баз данных одновременно, и таскменеджер, который позволяет запускать различные задачи, контролируя их очередность и количество. Если описанные приложения окажутся востребованными, мы продолжим делать свой маленький вклад в большое и важное движение Open Source.