◀بازگشت به پروپوزال اصلی نگاهبان
نگاهبان • سند مهندسی

معماری فناوری، زبان‌ها و روند توسعه

شرح کامل و ریزِ پشتهٔ فنی، قابلیت‌های برنامه‌نویسیِ هر لایه، روند توسعهٔ نرم‌افزار (Agile + CI/CD)، چرخهٔ عمر مدل هوش مصنوعی و جریان دادهٔ زمان اجرا.
GoPythonFlutterReact/TSKubernetesPostgreSQL+pgvectorTensorRT

۱نمای کلی معماری

نگاهبان یک سامانهٔ رخدادمحور و میکروسرویسی است که در پنج لایه طراحی شده تا هر بخش مستقل توسعه، تست، مقیاس و جایگزین شود.

لایه ۱
لبه (Edge)
دوربین IP، اسکنر چهره/اثرانگشت، گیت تردد، تگ و گیت‌وی BLE
لایه ۲
دریافت (Ingestion)
پردازش ویدئو، API Gateway، گیت‌وی RTLS
لایه ۳
پردازش (K8s)
تشخیص چهره (GPU)، حضور/زون، هوش رفتاری، سرویس بلادرنگ
لایه ۴
داده
PostgreSQL، pgvector، TimescaleDB، Redis، MinIO
لایه ۵
کلاینت
اپ موبایل نگهبان، داشبورد وب مدیریتی
چرا میکروسرویس و رخدادمحور؟
هر قابلیت (تشخیص چهره، مکان‌یابی، حضور، هشدار) یک سرویس مستقل است که از طریق گذرگاه پیام با بقیه حرف می‌زند؛ خرابیِ یک سرویس کل سامانه را زمین نمی‌زند و هر سرویس جدا مقیاس می‌گیرد (مثلاً تشخیص چهره روی GPU، مستقل از داشبورد).

۲زبان‌ها و فناوری هر لایه

لایهزبان / فناورینسخهنقش
بک‌اند سرویس‌هاGo + gRPC/REST1.22+سرویس‌های بلادرنگ، هم‌روندی بالا
هوش مصنوعی/بیناییPython + ONNX Runtime + TensorRT3.11 / 1.17تشخیص و تطبیق چهره، تحلیل رفتار
آموزش مدلPyTorch + OpenCV2.xآموزش و ارزیابی مدل‌ها
اپ موبایلFlutter / Dart3.22+یک کد برای Android/iOS
داشبورد وبReact + TypeScript18 / 5نقشهٔ زنده، RBAC، بلادرنگ
پایگاه‌دادهPostgreSQL + pgvector + TimescaleDB16رابطه‌ای + بردار چهره + سری‌زمانی
کش/حضورRedis7+presence، geofence، pub/sub
گذرگاه پیامNATS JetStream2.10+رخدادمحور، تأخیر پایین
پردازش ویدئوGStreamer / FFmpeg1.24 / 6رمزگشایی سخت‌افزاری، نمونه‌گیری فریم
کانتینر/ارکستراسیونDocker + Kubernetes1.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 برای رخدادها.
Go — مصرف‌کنندهٔ رخداد چهره
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 اجرا می‌شوند.
  • تحلیل رفتار: مدل‌های دنباله‌ای/زمانی برای کشف ناهنجاری و «جایگزینی پنهان» نگهبان.
Python — استنتاج و تطبیق چهره
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;
ملاحظهٔ صداقت
دقت تشخیص چهره در شرایط نوریِ خوب بسیار بالاست، اما هوش رفتاری برای بلوغ به دادهٔ واقعیِ انباشته نیاز دارد و در نسخهٔ اول به‌مرور تیون می‌شود.

۵موبایل و فرانت‌اند

📱اپ نگهبان — Flutter
FlutterDartBLEBiometricFCM

یک کد برای Android/iOS؛ دسترسی به دوربین، بلوتوث (تگ)، احراز هویت بیومتریک، اعلان فوری و حالت offline-first برای مناطق بدون شبکه.

🖥️داشبورد — React + TS
React 18TypeScriptWebSocketLeaflet/MapboxRBAC

نقشهٔ تعاملی طبقات، موقعیت زندهٔ نیرو، مدیریت هشدار، گزارش‌ها و کنترل دسترسی مبتنی بر نقش؛ به‌روزرسانی زنده با 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).
استقرار On‑Premise
کل این پشته می‌تواند به‌صورت درون‌سازمانی (روی سرورهای خود مشتری) مستقر شود تا دادهٔ بیومتریک هرگز از محیط خارج نشود — مناسب مراکز حساس.

۸قابلیت‌های کلیدی برنامه‌نویسی

⚡بلادرنگ و رخدادمحور

پردازش جریانِ رخداد دوربین/حضور با تأخیر پایین از طریق صف پیام و WebSocket.

🧩میکروسرویس

سرویس‌های مستقل، قابل‌استقرار و مقیاس‌پذیر جدا؛ نسخه‌بندی API.

🎮استنتاج روی GPU

اجرای مدل با TensorRT و زمان‌بندی GPU در Kubernetes.

🔎جست‌وجوی برداری

تطبیق هویت با شباهت بردار چهره در pgvector.

🔐امنیت و RBAC

احراز هویت دوعاملی، کنترل دسترسی نقش‌محور و رمزنگاری در حال انتقال و سکون.

📴Offline-first موبایل

کارکرد اپ در نبود شبکه و همگام‌سازی هنگام اتصال.

۹روند توسعهٔ نرم‌افزار

توسعه به‌روش چابک (Agile/Scrum) در اسپرینت‌های ۲ هفته‌ای انجام می‌شود تا کارفرما در پایان هر اسپرینت خروجی قابل‌مشاهده ببیند و بازخورد بدهد.

کشف و تحلیل نیازمندی
جمع‌آوری نیاز، نقشهٔ محیط، تعریف معیار پذیرش هر قابلیت.
طراحی معماری و UI/UX
طراحی سرویس‌ها، مدل داده، قرارداد API و نمونهٔ اولیهٔ رابط کاربری.
توسعه در اسپرینت
پیاده‌سازی روی شاخهٔ feature، استانداردهای کد، بازبینی هم‌تیمی (Code Review).
یکپارچه‌سازی پیوسته
هر Pull Request به‌صورت خودکار lint/test/build و اسکن امنیتی می‌شود.
تست و تضمین کیفیت
تست واحد، یکپارچه، E2E و بار؛ رفع نقص پیش از ادغام.
استقرار و بازخورد
انتشار در محیط staging، نمایش به کارفرما، سپس استقرار تولید.
پایش و نگهداری
مانیتورینگ، هشدار، رفع نقص و بهبود مستمر در دورهٔ عملیات.

مدیریت نسخه و کد

  • گردش‌کار Git مبتنی بر شاخه‌ی feature و Pull Request با بازبینی اجباری.
  • پیام‌های Commit استاندارد (Conventional Commits) و نسخه‌بندی معنایی (SemVer).
  • شاخهٔ main محافظت‌شده؛ ادغام فقط پس از سبزشدن CI و تأیید بازبین.

۱۰خط لولهٔ CI/CD

هر تغییر به‌صورت خودکار از این مراحل عبور می‌کند تا فقط کدِ تست‌شده و امن به تولید برسد:

۱
Lint
قالب و کیفیت کد
۲
Test
واحد + یکپارچه
۳
Build
ایمیج Docker
۴
Scan
آسیب‌پذیری و اسرار
۵
Registry
ثبت ایمیج
۶
Deploy
staging ← prod
CI — نمونهٔ گردش‌کار
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)

جمع‌آوری و حاکمیت داده
گردآوری تصویر از دوربین‌ها با رعایت محرمانگی؛ ذخیره در MinIO درون‌سازمانی.
برچسب‌گذاری (Annotation)
آماده‌سازی و برچسب دادهٔ آموزش.
آموزش (Training)
یادگیری انتقالی روی مدل‌های چهره با PyTorch؛ مدل‌های دنباله‌ای برای رفتار.
ارزیابی (Evaluation)
سنجش دقت/فراخوانی و نرخ خطای پذیرش/رد (FAR/FRR).
بهینه‌سازی
صدور به ONNX و کوانتایز با TensorRT (FP16/INT8) برای اجرای سریع روی GPU.
استقرار
ثبت در رجیستری مدل و عرضه به‌صورت سرویس استنتاج.
پایش و بازآموزی
رصد افت دقت/دریفت و بازآموزیِ دوره‌ای با دادهٔ تازه.

۱۳جریان دادهٔ زمان اجرا

مسیر یک رخداد، از فریم دوربین تا هشدار روی داشبورد و موبایل:

دوربین IP
جریان ویدئو با RTSP/ONVIF.
سرویس دریافت ویدئو
رمزگشایی سخت‌افزاری با GStreamer و نمونه‌گیری فریم.
سرویس تشخیص چهره (GPU)
آشکارسازی چهره و تولید بردار با TensorRT.
تطبیق هویت
جست‌وجوی شباهت در pgvector و تعیین فرد.
انتشار رخداد
ارسال رویداد به NATS.
سرویس‌های مصرف‌کننده
حضور/زون/هشدار رویداد را پردازش می‌کنند؛ presence در Redis.
ماندگاری
ثبت در PostgreSQL/Timescale و کلیپ رخداد در MinIO.
اعلان به کلاینت
push زنده به داشبورد (WebSocket) و موبایل (FCM).

۱۴امنیت و حاکمیت کد

  • رمزنگاری: 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 و سند معماری
این سند مهندسی، مکملِ «سند فنی و راهنمای پیاده‌سازی» است و فناوری‌ها و روند توسعهٔ نگاهبان را به‌صورت خلاصه و دقیق شرح می‌دهد. جزئیات پیاده‌سازی پس از عقد قرارداد در مستندات فنی پروژه تکمیل می‌شود.