Simplifyd Cloud

Healthchecks

Configure startup, readiness, and liveness healthchecks for safe rolling deployments and automatic recovery of Docker services.

Healthchecks tell Simplifyd Cloud whether your service is alive, ready for traffic, or still starting. A readiness check is what makes zero-downtime deploys possible. Liveness and startup checks restart stuck services and protect slow-starting ones.

Healthchecks are only available on Docker services.

Deployment behaviour

Whether a redeploy causes downtime depends on whether the service has a readiness check:

Readiness checkHow the redeploy runsWhat you see
ConfiguredRolling — one new instance starts and has to pass its readiness check before an old instance is removed.No downtime. The old version keeps serving until the new one is ready.
Not configuredStop-then-start — the old instances stop, then the new ones start.Downtime while your application boots.

There is no default readiness check. To get rolling deploys, add one pointing at an endpoint that only returns success when your application can actually serve traffic.

Raising the replica count on its own does not give you a rolling deploy. Without a readiness check, every redeploy causes an interruption.

Check types

There are three types:

TypePurpose
StartupSignals that the service has finished initialising. Liveness and readiness checks are disabled until this check succeeds. Use it for slow-starting services.
ReadinessSignals that the service is ready to receive traffic. Instances that fail it stop receiving traffic until they pass again. They are not restarted.
LivenessSignals that the service is still running correctly. Services that repeatedly fail this check are restarted automatically.

When to use each type

  • Startup — use when your service takes longer than a few seconds to become operational (e.g. JVM warmup, database migration on boot, loading a large ML model). Without a startup check, a slow-starting service may be killed by the liveness check before it finishes initialising.
  • Readiness — use to enable rolling deployments and gate traffic. If your service needs a moment after startup before it can handle requests (e.g. connecting to a database, warming an in-memory cache), a readiness check ensures no requests are routed to it prematurely.
  • Liveness — use to detect deadlocks or infinite loops. A service that is running but stuck and not accepting connections will be detected and restarted.

You can configure all three checks on the same service. A typical pattern is: startup → readiness → liveness. A startup check delays readiness and liveness evaluation until startup succeeds.

How healthchecks work

All healthchecks use an HTTP GET request. Simplifyd Cloud sends a GET to the configured path and port on the service. A response with an HTTP status code between 200 and 399 is a success; anything else — including no response or a refused connection — is a failure.

The liveness and readiness checks follow this evaluation cycle:

  1. Wait Initial Delay seconds after service start before the first check.
  2. Send an HTTP GET request every Period seconds.
  3. Allow each request Timeout seconds to respond.
  4. After Failure Threshold consecutive failures → take action (restart for liveness; stop sending traffic, for readiness).
  5. After Success Threshold consecutive successes → mark the check as passing again.

The startup check runs through the same cycle; once it passes for the first time, it stops running and the liveness and readiness checks begin.

Configuring healthchecks

  1. Open the service panel → Settings tab → Deploy section.
  2. Find Health checks. Each of Liveness Probe, Readiness Probe, and Startup Probe is listed with its own button.
  3. Click + Add next to the check you want.
  4. Fill in the dialog:
    • Path — the HTTP path your service exposes for health (e.g. /health, /ready, /livez).
    • Port — the port your service is listening on (e.g. 8080).
  5. Optionally expand Advanced settings to configure timing and thresholds (see below).
  6. Click Save Probe.
  7. The check is staged as a pending change. Click Apply in the Apply Changes bar to deploy.

Like resource changes and start commands, healthcheck configuration is tracked in the changeset and only takes effect on the next deployment. You can discard the change before deploying.

The Health checks section of a service's Settings tab

Advanced settings

FieldDefaultDescription
Initial Delay (s)0Seconds to wait after the service starts before running the first check.
Period (s)10How often (in seconds) to perform the check.
Timeout (s)1Seconds to wait for a response before counting it as a failure.
Failure Threshold3Number of consecutive failures before the check is considered failed.
Success Threshold1Number of consecutive successes required to mark the check as healthy again after a failure. Must be 1 for liveness and startup checks.

Editing and removing healthchecks

  • Edit — click the pencil icon next to the check to reopen the dialog with the current values pre-filled.
  • Remove — click the trash icon next to the check. The removal is staged and applied on the next deployment.

Your service should expose a lightweight endpoint (e.g. GET /health) that:

  • Returns HTTP 200 when the service is ready.
  • Does not make external calls (database, third-party APIs) unless you specifically want those to gate readiness.
  • Responds quickly — within the configured timeout (typically 1 second).

A minimal example in Node.js:

app.get('/health', (req, res) => res.sendStatus(200));

For a readiness check that also verifies the database is reachable:

app.get('/ready', async (req, res) => {
  try {
    await db.query('SELECT 1');
    res.sendStatus(200);
  } catch {
    res.sendStatus(503);
  }
});

Common patterns

Web app with a slow startup

Use a startup check with a generous window, then readiness and liveness for ongoing health:

TypePathPortInitial DelayPeriodFailure Threshold
Startup/health80800512 (= 60 s total)
Readiness/health80800103
Liveness/health80800303

Minimal setup — traffic gating only

If you only need rolling deployment and traffic gating, a readiness check alone is sufficient:

TypePathPort
Readiness/health8080