Хроника Карта семантики атомарности
Меня интересует семантика атомарности в Chronicle Map. Если у меня есть хронологическая карта, совместно используемая двумя узлами (серверами), и я пытаюсь вставить один и тот же ключ в эту карту одновременно на обоих узлах, какова транзакционная семантика?
Будет ли первый пут успешным, а второй неудачным?
Мне интересно, гарантирует ли Chronicle Map ту же семантику транзакций, что и Apache Zookeeper?
В моем сценарии использования я хотел бы полагаться на тот факт, что если узел1 поместит ключ K1 в карту, этот узел2 сможет проверить наличие K1, и если его там нет, он будет точно знать, что он первым добавить К1.
По сути, вопрос о том, является ли размещение ChronicleMap распределенной транзакцией, охватывающей 2 узла.
Большое спасибо Клиффорд
1 ответ
Хроника Карта использует возможную последовательность и последний выигрывает. Когда вы смотрите на микросекундные временные шкалы, узлы находятся в расщепленном мозговом узле, поскольку невозможно поддерживать их синхронизацию с такой скоростью. Это сделано специально, поскольку карта разработана для поддержки миллионов обновлений в секунду на сервер. В общем случае нетрудно убедиться, что два сервера не обновляют один и тот же ключ одновременно при нормальной работе. Например, вы можете передать все обновления на один сервер с помощью Engine или разделить ключи для обновления. Хотя распределенные транзакции звучат как отличная идея, вы должны помнить об этом; - они на много порядков медленнее, - очень трудно восстановиться после того, как у вас произошел сбой, такой как расщепление мозга. - Тестирование вашего приложения работает правильно в различных условиях отказа - это настоящая боль.
На мой взгляд, лучше спроектировать систему, которая не нуждается в этом допущении, и вы будете знать, как она ведет себя при сбоях, без тщательного тестирования.
Допустим, вы устанавливаете zookeeper в три центра обработки данных и гарантируете, что отказ одного центра обработки данных не останавливает работу, гарантируя, что в центре обработки данных не будет половины или более узлов (двух центров обработки данных недостаточно), однако, скажем, что у вас есть временное разделение мозга, вызванное медленное соединение, это влияет на любые обновления, но в переходном режиме трудно воспроизвести или протестировать. С помощью хронической карты центры обработки данных могут быть отключены на любое время, и все их гарантии соблюдаются, и вам не нужно выполнять дополнительное тестирование. Фактически вы можете потерять все узлы, кроме одного, и при этом работать в полную силу.