بخشهای سیستم توزیعشده (Distributed System Parts)
طراحی سیستم (System Design)
طراحی سیستم یعنی تعریف و طراحی معماری، کامپوننتها، اینترفیسها (API) و دیتابیسها با توجه به نیازهای بیزینس.
احراز هویت و مجوزدهی (Authentication and Authorization)
احراز هویت و مجوزدهی مسئول مدیریت کاربران و دسترسیها به کامپوننتها است.
مثال: میتوان از SSO برای مدیریت متمرکز دسترسیها استفاده کرد.
- مثال: RBAC — کنترل دسترسی مبتنی بر نقش (Role-Based Access Control).
- مثال: ABAC — کنترل دسترسی مبتنی بر ویژگی (Attribute-Based Access Control).
نقطه اعمال سیاست (Policy Enforcement Point - PEP)
نقطه اعمال سیاست مشخص میکند در چه لایهای بررسی دسترسی انجام شود.
- مرحله: سطح API — بررسی ساده و سریع در ورودی API، اما ممکن است برای سطوح کاربری متفاوت نیاز به API جدا باشد.
- مرحله: سطح متد یا هدر — مانند POST/GET و هدرهای شامل scope برای محدودسازی دسترسی.
- مرحله: سطح کانتکست — بررسی محتوای درخواست در لایهٔ کد با استفاده از دادههای سرویس Authorizer یا RBAC.
ابزار: Keycloak نمونهای عملی برای مدیریت هویت و مجوزدهی است.
دروازهٔ API (API Gateway)
دروازهٔ API بهعنوان یک entry point مرکزی وظایفی مانند روتینگ، احراز هویت، مجوزدهی، محدودسازی نرخ، بالانس بار، لاگینگ و مانیتورینگ را انجام میدهد.
نکته: کد 429 در HTTP نشاندهندهٔ Rate Limiting است.
الگوریتم توکن باکت (Token Bucket)
الگوریتم توکن باکت برای اعمال Rate Limiting استفاده میشود؛ در این الگوریتم برای هر کاربر یک باکت توکن در نظر گرفته میشود.
- مثال: باکت ممکن است حداکثر ۱۰ توکن داشته باشد و هر درخواست یک توکن مصرف کند؛ در صورت خالی بودن باید تا بازگشت توکنها منتظر بمانیم.
ابزار: Kong نمونهای از API Gateway است.
ثبت و کشف سرویس (Service Registry and Discovery)
ثبت و کشف سرویس مانند یک دیتابیس است که اطلاعات هر سرویس (آدرس شبکه، وضعیت، metadata) را نگهداری میکند تا دسترسی به سرویسها با نام مشخص امکانپذیر شود.
ابزار: کوبرنتیز این قابلیت را فراهم میکند و ابزارهای دیگری مانند Zookeeper، Consul و Eureka نیز وجود دارند.
الگوی Strangler Fig
الگو: Strangler Fig استراتژی مهاجرت از مونولیت به معماری جدید است که بهصورت تدریجی قسمتهای قدیمی را جایگزین میکند.
الگوی CQRS (Command Query Responsibility Segregation)
الگو: CQRS پیشنهاد میدهد که عملیات نوشتن (Command) از خواندن (Query) جدا شوند.
- مثال: سمت Command میتواند PostgreSQL یا Cassandra باشد.
- مثال: سمت Query میتواند MongoDB، Elasticsearch یا Redis باشد.
خدمات زیرساختی (Infrastructure Services)
پارهای از سرویسهای زیرساختی که در سیستم توزیعشده نیاز داریم در ادامه آمده است.
مدیریت پیکربندی (Configuration Management)
پیشنهاد: یک کانفیگ مرکزی یا والت برای نگهداری مقادیر پیکربندی حیاتی در نظر گرفته شود.
مانیتورینگ و لاگینگ (Monitoring and Logging)
پیشنهاد: از Prometheus و Grafana برای مانیتورینگ و از ELK برای لاگها استفاده شود.
پیامرسانها / باس ایونت / صفها (Message Brokers / Event Bus / Message Queue)
توضیح: این ابزارها برای ارتباط ناهمزمان و معماری رویداد-محور کاربرد دارند.
- مثال: Apache Kafka، RabbitMQ.
بالانسکنندهٔ بار (Load Balancers)
پیشنهاد: از NGINX یا HAProxy بهعنوان Load Balancer استفاده شود.
بررسی سلامت (Health Checking)
پیشنهاد: استفاده از Kubernetes Liveness/Readiness برای بررسی سلامت سرویسها.
ارکستراسیون کانتینر (Container Orchestration)
توضیح: ارکستراسیون مسئول مدیریت کانتینرها، مقیاسپذیری و دیپلوی اتوماتیک است.
- مثال: Kubernetes، Docker Swarm.
شبکهٔ سرویسها (Service Mesh)
توضیح: سرویس مش مسئول قابلیت مشاهده، امنیت و مدیریت ترافیک بین سرویسها است.
ابزار: Consul نمونهای از سرویس مش است.
جدول مقایسهٔ سریع (Queue vs Pub/Sub)
| مورد | کیو (Queue) | پاب/ساب (Pub/Sub) |
|---|---|---|
| حذف پیام پس از مصرف | بله | معمولاً خیر |
| تعداد مصرفکنندهها | یک یا گروه | چندین سابسکرایبر مستقل |
| کاربرد | پردازش کارها | توزیع ایونتها |
پیشنهادات نهایی
اگر میخواهید میتوانم همین محتوا را به فرمت فایل Markdown یا PDF تولید کنم و برای دانلود آماده کنم.