суббота, 3 декабря 2016 г.

3.3 История о том, как написать систему управления проектами (ERP) своими руками. Кешировние, кеширование и, еще раз, кеширование.

Фух, сегодня знаменательный день, во всех смыслах. Положил, считай, бОльшую часть дня, но дописал основу - систему регистрации плагинов/модулей и авторизацию.

Вот тут, на гитхабе лежит сие дело. ..Я писал ранее, что намереваюсь использовать определение доступа по 2 параметрам. Я врал. На самом деле, по 3: группа, роль и давно вшитый в систему параметр allowedUsrs , что означает, если в конфиге модуля есть данный параметр и в нем есть циферки, то по ид пользователя он так же будет проверять. Казалось бы, роли вполне хватает. А что делать, если 2 человека с 1 ролью, но у них разные доступа должны быть к определенному модулю? уже плавали - знаем. Сей мелкий ништяк способен облегчить боль в характерной зоне до минимума - в конфиге поставил и забыл, а не костылестроение в коде или почкование ролей...

Ну и вторая тема - кеширование. В нагруженных системах нужно кешировать все то, что может быть относительно статично, но постоянно сосется из базы. Это заметно, особенно когда у тебя пользователи любят делать по 30 вкладок, потом  закрывать браузер, а после все 0 вкладок грузить при открытии оного снова. Поэтому, чтобы снять совершенно излишнюю нагрузку на сервер, приходится искать пути. Сейчас я не буду философствовать на тему, какой механизм лучше использовать и какой быстрее. Используйте тот, что вам наиболее понятен и в случае чего не рухнет. Ибо макака с гранатой ничего кроме лишней боли в определенных местах не принесет, если Вы понимаете о чем я. Ваш скромный слуга, используя данный принцип, не раз избегал серьезных граблей... В общем, я не стал особо думать и применил хранение в обычных файлах:

<?php return array( 
      'MainPage' => ['title' => 'title_1','path' => 'main/MainPage','cach' => 0, 'isClass' => 1, 'groupAccess' => '4', 'roleAccess'=>'','titleLegend' => 'Главная страница',],   
      'UnitManager' => ['title' => 'title_2','path' => 'adm/UnitManager','cach' => 0, 'isClass' => 1, 'groupAccess' => '1', 'roleAccess'=>'','titleLegend' => 'Управление отделами и ролями',],
);

И все. Просто и со вкусом, а главное, обращаться удобно. Принцип такой: нет файла, где это лежит - генерируем новый запросом из бд, есть - берем готовый. Соответственно, после редактирования в админке модулей, есть кнопочка "обновить доступы" - функционал простой: удаляем файл и все. Дальше, при первом же обращении к сайту, кеш будет обновлен. Просто и без танков на воробьев.

Вообще, как показывает практика, не стесняйтесь кешировать данные, которые статичные и нужны - меньше запросов к базе данных - быстрее работа, особенно, когда база данных находится не на той же машине что и веб сервер.

 За сим пока все. Да, следите за гитом, сейчас дело пойти должно быстрее, так как каркас напилен. Дальше - создание модулей для проекта и плагина менюшки, так как без него будет тяжковато.

Комментариев нет:

Отправить комментарий