لوگوی سایت
پشتیبانی
لود داده

لندر گو (Lander Go)

در این صفحه با نحوه نصب، پیکربندی و لود پایدار داده از طریق Data Agent لندر گو آشنا می‌شوید.

لندر گو (Lander Go) یک Data Agent سبک، پرسرعت، تاب‌آور و سلف‌هاستد (Self-Hosted) جهت جمع‌آوری و رله داده (Data Ingest Relay) است که با زبان Go توسعه یافته و بر روی سرورهای اختصاصی شما مستقر می‌شود. این سرویس به عنوان دروازه پایدار میان ارسال‌کنندگان داده و انبار داده داده‌لند عمل می‌کند و با بافر دیسکی، خطر مفقودی داده‌ها را در نوسانات ترافیک یا قطعی شبکه برطرف می‌سازد.


ویژگی‌ها و مزیت‌ها

لندر گو با حذف کامل نیاز به راه‌اندازی و نگهداری صف‌های پیام سنگین (مانند Kafka و RabbitMQ)، رویکردی سبک و پایدار را با سازوکارهای زیر ارائه می‌دهد:

  1. استقرار سلف‌هاستد (Self-Hosted): لندر گو مستقیماً روی سرورهای شما مستقر می‌شود و کنترل کامل ترافیک، امنیت داده‌ها، بافر دیسکی و سطح دسترسی را تحت حاکمیت سازمان حفظ می‌کند.
  2. بافر دیسکی پایدار: داده‌های ورودی بلافاصله با سازوکار ثبت گروهی و اجرای fsync روی دیسک ذخیره می‌شوند و پاسخ 202 Accepted با تاخیر چند میلی‌ثانیه‌ای بازمی‌گردد. این مکانیسم از مفقودی رکوردها در صورت قطعی برق یا ری‌استارت سرور جلوگیری می‌کند.
  3. تحمل قطعی شبکه و انبار داده: در صورت قطعی شبکه یا اختلال موقت در انبار داده، لندر گو به دریافت داده‌ها ادامه می‌دهد و آن‌ها را در صف دیسکی نگه می‌دارد. پس از برقراری مجدد ارتباط، داده‌های انباشته به طور خودکار به داده‌لند تخلیه (Drain) می‌شوند.
  4. لود چندجدولی: تمام داده‌ها صرفاً با ارسال به مسیر /ingest/<endpoint_id> دریافت می‌شوند و نیازی به تعریف صف یا مسیر مجزا برای هر جدول نیست:
    • ارسال هم‌زمان: رکوردهای مربوط به جداول گوناگون به صورت تجمیعی در قالب بسته‌های مشترک به داده‌لند ارسال می‌شوند.
    • اندپوینت متمرکز: کلیه سرویس‌ها داده‌های جداول مختلف را تنها به یک سرویس داخلی واحد هدایت می‌کنند.
    • امنیت یکپارچه: تنظیمات شبکه و دسترسی به جای تعریف جداگانه برای هر جدول، به صورت متمرکز روی همین Data Agent مدیریت می‌گردد.
  5. ارسال سرورساید داده‌های کلاینت: ارسال رویدادهای ماژول کلاینت از سمت سرور (Server-Side) منحصراً از طریق لندر گو انجام می‌شود. لندر گو کانتکست‌ها و متادیتای مورد نیاز ماژول کلاینت را ثبت و همراه با رکوردها به داده‌لند منتقل می‌نماید.
  6. ارسال دسته‌ای و تخلیه هوشمند صف: رکوردهای بافر دیسکی در قالب بسته‌های فشرده‌شده Gzip از طریق اندپوینت POST /api/v1/batch ارسال می‌شوند:
    • در ترافیک عادی: داده‌ها حداکثر تا سقف زمانی batch_interval_minutes (پیش‌فرض ۱ دقیقه) تجمیع و سپس ارسال می‌گردند.
    • در پیک ترافیک: با رسیدن صف به سقف ۵۰۰ درخواست یا حجم ۱۰ مگابایت، بسته‌ها بدون معطلی و با وقفه کوتاه (batch_gap_ms) پیاپی تخلیه می‌شوند.
  7. بازیابی خودکار خطا: در صورت بروز خطای کلاینتی (4xx) در ارسال گروهی، سیستم به صورت خودکار با سازوکار بازگشتی (Fallback) به ارسال تکی تغییر وضعیت می‌دهد تا رکوردهای سالم ثبت شده و رکورد معیوب تفکیک شود.
  8. مدیریت ظرفیت و طول عمر داده: سقف حجم دیسک با متغیر max_disk_bytes جهت کنترل فشار معکوس (Backpressure) تنظیم می‌شود تا در صورت پر شدن بافر، خطای 503 Service Unavailable صادر گردد. همچنین مدت نگهداری رکوردهای ارسال‌نشده با متغیر retention_hours (پیش‌فرض ۲۴ ساعت) تعیین می‌شود و رکوردهای قدیمی‌تر به طور خودکار پاک می‌شوند.

نیازمندی‌های سیستمی

لندر گو با حداقل منابع سخت‌افزاری بر اساس جدول زیر اجرا می‌شود:

منبعحداقل مورد نیازحالت پیشنهادی و توضیحات
پردازنده۱ هسته (1 vCPU)برای ترافیک‌های سنگین (چندهزار درخواست در ثانیه)، استفاده از ۲ هسته توصیه می‌شود.
حافظه رم۱ گیگابایتجهت پایداری کانتینر در لودهای سنگین، تخصیص ۲ گیگابایت رم پیشنهاد می‌گردد.
نوع دیسکHDDجهت کاهش تاخیر همگام‌سازی دیسک (fsync)، استفاده از حافظه‌های SSD یا NVMe اکیداً توصیه می‌شود.
فضای دیسک۲۰ گیگابایتمتناسب با حجم ورودی داده و مدت نگهداری در صف (retention_hours) تعیین می‌گردد.

نصب و راه‌اندازی با داکر

ایمیج رسمی لندر گو در داکر هاب با نام dadeland/lander-go:latest منتشر شده است و فرآیند راه‌اندازی آن شامل مراحل زیر است:

نصب داکر روی سرور خام

در صورتی که از یک سرور مجازی خام لینوکسی (Ubuntu یا Debian) استفاده می‌کنید و داکر روی آن نصب نیست، دستورات زیر را برای نصب Docker Engine و پلاگین Docker Compose اجرا نمایید (در صورت نصب بودن داکر از قبل، می‌توانید از این مرحله عبور کنید):

# Update package list & install prerequisites
sudo apt-get update && sudo apt-get install -y ca-certificates curl

# Add official Docker GPG key
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add Docker repository
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker Engine & Docker Compose plugin
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

ایجاد فایل تنظیمات

پیش از راه‌اندازی کانتینر، با اجرای دستورات زیر یک پوشه اختصاصی بسازید و فایل config.yaml را در آن ایجاد نمایید. مقادیر YOUR_SPACE_ID و YOUR_SPACE_TOKEN را با اطلاعات فضای خود در داده‌لند جایگزین کنید. شناسه و توکن فضا از مسیر مدیریت فضا در تب مشخصات فضا قابل کپی هستند (تنها مالک فضا و مدیر فضا به این بخش دسترسی دارند):

# Create project directory and enter it
mkdir -p ~/lander-go && cd ~/lander-go

# Create config.yaml file
cat << 'EOF' > config.yaml
space: "YOUR_SPACE_ID"
token: "YOUR_SPACE_TOKEN"
EOF

راه‌اندازی کانتینر داکر

پس از ایجاد فایل تنظیمات، کانتینر لندر گو را می‌توانید به یکی از دو روش زیر در همان پوشه اجرا نمایید:

# Create docker-compose.yml file
cat << 'EOF' > docker-compose.yml
services:
  lander-go:
    image: dadeland/lander-go:latest
    container_name: lander-go
    restart: unless-stopped
    ports:
      - "80:8080"
    volumes:
      - ./data:/data
      - ./config.yaml:/data/config.yaml:ro
EOF

# Start service in background
docker compose up -d
در صورت بروز اختلال در ارتباط با داکر هاب جهت دانلود ایمیج، می‌توانید از راهکارهایی نظیر تنظیم Registry Mirror یا سرویس‌های تغییر DNS روی سرور استفاده نمایید.

ارتباط مسیرها و پورت‌های داکر با تنظیمات برنامه به شرح زیر است:

  • مسیر کانتینر (سمت راست): مقدار /data متناظر با متغیر data_dir در فایل تنظیمات است.
  • مسیر میزبان (سمت چپ): مقدار ./data پوشه ذخیره‌سازی داده‌ها روی سرور میزبان را تعیین می‌کند.
  • پورت دسترسی: پورت سمت راست (8080) پورت داخلی کانتینر است و پورت سمت چپ (80) پورت شنود سرور میزبان را مشخص می‌سازد (برای تغییر، پورت سمت چپ مانند "9000:8080" ویرایش می‌شود).

دستورات کاربردی

برای ویرایش تنظیمات، مشاهده وضعیت لاگ‌ها، راه‌اندازی مجدد و آپدیت کانتینر لندر گو می‌توانید از دستورات زیر استفاده نمایید:

cd ~/lander-go

# Open config file in nano editor
nano config.yaml

# Or edit with vim
vim config.yaml

تنظیمات پیکربندی

پیکربندی لندر گو از طریق یک فایل با ساختار YAML انجام می‌پذیرد:

نام متغیرنوعپیش‌فرضتوضیحات
spaceرشتهاجباریشناسه فضای کاری شما در داده‌لند (Space ID) را مشخص می‌سازد.
tokenرشته""توکن فضای کاری شما در داده‌لند (Space Token) جهت احراز هویت را تعیین می‌کند.
ingest_tokenرشته""توکن اختیاری جهت محافظت از مسیرهای /ingest است که ارسال هدر Authorization: Bearer <ingest_token> را الزامی می‌سازد.
listen_addrرشته":8080"آدرس و پورت شنود وب‌سرور لندر گو را تعیین می‌نماید.
data_dirرشته"./data"مسیر دایرکتوری محلی جهت ذخیره‌سازی داده‌های بافر دیسکی را مشخص می‌سازد.
batch_interval_minutesعدد1حداکثر فاصله زمانی میان ارسال‌های دسته‌ای به داده‌لند را به دقیقه تعیین می‌کند (حداقل مقدار: ۱).
batch_max_bytesعدد10485760سقف حجم خروجی هر بسته ارسالی به داده‌لند را به بایت تعیین می‌نماید (پیش‌فرض ۱۰ مگابایت است و با تکمیل حجم بسته، ارسال فوری انجام می‌شود).
batch_max_recordsعدد500سقف تعداد درخواست‌های ورودی در هر بسته را مشخص می‌سازد (با رسیدن به ۵۰۰ درخواست، ارسال بدون انتظار برای تایمر انجام می‌شود).
batch_gzipبولینtrueفشرده‌سازی بسته‌های گروهی با الگوریتم Gzip جهت کاهش مصرف پهنای باند را فعال می‌سازد.
batch_concurrencyعدد3حداکثر تعداد بسته‌های ارسالی هم‌زمان (موازی) به داده‌لند را تعیین می‌کند.
batch_gap_msعدد2000وقفه زمانی میان دورهای تخلیه صف را به میلی‌ثانیه جهت کنترل پهنای باند شبکه مشخص می‌سازد.
commit_window_msعدد5بازه زمانی تجمیع درخواست‌ها در حافظه پیش از ثبت گروهی روی دیسک (fsync) را به میلی‌ثانیه تعیین می‌کند.
retention_hoursعدد24مدت نگهداری رکوردهای ارسال‌نشده در صف پیش از حذف خودکار را به ساعت مشخص می‌سازد.
max_disk_bytesعدد0حداکثر حجم مجاز دیسک برای بافر را تعیین می‌کند (مقدار ۰ به معنی نامحدود است و در صورت پر شدن، خطای ۵۰۳ صادر می‌شود).
retry_max_backoff_secondsعدد300حداکثر زمان انتظار میان تلاش‌های مجدد در زمان قطعی ارتباط را به ثانیه مشخص می‌کند (پیش‌فرض ۵ دقیقه).
allowed_originsآرایه[]لیست دامنه‌های مجاز CORS را مشخص می‌نماید (خالی بودن به معنای مجاز بودن همه دامنه‌ها است).
rate_limit_rpsعدد0سقف تعداد درخواست‌های ورودی در ثانیه را کنترل می‌کند (مقدار ۰ این محدودیت را غیرفعال می‌سازد).
max_body_bytesعدد10485760حداکثر حجم مجاز بدنه درخواست POST ورودی به لندر گو را به بایت کنترل می‌کند (پیش‌فرض ۱۰ مگابایت؛ سقف متد GET به طور ثابت ۳۲ کیلوبایت است).
log_levelرشته"info"سطح جزئیات لاگ‌های خروجی را تعیین می‌کند (debug, info, warn, error).
pprof_addrرشته""آدرس و پورت اجرای ابزار Profiling جهت ارزیابی مصرف پردازنده و رم برنامه را مشخص می‌سازد (مانند ":6060").
otel_enabledبولینfalseقابلیت Distributed Tracing از طریق OpenTelemetry را فعال می‌سازد.
otel_endpointرشته""آدرس سرور دریافت‌کننده داده‌های OpenTelemetry (OTLP) را مشخص می‌کند.

نمونه‌های فایل تنظیمات

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

# Minimal configuration for quick start
space: "YOUR_SPACE_ID"
token: "YOUR_SPACE_TOKEN"

ارسال داده

آدرس دریافت رویدادها در این Data Agent از الگوی زیر پیروی می‌کند:

http://<lander-host>/ingest/<endpoint_id>
پورت پیش‌فرض برای دریافت داده‌ها پورت استاندارد ۸۰ است و نیازی به درج شماره پورت در آدرس وجود ندارد. در صورتی که در پیکربندی داکر پورت سمت میزبان را تغییر داده‌اید، باید شماره پورت را در آدرس قید نمایید (مانند: http://<lander-host>:<port>/ingest/<endpoint_id>).

در این رویکرد نیازی به فراخوانی اندپوینت اختصاصی هر جدول در داده‌لند وجود ندارد؛ بلکه تنها کافی است شناسه اندپوینت جدول مقصد را در بخش <endpoint_id> قرار دهید تا لندر گو داده‌ها را به جدول متناظر هدایت نماید. این شناسه از بخش مشخصات جدول در صفحه مدیریت دیتاست قابل دریافت است.

برای ارسال داده‌ها می‌توانید از متد POST (رویکرد پیشنهادی) یا متد GET استفاده کنید؛ همچنین جهت ارسال سرورساید داده‌های ماژول کلاینت و ارتقای امنیت ارتباط، اتصال لندر گو به دامنه و CDN توصیه می‌شود:


کدهای وضعیت پاسخ

کد وضعیتتوضیحات
202 Acceptedداده با موفقیت دریافت گردید و روی بافر دیسکی ذخیره شد.
400 Bad Requestساختار داده ارسالی یا فرمت JSON نامعتبر است.
401 Unauthorizedمتغیر ingest_token فعال است اما هدر احراز هویت ارسال نشده یا مقدار آن نادرست است.
413 Payload Too Largeحجم بدنه درخواست ورودی از سقف مجاز max_body_bytes فراتر رفته است.
503 Service Unavailableحجم صف دیسکی به سقف تعیین‌شده در max_disk_bytes رسیده است یا سرویس در حال خاموش شدن است.

مانیتورینگ و سلامت

لندر گو اندپوینت‌های متعددی را برای بررسی سلامت سرویس، پایش وضعیت صف‌های دیسکی و دریافت متریک‌های استاندارد پرومتئوس ارائه می‌دهد: