After the data is synchronized to the database through one pod, are the other pods fully or incrementally synchronized?
Configuration propagation happens in several phases:
- Whichever node receives the admin API request writes a change event (indicating what was modified and when) to the database.
- All nodes scan the events table at regular intervals (by default, every 5 seconds). When they see a new event, they retrieve the new configuration as needed.
- Routing and plugin configuration differs a bit from most configuration because of the way it’s stored locally. Those changes result in an event that indicates a change to the router version, and Kong checks to see if its router version is up to date either on every request (
strict) or at a set interval (
eventual, default 1 second intervals). If the version is out of date, Kong rebuilds the router.
The built router is handled per-worker, and workers’ intervals may start at slightly different times.
eventual can therefore lead to workers briefly having a different configuration (e.g. for a new route, one worker routes the traffic while another 404s it). However,
eventual generally results in less database load, as
strict can encounter a scenario where many changes are made in quick succession, and it has to rebuild the router several times.
eventual is fine for most use cases.