Armazenamento SQLite com latência zero em todos os Durable Objects
(simonwillison.net)-
Zero-latency SQLite storage in every Durable Object
- Kenton Varda apresenta a próxima versão da plataforma Durable Object da Cloudflare. A plataforma foi recentemente atualizada de um armazenamento chave/valor para um sistema relacional completo baseado em SQLite
- Para um contexto útil sobre a primeira versão dos Durable Objects, vale consultar Cloudflare's durable multiplayer moat de Paul Butler. Ela é popular para construir aplicações de colaboração em tempo real baseadas em WebSocket
- Os novos Durable Objects baseados em SQLite são um elemento fascinante de design de sistemas distribuídos que sugere uma forma interessante de projetar aplicações em larga escala
-
Ideia central dos Durable Objects
- Um Durable Object oferece leituras e escritas muito rápidas ao colocar a lógica da aplicação no mesmo host físico dos dados
- Um único objeto é executado em uma única thread de uma única máquina, então sua taxa de processamento é limitada. Para lidar com mais tráfego, criam-se mais objetos. Isso é mais simples quando cada unidade de estado tem tráfego baixo o suficiente para ser atendida por um único objeto
-
Exemplo de sistema de reserva de voos
- Cada voo pode ser mapeado para um Durable Object dedicado com seu próprio banco de dados SQLite. Milhares de novos bancos de dados são criados por dia para cada companhia aérea
- Cada DO tem um nome único, e a rede da Cloudflare roteia as requisições para esse objeto onde quer que ele esteja no mundo
-
Detalhes técnicos
- Inspirado no Litestream, cada DO transmite continuamente uma sequência de entradas WAL para um armazenamento de objetos. Isso é feito em lotes a cada 16 MB ou a cada 10 segundos
- Para garantir durabilidade dentro da janela de 10 segundos, as escritas são enviadas para cinco réplicas em data centers próximos assim que são confirmadas, e a escrita é aceita quando três delas dão confirmação
-
Design da API JavaScript
- Foi projetada de forma bloqueante, e não assíncrona. Isso serve para oferecer operações de persistência rápidas em uma única thread
- Inclui exemplos que mostram intencionalmente o padrão de consultas N+1, que o SQLite consegue lidar bem
-
Storage Relay Service
- É o sistema subjacente dos Durable Objects e já sustenta o sistema SQLite D1 existente da Cloudflare há mais de um ano
-
Onde os Durable Objects são criados
- Os Durable Objects não mudam de localização depois de criados. Por padrão, eles são instanciados no data center onde a requisição inicial
get()é feita - Para criar manualmente Durable Objects em outro local, fornece-se o parâmetro opcional
locationHintaoget()
- Os Durable Objects não mudam de localização depois de criados. Por padrão, eles são instanciados no data center onde a requisição inicial
-
Site where.durableobjects.live
- É um site que rastreia onde os DOs são criados na rede da Cloudflare
Resumo do GN⁺
- Os Durable Objects da Cloudflare, baseados em SQLite, apresentam novas possibilidades para projetar aplicações em larga escala. Eles oferecem desempenho rápido ao colocar os dados e a lógica da aplicação no mesmo host físico
- Esse sistema é especialmente útil para aplicações de colaboração em tempo real e oferece flexibilidade para lidar com diferentes unidades de estado
- Os Durable Objects criam réplicas em vários data centers para garantir a durabilidade dos dados, aumentando a estabilidade e a confiabilidade
- Essa tecnologia pode ser interessante para desenvolvedores interessados em projetar sistemas distribuídos em larga escala. Sistemas com funcionalidades semelhantes incluem o DynamoDB da Amazon e o Firestore do Google
1 comentários
Comentários no Hacker News
A API de escrita é síncrona, mas tem uma funcionalidade assíncrona oculta de espera. Se uma escrita falhar, o runtime substitui a resposta por uma falha HTTP, o que permite agrupar escritas automaticamente e assumir sucesso
Cada DO faz streaming da sequência de entradas do WAL para o object storage, em lotes a cada 16MB ou 10 segundos
Gosto do design dos Durable Objects. É fácil entender como funcionam por dentro
É difícil entender onde fica a localização física dos Durable Objects
É difícil entender as novas tecnologias de nuvem
Fico me perguntando como lidar com migrações de esquema
O design dos DOs é interessante, mas acho que só serve para sistemas de alta carga ou projetos de brincadeira
Fiquei impressionado com o design dos DOs. Acho que a forma como lidam com trabalhos complexos em pequena escala se parece com a estrutura de produtos reais
Notei que a CF incentiva os desenvolvedores a usarem DOs
Fico me perguntando se os DOs correspondem ao "modelo" na arquitetura MVC