[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Распределение между серверами
inpost
У кого-нибудь есть полезные ссылки, то есть именно хорошие, а то гугл всё подряд выдаёт, уже который раз sad.gif
В целом тут больше вопрос вот в чём, есть же сайт и висит он на одном сервере (php+mysql). Если с нагрузкой памяти не удастся справиться другими путями, то есть дошли уже до лимита сервера, то надо разделять... допустим есть связка Nginx + apache, на одном из серверов.
Какие варианты распределения есть? Тупо 2 сервера абсолютно одинаковых работают с одной БД и запросы по очереди кидаются туда-сюда? Или один пользователь висит на одном сервере, а другой - на другом?
Может стоит разбить не по пользователям, а по функционалу? К примеру я грубо говоря могу выделить основной функционал сайта следующим: а) админка, б) чат, в) остальной функционал для пользователей. К примеру на отдельный сервер полностью перенести чат вместе с таблицами MySQL. То есть будут 2 отдельных БД, разделённых по функционалу, хотя частично первый будет коннектиться ко второму, а второй - к первому. Сюда же станет вопрос, а как сделать так, чтобы "/chat" - ссылался на сервер №1. А уже "/gifts" - на другой сервер?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
neadekvat
Что именно упирается в память? Интерпретатор или база?
inpost
neadekvat
Привет. Это в соседней теме: http://phpforum.ru/index.php?showtopic=74816&st=0
Тут о распределении между серверами)
П.С. httpd, множество процессов.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
glock18
Цитата (inpost @ 15.06.2013 - 04:40)
neadekvat
Привет. Это в соседней теме: http://phpforum.ru/index.php?showtopic=74816&st=0
Тут о распределении между серверами)
П.С. httpd, множество процессов.

Думаю, вопрос вызван тем, что распределение делается на узком участке (чрезмерное потребление памяти/процессора). Соответственно веб-сервера или субд
vagrand
inpost

Сложно чего-то толковое посоветовать не видя твоего кода и не зная архитектуры системы. Но в принципе логические шаги таковые
1. Оптимизация структуры БД и запросов к ней.
2. Внедрение кеша.
3. Внедрение NoSQL баз. Некоторые части сайтов можно вообще реализовать без применения реляционных БД.
4. Внедрение специализированного ПО, например тот же чат можно реализовать с применением специально предназначенного для этого ПО.
5. Вдумчивое применение репликации и перенаправление запросов на запись и чтение на разные сервера.
6. Рассмотреть и потестить приминение шардинга на своей БД.
7. Подумать над разнесением частей функционала на разные сервера.

Вот както так

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
sergeiss
Исходя из начального вопроса, мне кажется, больше всего должно помочь вот это:
Цитата (vagrand @ 15.06.2013 - 11:34)
5. Вдумчивое применение репликации и перенаправление запросов на запись и чтение на разные сервера.

Да и партиции надо активно использовать внутри каждого сервера.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
inpost
Дело не в MySQL, идёт больше вопрос о распределении функционала ПХП, как верно сделать так, чтобы один запрос шел на один сервер, а другой - на другой. Логично что роутер, но кто этим роутером должен быть? Nginx может? Или специальный роутер необходимо ставить перед серверами, который будет разветвлять запросы?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Oyeme
В любом случаи лучше делать балансировку.А нагрузку уже распределать между slave и мастер.
В любом случаи,делая это мануально перенаправляя запросы,Вы не разгружаете сервер.Вы пытаетесь пойтие легким путем,в будущем будет только сложнее.

Простой способ,
Позволяет сделать модуль к apache
http://httpd.apache.org/docs/current/mod/m...y_balancer.html
Вы можите указать что и куда перекидивать.

Самый лучший вариант
Все должно быть автоматически.
Чтобы при подключении еще одного сервера,все распределилось автоматичесики

Чтобы правильно распрелелить желательно пройти какие-то курсы,хотябы Cisco начальный уровень.
Мне приходилось проходить такие курсы(Очень позновательно)
Самы курсы не дорогие в приделах 800£.

Если много информации в интернете,как бесплатных видео,до учебников.(Если платные варианты не подходят)

http://www.expedient.com/products/load-balancing.php


user posted image

Сам балансер которые распределяет соединения. wink.gif
https://www.barracuda.com/products/loadbalancer

Вообще рекомендую использовать виртуальные сервера,все виртуальные сервера находятся в одном месте.Соответственно tool который помогает управлять виртуальными сервера имеет возможность распределять нагрузку между серверами.(Все зависет от tool)
Это выйдет дешевле и контроль будет у Вас в одном месте.
vagrand
inpost
Цитата
Дело не в MySQL


Ой ли? По своему опыту знаю что узкое место это в 99% случаев БД, если только вы в скриптах не перебираете какие-то большие массивы данных.
Ну положим вот вы раскидали запросы на несколько серверов, но БД то у вас так и осталась одна, соответственно нагрузка на не никаким образом не уменьшилась. Ну разве что вы под БД выделили отдельный сервер, а скрипты перенесли на другой, но и в этом случае выигрыш не очень большой будет по скорости.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
inpost
vagrand
В соседнюю тему посмотри, я же ссылку дал.
MySQL: нагрузка памяти 2.5-3 memory usage.
httpd: 14-15gb, достигается лимита.

В MySQL нет запросов, которые еле выполняются. Проблема в том, что у меня почти 3к запросов в секунду на apache.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.