Я работаю над новым проектом для «облачной» СУБД с «облачной», что означает, что гарантии (например, ACID), которые он предоставляет, будут зависеть от наличия определенных поддерживающих сервисов IaaS (например, хранилище объектов, управляемые очереди сообщений и т. д.). Цель состоит в том, чтобы уменьшить размер кодовой базы и накладные расходы на операции СУБД в тех случаях, когда вы все равно собираетесь работать в среде IaaS.
Одна из функций, необходимых любой СУБД, - это журнал с упреждающей записью (WAL) для воспроизведения состояния после сбоя. Наивный, «не обращающий внимания на облака» способ реализовать WAL - просто сделать его файлом на диске, которым управляет демон СУБД. В облачной среде это неявно переводится в журнал WAL, который находится либо на локально подключенном «временном» диске, либо в томе SAN (например, EBS, GCE PD), подключенном к гипервизору виртуальной машины через что-то вроде iSCSI. (И, поскольку WAL предназначены для восстановления после сбоя, мы можем игнорировать параметр ephemeral-disk; если сбой произошел из-за сбоя экземпляра, диск пропал бы!)
WAL имеют особую семантику:
WAL принадлежит одному процессу / заданию; ничто другое не сможет прочитать или записать его (т. е. он может считаться навсегда заблокированным его владельцем)
единственные записи - это добавления (которые могут быть переведены на перезапись в файле кольцевого буфера, но это деталь реализации)
нет смешанного трафика чтения / записи; WAL открывается только когда-либо только для чтения, или открыл только для записи, без переключения во время сеанса
сеансы чтения редки (только для аварийного восстановления) и всегда представляют собой потоковое чтение всего WAL, начиная с первого доступного (т.е. не собираемого мусором) сегмента
автор WAL может признать что все в WAL до данной контрольной точки было привязано к своему конечному месту назначения. Это может позволить пометить все, что было до контрольной точки, для сборки мусора или перезаписи.
Учитывая эту семантику, мне интересно, есть ли какой-нибудь другой компонент инфраструктуры IaaS, который лучше подходил бы для обработки записи WAL и трафика восстановления после сбоя - лучше, чем том SAN.
Под «лучше подходит» я имею в виду некоторую комбинацию этих соображений:
для связи с этим инфра-компонентом можно использовать протокол потоковой передачи, который более точно соответствует семантике WAL, чем протокол блочного хранения, такой как iSCSI, уменьшая накладные расходы на экземпляр;
WAL, с учетом его важности для восстановления после сбоев, с меньшей вероятностью будет поврежден, чем на отдельном томе SAN;
решение будет иметь более низкую стоимость за гигабайт записываемых данных WAL, чем стоимость тома SAN.
(Я, наверное, не могу получить все три, но два из трех было бы неплохо.)
Два класса инфра-компонентов, которые кажется для этого, но на самом деле не работают, надежные службы очереди сообщений (AWS SQS; Google Cloud Pub / Sub) и хранилище объектов (S3, GCS).
Оба этих типа сервисов позволяют быстро записывать небольшие сообщения / объекты, а затем надежно сохраняют / реплицируют их; но ни один тип службы не будет сохранять сообщение, которое было только частично написаны, и к тому же они слишком дороги для этого случая использования, даже по сравнению с диском SAN. WAL может иметь несколько ТБ данных, проходящих через него в день, и как хранилища объектов, так и очереди сообщений имеют, по сути, запись с оплатой за контрольную точку, что делает WAL, возможно, большинство хранить в них дорогие вещи.
Как вы упомянули для GCP, лучше всего использовать Pub / Sub и хранить журналы в GCS.
GCS может быть дешевле, чем S3, в зависимости от того, как часто вы обращаетесь к данным после того, как они были сохранены в GCS (операции).
Плата за эксплуатацию взимается при выполнении операций в облачном хранилище. Операция - это действие, которое вносит изменения или извлекает информацию о сегментах и объектах в облачном хранилище.
Операции делятся на три категории: класс A, класс B и бесплатные. Тарифы указаны за 10 000 операций. См. Официальную документацию Больше подробностей
Для получения более подробной информации о ценах и решениях вы должны связаться с отделом продаж GCP через эту форму вам не нужно быть клиентом, чтобы получить оценку