東風
232 posts


Do not use REST + polling + “is it done?” endpoints, use async jobs + webhook/callbacks + idempotency keys. Do not use cron + bash scripts + hope, use a workflow engine (Temporal / Argo Workflows) with retries, timeouts, and history. Do not use “logs in prod” debugging, use distributed tracing + correlation IDs + structured logs. Do not use manual SSH fixes on servers, use immutable deployments (containers/images) + GitOps. Do not use one giant DB for everything, use Postgres for OLTP + a real OLAP store for analytics (ClickHouse/Druid) and keep them separate. Do not use offset pagination at scale, use cursor/keyset pagination with stable ordering. Do not use global mutexes for rate limits, use token bucket with Redis/Lua or a dedicated rate-limit service. Do not use “exactly once” promises to sleep at night, use at-least-once + dedupe keys + idempotent handlers. Do not use Kafka as a queue for retries, use DLQ + retry topics + backoff (or a real queue like SQS) depending on semantics. Do not use “cache everything” reflexively, use caching only with correctness guarantees (TTL + stampede protection + versioned keys). Do not use “one config per env” copied around, use a single config schema + typed validation + runtime reload. Do not use ad-hoc feature flags in code, use a flag service + kill switches + gradual rollouts. Do not use dashboards as your alerting system, use SLOs + error budgets + actionable alerts (not spam). Do not use “k8s will autoscale it” as capacity planning, use load tests + p95/p99 budgets + real headroom math. Do not use “JWT everywhere” blindly, use short-lived access tokens + refresh + revocation strategy (or sessions when you need instant logout). Do not use “one big microservice mesh” to fix architecture, use clear boundaries + contracts + fewer services with better ownership. Do not use “just add more replicas” for DB pressure, use query shaping + indexes + caching + read replicas (in that order).








