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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
20
0
2 886
4

Ответы 4

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

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

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

Если вы хотите иметь распределенную систему (то есть «конечную согласованность»), вам нужны люди, создающие, обслуживающие и управляющие ею.

Я обнаружил, что есть три класса людей, у которых очень мало проблем с «конечной согласованностью»:

  • Люди с солидным опытом работы в распределенных системах. Они узнали о конечной согласованности Византийские неудачи и тому подобном. Если вы понимаете, что Паксос не о праздниках, вы, вероятно, один из них.
  • Люди с опытом сетевого программирования. Они могут упустить теоретические основы, но имеют интуитивное понимание асинхронности и парадигмы «отсутствия глобальных часов и счетчиков». Если у вас есть как минимум 8 книг от Ричард Стивенс, вы, вероятно, одна из них.
  • Очень опытные программисты, мало знакомые с РСУБД. На ум приходят ребята из ядра, люди из научных вычислений и игровой индустрии.

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

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

С другой стороны, РСУБД - прекрасная составляющая инженерии. Их хорошо понимают, и их опыт доступен на рынке труда. Есть много достойных инструментов, возможностей для обучения и много высококвалифицированных специалистов, которых можно нанять почасово. Так что подумайте дважды: у вас не получится использовать подход РСУБД - возможно, в сочетании с хитрым обманом. Я обычно указываю студентам на Архитектура Lifejournal.

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

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

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

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

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

Я предполагаю, что отчасти это ирония: согласно его собственной веб-странице, У. Ричард Стивенс опубликовал только семь книг!

James A. Rosen 11.02.2009 18:46

Я почему-то смеялся над частью «Может быть» ... все представлял, как Amazon говорит мне, что у него может быть что-то в наличии, и мне, возможно, только что предъявили обвинение, но они ответят мне об этом.

Merritt 03.03.2012 00:46

@Merritt, это именно то, что происходит в фоновом режиме, но они не говорят вам, если вы действительно не столкнулись с столкновением (два человека делают заказы одновременно), и они не могут достаточно быстро пополнить запасы.

max 04.03.2012 01:47

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

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

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

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

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

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

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

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

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

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

У Google есть отличная статья на эту тему, их проект фотон реализует высокомасштабируемую и высоконадежную систему с алгоритм paxos в его основе наряду с несколькими другими методами. Кроме того, он очень согласован (со сквозной задержкой около 10 с) и отказоустойчив, противостоит региональным сбоям.

Другие вопросы по теме