Background: Without slow start, APISIX proxies requests to additional upstream nodes at a certain rate. For applications that rely on caching, as well as JVM-based applications, warming up without slow start may cause the freshly started service to be overwhelmed by a large number of requests, resulting in request timeouts, data loss, and poor user experience.
Design: The weight updating will be done by the Control Plane master (elected via etcd). A new field slow_start will be added to the node configuration. Example: { "host":"127.0.0.1", "port":1980, "weight":1, "slow_start":{ "target_weight":10, "window":300, "weight_update_interval": 5, "start_timestamp":1673490556 } } The unit of window and weight_update_interval is second. When the start_timestamp + window < current_timestamp, the slow start is done. Admin API: - We need to handle route, service, and upstream resources. - It only works for node configuration in the hash table. - Add node - weight is set to 1 as an initial value - Initialize start_timestamp to the current timestamp value - Modify node - Delete slow_start (would trigger the CP master to stop the slow start processing) - reset the weight to the target_weightif not specified - Modify slow_start (would trigger the CP master to restart the slow start processing) - reset start_timestamp to the current timestamp value