quberik / application-for-domotehnika
Test application for Domotehnika company
Installs: 5
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:project
Requires
- php: >=5.3.3
- doctrine/doctrine-bundle: ~1.2
- doctrine/orm: ~2.2,>=2.2.3
- friendsofsymfony/elastica-bundle: 3.1.*@dev
- friendsofsymfony/rest-bundle: 1.5.*@dev
- friendsofsymfony/user-bundle: 2.0.*@dev
- incenteev/composer-parameter-handler: ~2.0
- jms/serializer-bundle: 0.13.*@dev
- sensio/distribution-bundle: ~3.0
- sensio/framework-extra-bundle: ~3.0
- symfony/assetic-bundle: ~2.3
- symfony/monolog-bundle: ~2.4
- symfony/swiftmailer-bundle: ~2.3
- symfony/symfony: 2.5.*
- twig/extensions: ~1.0
Requires (Dev)
- doctrine/doctrine-fixtures-bundle: 2.2.*@dev
- fzaninotto/faker: 1.5.*@dev
- sensio/generator-bundle: ~2.3
This package is not auto-updated.
Last update: 2025-03-11 11:12:53 UTC
README
Реализовано приложение — API для доступа к пользовательским данным через веб. Данные пользователей хранятся в БД. У каждого пользователя есть nick, login и email. Выбор типа возвращаемых данных (json или xml, по выбору клиентского приложения).
Установка приложения
Качаем и устанавливаем Composer
Закачиваем приложение через Composer
composer.phar create-project quberik/application-for-domotehnika -s dev
Создаём пользователя и пароль к базе: user_domotehnika
и Amyk9As449MhnO7
Host: localhost
(127.0.0.1
)
Создаём базу данных
php app/console doctrine:database:create
Открываем консоль. Переходим в директорию проекта и создаём таблицы в базе данных:
php app/console doctrine:schema:update --force
Загружаем фикстуры:
php app/console doctrine:fixtures:load
Устанавливаем сервер ElasticSearch локально. Порт 9200
Запускаем сервер ElasticSearch
Создаём индекс Elastic из базы данных
app/console fos:elastica:populate
Устанавливаем права на папку app/cache и app/logs 777
и всех вложенных файлов и папок
Функциональность приложения
Получение списка пользователей в базе, GETзапрос:
http://your_site.ru/api/user.json
Получение списка пользователей по критерию (nick, login, email), GETзапрос:
http://your_site.ru/api/user.json?search=@hotmail.com
Получение пользователя по id, GETзапрос:
http://your_site.ru/api/user/5.json
Обновление пользователя (изменение ника, email), POSTзапрос:
http://your_site.ru/api/user/5.json
Опционально
- Переключение окружения (development, production):
http://your-site.ru/
- prod
http://your-site.ru/app_dev.php/
- dev -
Кастомные страницы 404й и 500й ошибок - не совсем понял, что тут имелось ввиду. Сейчас, если клиент делает запрос на сервер и ожидает json, то приходит json ответ с 404 или 500 ошибкой. Если клиент запрашивает xml, то ответ с ошибкой приходит также, только в формате xml.
- Доступ к API осуществляется только авторизованному клиентскому приложению. Логин и пароль:
demo
иdemo
Дополнительное задание
Окружение для посещаемости 5 млн
- Linux CentOs, version > 6
- PHP 5.3.3 или выше
- MySql 5.5.33 или выше
- Nginx 1.5.3
- Отключаем Access log
access_log off;
в файле nginx.conf - Устанавливаем внутренний кеш PHP - APC
- Так как mysql движок будет использоваться innodb, то устанавливаем размер буфера до 75% (
innodb_buffer_pool_size
) от всей доступной памяти на сервере (key_buffer
соответственно уменьшаем) в файле my.cnf. innodb_flush_log_at_trx_commit
в этом же файле устанавливаем значение в 0. Значительно повыситься скорость записи при больших объёмах (не нужно буфер записи скидывать на диск после каждой операции).- Включаем внутренний кеш MySQL:
query_cache_size = 32М
- Выставляем количество воркеров для Nginx равное количеству ядер
- Переносим сервер ElasticSearch на отдельный сервер или несколько серверов
- Переносим MySQL базу на другой сервер. Можно настроить MySQL репликацию на несколько серверов.
- Включаем кеш Doctrine, файловый кеш
- Вертикальное и горизонтальное масштабирование
- С помощью zabbix следим за нагрузкой и работой узлов системы
- Ну и последнее, используем несколько серверов на отдачу вместо одного
Демо
http://ussurka.ru/api/user.json http://ussurka.ru/api/user.json?search=@gmail.com http://ussurka.ru/api/user/2.json
Логин: demo
Пароль: demo