@stepanger

Горизонтальный шардинг, авторизация?

Как в случае горизонтального шардинга, авторизовать пользователя, если количество серверов превышает "двух"?
Понятно, при регестрации, выбрать рандомно число сервера,(или выбрать другой метод выборки) и занести в базу, тогда как осуществить алгоритм авторизации?
использовать хеш таблицу (пользователь=сервер)?
  • Вопрос задан
  • 2446 просмотров
Пригласить эксперта
Ответы на вопрос 2
@neolink
например по первой букве логина, первоначально распределяете равномерно, когда соберете распределение, можете уже раскидать согласно количеству логинов на разные буквы, чтобы на сервера приходилось равномерное кол-во пользователей
ну и если у вас не 10млн пользователей можете и полную копию хранить...
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
зависимость между:
Если гость: IP-клиента и N-сервера: кол-во бит в IP
Если пользователь: USER_ID и N-сервера: кол-во бит в USER_ID
function bit_count($num) {
return strlen(ereg_replace("0","",decbin($num)));
} 
$serversCount=10;
$userServer=1+bit_count($_SERVER['REMOTE_ADDR']) mod $serversCount; //#1: guest
//
//$userServer=1+bit_count($username) mod $serversCount; //#2: или user
//$userServer=1+$userID mod $serversCount; //#3: или userID (longint), начинаем с нуля..
//

Для равномерного распределения: конвертируем по БД $username->$userID и далее 3-й случай.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы