On this page
  1. At a Glance
  2. The Problem
  3. Architecture Layers
  4. Three Standout Design Decisions
  5. What Works Exceptionally Well
  6. Areas for Future Enhancement
  7. Performance Characteristics
  8. Use Cases & Target Audience
  9. Code Quality Observations
  10. Deployment Options
  11. Bottom Line
  12. Final Verdict
  13. Try It Yourself

At a Glance

AttributeDetails
Project TypeService Discovery & Health Monitoring Platform
Tech Stack.NET 9.0, Blazor Server, SignalR, PostgreSQL, Redis
ArchitectureMicroservices-ready, Event-driven, Real-time
StatusProduction-ready MVP (v1.0)
LicenseMIT
Repositorygithub.com/w4mhi/ServiceRegistrationEdu

The Problem

Modern microservices need reliable service discovery and health monitoring. While Kubernetes provides native service discovery, deployments often need application-level service catalogs with approval workflows, custom health tracking, and real-time operational visibility.

ServiceRegistrationEdu provides a lightweight, deployable service registry that works anywhere - including Kubernetes clusters where it serves as an application-layer service catalog with administrator approval gates and intelligent health degradation tracking.


Architecture Layers

The system follows clean separation of concerns:

  1. REST API Layer - Service registration, heartbeat processing, admin approval endpoints
  2. Business Services Layer - Health state machine, validation, workflow orchestration
  3. Storage Provider Abstraction - Pluggable backends (PostgreSQL, Redis, In-Memory)
  4. SignalR Hub - Real-time event broadcasting to connected dashboards
  5. Blazor Dashboard - Real-time UI for monitoring, approvals, and service details

Three Standout Design Decisions

1. Health State Machine (Not Binary Alive/Dead)

Most service registries treat health as binary: alive or dead. ServiceRegistrationEdu implements a five-state degradation model:

HEALTHY → UNHEALTHY → DEGRADED → DEAD → RECOVERED → HEALTHY

Why this matters: Services don’t just “die” - they degrade. This model lets operators see services struggling before they fail completely, enabling proactive intervention.

2. 95% Database Write Reduction Through Intelligent Caching

The original implementation wrote to the database on every heartbeat. For a service sending heartbeats every 30 seconds, that’s 2,880 writes/day per service.

The optimization:

  • Heartbeat state cached in-memory
  • Database writes only when health status changes
  • Periodic snapshots for crash recovery

Result: 95% reduction in database load. A 200-service deployment went from 576,000 writes/day to ~28,800 writes/day. Heartbeat processing averages <26ms (target was <500ms).

3. Zero-Polling Dashboard with SignalR

Traditional monitoring dashboards poll the API every 5-10 seconds, creating unnecessary server load and delayed updates.

ServiceRegistrationEdu uses SignalR to push updates instantly. Service goes DEGRADED? Alert appears immediately. No polling loops, no wasted requests.


What Works Exceptionally Well

✅ Developer Experience

The quick-start script (quickstart.sh) spins up PostgreSQL + API + Dashboard in ~60 seconds. No multi-page setup guides, no dependency hell.

✅ Real-Time Dashboard

Provides live service monitoring, filterable service tables, pending approvals queue, and service detail drill-downs with heartbeat history. Everything updates in real-time via SignalR with auto-reconnection handling.

✅ Comprehensive Documentation

Production-grade README with architecture diagrams, API usage examples, configuration reference, and deployment guides for Docker and Kubernetes.

✅ Security by Default

HSTS, Content Security Policy, X-Frame-Options, and rate limiting enabled out-of-the-box. Registration: 10 req/min, Heartbeat: 200 req/sec.

✅ Production-Ready Error Handling

Every API endpoint returns structured errors with timestamps, paths, and actionable details - no generic “500 Internal Server Error” responses.


Areas for Future Enhancement

1. Authentication & Authorization

Current limitation: No authentication - API is open.

Recommended: JWT-based authentication with role-based access control (Admin, Developer, ReadOnly).

Impact: Critical for production deployments handling sensitive services.

2. Service Dependency Tracking

Vision: Let services declare dependencies, show dependency graphs in dashboard, cascade health alerts.

Impact: Prevents broken deployments where Service A registers but its dependencies don’t exist yet.

3. Multi-Region Support

Current limitation: Single-region deployment.

Enhancement: Federation protocol between registry instances with cross-region service discovery.

Use case: Global deployments where services in US-East need to discover services in EU-West.

4. Alerting & Notifications

Current limitation: Dashboard shows degraded services, but no outbound alerts.

Recommended: Email/webhook alerts when service goes DEGRADED/DEAD, with configurable thresholds.

Impact: Operational necessity for production monitoring.

5. Prometheus Metrics Export

Missing piece: No /metrics endpoint for Prometheus scraping.

Benefit: Integrates with existing observability stacks (Prometheus + Grafana).

6. Service Deletion Workflow

Current limitation: Services can be marked for deletion, but no cleanup workflow.

Enhancement: Grace period before actual deletion (e.g., 7 days) with notifications and audit trail.


Performance Characteristics

EndpointTargetMeasuredStatus
POST /api/v1/register<2000ms~1800ms✅
POST /api/v1/heartbeat/{id}<500ms<26ms✅ (19× better)
GET /api/v1/status/service/{id}<1000ms~850ms✅
GET /api/v1/catalog<1000ms~920ms✅

Use Cases & Target Audience

Ideal For:

  • Microservices deployments (10-200 services) - Application-layer service catalog with approval workflows
  • Platform teams - Provides service discovery with minimal operational overhead
  • Kubernetes deployments - Complementary application-level registry alongside K8s native discovery
  • Educational projects - Clean architecture demonstrating modern .NET patterns

Not Ideal For:

  • Single-service deployments - Overkill for one service
  • Massive scale (1000+ services) - Needs federation/sharding enhancements
  • Deployments requiring multi-region - Single-region limitation (until enhancement #3)

Code Quality Observations

Strengths:

  • Strong typing throughout (no var abuse)
  • One class per file with clear boundaries
  • Consistent naming conventions (PascalCase/camelCase)
  • Modern .NET patterns (dependency injection, async/await)
  • Event-driven design with SignalR
  • Repository pattern separating business logic from data access

Deployment Options

Local Development

bash
./quickstart.sh

Docker Compose

YAML
services:
  api:
    build: ./src/Omni.ServiceRegistry.Api
    ports: ["5159:8080"]
  dashboard:
    build: ./src/Omni.ServiceRegistry.Dashboard
    ports: ["5083:8080"]
  postgres:
    image: postgres:15-alpine

Kubernetes

YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service-registry-api
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: api
        image: serviceregistry/api:1.0.0
        env:
        - name: DatabaseProvider
          value: Postgres

All deployment configurations included in /deployment directory.


Bottom Line

ServiceRegistrationEdu is a well-architected, production-ready service registry that solves a real problem elegantly.

What Makes It Stand Out:

  • State machine health model - Degradation awareness, not just alive/dead
  • 95% database write reduction - Intelligent caching without sacrificing consistency
  • Zero-polling real-time updates - SignalR pushes, not API polls
  • 60-second setup - Quick-start script removes friction
  • Security by default - HSTS, CSP, rate limiting enabled

Who Should Use This:

  • Platform teams needing application-layer service discovery
  • Kubernetes deployments requiring approval workflows and custom health tracking
  • Companies with 10-200 microservices
  • Developers learning production .NET architecture patterns
  1. Authentication/Authorization (security blocker for production)
  2. Alerting/Notifications (operational necessity)
  3. Service Dependency Tracking (prevents broken deployments)
  4. Prometheus Metrics (observability integration)
  5. Multi-Region Support (for global deployments)

Final Verdict

Rating: 4.5/5 ⭐⭐⭐⭐½

Strengths:

  • Excellent architecture and code quality
  • Real-time capabilities with SignalR
  • Developer-friendly setup and documentation
  • Production-ready security defaults
  • Intelligent health degradation model

Growth Opportunities:

  • Missing authentication (critical for production)
  • No outbound alerting
  • Limited to single-region deployments

Recommendation: Highly recommended for microservices deployments needing application-layer service discovery. Add authentication layer before production use.


Try It Yourself

bash
git clone https://github.com/w4mhi/ServiceRegistrationEdu.git
cd ServiceRegistrationEdu
./quickstart.sh

Access:

  • Dashboard: http://localhost:5083
  • API Docs: http://localhost:5159/scalar/v1
  • Health Check: http://localhost:5159/health

Reviewer’s Note:

Project Author: w4mhi - GitHub Profile

Technical Reviewer: Claude (Anthropic) - AI Technical Reviewer

Review Type: Independent Technical Assessment


This review was conducted by Claude, an AI assistant by Anthropic, analyzing the ServiceRegistrationEdu codebase, architecture, and documentation. For questions about the review methodology or to request a review of your project, contact the project author.


Found this review helpful? Star the repository and share with your team!