docs: initialize project - gateway architecture planning
- Add PROJECT.md with core value and requirements - Add config.json with yolo workflow preferences - Add REQUIREMENTS.md with 18 v1 requirements - Add ROADMAP.md with 5 phases - Add STATE.md with project memory
This commit is contained in:
parent
da4f03502a
commit
b420ca1f1b
82
.planning/PROJECT.md
Normal file
82
.planning/PROJECT.md
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# Fengling Gateway
|
||||||
|
|
||||||
|
## What This Is
|
||||||
|
|
||||||
|
API Gateway based on YARP (Yet Another Reverse Proxy) for the Fengling microservice ecosystem. Routes incoming requests to downstream services (auth-service, member-service, activity, platform, risk-control, etc.) with multi-tenant support, dynamic configuration, and distributed load balancing.
|
||||||
|
|
||||||
|
## Core Value
|
||||||
|
|
||||||
|
Reliable, scalable API gateway that distributes traffic to backend microservices with zero-downtime configuration updates.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
### Validated
|
||||||
|
|
||||||
|
- ✓ Multi-tenant routing based on URL path — existing
|
||||||
|
- ✓ JWT token parsing and tenant claim extraction — existing
|
||||||
|
- ✓ Dynamic route configuration from PostgreSQL — existing
|
||||||
|
- ✓ Service discovery integration with Kubernetes — existing
|
||||||
|
- ✓ Weighted round-robin load balancing — existing
|
||||||
|
- ✓ Configuration hot-reload via PostgreSQL NOTIFY — existing
|
||||||
|
|
||||||
|
### Active
|
||||||
|
|
||||||
|
- [ ] Implement console-driven configuration management (config changes in fengling-console, gateway listens and reloads)
|
||||||
|
- [ ] Support multiple gateway instances via broadcast events (multi-instance deployment)
|
||||||
|
- [ ] Remove K8s health monitoring from gateway (delegate to console)
|
||||||
|
|
||||||
|
### Out of Scope
|
||||||
|
|
||||||
|
- [Direct gateway configuration UI] — Handled by fengling-console
|
||||||
|
- [K8s service health checks in gateway] — Delegated to console
|
||||||
|
- [Authentication/Authorization logic] — Handled by auth-service
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
**Ecosystem Structure:**
|
||||||
|
```
|
||||||
|
fengling-gateway/ # Current project - API Gateway (YARP)
|
||||||
|
↓ routes traffic to:
|
||||||
|
fengling-console/ # Central management console - config, tenant management
|
||||||
|
fengling-console-web/ # Web UI for console
|
||||||
|
fengling-auth-service/ # Authentication service
|
||||||
|
fengling-member-service/ # Member management
|
||||||
|
fengling-activity/ # Activity service
|
||||||
|
fengling-platform/ # Platform service
|
||||||
|
fengling-risk-control/ # Risk control service
|
||||||
|
fengling-service-discovery/# Service discovery
|
||||||
|
```
|
||||||
|
|
||||||
|
**Architecture Decision (New):**
|
||||||
|
- Gateway configuration managed by fengling-console, not directly
|
||||||
|
- Console publishes config changes → Gateway subscribes and reloads
|
||||||
|
- Multi-instance support via broadcast (Redis pub/sub or PostgreSQL NOTIFY)
|
||||||
|
- Console responsible for all K8s service health monitoring
|
||||||
|
- Gateway only handles request routing
|
||||||
|
|
||||||
|
**Current Issues (from CONCERNS.md):**
|
||||||
|
- Hardcoded credentials (security risk)
|
||||||
|
- JWT token not validated (security risk)
|
||||||
|
- API endpoints without authentication (security risk)
|
||||||
|
- Load balancing lock contention
|
||||||
|
- No unit tests
|
||||||
|
|
||||||
|
## Constraints
|
||||||
|
|
||||||
|
- **Multi-instance**: Gateway must support running multiple instances simultaneously
|
||||||
|
- **Hot reload**: Configuration changes without restart
|
||||||
|
- **Tech stack**: .NET 10.0, YARP, PostgreSQL, Redis
|
||||||
|
- **Deployment**: Docker + Kubernetes
|
||||||
|
|
||||||
|
## Key Decisions
|
||||||
|
|
||||||
|
| Decision | Rationale | Outcome |
|
||||||
|
|----------|-----------|---------|
|
||||||
|
| Console-driven config | Centralizes management, single source of truth | ✓ Good |
|
||||||
|
| Broadcast events for multi-instance | Enables horizontal scaling | ✓ Good |
|
||||||
|
| Delegate K8s health to console | Reduces gateway complexity, console is ops hub | ✓ Good |
|
||||||
|
| Keep YARP as core | Well-maintained, Microsoft-supported | ✓ Good |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Last updated: 2026-03-02 after initialization*
|
||||||
90
.planning/REQUIREMENTS.md
Normal file
90
.planning/REQUIREMENTS.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# Requirements: Fengling Gateway
|
||||||
|
|
||||||
|
**Defined:** 2026-03-02
|
||||||
|
**Core Value:** Reliable, scalable API gateway that distributes traffic to backend microservices with zero-downtime configuration updates.
|
||||||
|
|
||||||
|
## v1 Requirements
|
||||||
|
|
||||||
|
Requirements for initial release. Each maps to roadmap phases.
|
||||||
|
|
||||||
|
### Configuration Management
|
||||||
|
|
||||||
|
- [ ] **CFG-01**: Gateway listens to config change events from fengling-console
|
||||||
|
- [ ] **CFG-02**: Gateway reloads configuration without restart when notified
|
||||||
|
- [ ] **CFG-03**: Multi-instance gateway receives config updates via broadcast (Redis pub/sub or PostgreSQL NOTIFY)
|
||||||
|
|
||||||
|
### Multi-Instance Support
|
||||||
|
|
||||||
|
- [ ] **INST-01**: Multiple gateway instances can run simultaneously
|
||||||
|
- [ ] **INST-02**: Configuration changes propagate to all instances
|
||||||
|
- [ ] **INST-03**: Redis-based pub/sub for cross-instance communication
|
||||||
|
|
||||||
|
### K8s Health Delegation
|
||||||
|
|
||||||
|
- [ ] **K8S-01**: Remove K8s health monitoring from gateway
|
||||||
|
- [ ] **K8S-02**: Gateway delegates service health checks to console
|
||||||
|
|
||||||
|
### Security Fixes
|
||||||
|
|
||||||
|
- [ ] **SEC-01**: Remove hardcoded credentials from source code
|
||||||
|
- [ ] **SEC-02**: Implement proper JWT token validation
|
||||||
|
- [ ] **SEC-03**: Add authentication to gateway management API endpoints
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
- [ ] **PERF-01**: Optimize load balancing lock contention
|
||||||
|
- [ ] **PERF-02**: Implement incremental route cache updates
|
||||||
|
|
||||||
|
## v2 Requirements
|
||||||
|
|
||||||
|
Deferred to future release. Tracked but not in current roadmap.
|
||||||
|
|
||||||
|
### Observability
|
||||||
|
|
||||||
|
- **OBS-01**: Distributed tracing integration
|
||||||
|
- **OBS-02**: Custom metrics for gateway performance
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
- **TEST-01**: Unit tests for RouteCache
|
||||||
|
- **TEST-02**: Unit tests for JwtTransformMiddleware
|
||||||
|
- **TEST-03**: Unit tests for load balancing policy
|
||||||
|
|
||||||
|
## Out of Scope
|
||||||
|
|
||||||
|
| Feature | Reason |
|
||||||
|
|---------|--------|
|
||||||
|
| Direct gateway configuration UI | Handled by fengling-console |
|
||||||
|
| K8s service health checks in gateway | Delegated to console |
|
||||||
|
| Authentication logic in gateway | Handled by auth-service |
|
||||||
|
| Authorization logic in gateway | Handled by downstream services |
|
||||||
|
|
||||||
|
## Traceability
|
||||||
|
|
||||||
|
Which phases cover which requirements. Updated during roadmap creation.
|
||||||
|
|
||||||
|
| Requirement | Phase | Status |
|
||||||
|
|-------------|-------|--------|
|
||||||
|
| CFG-01 | Phase 1 | Pending |
|
||||||
|
| CFG-02 | Phase 1 | Pending |
|
||||||
|
| CFG-03 | Phase 1 | Pending |
|
||||||
|
| INST-01 | Phase 1 | Pending |
|
||||||
|
| INST-02 | Phase 1 | Pending |
|
||||||
|
| INST-03 | Phase 1 | Pending |
|
||||||
|
| K8S-01 | Phase 2 | Pending |
|
||||||
|
| K8S-02 | Phase 2 | Pending |
|
||||||
|
| SEC-01 | Phase 3 | Pending |
|
||||||
|
| SEC-02 | Phase 3 | Pending |
|
||||||
|
| SEC-03 | Phase 3 | Pending |
|
||||||
|
| PERF-01 | Phase 4 | Pending |
|
||||||
|
| PERF-02 | Phase 4 | Pending |
|
||||||
|
|
||||||
|
**Coverage:**
|
||||||
|
- v1 requirements: 12 total
|
||||||
|
- Mapped to phases: 12
|
||||||
|
- Unmapped: 0 ✓
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Requirements defined: 2026-03-02*
|
||||||
|
*Last updated: 2026-03-02 after initial definition*
|
||||||
106
.planning/ROADMAP.md
Normal file
106
.planning/ROADMAP.md
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
# Roadmap: Fengling Gateway
|
||||||
|
|
||||||
|
**Created:** 2026-03-02
|
||||||
|
**Core Value:** Reliable, scalable API gateway that distributes traffic to backend microservices with zero-downtime configuration updates.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 1: Console-Driven Configuration & Multi-Instance Support
|
||||||
|
|
||||||
|
**Goal:** Implement console-driven configuration management and multi-instance support.
|
||||||
|
|
||||||
|
**Requirements:**
|
||||||
|
- CFG-01: Gateway listens to config change events from fengling-console
|
||||||
|
- CFG-02: Gateway reloads configuration without restart when notified
|
||||||
|
- CFG-03: Multi-instance gateway receives config updates via broadcast
|
||||||
|
- INST-01: Multiple gateway instances can run simultaneously
|
||||||
|
- INST-02: Configuration changes propagate to all instances
|
||||||
|
- INST-03: Redis-based pub/sub for cross-instance communication
|
||||||
|
|
||||||
|
**Success Criteria:**
|
||||||
|
1. Gateway can subscribe to config change events from console
|
||||||
|
2. Configuration reload works without gateway restart
|
||||||
|
3. Multiple gateway instances stay synchronized
|
||||||
|
4. Broadcast events reach all instances within 5 seconds
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 2: K8s Health Delegation
|
||||||
|
|
||||||
|
**Goal:** Remove K8s health monitoring from gateway, delegate to console.
|
||||||
|
|
||||||
|
**Requirements:**
|
||||||
|
- K8S-01: Remove K8s health monitoring from gateway
|
||||||
|
- K8S-02: Gateway delegates service health checks to console
|
||||||
|
|
||||||
|
**Success Criteria:**
|
||||||
|
1. KubernetesPendingSyncService is deprecated/removed from gateway
|
||||||
|
2. Health check logic moved to console project
|
||||||
|
3. Gateway only performs request routing, not health monitoring
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 3: Security Hardening
|
||||||
|
|
||||||
|
**Goal:** Fix critical security vulnerabilities.
|
||||||
|
|
||||||
|
**Requirements:**
|
||||||
|
- SEC-01: Remove hardcoded credentials from source code
|
||||||
|
- SEC-02: Implement proper JWT token validation
|
||||||
|
- SEC-03: Add authentication to gateway management API endpoints
|
||||||
|
|
||||||
|
**Success Criteria:**
|
||||||
|
1. No hardcoded passwords/secrets in source code
|
||||||
|
2. JWT tokens are validated (signature, expiration, issuer, audience)
|
||||||
|
3. All /api/gateway/* endpoints require authentication
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 4: Performance Optimization
|
||||||
|
|
||||||
|
**Goal:** Optimize gateway performance under high load.
|
||||||
|
|
||||||
|
**Requirements:**
|
||||||
|
- PERF-01: Optimize load balancing lock contention
|
||||||
|
- PERF-02: Implement incremental route cache updates
|
||||||
|
|
||||||
|
**Success Criteria:**
|
||||||
|
1. Load balancing does not require per-request Redis lock
|
||||||
|
2. Route cache updates are incremental, not full reload
|
||||||
|
3. Gateway handles 10x more requests per second
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 5: Observability & Testing
|
||||||
|
|
||||||
|
**Goal:** Add observability and test coverage.
|
||||||
|
|
||||||
|
**Requirements:**
|
||||||
|
- OBS-01: Distributed tracing integration
|
||||||
|
- OBS-02: Custom metrics for gateway performance
|
||||||
|
- TEST-01: Unit tests for RouteCache
|
||||||
|
- TEST-02: Unit tests for JwtTransformMiddleware
|
||||||
|
- TEST-03: Unit tests for load balancing policy
|
||||||
|
|
||||||
|
**Success Criteria:**
|
||||||
|
1. Distributed traces include gateway spans
|
||||||
|
2. Key metrics are exported (request count, latency, error rate)
|
||||||
|
3. Core components have >80% test coverage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Roadmap Summary
|
||||||
|
|
||||||
|
| Phase | Name | Requirements | Status |
|
||||||
|
|-------|------|--------------|--------|
|
||||||
|
| 1 | Console-Driven Config & Multi-Instance | 6 | Not planned |
|
||||||
|
| 2 | K8s Health Delegation | 2 | Not planned |
|
||||||
|
| 3 | Security Hardening | 3 | Not planned |
|
||||||
|
| 4 | Performance Optimization | 2 | Not planned |
|
||||||
|
| 5 | Observability & Testing | 5 | Not planned |
|
||||||
|
|
||||||
|
**Total:** 5 phases | 18 requirements | All covered ✓
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Last updated: 2026-03-02 after roadmap creation*
|
||||||
75
.planning/STATE.md
Normal file
75
.planning/STATE.md
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# State: Fengling Gateway
|
||||||
|
|
||||||
|
**Last Updated:** 2026-03-02
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Reference
|
||||||
|
|
||||||
|
See: .planning/PROJECT.md (updated 2026-03-02)
|
||||||
|
|
||||||
|
**Core value:** Reliable, scalable API gateway that distributes traffic to backend microservices with zero-downtime configuration updates.
|
||||||
|
|
||||||
|
**Current focus:** Phase 1: Console-Driven Configuration & Multi-Instance Support
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project State
|
||||||
|
|
||||||
|
| Item | Status |
|
||||||
|
|------|--------|
|
||||||
|
| PROJECT.md | ✓ Initialized |
|
||||||
|
| config.json | ✓ Created |
|
||||||
|
| Requirements | ✓ Defined (18 requirements) |
|
||||||
|
| Roadmap | ✓ Created (5 phases) |
|
||||||
|
| Research | Not started (auto mode skipped) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase Status
|
||||||
|
|
||||||
|
| Phase | Name | Status | Plans | Progress |
|
||||||
|
|-------|------|--------|-------|----------|
|
||||||
|
| 1 | Console-Driven Config & Multi-Instance | Not planned | 0 | 0% |
|
||||||
|
| 2 | K8s Health Delegation | Not planned | 0 | 0% |
|
||||||
|
| 3 | Security Hardening | Not planned | 0 | 0% |
|
||||||
|
| 4 | Performance Optimization | Not planned | 0 | 0% |
|
||||||
|
| 5 | Observability & Testing | Not planned | 0 | 0% |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Accumulated Context
|
||||||
|
|
||||||
|
### Initialization
|
||||||
|
|
||||||
|
- **2026-03-02:** Project initialized via /gsd-new-project --auto
|
||||||
|
- Brownfield project with existing codebase (ARCHITECTURE.md, CONCERNS.md, STACK.md existed)
|
||||||
|
- User provided context: gateway architecture discussion with focus on console-driven config
|
||||||
|
|
||||||
|
### Key Decisions
|
||||||
|
|
||||||
|
| Decision | Date | Notes |
|
||||||
|
|----------|------|-------|
|
||||||
|
| Console-driven config | 2026-03-02 | Config changes in fengling-console, gateway listens |
|
||||||
|
| Multi-instance via broadcast | 2026-03-02 | Redis pub/sub or PostgreSQL NOTIFY |
|
||||||
|
| K8s health delegation | 2026-03-02 | Console handles K8s health, not gateway |
|
||||||
|
|
||||||
|
### Roadmap Evolution
|
||||||
|
|
||||||
|
- Phase 1 added: Console-Driven Configuration & Multi-Instance Support
|
||||||
|
- Phase 2 added: K8s Health Delegation
|
||||||
|
- Phase 3 added: Security Hardening
|
||||||
|
- Phase 4 added: Performance Optimization
|
||||||
|
- Phase 5 added: Observability & Testing
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Auto mode: research skipped, workflow preferences set to yolo
|
||||||
|
- Config changes should be committed to git (commit_docs: true)
|
||||||
|
- gsd-tools.cjs not available - project structure created manually
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Last updated: 2026-03-02 after initialization*
|
||||||
13
.planning/config.json
Normal file
13
.planning/config.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"mode": "yolo",
|
||||||
|
"depth": "standard",
|
||||||
|
"parallelization": true,
|
||||||
|
"commit_docs": true,
|
||||||
|
"model_profile": "balanced",
|
||||||
|
"workflow": {
|
||||||
|
"research": false,
|
||||||
|
"plan_check": false,
|
||||||
|
"verifier": false,
|
||||||
|
"auto_advance": true
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user