Подтвердить что ты не робот

Конечная согласованность

Я нахожусь на ранних этапах разработки приложения, которое должно быть высокодоступным и масштабируемым. Для этого я хочу использовать модель данных о возможных последовательностях по ряду причин. Я знаю и понимаю, почему это непопулярный архитектурный выбор для многих решений, но это важно в моем случае.

Я ищу реальные советы, лучшие практики и gotchas, которые нужно искать при работе с базами данных с распределенным/документальным стилем. И особенно области вокруг приложений электронной коммерции (стиль корзины покупок), которые традиционно легче сочетать с реляционным db.

Я понимаю, что использование этих типов БД является сложной задачей, но эй, Google и E-bay используют их, поэтому они не могут быть такими трудными;-) Любые советы будут оценены.

4b9b3361

Ответ 1

Если вы хотите иметь распределенную систему (что означает "Eventual Consistency" ), вам нужны люди, они будут строить, поддерживать и управлять им.

Я обнаружил, что есть три класса людей, у которых очень мало проблем с "Eventual Consistency" :

  • Люди с солидным фоном в распределенных системах. Они узнали о возможной последовательности византийских сбоев и тому подобное. Если вы понимаете, что Paxos не относится к праздникам, вы, вероятно, один из них.
  • Люди, имеющие опыт программирования в сети. Они могут пропустить теоретический фон, но имеют интуитивное понимание асинхронности и парадигмы "нет глобальных часов и счетчиков". Если у вас есть не менее 8 книг Richard Stevens, вы, вероятно, один из них.
  • Очень опытные кодеры, которые мало подвержены РСУБД. Мне приходят в голову ребята из ядра, люди из научных вычислений и игровой индустрии.

Все эти люди очень популярны на рынке труда. Например, 75% академиков в распределенных системах уходят в учреждения, которые управляют большими, саморазвитыми распределенными системами, например. фондовые биржи.

Все это стало несколько проще с предложениями, такими как Hardoop, SimpleDB и CouchDB, но по-прежнему большой проблемой является создание чего-то на технологии распределенных систем.

С другой стороны, РСУБД - очень тонкая инженерная техника. Они хорошо поняты, и опыт в них доступен на рынке труда. Есть много достойных инструментов, возможностей в области образования и много высококвалифицированных специалистов, которые можно арендовать по часам. Поэтому дважды подумайте, что вы не можете справиться с подходом RDBMS - возможно, в сочетании с каким-то умным обманом. Я обычно нахожу студентов в архитектуре Lifejournal.

Для распределенных баз данных гораздо меньше опыта. Именно по этой причине вы так мало нашли совета.

Если вы настроены использовать "Eventual Consistency" , я думаю, что помимо незрелых инструментов главной проблемой является мышление каждого из участников. Являются ли ваши пользователи API (кодеры) и пользователи приложений (ваши сотрудники и ваши клиенты) готовы и могут принять несогласованность? Можете ли вы скрыть его от определенных классов пользователей? Мы не привыкли к такому мышлению, что компьютеры несовместимы. Что-то есть на складе или нет. "Возможно" - это не тот ответ, который ожидают пользователи.

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

Для приложения корзины покупок вы можете захотеть по-настоящему разойтись: используйте "Диспетчер клиентов" в качестве хранилища данных. При оформлении заказа вы можете отправить корзину в систему пакетной обработки на стороне сервера. Это означает, что для каталога вам нужна только высокая доступность (проще), а представление корзины - очень узкий интерфейс, без необходимости совершать транзакции. Позже обработка заказа не имеет (мягких) требований к реальному времени и, следовательно, проще.

BTW: В прошлый раз я проверил архитектуру E-Bay, где они были большими в РСУБД, но с тех пор они, возможно, изменились. ( Изменить: он изменился - см. комментарии)

Ответ 2

Единственное решение вашей проблемы - решить, какие компромиссы в теореме CAP вам подходят, а затем начните ее реализацию.

mdorseif имеет отличную точку. Существует множество конфигураций того, насколько вы компрометируете согласованность, доступность и разделение. У вас есть два основных варианта.

  • Пойдите по пути собственной распределенной системы (возьмите много опыта и исследований).
  • Vet и экспериментируйте с несколькими распределенными базами данных, чтобы решить, что может удовлетворить ваши требования как масштаб.

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

Appnexus - это платформа объявлений, которая использует hbase для очень высокой доступности и возможной согласованности. Они много говорят об этом здесь.

статья на http://highscaleability.com описывает, как New York Times реализовала RabbitMQ наряду с Cassandra через WAN для отказоустойчивости и высокой доступности.

MongoDB обеспечивает большую гибкость в балансировании согласованности с доступностью с их реализацией проблем с записью. У них отличная документация, в которой точно указано, как ее реализовать со всеми getchas (включая разделение). Они реализуют двухфазную фиксацию для поддержания состояния по сети (на своих серверах конфигурации).

В Google есть отличная статья по этому вопросу, проект photon реализует очень масштабируемую, высоконадежную систему с paxos algoritm в основе этого наряду с несколькими другими методами. Это также очень согласовано (с латентностью от конца до конца около 10 секунд) и отказоустойчив, что соответствует региональным сбоям.

Ответ 3

Как добиться высокой доступности и масштабируемости с использованием реляционных баз данных хорошо известно, и существует огромное количество знаний о том, как это сделать!

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

E-Bay - это совсем другой случай, почему-то они убедили пользователей и клиентов принять плохое обслуживание в обмен на теоретически более низкие цены - хорошо для них, но это не вариант для каждого бизнеса.

Ответ 4

Все системы, построенные на распределенных вычислительных моделях, строятся на CAP и BASE. Здесь основная проблема заключается в том, что если наша система обеспечивает доступность и толерантность к разделам, мы не можем иметь истинную согласованность, но мы можем иметь возможную последовательность.

Идея возможной согласованности заключается в том, что каждый node всегда доступен для обслуживания запросов. В качестве компромисса модификации данных распространяются в фоновом режиме на другие узлы. Это означает, что в любой момент система может быть непоследовательной, но данные по-прежнему в значительной степени точны.

Источник: http://www.techspritz.com/eventual-consistency-and-base-model/