aster Server 是一个生产级的 HTTP 服务器实现,提供完整的认证、授权、可观测性和速率限制功能。
┌─────────────────────────────────────────────────────────┐
│ aster Server │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ Handlers │ │ Auth │ │ Observability │ │
│ │ (8 core) │ │ Manager │ │ (Metrics) │ │
│ └─────────────┘ └──────────────┘ └────────────────┘ │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ Routing │ │ RBAC │ │ Tracing │ │
│ │ (Gin-based)│ │ Control │ │ (OpenTelemetry)│ │
│ └─────────────┘ └──────────────┘ └────────────────┘ │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ Middleware │ │ Rate Limiter │ │ Health Check │ │
│ │ Stack │ │ (Token Bucket)│ │ (Enhanced) │ │
│ └─────────────┘ └──────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────┘
server/server.go)主服务器类,管理所有组件的生命周期。
type Server struct {
config *Config
router *gin.Engine
store store.Store
// Auth & Observability
authManager *auth.Manager
rbac *auth.RBAC
metrics *observability.MetricsManager
healthChecker *observability.HealthChecker
tracing *observability.TracingManager
rateLimiter ratelimit.Limiter
}
功能:
server/auth/)完整的认证和授权系统。
// 支持多种认证方法
authManager := auth.NewManager(auth.AuthMethodAPIKey)
// API Key 认证
apiKeyAuth := auth.NewAPIKeyAuthenticator(store)
authManager.Register(apiKeyAuth)
// JWT 认证
jwtAuth := auth.NewJWTAuthenticator(auth.JWTConfig{
SecretKey: "your-secret",
Issuer: "aster",
ExpiryDuration: 24 * time.Hour,
})
authManager.Register(jwtAuth)
rbac := auth.NewRBAC()
// 检查权限
hasPermission := rbac.HasPermission(ctx, user, "agents", "create")
// 预定义角色
// - admin: 完全权限
// - user: 基础 CRUD
// - viewer: 只读
// - developer: 开发者权限
server/observability/)metrics := observability.NewMetricsManager("aster")
// HTTP 指标
aster_http_requests_total{method,path,status}
aster_http_request_duration_seconds{method,path}
// 业务指标
aster_agents_total
aster_sessions_active
aster_workflows_running
tracing, _ := observability.NewTracingManager(observability.TracingConfig{
Enabled: true,
ServiceName: "aster",
OTLPEndpoint: "localhost:4318",
SamplingRate: 1.0,
})
// 自动追踪 HTTP 请求
// 支持 Jaeger, Zipkin, OTLP
healthChecker := observability.NewHealthChecker("v0.11.0")
// 注册自定义检查
storeCheck := observability.NewStoreHealthCheck("store", checkFunc)
healthChecker.RegisterCheck(storeCheck)
// 响应包含详细信息
{
"status": "healthy",
"uptime": "2h30m",
"checks": {
"store": {"status": "healthy", "latency": "5ms"}
}
}
server/ratelimit/)支持两种算法:
limiter := ratelimit.NewTokenBucketLimiter(
rate, // 令牌补充速率
capacity, // 桶容量
window, // 清理窗口
)
limiter := ratelimit.NewSlidingWindowLimiter(
limit, // 请求限制
window, // 时间窗口
)
// 基于 IP 限流
ratelimit.Middleware(config, limiter)
// 基于用户限流
ratelimit.PerUserMiddleware(config, limiter)
// 基于端点限流
ratelimit.PerEndpointMiddleware(config, limiter)
server/handlers/)8 个核心业务 Handler:
agent.go - Agent 管理memory.go - 内存管理session.go - 会话管理workflow.go - 工作流tool.go - 工具管理telemetry.go - 遥测eval.go - 评估mcp.go - MCP 服务器所有 Handler 使用统一模式:
type Handler struct {
store *store.Store
}
func NewHandler(st store.Store) *Handler {
return &Handler{store: &st}
}
func (h *Handler) Create(c *gin.Context) {
// 实现...
}
请求经过以下中间件(按顺序):
config := &server.Config{
Host: "0.0.0.0",
Port: 8080,
Mode: "production",
// 认证
Auth: server.AuthConfig{
APIKey: server.APIKeyConfig{
Enabled: true,
Keys: []string{"your-api-key"},
},
JWT: server.JWTConfig{
Enabled: true,
Secret: "your-jwt-secret",
Expiry: 86400, // 24 hours
},
},
// CORS
CORS: server.CORSConfig{
Enabled: true,
AllowOrigins: []string{"*"},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE"},
},
// 速率限制
RateLimit: server.RateLimitConfig{
Enabled: true,
RequestsPerIP: 100,
WindowSize: time.Minute,
BurstSize: 20,
},
// 可观测性
Observability: server.ObservabilityConfig{
Enabled: true,
Metrics: server.MetricsConfig{
Enabled: true,
Endpoint: "/metrics",
},
Tracing: server.TracingConfig{
Enabled: true,
ServiceName: "aster",
OTLPEndpoint: "localhost:4318",
SamplingRate: 1.0,
},
HealthCheck: server.HealthCheckConfig{
Enabled: true,
Endpoint: "/health",
},
},
}
package main
import (
"github.com/astercloud/aster/pkg/store"
"github.com/astercloud/aster/server"
)
func main() {
// 创建依赖
st, _ := store.NewJSONStore(".aster")
deps := &server.Dependencies{
Store: st,
}
// 创建服务器
srv, _ := server.New(server.DefaultConfig(), deps)
// 启动
srv.Start()
}
config := server.DefaultConfig()
config.Port = 3000
config.Auth.APIKey.Enabled = true
config.Auth.APIKey.Keys = []string{"my-secret-key"}
srv, _ := server.New(config, deps)
srv.Start()
// 监听信号
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
go func() {
if err := srv.Start(); err != nil {
log.Fatal(err)
}
}()
<-sigChan
// 优雅关闭
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := srv.Stop(ctx); err != nil {
log.Printf("Server shutdown error: %v", err)
}
cmd/aster)简化配置,快速启动:
aster serve --port 8080 --mode debug
特点:
cmd/aster-server)完整特性:
export API_KEY=your-secret-key
aster-server
特点:
type CustomHandler struct {
store *store.Store
}
func (h *CustomHandler) Handle(c *gin.Context) {
// 自定义逻辑
}
// 注册路由
srv.Router().GET("/custom", customHandler.Handle)
func customMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// 前置处理
c.Next()
// 后置处理
}
}
srv.Router().Use(customMiddleware())
customCheck := observability.NewSimpleHealthCheck("database", func() error {
return db.Ping()
})
srv.healthChecker.RegisterCheck(customCheck)