Suituation:
Клиент использует финансовое веб-приложение, в котором основные функции включают в себя огромный объем финансовых транзакций как внутри, так и снаружи.
Процессы автоматизированы.
В полночь мы выполняем несколько рабочих задач cron, чтобы разделить платежи для соответствующих клиентов.
Ежемесячно в среднем у нас появляется от 2000 до 3000 новых клиентов, а в настоящее время их насчитывается 30 000.
Наши транзакционные таблицы на данный момент насчитывают почти 900 000 записей и ожидают резкого увеличения в ближайшие месяцы.
Технологии: Изначально мы использовали среду LAMP, с каркасом Codeignitor, Laravel elequont ORM для запросов и Mysql.
Хостинг: размещен в AWS, небольшой экземпляр T2, балансировщик нагрузки не реализован.
** Это приложение было разработано три года назад.
Проблема:
В настоящее время наш клиент сталкивается с простоями в часы пик, а также его клиенты сталкиваются с проблемами времени загрузки, просматривая свои архивы транзакций и статистику.
А также они боятся, что в случае неудачи с задачами cron они не смогут справиться с ситуацией. (Проведены обширные расчеты и внесены суммы по огромному количеству клиентов).
Наш план:
Итак, прямо сейчас мы планировали переработать приложение с нуля с производительностью и отказоустойчивостью в качестве нашей основной цели. И это приложение должно быть надежным хотя бы для другого
от шести до восьми лет.
Технологии: Узел (Sails.js), Angular 5, AWS с балансировщиком нагрузки, AWS RDS (Mysql)
Наш подход: Из нашего анализа мы получили несколько простых причин потери производительности. Прежде всего, существует множество статистических данных о клиентах, которые получают доступ к тяжелым таблицам.
Большая часть статистики за текущий месяц. Поэтому мы планируем добавить для этого таблицы журналов и хранить только данные текущего месяца в конкретной таблице .addMethod
Итак, может появиться такая таблица журнала, в которой будет только операция чтения.
Запросы:
- Хорошо ли разбивать готовые таблицы только на отдельные базы данных или мы можем иметь их в одной базе данных.
- Чем буферный кэш Mysql отличается от Redis / memcache. Есть ли проблемы с использованием памяти при увеличении трафика?
- Каков наилучший подход к усечению нескольких таблиц в конце каждого месяца (как я уже говорил о файле журнала)?
- Я двигаюсь в правильном направлении?