Configuration Management Patterns
summary
A concrete system emerges: a game’s 25,000 configuration integers move out of source into a build pipeline that emits a config artifact with build number and checksum stored on an asset server, promoted through environments, and deep-merged per region host and tag. Hot updates use a Celluloid polling refresh thread to reload YAML artifacts without restart; polling is preferred over push for recoverability. Experiments, A/B tests, translations and memcache reconfigurations all work and audits + checksums prevent silent edits.
AI-written summary · about
chapters (16)
- 0:00Intro
- 0:17Configuration Management Patterns
- 1:17This is a conversation about ideas, it is not a prescription for how you have to do it
- 6:09Getting serious • Technical QA • Playtesting QA • Deploying new configurations just as rigorously as new code • Bad config can be just as damaging as bad code
- 7:04Agenda • Configuration context • Baking configurations • Deploying configurations • Applications . Further exploration
- 9:06#3: respect Rails.env development
- 13:53Reset • Our settings are aware of their context and environment! • But still in the source repo Still tied to a commit and deploy Still inaccessible to other apps Still inaccessible to non-engineers
- 14:38Requirements Decouple generation process entirely from app/repo • Use code deployment principles • Build an artifact (like we used to) • Version and store
- 15:26The power of the internet A webapp!!! Single, enforceable process • Access controls, individual auditing • Bounds/sanity checking • Incorporate your particular corporate rules/insanity
- 17:12Build process • transform config values into a single Yaml doc- building an artifact • take note of: builder, build #, timestamp, changelog • include checksum to prevent alteration, well-intentioned or otherwise
- 18:29Promotion • Map a revision to an environment or other dimension
- 19:35Release process run test/Cl suites against config run QA against config • run playtest against config deploy to production
- 20:17But I don't want to restart Spawn a thread to poll for updates in the background • Celluloid timer is perfect for this • Doesn't work with GIL (MRI) • Pretty gross multi-process (Unicorn) Don't forget to be threadsafe
- 21:41Timer class ConfigFetcher include Celluloid def initialize (sources)
- 24:54Reset .config is out of source non-engineers can build and deploy .config can be shared across apps update config live without restarts • test configs before production deploy recorded change control
- 27:03Bonus non-Ruby content • Archaius: Netflix's Java composite configuration library Zookeeper: cluster synchronization service (strongly consistent) jones: Python ZK-based config app
related talks
32mConfiguration Is (riskier than?) Code
45mAfter CI/CD, there's now Continuous Configuration
25mFast, Safe, and Reliable: The Future of Configuration
40mConfiguration Management Initiative 2.0 updates
20mConfiguration Safety at Scale with Ads
50mExiting Vacuum: Integrating Configuration Management into your Ecosystem
50mConfiguration management in Drupal 8 for beginners
27mA Million Ways To Promote Changes Between Environments
