Құмсалғыштар және қамыр ортасы
TL; DR
Сенімді құмсалғыш = толық оқшаулау, синтетикалық/иесіз деректер, сыртқы жүйелердің шынайы симуляторлары, болжанатын сидтер мен time-travel, кіріктірілген идемпотенттік және вебхукстер, мөлдір лимиттер мен метриктер. Прод - қол жетпейміз, кілттер - ротацияланады, promotion - тек чек-парақтар бойынша.
1) Қоршаған ортаның картасы және олардың рөлдері
Ереже: sandbox ≠ prod. Кез келген байланыс - нақты құралдарға/ойындарға/дербес деректерге қол жеткізбейтін біржақты симуляторлар арқылы.
2) Деректер: синтетика, анонимдеу, отыру
Әдепкі синтетика. Паспорттық/карточкалық деректердің генераторлары, валидті, бірақ қаржылық емес PAN (тест BIN), ставкалар мен баланстардың «тірі» паттерндері.
stage үшін анонимдеу: идентификаторларды токенизациялау, агрегаттар үшін сараланған жекешелендіру, сирек комбинацияларды жою.
Сидтер мен детерминизм: бір команда - бір күй.
bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03
Time-travel: мерзімі ұзартылған/экспирация тестілері үшін жаһандық «сағат».
3) Симуляторлар мен тығындар (stubs)
Төлемдер/банктер/PSP
Auth/Capture/Refund/Payout со сценариями: `approved`, `declined_insufficient`, `3ds_required`, `timeout`, `duplicate`.
PSP вебхуттары: HMAC қол қойған, ретраялары, кідірістері және «лас интернет».
KYC/AML/Sanctions
Ответы: `clear`, `pep_match`, `sanction_hit`, `doc_mismatch`, `manual_review`.
Демпотенттікті және rate limits prod сияқты қолдау.
Ойын провайдерлері/каталогы
Лобби, фичтер, RTP/раундтар - UX-кейстер үшін «төлемдер/сәтсіздіктер» басқаратын жалған кездейсоқ генерация.
Параметр: симулятордың «қатаңдығын» қосқыш (happy-path vs chaos).
4) Құмсалғыштағы вебхактар
HMAC (v1) қолдары, «X-Event-Id», «X-Timestamp» тақырыптары, терезе ≤ 5 минут.
Экспоненциалды backoff, DLQ және replay ретрайлері.
«Қайта жіберу» консолы және әрекеттер логы.
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }
5) Идемпотенттілік және детерминизм
Барлық мутациялар 'Idempotency-Key' деп қабылданады.
Симуляторлар нәтижені кілт бойынша сақтайды (TTL 24-72 сағ).
«Seed-детерминизм»: бір кіру кезінде - бірдей нәтиже (қайталанатын тестілер үшін).
6) Қауіпсіздік және қол жетімділік
Желілерді/VPC оқшаулау, жеке құпиялар мен домендер ('sandbox. example. com`).
RBAC/ABAC: «partner», «qa», «dev» рөлдері, токендер шоғырлары ең аз.
Rate-limits және квоталар: per-tenant/кілттің әділ үлесі, түсінікті '429 '/' Retry-After'.
Тек KMS/Vault құпиялары; тұрақты ротация.
Код/конфига (feature-flag hard block) деңгейінде нақты төлемдерге тыйым салу.
7) API Gateway және sandbox бақылау
Сол саясат: OAuth2/OIDC/JWT, CORS, WAF, DDoS-профиль.
Метриктер: p50/p95/p99, 4xx/5xx, hit-rate лимиттері, latency webhooks, демпотенттік хиттер.
Логи/трейдер: PII-сыз; 'trace _ id' корелляциясы.
Дашборд «Құмсалғыштың денсаулығы»: аптайм, вебхуктардың кезектері, симуляторлардың қателіктері.
8) Фича-жалаулар, нұсқалар және үйлесімділік
sandbox → stage → prod.
SemVer үшін API; Swagger/Redoc құмсалғыштағы Deprecation/Sunset баннері.
Persisted queries үшін GraphQL-витриналар (егер бар болса).
9) CI/CD и promotion
1. Build/Unit →
2. Contract/Mock tests (OpenAPI/Protobuf/GraphQL SDL) →
3. Симуляторларға қарсы интеграциялық →
4. Stage регресс (анон. snapshotlar) →
5. Canary в prod.
Gate-чек-парағы promotion: § 12-ден төмен.
10) Серіктестерге арналған UAT-сценарийлер (құмсалғышта)
Төлемдер: auth/capture/refund/payout веб-хукпен және PSP қателерімен.
KYC/AML: барлық мәртебелер + қолмен эскалация.
Теңсіздік: қайталама 'Idempotency-Key' → сол нәтиже.
Rate-limit: '429' дұрыс өңдеу.
Уақытша терезелер: токендер экспирациясы, 'Retry-After', time-travel кейстері.
Webhooks: қолтаңбалар/ретрайлер/DLQ, қолмен replay және дедуп.
11) Деректер саясаты және құпиялылық
Real PAN/KYC доктарын ешқашан sandbox/stage бағдарламасында сақтамаңыз.
Анонимдеу: жасыру, тікелей сәйкестендіргіштерді жою, синтетикалық корреляция.
TTL регламенттік ≤ вебхук логтары мен денелерін сақтау.
12) Чек парақтары
12. 1 Жаңа құмсалғышты іске қосу
- Оқшауланған желі/база/кэш/нысан сақтау орны
- Құпиялар KMS/Vault бағдарламасында жасалған, рөлдер бойынша қатынау
- PSP/KYC/ойындар симуляторлары жылдам және нұсқаланған
- Swagger/Redoc + Postman жинағы (sandbox endpoints)
- Вебхактар: HMAC, retry, DLQ, console replay
- Rate/Quota бейіндері, Deprecation/Sunset баннерлері (бар болса)
- Дашбордтар мен алерталар (latency, 5xx, 429, DLQ)
12. 2 Promotion release (stage→prod)
- Келісімшарттық diff-тексерулер (breaking жоқ)
- Жүктеме p95/p99 қалыпты stage
- Вебхактар UAT-тан өтті, іспеттілік ок
- Фича-жалаулар дайындалды, қайтару жоспары бар
- Changelog, көші-қон гид және серіктестерге тарату
13) Антипаттерндер
prod-сервистерге/базаларға «жасырын» әсер ететін құмсалғыш.
Нақты карточка/паспорт деректері stage/sandbox.
Вэбхуксыз/ретрасыз симуляторлар - тек қана «бақытты соқпақ».
Төлемдердің/ставкалардың телнұсқаларының болмауы.
Барлық серіктестер үшін бір ортақ HMAC-құпия.
Лимиттер мен мөлдір 429/Retry-After жоқ.
14) Шағын сниппеттер
.env. sandbox (мысал)
dotenv
API_BASE=https://sandbox.api.example.com
OAUTH_ISS=https://sandbox.idp.example.com
PSP_SIM_URL=https://sandbox.psp-sim.example.com
KYC_SIM_URL=https://sandbox.kyc-sim.example.com
WEBHOOK_SECRET_ROTATION_DAYS=90
FEATURE_FORCE_SANDBOX_PAYMENTS=1
OpenAPI фрагменті (sandbox сервері)
yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox
Жалған идемотенттілік коды
pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res
PSP симулятор триггерлері
json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }
15) Бақылау және SLO құмсалғыш
Uptime sandbox API ≥ 99. 5% (интеграция витринасы төмендемеуі тиіс).
Webhooks p95 ≤ 3 қалыпты жүктеме кезінде 2xx дейін.
Error budget 5xx шлюз ≤ 0. 1%.
Док-портал қолжетімді және келісімшартпен үндестірілген.
16) Governance
Қоршаған ортаның иесі (SRE/Platform) және steward API (келісімшарттар).
Breaking-өзгерістер үшін RFC процесі, Deprecation/Sunset күнтізбесі.
Көпшілік құмсалғышы үшін жеке лимиттер/квоталар және «fair-use» прайсингі.
Түйіндеме
Құмсалғыш - бұл «базаның көшірмесі» емес, әзірлеушілер үшін өнім. Қатаң оқшаулауды, синтетикалық деректерді, вебхукпен және ретрамен толыққанды симуляторларды, сидтер мен time-travel арқылы детерминизмді, фича-жалауларды және мөлдір лимиттерді беріңіз. Барлығын келісімшарттармен, бақылаушылықпен және governance-пен байланыстырыңыз - интеграцияларыңыз жылдам, қауіпсіз және болжамды болады, ал релиздеріңіз ауыртпалықсыз болады.