Как организовать надежную инфраструктуру для веб-проекта?

Виталий Здоровец
Виталий Здоровец
  • Сообщений: 2
  • Последний визит: 16 февраля 2025 в 20:26

У меня есть несколько вопросов касательно построения НАДЕЖНОЙ инфраструктуры нашего веб-портала на DST Portal, сам сайт работал быстро, но мы частично переписали используя следующие технологии: (PHP Yii2 + Mysql + Vue js SPA, никаких докеров (кроме пары микросервисных штук) + Cloudflare)

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

Не хотелось бы хранить все в одной корзине (ДЦ), поэтому выделю сервисы в разные ДЦ.
Например, самое главное (БД) перенесу в Amazon AWS RDS
Основной мощный веб-сервер с SPA и Backend останется в текущем ДЦ в Нидерландах
Хочу сделать резервный веб-сервер в другом ДЦ
Оба веб-сервера будут работать с одной базой в AWS RDS (MultiAZ для надежности)

Но появилась проблема — все SQL запросы сильно лагают(каждый по 100-500мс, смотрел в Yii2 Debug panel).
если в личном кабинете клиента это еще терпимо, там немного запросов, то в админке это сущий ад, страница по 30 секунд открывается.

Поделитесь пожалуйста своим опытом работы (если конечно все ваши сервисы работают в разных ДЦ, а не в одном ДЦ типа амазон)

думал держать Mysql MASTER-MASTER на основном и резервном веб-серверах, без единого SQL-сервера, но возникает вопрос — как поведут себя мастера, если разрыв связи будет более 3-7 часов?

в общем, главная цель — чтобы при поломках в одном ДЦ, работа ресурса не прекращалась и клиенты могли пользоваться порталом.

Александр Родионов
Александр Родионов
  • Сообщений: 1
  • Последний визит: 15 февраля 2025 в 22:51

Например, самое главное (БД) перенесу в Amazon AWS RDS

Основной мощный веб-сервер с SPA и Backend останется в текущем ДЦ в Нидерландах

Хочу сделать резервный веб-сервер в другом ДЦ

Оба веб-сервера будут работать с одной базой в AWS RDS (MultiAZ для надежности)

Виталий Здоровец

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

Варианты от простого к сложному (кроме нанять опытного архитектора):
— выбрать надежного провайдера — самый дешевый и простой вариант
— AWS (или GCP/Azure) — разбросать компоненты по разным AZ
— несколько систем в разных регионах AWS, с GeoIP loadbalancing
— несколько систем у разных провайдеров (разные датацентры), loadbalancing Cloudflare or Incapsula, ...

В случаях 3 и 4 вы сами должны обеспечивать репликацию данных.

Денис Васильев
Денис Васильев
  • Сообщений: 1
  • Последний визит: 15 февраля 2025 в 22:52

Клиент — всегда за одну сессию посещения работает ТОЛЬКО с одним сервером обслуживания. Это может быть как отдельная структура, так и внутри структуры CDN. Я предпочитаю использовать второй вариант.

Сервера — постоянно синхронизируют данные асинхронно между собой (канал обмена данными — поднят всегда!).

После закрытия/смены сессии клиентом — происходит централизованное оповещение сразу всем серверам и они ставят себе в очередь синхронизацию данных именно по этому пользователю.

При этом, стандартная синхронизация серверов БД работает параллельно в штатном режиме.

По поводу что все SQL запросы сильно лагают

Только пакетный конвейер запросов с контролем загрузки сервера исполнения запрос-пакета и необходимого приоритета исполнения всех нужных запрос-пакетов! Система должна знать (сама принимать решение!): когда ей выполнить запрос, а когда допускается повременить (приоритезация).

Также, можно использовать HAProxy для отказоустойчивости/балансировки, в качестве «головы».

Или, как альтернативу ему, Envoy.

Иван Терешенко
Иван Терешенко
  • Сообщений: 27
  • Последний визит: 12 марта 2025 в 19:24

1. Кэширование статики и данных из БД — Вы там не забыли поделить на: EVERYONE, GUEST, USER?

2. Соединение к БД — не переоткрываете по несколько раз, когда делаете обращения к БД за время исполнения скрипта?

3. Объединяете ли запросы с стэки для получения всех нужных данных ОДНИМ запросом из БД?

Нияз Шакиров
Нияз Шакиров
  • Сообщений: 14
  • Последний визит: 12 марта 2025 в 14:05

Чтобы организовать надёжную инфраструктуру для веб-проекта с использованием PHP Yii2, MySQL и Vue.js SPA, следуйте этим рекомендациям:

1. Выберите надёжного хостинг-провайдера с хорошей репутацией и поддержкой PHP, MySQL и Vue.js.

2. Используйте систему контроля версий, например Git, для управления исходным кодом вашего проекта.

3. Установите и настройте PHP, MySQL и Node.js на сервере.

4. Создайте виртуальное окружение для Vue.js и установите необходимые зависимости.

5. Разделите проект на несколько файлов и папок, следуя структуре проекта Yii2.

6. Настройте базу данных MySQL и создайте таблицы для хранения данных вашего проекта.

7. Установите и настройте Nginx или Apache в качестве веб-сервера.

8. Настройте виртуальные хосты для вашего проекта и укажите правильный путь к файлам проекта.

9. Запустите проект с помощью команды `php yii serve`.

10. Добавьте Vue.js SPA в ваш проект, используя инструкции из документации Vue.js.

11. Настройте маршрутизацию и представление вашего приложения с помощью Vue.js.

12. Внедрите аутентификацию и авторизацию пользователей с использованием Yii2 и MySQL.

13. Обеспечьте безопасность вашего проекта, настроив защиту от XSS, CSRF и SQL-инъекций.

14. Оптимизируйте производительность вашего проекта, используя кэширование, сжатие и минимизацию кода.

15. Регулярно обновляйте и улучшайте ваш проект, следуя принципам SOLID и лучшим практикам разработки.

Авторизуйтесь, чтобы писать на форуме.

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон