вопрос по memcache

  • Автор темы Автор темы svdesign
  • Дата начала Дата начала

svdesign

Guest
вопрос по memcache

Вот допустим сделаю я все как написано здесь
http://www.danga.com/memcached/
Запущу эту ботву.
И что получается любой пользователь на сервере из своих
скриптов без проблем сможет подключится к моему memcache
и удалить или изменить все мои данные?
Никаких средств по ограничению доступа memcache не имеет?
Хотябы что-то элементарное, логин-пароль?
 
нет, такого нет и не предполагается.
авторы изначально говорят, что есть смысл ставить memcache только на выделенный сервер.
 
svdesign
честно говоря, мне - ни капли не жаль.
т.к. при добавлении авторизации memcache потерял бы своё главное преимущество - скорость ответа.
 
Нифига бы он там не потерял,
мне вообще не понятно какая там может быть "большая производительность" если данные от сервера качаются к клиенту через tcp порт. А данные эти IMHO нечто иное как подобие сериализованных данных.
Надо будет попробовать создать объект, сохранить его в сериализ. виде, и сравнить скорость получения этого объекта из memcached и процесс десериализации такого-же объекта.
Врядли результат будет сильно отличаться.
 
>Нифига бы он там не потерял,
о... какое смелое заявление.

>Надо будет попробовать создать объект, сохранить его в сериализ. виде, и сравнить
>скорость получения этого объекта из memcached и процесс десериализации
>такого-же объекта.
буду рад увидеть эти "тесты", хотя и не пойму какое отношение они имеют к авторизации.
 
попробую объяснить почему memcache именно потерял бы в скорости ответа

1. у memcache очень простой _stateless_ протокол
2. если добавлять авторизацию, то пункт первый пролетает.

откуда должны браться данные для авторизации? из файла? а обновляться? а как пароли шифруются? а как определяется принадлежность данных и права на них?

все эти вопросы реализуемы, но неизбежно увеличат прожорливость до памяти и процессора и сильно усложнят протокол.

-~{}~ 27.10.04 16:35:

> мне вообще не понятно какая там может быть "большая производительность"
> если данные от сервера качаются к клиенту через tcp порт
и что? ты же не собираешься коннектиться к memcache на другой стороне земли в приложениях где нужен быстрый ответ, а в локалке все очень быстро будет.

> данные эти IMHO нечто иное как подобие сериализованных данных.
да, и что?
 
Автор оригинала: AnToXa
попробую объяснить почему memcache именно потерял бы в скорости ответа

1. у memcache очень простой _stateless_ протокол
2. если добавлять авторизацию, то пункт первый пролетает.
Один дополнительный запрос например login и все.
На фоне все имеющихся set, add, replace и т.п. ничего страшного не произошло бы.
Не прошел логин - разрыв соединения.

откуда должны браться данные для авторизации? из файла? а обновляться? а как пароли шифруются? а как определяется принадлежность данных и права на них?

все эти вопросы реализуемы, но неизбежно увеличат прожорливость до памяти и процессора и сильно усложнят протокол.
Та где угодно, хотябы в простом файле форматом на подобие программа htpasswd
Обновляться ручками, шифровать в md5

> мне вообще не понятно какая там может быть "большая производительность"
> если данные от сервера качаются к клиенту через tcp порт
и что? ты же не собираешься коннектиться к memcache на другой стороне земли в приложениях где нужен быстрый ответ, а в локалке все очень быстро будет.

> данные эти IMHO нечто иное как подобие сериализованных данных.
да, и что?
А то, что если это так, то функция unserialize работает, если не быстрее, то с такой же скоростью.
 
> Один дополнительный запрос например login и все.

аха, и логин при каждом коннекте, замечательно, очень быстро :)

> А то, что если это так, то функция unserialize работает, если не быстрее, то с такой же скоростью.

да, и что?
 
> Один дополнительный запрос например login и все.

>аха, и логин при каждом коннекте, замечательно, очень быстро :)

А что коннектов в течении выполнения скрипта может быть больше чем один? Почему-то никто никогда не говорил что процесс авторизации как-то влияет на скорость работы, например базы mysql, хотя там тоже все происходит примерно таким же образом через TCP соединение.

> А то, что если это так, то функция unserialize работает, если не быстрее, то с такой же скоростью.

> да, и что?

Ладно, бесполезно спорить.
 
> что коннектов в течении выполнения скрипта может быть больше чем один?
обычно нет.

>почему-то никто никогда не говорил что процесс авторизации как-то влияет на скорость работы, например базы mysql

потому что время затрачиваемое на выполнение запросов на порядки больше времени затрачиваемого на авторизацию, в случае с memcache эти величины сравнимы, думаю, что там даже не будет разницы в разы, если ключей не десятки миллионов.
 
а чем это лучше shared memory?
кроме того факта, что она неможет быть общей для нескольких серверов
 
>а чем это лучше shared memory?

удобнее?

>кроме того факта, что она неможет быть общей для нескольких серверов

вот это, как раз, самое главное отличие.
при использовании shared memory ты отбираешь память у других процессов на том же сервере, а memcache будет работать на N специально выделенных под него серверов.
 
ясно
т.е. если сервер один, принципиальной разницы по функционалу нет
и shared memory должна работать быстрее чем сокеты
 
neko
>т.е. если сервер один, принципиальной разницы по функционалу нет
есть, конечно.
например, вопрос с ключами для блоков шаред мемори.

вообще, по-моему, стоит открыть мануал того и того, да сравнить функционал.

>и shared memory должна работать быстрее чем сокеты
да, при учете того, что она находится на том же сервере и отбирает память у локальных процессов, например, апача.
 
а если серверов несколько
но хотелось бы иметь общий кеш
для кластера...

то memcached очень хорошее решение IMHO
 
slach
если сделать патч, чтобы несколько memcache серверов могли между собой ключики кидать буддет совсем хорошо
 
Сверху