#distributed-systems
15 posts
2026 - February
1 post2017 - June
1 post2016 - December
2 posts2016 - June
1 post2016 - March
1 post2015 - December
4 posts2015 - November
4 posts2008 - June
1 post2026 - February
1 postAsync Jobs That Survive Chaos | Behind the Scenes of The M.Akita Chronicles
Production-grade patterns for Rails 8 ActiveJob and SolidQueue: retries, distributed locks, atomic email claiming, orchestrators, cron safety nets, and status notifications.
2017 - June
1 postEx Manga Downloadr - Part 6: The Rise of FLOW
I replaced Poolboy and a custom GenServer with Flow to simplify parallel scraping. The code became more readable, but took over 3 minutes, versus less than half that in the previous version.
2016 - December
2 postsEx Pusher Lite - Part 3 - A Complete Solution
I built a Pusher-inspired service with Phoenix and Elixir, connecting a Rails application through WebSockets and an API and distributing messages across nodes. It covers many cases, but is not production-safe yet.
Elixir Phoenix App deployed into a Load Balanced DigitalOcean setup
The author builds a two-node Phoenix cluster on DigitalOcean with HAProxy and PostgreSQL, and gets distributed WebSockets running with Erlang. It works, but edeliver is slow and login still fails intermittently.
2016 - June
1 post[Manga-Downloadr] Improving the Crystal/Ruby from bursts to pool stream
Replacing request bursts with steady worker pools in Manga-Downloadr, the author cuts times to 27s in Ruby, 30s in JRuby, and 21s in Crystal, but Elixir finishes in 15s.
2016 - March
1 postImproving your Microservices Integration Performance with Memcache and ETAGs
Using ETAGs, If-None-Match, and Memcached between two Rails APIs, the author cuts responses from 26ms to 12ms and from 62ms to 24ms. The simple technique helps most with rarely changing data.
2015 - December
4 postsFixing DHH's Rails 5 Chat Demo
While reviewing DHH’s Action Cable chat, the author moves persistence into a background job and removes the model callback. The code returns faster, but the concurrency benefit wasn’t measured.
Ex Pusher Lite - Part 2 - First Working Core!
Part 2 turns ExPusherLite into a working Phoenix core with apps, keys and secrets, authentication, channels, broadcasts, and Heroku deployment. Tests were quick, but security remains fragile.
Ex Pusher Lite - Part 1: Phoenix Channels and Rails apps
Part 1 replaces Pusher with a Phoenix server using Channels, WebSockets, and Basic Auth while keeping the Rails client and SuckerPunch. The clone works under your control, but remains incomplete.
The Obligatory "Why Elixir?" Personal Take
The author explains why he plans to combine Rails and Phoenix and argues for Elixir in concurrent, distributed systems. Immutability, schedulers, and supervisors make fault tolerance more approachable.
2015 - November
4 posts"Yocto Services"! And My First Month with Elixir!
After an intense month studying Elixir, the author suggests thinking of BEAM processes as “Yocto Services”: supervised GenServers that fail independently, exchange messages, and talk across nodes.
ExMessenger Exercise: Understanding Nodes in Elixir
I refactored a pre-1.0 terminal chat into an Umbrella app and explored Nodes, names, cookies, and remote GenServers. The result is closer to distributed peers than a traditional TCP client and server.
Observing Processes in Elixir - The Little Elixir & OTP Guidebook
Using GenServer, Supervisor, and Observer, I show a worker being restarted, a pool of five processes being replenished, and the runtime staying active, though the worker’s state is lost.
Ex Manga Downloadr - Part 2: Poolboy to the rescue!
I replaced manual batches of 80 requests with a GenServer Worker using Poolboy and a Supervisor, backed by a pool of 50 processes. Akira’s roughly 2,200 pages took under 50 seconds, limited by MangaReader.
2008 - June
1 postChatting with Blaine Cook (Twitter)
Blaine Cook separates performance from scalability, explains Twitter’s asynchronous architecture and the cost of sharding. In his view, scaling problems are rarely Rails’ fault.