Дмитрий, спасибо большое за подробное разъяснение. К сожалению, статью увидел только сегодня, поэтому и коммент пишу только сейчас.
В целом, я с Вами абсолютно согласен, действительно, теорема построена и доказана для модели. Я в своем топике, в комментариях, к сожалению ушел от темы теоремы и стал рассуждать о возможности построения CA системы в «реальном мире». Хотя, впрочем, теоретическая часть теоремы мне не очень интересна, мне важно ее применение на практике.
Но все же напишу пару слов о некоторых ваших высказываниях, которые меня немного покоробили:
1. Чисто формально в теореме Avalability — это способность давать ответ не упавших компонент. Т.е. пример о невозможности построения системы со 100% avalability в терминах теоремы не совсем корректен. Мне все таки кажется создать систему полностью согласованной или полностью доступной в терминах теоремы все же можно, в отличие от системы без 100% потерь связи. Но Вы совершенно правы, в теореме мы имеем дело с моделью, поэтому об этом говорить можно.
2. Ваш пример CA системы, где придется что-то чинить руками в случае маловероятного сплита, мне кажется не совсем хорошим, так как во время починки, ваша система уже не будет A, соответственно, и не будет CA.
3. Вы привели очень хороший пример с домом. И я как практик с вами очень даже соглашусь. Но как теоретик, я призадумаюсь. Ведь, если уж мы говорим о теореме с моделью, то как-то называть систему сначала CA, а потом, когда что-то произошло называть CP или AP, не кажется мне очень логичным. Все таки в теореме мы говорим о постоянном свойстве системы, с обозначенными свойствами модели.
Еще раз повторю, что с мыслью проходящей сквозь весь Ваш топик я абсолютно согласен. Теорема — эта модель и, что ее нельзя получить в реальном мире, ее это мало волнует. Однако переходя все же из теоремы в реальный мир, я вижу очень полезное утверждение, которое напрямую следует из этой теоремы. Так как в реальном мире устойчивость к сплиту достичь на 100% невозможно (но вы совершенно верно, невозможно пока), то и построить систему на 100% удовлетворяющую CA невозможно. Ну или можно еще сформулировать как это Вы сделали, т.е. можно, но до первой потери сообщения.
Нда, немного противоречивый комментарий получился. Ну уж какой есть :)
Спасибо за ссылки. Ознакомился с понятием fencing, но как на основе его сделать CA систему там, к сожалению не написано. Посмотрите, я апдейт в конце топика написал. Вобщем попытки построить CA систему, в который возможны потери между компонентами системы, значит опровергнуть CAP-теорему, думаю не стоит больше этим заниматься.
Я больше чем уверен, что любой дизайн в общем виде можно очень просто объяснить на пальцах. Но раз вы просто кидаете ссылки, то я что-нибудь одно постараюсь сегодня посмотреть и завтра отпишусь.
Раз сессия клиента обрывается, то записи он не может осуществлять, значит 100% доступности нет.
«Неработающий мастер=неработающая система. Это к CAP-теореме не относится.» Ну как не относиться. Здесь получается single point of failure, от которого распределенные системы позволяют опять же избавиться. Разве это не получается, что 100% доступности опять нет?
При такой логике мы сваливаемся к централизованной системе в итоге, а не распределенной. А топик именно об распределенных системах.
Расскажите как в описанной системе происходит запись. Давайте для упрощения пусть у нас будет один мастер и одна read-only нода. Как данные, записанные на мастер, попадают в read-only копию, и что произойдет в момент когда связь между мастером и read-only копией потеряется, а между клиентом и read-only останется?
Так же что значит мастер отказоустойчивый внутри? Т.е. они никогда не падает? Такого не бывает.
Я тут так понимаю тут зависит от того, что в этом случае показывает Twitter. Если он показывает, ой извините у нас поломка, я вам не могу показать данные, которые на самом деле у меня есть, то это отказ в обслуживании, т.е. потеря avalability.
Если же он просто тупо их отрезает, делая вид, что их никогда не было, это наверное уже можно посмотреть как потерю consistency.
Я абсолютно согласен, что построить нераспределнную систему CA, в терминах обсуждаемой теоремы можно. Я просто говорю, что она формулировалась именно для распределенных систем, что и хотел обсудить в этом топике.
Zorkus, извините, не совсем понимаю к чему Вы апеллируете. Вы приводите два дизайна систем: CP и AP, где жертвуется доступностью или согласованностью, соответственно. Я себе очень хорошо, как можно построить такие системы. Я не могу себе представить CA систему, где есть и доступность и согласованность на 100%.
Вы сейчас о чем? Раз вы пишете в этой ветке обсуждений, то Вы все еще говорите о том применима ли CAP теорема для не распределенных систем. Так в той же википедии и написано: «эвристическое утверждение о том, что в любой реализации распределённых (sic!) вычислений возможно обеспечить не более двух из трёх следующих свойств»
Если же Вы это приводите в качестве контраргумента, что распределенные системы существуют, то приведите общее описание такой системы, которая может этого достичь. Цитируемая строчка из википедии, мне не дает понять как такую систему построить.
Вот тут как раз и недопонимание формулировки («Partition Tolerance не выполнено»). Я не говорю, что Вы его недопонимаете. Я думаю, что я его недопонимаю. Но на сколько я понял, в вашем примере как раз Partition Tolerance присутствует, т.е. система работает при разрыве межконтинентальной связи. Так как Partition Tolerance присутствует, то возможно обеспечить только что-нибудь одно. В вашем примере — это согласованность. Отличный пример, подтверждающий мой топик :) Разве нет?
В целом, я с Вами абсолютно согласен, действительно, теорема построена и доказана для модели. Я в своем топике, в комментариях, к сожалению ушел от темы теоремы и стал рассуждать о возможности построения CA системы в «реальном мире». Хотя, впрочем, теоретическая часть теоремы мне не очень интересна, мне важно ее применение на практике.
Но все же напишу пару слов о некоторых ваших высказываниях, которые меня немного покоробили:
1. Чисто формально в теореме Avalability — это способность давать ответ не упавших компонент. Т.е. пример о невозможности построения системы со 100% avalability в терминах теоремы не совсем корректен. Мне все таки кажется создать систему полностью согласованной или полностью доступной в терминах теоремы все же можно, в отличие от системы без 100% потерь связи. Но Вы совершенно правы, в теореме мы имеем дело с моделью, поэтому об этом говорить можно.
2. Ваш пример CA системы, где придется что-то чинить руками в случае маловероятного сплита, мне кажется не совсем хорошим, так как во время починки, ваша система уже не будет A, соответственно, и не будет CA.
3. Вы привели очень хороший пример с домом. И я как практик с вами очень даже соглашусь. Но как теоретик, я призадумаюсь. Ведь, если уж мы говорим о теореме с моделью, то как-то называть систему сначала CA, а потом, когда что-то произошло называть CP или AP, не кажется мне очень логичным. Все таки в теореме мы говорим о постоянном свойстве системы, с обозначенными свойствами модели.
Еще раз повторю, что с мыслью проходящей сквозь весь Ваш топик я абсолютно согласен. Теорема — эта модель и, что ее нельзя получить в реальном мире, ее это мало волнует. Однако переходя все же из теоремы в реальный мир, я вижу очень полезное утверждение, которое напрямую следует из этой теоремы. Так как в реальном мире устойчивость к сплиту достичь на 100% невозможно (но вы совершенно верно, невозможно пока), то и построить систему на 100% удовлетворяющую CA невозможно. Ну или можно еще сформулировать как это Вы сделали, т.е. можно, но до первой потери сообщения.
Нда, немного противоречивый комментарий получился. Ну уж какой есть :)
Ну что-то вроде этого. Надеялся, что кто-то меня переубедит, но как-то не переубедили пока:)
«Неработающий мастер=неработающая система. Это к CAP-теореме не относится.» Ну как не относиться. Здесь получается single point of failure, от которого распределенные системы позволяют опять же избавиться. Разве это не получается, что 100% доступности опять нет?
При такой логике мы сваливаемся к централизованной системе в итоге, а не распределенной. А топик именно об распределенных системах.
Так же что значит мастер отказоустойчивый внутри? Т.е. они никогда не падает? Такого не бывает.
Если же он просто тупо их отрезает, делая вид, что их никогда не было, это наверное уже можно посмотреть как потерю consistency.
Кто как думает?
Если же Вы это приводите в качестве контраргумента, что распределенные системы существуют, то приведите общее описание такой системы, которая может этого достичь. Цитируемая строчка из википедии, мне не дает понять как такую систему построить.