# Quản Lý Cấu Hình (Configuration Management)

Configuration management patterns for GoodGo microservices including feature flags, dynamic configuration reloading, environment-specific configurations, and secrets management.
> Các patterns quản lý cấu hình cho GoodGo microservices bao gồm feature flags, dynamic configuration reloading, environment-specific configurations, và secrets management.

## Tổng Quan

Configuration management patterns enable flexible, secure, and environment-aware configuration handling with feature flags, dynamic reloading, and secrets management.

Các patterns quản lý cấu hình cho phép xử lý cấu hình linh hoạt, an toàn và nhận biết environment với feature flags, dynamic reloading, và quản lý secrets.

## Khi Nào Sử Dụng

Use this skill when implementing feature flags, managing configurations, or handling secrets.

Sử dụng skill này khi implement feature flags, quản lý configurations, hoặc xử lý secrets.

## Các Patterns Chính

### Configuration Loading Flow / Luồng Tải Cấu Hình

Quá trình tải cấu hình lấy configuration từ nhiều nguồn, validate và hỗ trợ dynamic reloading:

```mermaid
flowchart TD
    Start([Application Startup]) --> LoadConfig[Load Configuration]
    LoadConfig --> FetchSource{Fetch from Source}
    
    FetchSource --> |Environment Variables| EnvVars[Read Env Vars]
    FetchSource --> |Config Files| ConfigFiles[Read JSON/YAML]
    FetchSource --> |Database| Database[Query Config Table]
    FetchSource --> |External Service| ExternalService[Call Config API]
    
    EnvVars --> Validate[Validate with Zod Schema]
    ConfigFiles --> Validate
    Database --> Validate
    ExternalService --> Validate
    
    Validate --> |Valid| StoreConfig[Store in Memory Map]
    Validate --> |Invalid| LogError[Log Validation Error]
    LogError --> ThrowError[Throw Error]
    ThrowError --> End([Application Fails to Start])
    
    StoreConfig --> CheckChange{Value Changed?}
    CheckChange --> |Yes| EmitEvent[Emit 'config-changed' Event]
    CheckChange --> |No| SkipEvent[Skip Event]
    
    EmitEvent --> Ready[Configuration Ready]
    SkipEvent --> Ready
    Ready --> End
    
    Ready --> AutoReload{Auto-Reload Enabled?}
    AutoReload --> |Yes| SetInterval[Set Interval Timer]
    AutoReload --> |No| End
    SetInterval --> Wait[Wait Interval]
    Wait --> LoadConfig
```

### Feature Flag Evaluation Flow / Luồng Đánh Giá Feature Flag

Feature flags hỗ trợ nhiều chiến lược đánh giá bao gồm global flags, user-specific flags, và percentage-based rollouts:

```mermaid
flowchart TD
    Start([Check Feature Flag]) --> GetFlag[Get Flag by Key]
    GetFlag --> FlagExists{Flag Exists?}
    
    FlagExists --> |No| ReturnFalse[Return false]
    ReturnFalse --> End([End])
    
    FlagExists --> |Yes| CheckEnabled{Flag Enabled?}
    CheckEnabled --> |No| ReturnFalse
    
    CheckEnabled --> |Yes| HasUserId{User ID Provided?}
    HasUserId --> |No| ReturnTrue[Return true]
    ReturnTrue --> End
    
    HasUserId --> |Yes| CheckUserSpecific{User-Specific Flag?}
    CheckUserSpecific --> |Yes| MatchUser{User ID Matches?}
    MatchUser --> |Yes| ReturnTrue
    MatchUser --> |No| CheckPercentage
    
    CheckUserSpecific --> |No| CheckPercentage{Percentage Rollout?}
    CheckPercentage --> |No| ReturnTrue
    
    CheckPercentage --> |Yes| HashUser[Hash User ID]
    HashUser --> CalcHash[Calculate Hash % 100]
    CalcHash --> CompareHash{Hash < Percentage?}
    
    CompareHash --> |Yes| ReturnTrue
    CompareHash --> |No| ReturnFalse
```

### Feature Flags / Feature Flags

```typescript
// EN: Check if feature is enabled
// VI: Kiểm tra xem feature có được bật không
const enabled = await featureFlagService.isEnabled('new-feature', userId);
```

### Dynamic Configuration / Configuration Động

```typescript
// EN: Auto-reload configuration
// VI: Tự động tải lại configuration
await configService.load();
configService.startAutoReload(60000);
```

## Best Practices / Thực Hành Tốt

1. Always validate configuration / Luôn validate configuration
2. Never commit secrets / Không bao giờ commit secrets
3. Use feature flags for rollouts / Sử dụng feature flags cho rollouts

## Tài Nguyên

- Skill Source: `.cursor/skills/configuration-management/SKILL.md`
