solisamicus opened a new pull request, #3047:
URL: https://github.com/apache/dubbo-go/pull/3047

   feat: add HTTP health check API for Kubernetes integration
   
   Add comprehensive HTTP health check support for liveness and readiness 
probes to enable
   seamless Kubernetes deployment and container orchestration.
   
   ## Background
   
   Kubernetes requires HTTP endpoints for health probes to determine container 
lifecycle:
   - Liveness probes: detect if container should be restarted
   - Readiness probes: control traffic routing to healthy instances
   
   This implementation provides a robust, extensible health check system that 
integrates
   with dubbo-go's existing architecture while allowing users to define custom 
health logic.
   
   ## Implementation
   
   ### Core Components
   
   - **HealthCheckConfig**: YAML-configurable settings for ports, paths, and 
timeouts
   - **HealthChecker Interface**: Extensible interface for user-defined health 
logic
   - **HealthCheckServer**: HTTP server exposing /health/live and /health/ready 
endpoints
   - **Built-in Checkers**: Ready-to-use implementations for common scenarios
   - **Global Registry**: Thread-safe system for managing health checkers
   
   ### Key Features
   
   - **Configurable Endpoints**: Customizable ports and paths via configuration
   - **Extensible Logic**: Users can implement HealthChecker interface for 
custom checks
   - **Composite Support**: Combine multiple health checkers with AND logic
   - **Detailed Responses**: JSON responses with status, timestamp, and 
detailed information
   - **Timeout Protection**: Configurable timeouts prevent hanging health checks
   - **Graceful Integration**: Seamless integration with dubbo-go lifecycle 
management
   - **Thread Safety**: Concurrent-safe health checker registry
   
   ### Changes Made
   
   - Add HealthCheckConfig to MetricsConfig with port, paths, timeout settings
   - Implement HealthChecker interface for user-defined health check logic  
   - Add HealthCheckServer with /health/live and /health/ready endpoints
   - Support CompositeHealthChecker for combining multiple checkers
   - Provide built-in checkers: Default, Dubbo, GracefulShutdown, Timeout
   - Integrate with metrics system for automatic server lifecycle management
   - Add thread-safe global health checker registry
   - Support detailed health results with JSON response format
   - Include graceful shutdown integration and timeout protection
   
   ## Usage
   
   ### Configuration
   ```yaml
   metrics:
     enable: true
     health-check:
       enabled: true
       port: "8080"
       live-path: "/health/live"
       ready-path: "/health/ready"
       timeout: "10s"
   ```
   
   ### Custom Health Checker
   ```go
   type MyHealthChecker struct {
       db *sql.DB
   }
   
   func (m *MyHealthChecker) CheckLiveness(ctx context.Context) bool {
       return true // Process is alive
   }
   
   func (m *MyHealthChecker) CheckReadiness(ctx context.Context) bool {
       return m.db.Ping() == nil // Check database connection
   }
   
   func (m *MyHealthChecker) Name() string {
       return "MyApp"
   }
   
   // Register custom checker
   server.SetHealthChecker(&MyHealthChecker{db: database})
   ```
   
   ### Kubernetes Deployment
   ```yaml
   livenessProbe:
     httpGet:
       path: /health/live
       port: 8080
     initialDelaySeconds: 30
     periodSeconds: 10
     failureThreshold: 3
   
   readinessProbe:
     httpGet:
       path: /health/ready
       port: 8080
     initialDelaySeconds: 10
     periodSeconds: 5
     failureThreshold: 3
   ```
   
   ## API Responses
   
   ### Healthy Response (200 OK)
   ```json
   {
     "status": "UP",
     "timestamp": 1640995200000,
     "details": {
       "check": "readiness",
       "database": "connected",
       "services": "exported"
     }
   }
   ```
   
   ### Unhealthy Response (503 Service Unavailable)
   ```json
   {
     "status": "DOWN", 
     "timestamp": 1640995200000,
     "message": "Database connection failed",
     "details": {
       "check": "readiness",
       "database": "unavailable",
       "reason": "connection_timeout"
     }
   }
   ```
   
   ## Benefits
   
   - **Cloud Native**: Full Kubernetes compatibility with standard probe 
endpoints
   - **Zero Downtime**: Proper readiness checks enable rolling deployments
   - **Fault Tolerance**: Automatic unhealthy instance removal from load 
balancers  
   - **Observability**: Detailed health status information for debugging
   - **Extensibility**: Plugin architecture for custom health logic
   - **Production Ready**: Timeout protection, graceful shutdown, error handling
   - **Backward Compatible**: Disabled by default, no impact on existing 
deployments
   
   ## Testing
   
   Health check endpoints can be tested using:
   ```bash
   curl http://localhost:8080/health/live
   curl http://localhost:8080/health/ready
   ```
   
   Fixes: https://github.com/apache/dubbo-go/issues/2039
   Enables: Kubernetes-native health monitoring and container lifecycle 
management


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to