<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[CubitRace]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://cms.cubitrace.com/</link><image><url>https://cms.cubitrace.com/favicon.png</url><title>CubitRace</title><link>https://cms.cubitrace.com/</link></image><generator>Ghost 5.87</generator><lastBuildDate>Thu, 23 Jul 2026 10:18:12 GMT</lastBuildDate><atom:link href="https://cms.cubitrace.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Why we run per-site cgroups instead of Docker-per-site]]></title><description><![CDATA[A boring Linux primitive that costs almost nothing turns out to give better isolation than the obvious choice.]]></description><link>https://cms.cubitrace.com/why-per-site-cgroups-beat-docker-per-site/</link><guid isPermaLink="false">6a61d50f038bf60001c64408</guid><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[CubitRace]]></dc:creator><pubDate>Thu, 23 Jul 2026 08:47:11 GMT</pubDate><content:encoded><![CDATA[<p>When we sketched the multi-tenancy model, the easy answer was &apos;Docker per site&apos;. A site, a container, an image registry, a deploy. Done. We ran it for three months on a staging cluster and shelved it.</p><p>The failure modes were not subtle. Docker layer cache invalidation across hundreds of WordPress sites with slightly different plugin sets means storage cost grows non-linearly. Cold-start latency on a previously-unseen site was 300&#x2013;900ms &#x2014; fine for a serverless function, catastrophic for a publisher&apos;s homepage. And the kernel work to keep each container&apos;s network namespace isolated was, in the end, work we were paying for twice.</p><p>The primitive we actually wanted was already in the kernel: cgroups v2, exposed cleanly by systemd &apos;slice&apos; units. Each site gets a slice that caps CPU, memory, and IO. A Linux user, a PHP-FPM pool, an Nginx server block. The site cannot escape the cgroup. The PHP-FPM pool is named after the user. The user owns nothing but its own document root. We get hard isolation, near-zero overhead, and a deploy step that is <code>mv</code> followed by <code>systemctl reload php-fpm</code>.</p><p>Docker was not wrong; it just was not the right tool for this shape of workload. The lesson, again: Linux has spent thirty years on multi-tenancy. Use it.</p>]]></content:encoded></item><item><title><![CDATA[We published our benchmark methodology. Here is the raw k6.]]></title><description><![CDATA[Every hosting company claims speed. Most refuse to publish how they measured it. Here is ours, in full, with the k6 scripts and raw output.]]></description><link>https://cms.cubitrace.com/we-published-our-benchmark-methodology/</link><guid isPermaLink="false">6a61d50d038bf60001c643ff</guid><category><![CDATA[Performance]]></category><dc:creator><![CDATA[CubitRace]]></dc:creator><pubDate>Thu, 23 Jul 2026 08:47:09 GMT</pubDate><content:encoded><![CDATA[<p>Marketing pages from hosting companies tend to make extraordinary claims with no methodology &#x2014; &apos;our customers see a 200% improvement&apos;, without the dataset, without the load profile, without even a screenshot of the run. We promised in our launch blog post that we would publish ours. This post is that promise paid down.</p><p>The site under test is a clean WordPress install with WooCommerce, 25 products, a Storefront theme, no caching plugin. Identical export imported to four hosts plus CubitRace. Each host&apos;s largest &apos;small business&apos; plan, billed monthly. Probes from a single k6 worker in fra1, hitting origin (no CDN). 30-minute warmup followed by 60 minutes at three load profiles: 50 / 200 / 500 concurrent users.</p><p>The numbers, the k6 scripts, the raw stage outputs, and the post-run analysis are all in our public benchmarks repo. We are happy to re-run any host on request. If you find a methodological problem, open an issue &#x2014; we will fix it.</p>]]></content:encoded></item><item><title><![CDATA[Edge TLS at scale: how Caddy on-demand kept us out of Let's Encrypt jail]]></title><description><![CDATA[When your customers add hundreds of custom domains a week, the path through the LE rate-limiter is not the marketing tour.]]></description><link>https://cms.cubitrace.com/edge-tls-at-scale-with-caddy/</link><guid isPermaLink="false">6a61d50b038bf60001c643f6</guid><category><![CDATA[Infrastructure]]></category><dc:creator><![CDATA[CubitRace]]></dc:creator><pubDate>Thu, 23 Jul 2026 08:47:07 GMT</pubDate><content:encoded><![CDATA[<p>Let&apos;s Encrypt is generous, but its rate limits are real: 50 certificates per registered domain per week, 5 duplicate certificates per week, and 300 pending authorizations. None of those numbers is hostile to a single application. All of them are hostile to a multi-tenant PaaS that lets customers add custom domains at click-speed.</p><p>Caddy&apos;s on-demand TLS solves this with a simple ask-before-issue handshake. When the first TLS request for an unknown hostname arrives, Caddy pauses, asks our control plane &apos;is this a real customer domain?&apos;, and only on a yes does it kick off the ACME flow. The &apos;ask&apos; endpoint is an internal API that consults the same domains table the dashboard writes to. Bad guesses, scanners, and stale DNS records get a polite no &#x2014; and never touch the rate-limit budget.</p><p>We layered two extra safeguards. First, a redis-backed circuit breaker that backs off if we hit transient ACME errors. Second, ALPN-01 + HTTP-01 fallback so a single broken DNS record on a customer domain does not block the rest of the issuance pipeline. The result: 99.97% of new domains have a working cert within 15 seconds of DNS propagation, and we have never been rate-limited.</p>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[<p>This is CubitRace, a brand new site by CubitRace that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is published!</p>]]></description><link>https://cms.cubitrace.com/coming-soon/</link><guid isPermaLink="false">6a616fa1038bf60001c641df</guid><category><![CDATA[News]]></category><dc:creator><![CDATA[CubitRace]]></dc:creator><pubDate>Thu, 23 Jul 2026 01:34:25 GMT</pubDate><media:content url="https://static.ghost.org/v4.0.0/images/feature-image.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://static.ghost.org/v4.0.0/images/feature-image.jpg" alt="Coming soon"><p>This is CubitRace, a brand new site by CubitRace that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is published!</p>]]></content:encoded></item></channel></rss>