Making scylla optional #889
Replies: 1 comment 10 replies
|
My comments here are about the idea of making Scylla optional in the first place. The BLUF is that I think it's a strategic mistake1. My argument is that it's one thing to build software that works for small deployments, and a very different thing to build and operate something that works at scale. For Coop, ROOST currently has experience with the first part, and low-to-none with the second part. I am assuming that we want Coop to work at scale (let's say up to 1000 events/second or so). Because we don't provide a hosted version of Coop, ROOST will not naturally gain the operational experience of running Coop at scale, and this limits our ability to support adopters. That's a risk that we can mitigate by running our own instance that ingests some high-volume public data. But the more disparate adopters' infrastructure is, the harder it will be for us to gain the right operational knowledge to support them. One of the biggest lessons I've taken away from building data-intensive applications is that the shape of data on disk is hugely important, and that operationalizing your datastore(s) is half the battle. Supporting N data backends for the same thing means we have N battles! It also means that our application ends up supporting only the lowest common denominator features that would otherwise be enabled by the database. For example, Scylla supports per-table and per-row TTLs while native Postgres does not, so we'd need to either not use those features or hand-roll support for that in the Postgres adapter. Every new feature, migration, schema change, performance problem, etc. would need to be designed and validated against both (or all) backends. As a small team, I think we have to prioritize, and I don't think the benefit of this outweighs the high (and ongoing) costs. I understand the benefit of making deployment simpler, but I wonder if a) has the Scylla dependency actually stopped anyone from using Coop, and b) what else could we do to make that deployment simpler? Also, note that I'm not saying that we necessarily want to support Scylla forever, but that we should only support one datastore (for each kind of data) at a time. Footnotes
|
Uh oh!
There was an error while loading. Please reload this page.
We've been talking about the plan to make Scylla optional for a bit, so creating a Discussion thread to align on the approach and lock in target dates and timelines.
Relates to #190
Goal
Making Scylla (and optionally ClickHouse / Redis) foldable into Postgres without shipping dead tables, while keeping “Postgres” a logical choice that can still span multiple physical hosts.
Proposal
@juanmrad created an HTML file for the proposal, which i'm attaching here.
datastore-consolidation (1).html
The mistake to avoid is treating “use Postgres” as one decision. There are two independent axes. Keeping them separate is what lets a domain move from a shared host to its own without touching application code or rewriting queries.
Axis 1 - Storage engine
Which technology backs a domain — Postgres, Scylla, ClickHouse, Redis. Selected per-domain via env (e.g. ITEM_STORE_BACKEND, ANALYTICS_BACKEND) behind a storage interface.
Axis 2 - Connection routing
Which physical host serves that engine. Each logical Postgres handle resolves to a connection, defaulting to the app DB. One host today; lift to its own host later — no schema rename.
Consequence
“Folding into Postgres” is a logical-engine choice. It does not force a single host — Scale · PG-split runs three separate Postgres instances and still counts as consolidation (one engine to learn, back up, and operate).
Open Questions and Risks
All reactions