Software engineering, distributed systems, databases, and the teams that build them
Software engineering, distributed systems, databases, and the teams that build them
How rqlite is tested
rqlite is a lightweight, open-source, distributed relational database written in Go, and built on SQLite and Raft. With its origins dating back to 2014, its design has always prioritized reliability, and quality. The robustness of rqlite is also a testament to its disciplined testing strategy: after more than 10 years of development and deployments, users have reported fewer than 10 instances of panics in production.
Testing a distributed system like rqlite is no small feat. It requires careful consideration of various layers: from individual components to the entire system in operation. Let’s explore how rqlite is tested, following its philosophy of maintaining quality without unnecessary complexity.
rqlite 8.34.0 to 8.36.0: New Features and Enhancements
rqlite is a lightweight, user-friendly, open-source, distributed relational database. It’s written in Go and uses SQLite as its storage engine. rqlite has received several important updates in recent weeks. These updates, spanning versions 8.34.0 through 8.36.0, introduce new features and make significant improvements to the database’s implementation and usability.
Continue reading “rqlite 8.34.0 to 8.36.0: New Features and Enhancements”
New Configuration Guide for rqlite
rqlite is a lightweight, user-friendly, open-source, distributed relational database. It’s written in Go and uses SQLite as its storage engine.
I’ve added a new Configuration Guide for rqlite, which has been regularly requested. rqlite has many options and although the defaults work for the vast majority of use cases, occasionally rqlite requires some operational tweaks.
rqlite 8.33.0: Date and Time function support
rqlite
is a lightweight, user-friendly, open-source, distributed relational database. It’s written in Go and uses SQLite as its storage engine.
Release 8.33.0 is out now and adds support for automatic rewriting of SQLite Date and Time functions. This removes another source of non-determinism from rqlite, allowing these functions to be used when working rqlite.
Faster Reads, Same Guarantees: Linearizable Consistency in rqlite 8.32
rqlite
is a lightweight, open-source, distributed relational database. It’s written in Go, built on the Raft consensus algorithm, and uses SQLite as its storage engine. With release 8.32, rqlite now supports fast, reliable, Linearizable reads—delivering strong consistency guarantees without the performance costs of the past.
Distributed systems present many challenges, but there is only one really hard problem: ensuring a consistent state across nodes, even in the face of network partitions, machine failures, or unexpected bugs. And a closely related requirement is ensuring up-to-date data reads — both requirements are the essential challenges that every distributed database must address.
Continue reading “Faster Reads, Same Guarantees: Linearizable Consistency in rqlite 8.32”
Concurrency Control in Go: Inside rqlite’s Custom Synchronization Primitives
rqlite is a lightweight, open-source, distributed relational database written in Go, which uses SQLite as its storage engine.
Concurrency and synchronization are at the heart of any database — and distributed systems too. Today, I’d like to share the set of synchronization primitives and race-free data structures I’ve developed for rqlite, and explain how I use them to program key aspects of the database. They might even be useful to others confronted with similar requirements.
Continue reading “Concurrency Control in Go: Inside rqlite’s Custom Synchronization Primitives”
rqlite 8.31.0: Improved support for BLOB data
rqlite
is a lightweight, user-friendly, open-source, distributed relational database. It’s written in Go and uses SQLite as its storage engine.
Release 8.31.0 is out now and adds support for inserting BLOB data as Parameterized Values. This should make it even easier to insert such data into rqlite, improving its usefulness as a data store.
From Google Cloud to WordPress.com
After four years of running this blog on Google Cloud, I’ve migrated it to WordPress.com. The migration process was hassle-free and worked quite well. The only unexpected change I had to make was to transfer philipotoole.com to WordPress, as Cloudflare‘s Terms of Service prohibit you from deleting their nameservers!
rqlite 8.30.0: Introducing Automatic Database Optimization
rqlite
is a lightweight, user-friendly, open-source, distributed relational database. It’s written in Go and uses SQLite as its storage engine.
Release 8.30.0 is out now and adds support for Automatic Optimize.
Continue reading “rqlite 8.30.0: Introducing Automatic Database Optimization”
Stephen Blum on rqlite
rqlite is a lightweight, open-source distributed relational database implemented in Go, and which uses SQLite as its storage engine.
Stephen Blum, CTO at PubNub has produced an informative video on rqlite. In it Stephen gives an overview of deploying rqlite, as well as showing basic interaction with the API.
rqlite 8.29: More extensions and improved management
rqlite is a lightweight, open-source distributed relational database implemented in Go, and which uses SQLite as its storage engine.
Release v8.29.0 bakes more SQLite extensions into the Docker image, as well as improving extension management generally.
rqlite 8.28: Enhanced Docker Support for Seamless SQLite Extension Loading
rqlite is a lightweight, open-source distributed relational database implemented in Go, and which uses SQLite as its storage engine.
With the release of rqlite 8.28.3, working with SQLite extensions in a Docker environment has become even more straightforward.
Continue reading “rqlite 8.28: Enhanced Docker Support for Seamless SQLite Extension Loading”
rqlite 8.27: loadable SQLite extensions support
rqlite
is a lightweight, open-source, distributed relational database written in Go. It is built on the Raft consensus protocol and uses SQLite as its storage engine.
Release v8.27.0 introduces the capability to load SQLite extensions at startup, significantly expanding the functionality available within rqlite.
Continue reading “rqlite 8.27: loadable SQLite extensions support”
Building rqlite 9.0: Cutting Disk Usage by Half
rqlite is a lightweight, open-source, distributed relational database written in Go. It is built on the Raft consensus protocol and uses SQLite as its storage engine.
Development of 9.0 has begun and aims to reduce disk usage by approximately 50%. This goal will be achieved through a high-level design overhaul targeting the primary causes of disk consumption in rqlite.
Continue reading “Building rqlite 9.0: Cutting Disk Usage by Half”
Delphi client for rqlite
rqlite Office Hours
rqlite is a lightweight, open-source distributed relational database implemented in Go, and which uses SQLite as its storage engine.
I am excited to announce that I am starting Office Hours for rqlite, which will take place every Friday. This is a great opportunity for you to ask questions or share ideas about rqlite directly with me.
rqlite reaches 15,000 stars on GitHub
rqlite 8.24.9: now with multi-platform Docker images
rqlite is a lightweight, open-source, distributed relational database written in Go, utilizing SQLite as its storage engine.
Release v8.24.9 is the first release that comes with multi-platform Docker support. You can now pull a Docker image for 386, ARM, and AMD platforms from the rqlite Docker repo.
GopherCon 2023: Building Distributed Systems in Go
My GopherCon 2023 talk, Build Your Own Distributed System Using Go, has been published to YouTube.
It was a great conference, and I appreciated the opportunity to share some lessons on designing, developing, and operating modern distributed systems in general, and the Raft consensus protocol in particular.
You can check out the video here.
rqlite 8.24.0 released: Point-in-time backups
rqlite is a lightweight, open-source, distributed relational database written in Go, utilizing SQLite as its storage engine.
Release v8.24.0 adds the ability to automatically upload point-in-time backups to AWS S3 and S3-compatible storage systems.
Building a highly-available search engine using SQLite
Did you know that SQLite contains a full text search engine? The SQLite FTS4 and FTS5 Extensions allow you to perform full-text searches on documents loaded into SQLite.
And since rqlite uses SQLite as its database engine, rqlite makes it really easy to deploy a highly-available search engine – and one you can interact with using SQL and HTTP.
Continue reading “Building a highly-available search engine using SQLite”
Latest updates to rqlite 8.23
rqlite is a lightweight, open-source, distributed relational database written in Go, utilizing SQLite as its storage engine.
rqlite has been updated to versions 8.23.1 through 8.23.3, bringing a series of targeted improvements to refine its internal operations and enhance overall stability. These updates focus on advancing the database’s core functionality through code refactoring and important bug fixes.
Mailpit adds support for rqlite
Mailpit
, a multi-platform email testing tool, recently released support for rqlite. Mailpit is a popular application, with over 20 million Docker downloads.
Many thanks to Ralph Slooten for adding the support. It’s great to see rqlite finding uses in an ever growing list of applications.
Prepping to Speak at Tech Conferences: From AWS re:Invent to GopherCon
Getting ready to speak at a technical conference can be as nerve-wracking as it is exciting, especially if it’s your first time.
Having had the opportunity to present at notable events like AWS re:Invent, Monitorama, DevOps Days, and GopherCon, I’ve learned a thing or two about preparing for the big stage.
Continue reading “Prepping to Speak at Tech Conferences: From AWS re:Invent to GopherCon”

