feat: default locale Russian, geo determines language for other countries
- localization-svc: defaultLocale ru, resolveLocale only by geo - web-svc: DEFAULT_LOCALE ru, layout lang=ru, embeddedTranslations fallback ru - countryToLocale: default ru when no country or unknown country Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
108
docs/architecture/05-gaps-and-best-practices.md
Normal file
108
docs/architecture/05-gaps-and-best-practices.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Production checklist и требования
|
||||
|
||||
## 0. Узкие места и митигации
|
||||
|
||||
| Область | Узкое место | Митигация (внедрено/требуется) |
|
||||
|---------|-------------|---------------------------------|
|
||||
| **Пользователь** | Холодный старт 5–30 с | Skeleton, timeout, Retry — см. §8 UI/UX |
|
||||
| **Пользователь** | Загрузка файлов 30–300 с | Прогресс по этапам + кнопка Cancel; pre-upload preview |
|
||||
| **Пользователь** | Гости: история теряется | Предупреждение при закрытии; CTA «Сохранить в аккаунт» |
|
||||
| **Пользователь** | Rate limit 300 Pro Search/день | 429 + предупреждение при 80%; предложение апгрейда |
|
||||
| **Инфраструктура** | SearXNG — единый инстанс | Очередь запросов в search-svc; при росте — пул инстансов |
|
||||
| **Инфраструктура** | cache-worker зависает | `activeDeadlineSeconds` во всех CronJob (5–20 мин) |
|
||||
| **Инфраструктура** | Redis/PostgreSQL без HA | Sentinel/Cluster и Read replica при масштабировании |
|
||||
| **Инфраструктура** | travel-svc без HPA | HPA 1–4 replicas добавлен в 02-k3s-microservices-spec |
|
||||
| **Функции** | Внешние API (LLM, FMP, TA) | Retry + circuit breaker; fallback при частичном сбое |
|
||||
|
||||
## 1. Инфраструктура
|
||||
|
||||
| Компонент | Helm chart | Namespace |
|
||||
|-----------|------------|-----------|
|
||||
| Redis | bitnami/redis | perplexica-infra |
|
||||
| PostgreSQL | bitnami/postgresql | perplexica-infra |
|
||||
| MinIO | bitnami/minio | perplexica-infra |
|
||||
| SearXNG | Deployment | perplexica-infra |
|
||||
|
||||
## 2. Secrets
|
||||
|
||||
- notifications-secrets (vapid_public, vapid_private, smtp_url)
|
||||
- redis-credentials (url)
|
||||
- db-credentials (url)
|
||||
- auth-secrets (jwt_secret)
|
||||
- llm-credentials (openai)
|
||||
- finance-keys (fmp)
|
||||
- travel-keys (tripadvisor)
|
||||
- yookassa-credentials (shop_id, secret)
|
||||
|
||||
## 3. Сетевые политики (NetworkPolicy)
|
||||
|
||||
- Ingress: только из ingress-controller
|
||||
- chat-svc → search-svc, Redis
|
||||
- cache-worker → Redis, discover-svc, finance-svc, travel-svc
|
||||
- Redis, PostgreSQL: без внешнего доступа
|
||||
|
||||
## 4. PodDisruptionBudget
|
||||
|
||||
Минимум 2 доступных пода для: chat-svc, search-svc.
|
||||
|
||||
## 5. Observability
|
||||
|
||||
- Prometheus: метрики `/metrics` из каждого сервиса
|
||||
- Grafana: дашборды
|
||||
- Structured JSON логи
|
||||
- OpenTelemetry/Jaeger: распределённые трейсы
|
||||
- Алерты: latency, error rate, availability
|
||||
|
||||
## 6. Резервирование и масштабирование
|
||||
|
||||
| Область | Решение |
|
||||
|---------|---------|
|
||||
| chat-svc | HPA, кэш по query_hash |
|
||||
| Redis | Sentinel / Cluster при росте |
|
||||
| PostgreSQL | Read replica, PgBouncer |
|
||||
| SearXNG | Очередь запросов в search-svc/media-svc; кэш media; при росте — пул инстансов |
|
||||
| cache-worker | Ограничение concurrency, batch size; `activeDeadlineSeconds` для защиты от зависаний |
|
||||
|
||||
## 7. Безопасность
|
||||
|
||||
- CORS: ограничить Access-Control-Allow-Origin
|
||||
- Rate limiting: API Gateway / Ingress
|
||||
- TLS (cert-manager / Let's Encrypt)
|
||||
- Retry + circuit breaker для внешних API (FMP, Tripadvisor, LLM)
|
||||
|
||||
## 8. UI/UX
|
||||
|
||||
| Компонент | Требование |
|
||||
|-----------|------------|
|
||||
| Discover, Finance, Travel | Skeleton при cold start; timeout; Retry |
|
||||
| Pro/Deep Search | Этапы (Classifier → Researcher → Writer); оценка времени |
|
||||
| Загрузка файлов | Прогресс по этапам: парсинг → chunking → эмбеддинги; кнопка Cancel; timeout 300 с |
|
||||
| Гости | Предупреждение при закрытии; CTA «Сохранить в аккаунт» для переноса истории |
|
||||
| Rate limit | 429 + предупреждение при 80% лимита; предложение апгрейда при достижении лимита |
|
||||
| Ошибки | Сообщение + Retry/Cancel |
|
||||
| Travel Stepper | Сохранение состояния; skeleton между шагами |
|
||||
| Медиа | Skeleton grid; 15 с timeout |
|
||||
|
||||
## 9. Чек-лист развёртывания
|
||||
|
||||
- [ ] Ingress path-based routing
|
||||
- [ ] Probes /health, /ready во всех сервисах
|
||||
- [ ] HPA: chat-svc, search-svc, discover-svc, finance-svc, travel-svc, upload-svc, memory-svc
|
||||
- [ ] Redis, PostgreSQL, MinIO, SearXNG
|
||||
- [ ] Secrets
|
||||
- [ ] TLS
|
||||
- [ ] Rate limiting
|
||||
- [ ] Prometheus + алерты
|
||||
- [ ] Backup PostgreSQL, MinIO
|
||||
- [ ] PDB для chat-svc, search-svc
|
||||
- [ ] Runbook оператора
|
||||
- [ ] UI/UX: skeleton, timeout, rate limit feedback, guest warning, file upload progress+cancel
|
||||
|
||||
## 10. Ссылки (внутри architecture)
|
||||
|
||||
- [04-pages-logic-verification.md §9](./04-pages-logic-verification.md#9-покрытие-фич-perplexity-20252026) — покрытие vs Perplexity 2026
|
||||
- [06-roadmap-specification.md](./06-roadmap-specification.md) — roadmap и спеки фич
|
||||
- [01-perplexity-analogue-design.md](./01-perplexity-analogue-design.md)
|
||||
- [02-k3s-microservices-spec.md](./02-k3s-microservices-spec.md)
|
||||
- [03-cache-and-precompute-strategy.md](./03-cache-and-precompute-strategy.md)
|
||||
- [04-pages-logic-verification.md](./04-pages-logic-verification.md)
|
||||
Reference in New Issue
Block a user