۱نمای کلی معماری
نگاهبان یک سامانهٔ رخدادمحور و میکروسرویسی است که در پنج لایه طراحی شده تا هر بخش مستقل توسعه، تست، مقیاس و جایگزین شود.
۲زبانها و فناوری هر لایه
| لایه | زبان / فناوری | نسخه | نقش |
|---|---|---|---|
| بکاند سرویسها | Go + gRPC/REST | 1.22+ | سرویسهای بلادرنگ، همروندی بالا |
| هوش مصنوعی/بینایی | Python + ONNX Runtime + TensorRT | 3.11 / 1.17 | تشخیص و تطبیق چهره، تحلیل رفتار |
| آموزش مدل | PyTorch + OpenCV | 2.x | آموزش و ارزیابی مدلها |
| اپ موبایل | Flutter / Dart | 3.22+ | یک کد برای Android/iOS |
| داشبورد وب | React + TypeScript | 18 / 5 | نقشهٔ زنده، RBAC، بلادرنگ |
| پایگاهداده | PostgreSQL + pgvector + TimescaleDB | 16 | رابطهای + بردار چهره + سریزمانی |
| کش/حضور | Redis | 7+ | presence، geofence، pub/sub |
| گذرگاه پیام | NATS JetStream | 2.10+ | رخدادمحور، تأخیر پایین |
| پردازش ویدئو | GStreamer / FFmpeg | 1.24 / 6 | رمزگشایی سختافزاری، نمونهگیری فریم |
| کانتینر/ارکستراسیون | Docker + Kubernetes | 1.29+ | مقیاس، زمانبندی GPU، rollout |
| شیءذخیره | MinIO (S3) | — | آرشیو ویدئو/کلیپ رخداد On‑Prem |
| مشاهدهپذیری | Prometheus + Grafana + Loki + OpenTelemetry | — | متریک، لاگ و ردیابی |
| مدیریت اسرار | HashiCorp Vault | — | کلید، توکن و گواهی TLS |
۳بکاند و سرویسها — Go
چرا Go؟ بهخاطر همروندی بومی (goroutine/channel)، تأخیر پایین، باینریِ تکفایل و مصرف منابع کم — دقیقاً مناسب سرویسهایی که هزاران رخداد دوربین/حضور را در لحظه پردازش میکنند.
قابلیتها و کتابخانهها
- API: REST با
Gin/Fiberبرای کلاینتها وgRPCبرای ارتباط سرویسبهسرویس (کمحجم و سریع). - همروندی: goroutine و channel برای مصرف موازیِ رخدادها از NATS؛ context برای کنترل timeout و لغو.
- داده:
pgxبرای PostgreSQL،go-redisبرای Redis، الگوی Repository. - احراز هویت: JWT + RBAC، میدلورِ مجوز در سطح هر مسیر.
- پایداری: الگوهای retry، circuit-breaker و idempotency برای رخدادها.
func (s *AttendanceService) Consume(ctx context.Context) { sub, _ := s.nats.Subscribe("face.recognized", func(m *nats.Msg) { var ev FaceEvent json.Unmarshal(m.Data, &ev) // تطبیق با زون مجاز و ثبت حضور if s.zones.Allowed(ev.PersonID, ev.ZoneID) { s.repo.MarkPresence(ctx, ev.PersonID, ev.ZoneID, ev.At) } else { s.alerts.Raise(ctx, Alert{Type: "unauthorized_zone", Ref: ev}) } }) <-ctx.Done(); sub.Unsubscribe() }
۴هوش مصنوعی و بینایی — Python
سرویسهای هوش مصنوعی با Python نوشته میشوند چون اکوسیستم بینایی ماشین در آن بالغ است؛ اما برای استنتاج (inference) مدلها به فرمت بهینه تبدیل و روی GPU اجرا میشوند تا تأخیر حداقلی شود.
اجزای اصلی
- تشخیص چهره: آشکارساز
RetinaFace/SCRFD+ مدل بازنماییArcFaceکه برای هر چهره یک «بردار ویژگی» تولید میکند. - تطبیق هویت: بردار چهره با جستوجوی شباهت در
pgvectorبا گالریِ افراد مجاز مقایسه میشود. - اجرای بهینه: مدلها به
ONNXصادر و باTensorRT (FP16/INT8)روی GPU اجرا میشوند. - تحلیل رفتار: مدلهای دنبالهای/زمانی برای کشف ناهنجاری و «جایگزینی پنهان» نگهبان.
import onnxruntime as ort, numpy as np sess = ort.InferenceSession("arcface.onnx", providers=["TensorrtExecutionProvider", "CUDAExecutionProvider"]) def embed(face_img): emb = sess.run(None, {"input": preprocess(face_img)})[0] return emb / np.linalg.norm(emb) # نرمالسازی بردار # جستوجوی نزدیکترین هویت در pgvector # SELECT person_id FROM gallery ORDER BY embedding <=> $1 LIMIT 1;
۵موبایل و فرانتاند
یک کد برای Android/iOS؛ دسترسی به دوربین، بلوتوث (تگ)، احراز هویت بیومتریک، اعلان فوری و حالت offline-first برای مناطق بدون شبکه.
نقشهٔ تعاملی طبقات، موقعیت زندهٔ نیرو، مدیریت هشدار، گزارشها و کنترل دسترسی مبتنی بر نقش؛ بهروزرسانی زنده با WebSocket.
قابلیتهای کلیدی کلاینت
- بهروزرسانی بلادرنگ رویدادها و موقعیت بدون رفرش (WebSocket/SSE).
- احراز هویت دوعاملی (تگ + چهره) و نقشهای تفکیکشده (مدیر، راهبر، نگهبان).
- طراحی واکنشگرا (Responsive) و پشتیبانی کامل از RTL فارسی.
۶داده، صف و ذخیرهسازی
| مؤلفه | کاربرد دقیق در نگاهبان |
|---|---|
PostgreSQL 16 | دادهٔ رابطهای: افراد، نقشها، زونها، رخدادها، گزارشها. |
pgvector | ذخیره و جستوجوی شباهتِ بردار چهره (شناسایی هویت). |
TimescaleDB | سریزمانیِ موقعیتها و رخدادهای پرتعداد (RTLS، حضور). |
Redis | وضعیت زندهٔ حضور (presence)، geofence، نرخگذاری و pub/sub. |
NATS JetStream | گذرگاه رخداد بین سرویسها با تحویل تضمینشده و بازپخش. |
MinIO (S3) | آرشیو ویدئو و کلیپِ رخداد، کاملاً درونسازمانی. |
۷زیرساخت و DevOps
- کانتینریسازی: هر سرویس یک ایمیج
Dockerبا چنددمرحلهای (multi-stage) و حجم کم. - ارکستراسیون:
Kubernetesبا زمانبندی GPU برای سرویس چهره، مقیاس خودکار (HPA) و rollout تدریجی. - پیکربندی: الگوی GitOps؛ مانیفستها در Git، استقرار خودکار.
- اسرار:
Vaultبرای کلید/توکن؛ هیچ رمزی در کد یا ایمیج نیست. - مشاهدهپذیری: متریک (Prometheus)، داشبورد (Grafana)، لاگ (Loki) و ردیابی توزیعشده (OpenTelemetry).
۸قابلیتهای کلیدی برنامهنویسی
پردازش جریانِ رخداد دوربین/حضور با تأخیر پایین از طریق صف پیام و WebSocket.
سرویسهای مستقل، قابلاستقرار و مقیاسپذیر جدا؛ نسخهبندی API.
اجرای مدل با TensorRT و زمانبندی GPU در Kubernetes.
تطبیق هویت با شباهت بردار چهره در pgvector.
احراز هویت دوعاملی، کنترل دسترسی نقشمحور و رمزنگاری در حال انتقال و سکون.
کارکرد اپ در نبود شبکه و همگامسازی هنگام اتصال.
۹روند توسعهٔ نرمافزار
توسعه بهروش چابک (Agile/Scrum) در اسپرینتهای ۲ هفتهای انجام میشود تا کارفرما در پایان هر اسپرینت خروجی قابلمشاهده ببیند و بازخورد بدهد.
مدیریت نسخه و کد
- گردشکار Git مبتنی بر شاخهی feature و
Pull Requestبا بازبینی اجباری. - پیامهای Commit استاندارد (
Conventional Commits) و نسخهبندی معنایی (SemVer). - شاخهٔ
mainمحافظتشده؛ ادغام فقط پس از سبزشدن CI و تأیید بازبین.
۱۰خط لولهٔ CI/CD
هر تغییر بهصورت خودکار از این مراحل عبور میکند تا فقط کدِ تستشده و امن به تولید برسد:
jobs: build: steps: - run: golangci-lint run # کیفیت کد Go - run: go test ./... -race # تست واحد + رقابت داده - run: docker build -t app . # ساخت ایمیج - run: trivy image app # اسکن آسیبپذیری - run: kubectl rollout restart deploy/app # استقرار تدریجی
۱۱استراتژی تست و کیفیت
| سطح | هدف | ابزار نمونه |
|---|---|---|
| واحد (Unit) | منطق هر تابع/ماژول | go test، pytest، Jest |
| یکپارچه (Integration) | تعامل سرویسها و پایگاهداده | Testcontainers |
| سرتاسری (E2E) | سناریوی کامل کاربر | Playwright، Flutter integration test |
| بار (Load) | پایداری تحت فشار | k6 |
| امنیت | آسیبپذیری کد و وابستگی | SAST/DAST، Trivy |
کیفیت کد با linter و formatter اجباری تضمین میشود: golangci-lint/gofmt برای Go، ruff/black + mypy برای Python، eslint/prettier + tsc برای TypeScript.
۱۲چرخهٔ عمر مدل هوش مصنوعی (MLOps)
۱۳جریان دادهٔ زمان اجرا
مسیر یک رخداد، از فریم دوربین تا هشدار روی داشبورد و موبایل:
RTSP/ONVIF.pgvector و تعیین فرد.NATS.۱۴امنیت و حاکمیت کد
- رمزنگاری: TLS برای انتقال، رمزنگاری در سکون برای دادهٔ حساس.
- دسترسی: RBAC، اصل کمترین امتیاز، ثبت ممیزی (audit log) همهٔ اقدامات حساس.
- اسرار: مدیریت متمرکز با Vault؛ بدون رمز در مخزن کد.
- زنجیرهٔ تأمین: اسکن وابستگیها و ایمیجها، امضای ایمیج، بهروزرسانی منظم.
- حریم خصوصی: استقرار On‑Prem و عدم خروج دادهٔ بیومتریک از محیط مشتری.
۱۵ابزارها و محیط توسعه
| دسته | ابزار |
|---|---|
| کنترل نسخه | Git + مخزن مرکزی، Pull Request، بازبینی کد |
| مدیریت بسته | Go Modules، pip/poetry، pub، npm/pnpm |
| کیفیت کد | golangci-lint، ruff/black/mypy، eslint/prettier/tsc |
| کانتینر/رجیستری | Docker، رجیستری ایمیج خصوصی |
| مدیریت پروژه | برد چابک، ردیابی Issue و اسپرینت |
| مستندسازی | OpenAPI/Swagger برای API، README و سند معماری |