پلتفرم OutSystems یکی از قدرتمندترین محیطهای توسعه نرمافزار به روش Low-Code در مقیاس سازمانی (Enterprise-Grade) است که به تیمهای فناوری اجازه میدهد سامانههای پیچیده وب و موبایل را در کمترین زمان ممکن توسعه و مستقر نمایند. با این حال، در بانکها، شرکتهای بیمه و صنایع مادر که دیتاسنترهای ایزوله و بدون دسترسی به اینترنت دارند، استفاده از سرویسهای Cloud سازنده (OutSystems Cloud / AWS PaaS) به دلیل الزامات حاکمیت داده (Data Sovereignty) مقدور نیست.
در این شرایط، تنها راهکار استاندارد، استقرار نسخه OutSystems Platform Server On-Premises در قالب یک فارم سروری چندلایه (Multi-Server Farm Architecture) است. در این مقاله جامع، طراحی توپولوژی فارم، جداسازی نقشهای Deployment Controller و Front-Endها، پیکربندی صف پیام RabbitMQ، تنظیمات پایگاه داده متمرکز و تثبیت لایسنس دائمی آفلاین تشریح میشود.
۱. توپولوژی معماری چندسروری OutSystems Farm #
یک استقرار سازمانی OutSystems شامل سه لایه مجزا و کامپوننتهای زیر است:
┌─────────────────────────────────────────┐
│ Reverse Proxy / F5 Load Balancer │
│ https://apps.corp.local │
└───────────────────┬─────────────────────┘
│
┌─────────────────────────┴─────────────────────────┐
│ │
▼ ▼
┌───────────────────────┐ ┌───────────────────────┐
│ Front-End Node 1 │ │ Front-End Node 2 │
│ IIS / .NET CLR │ │ IIS / .NET CLR │
│ 192.168.30.21 │ │ 192.168.30.22 │
└───────────┬───────────┘ └───────────┬───────────┘
│ │
├─────────────────────────┬─────────────────────────┤
│ │ │
▼ ▼ ▼
┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│ Deployment Controller │ │ RabbitMQ Message Bus │ │ MSSQL AlwaysOn AG │
│ Service Center / 1CP │ │ Cache Invalidation │ │ Core Databases │
│ 192.168.30.10 │ │ Port: 5672 │ │ (Catalog, Platform) │
└───────────────────────┘ └───────────────────────┘ └───────────────────────┘
تفکیک وظایف سرورها (Server Role Segregation):
۱. Deployment Controller Server (سرور کنترلر):
- وظیفه کامپایل ماژولهای eSpace، تبدیل متادیتا به کدهای استاندارد C# / ASP.NET و اجرای فرآیند 1-Click Publish.
- میزبانی پرتال مدیریتی مرکزی Service Center و کنسول حاکمیت چرخه عمر نرمافزار LifeTime.
- این سرور نباید مستقیماً در معرض ترافیک کاربران نهایی قرار گیرد.
۲. Front-End Execution Servers (سرورهای اجرا):
- میزبانی وبسایتها و وبسرویسهای کامپایلشده روی IIS Application Pools.
- دریافت درخواستهای کلاینتها از پشت لودبالانسر شبکه.
- هر سرور فرانتاند پردازش سبکتری روی حافظه پردازنده برای کامپایل دارد و تمرکز آن بر روی پاسخدهی سریع به درخواستهای HTTP/WebSockets است.
۳. RabbitMQ Messaging Cluster (بستر همگامسازی کش):
- پلتفرم OutSystems برای باطل کردن کشهای حافظه (Cache Invalidation) بین نودهای مختلف فرانتاند به یک Message Broker سبک نیاز دارد. عدم پیکربندی صحیح RabbitMQ باعث میشود کاربری که به Node1 متصل است دادههای تغییریافته توسط کاربر Node2 را مشاهده نکند.
۲. طراحی و پیکربندی کاتالوگ پایگاه داده (Database Catalog Architecture) #
پایگاه داده در OutSystems قلب ذخیرهسازی متادیتا و دادههای بیزنسی است. بهترین الگو در MSSQL، تفکیک کاتالوگها به چهار بخش مستقل جهت مدیریت دسترسی و بهینهسازی I/O دیسک است:
-- ایجاد دیتابیس کاتالوگ اصلی پلتفرم OutSystems
CREATE DATABASE [outsystems_platform]
COLLATE Latin1_General_CI_AI;
GO
-- ایجاد دیتابیس دادههای لاگ رویدادها (تفکیک برای جلوگیری از کاهش سرعت دیتابیس اصلی)
CREATE DATABASE [outsystems_logging]
COLLATE Latin1_General_CI_AI;
GO
-- ایجاد دیتابیس مدیریت چرخه عمر (LifeTime)
CREATE DATABASE [outsystems_lifetime]
COLLATE Latin1_General_CI_AI;
GO
-- تنظیم Flag جهت جلوگیری از Deadlock در تراکنشهای همزمان کامپایل
ALTER DATABASE [outsystems_platform] SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [outsystems_logging] SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [outsystems_lifetime] SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
GO
۳. پیکربندی سرور Controller و ابزار Configuration Tool #
پس از نصب پکیج OutSystems Platform Server بر روی ماشین Controller، ابزار Configuration Tool را اجرا نمایید:
cd "C:\Program Files\OutSystems\Platform Server"
.\ConfigurationTool.exe
تنظیمات حیاتی در تبهای ابزار:
۱. Platform Tab:
- انتخاب Database Engine: SQL Server
- وارد کردن نام سرور یا Listener کلاستر: sql-ag-listener.corp.local
- احراز هویت با کاربر os_admin و زدن دکمه Grant Permissions جهت ایجاد Schemaهای اتوماتیک.
۲. Session State Tab:
- برای محیط چندسروری، جلسه کاربران (User Session) نباید In-Proc باشد. گزینه SQL Server Session Provider را انتخاب نموده و دیتابیس outsystems_session را معرفی کنید تا کاربر با سوییچ بین Front-Endها از برنامه لاگاوت نشود.
۳. Cache Tab (RabbitMQ Configuration):
- تعیین آدرس سرور RabbitMQ: 192.168.30.15
- پورت اتصال: 5672
- کاربر و کلمه عبور تعریفشده در RabbitMQ VHost.
# اسکریپت تایید وضعیت سرویسهای اصلی OutSystems
Get-Service -Name "OutSystems Deployment Service" | Select-Object Name, Status
Get-Service -Name "OutSystems Deployment Controller Service" | Select-Object Name, Status
Get-Service -Name "OutSystems Log Service" | Select-Object Name, Status
۴. استقرار و اتصال Front-End Servers به کلاستر فارم #
روی سرورهای Front-End (مثلاً Node1 و Node2)، نرمافزار Platform Server نصب میشود اما در ویزارد Configuration Tool، تیک گزینه This machine is a Deployment Controller برداشته میشود.
۱. در فیلد Deployment Controller Server، آدرس سرور اصلی 192.168.30.10 وارد میگردد.
۲. پس از اتمام اعمال تنظیمات روی فرانتاند، وارد کنسول وب Service Center به آدرس http://192.168.30.10/ServiceCenter شوید.
۳. به مسیر Administration -> Servers مراجعه کرده و بر روی Add Server کلیک کنید.
۴. نام و IP سرور فرانتاند جدید را ثبت نموده و تست اتصال شبکه را برقرار سازید.
۵. پس از افزوده شدن سرور، فرآیند Publish سراسری برای تکثیر خودکار باینریهای کامپایلشده روی این سرور شروع میشود.
۵. لایسنسینگ آفلاین On-Premises و دور زدن محدودیتهای لایسنس ابری #
پلتفرم رسمی OutSystems در نسخههای سازمانی به مکانیزم شمارش کاربران داخلی (Internal Named Users)، حجم Application Objects (AO) و استعلام لایسنس از سرورهای سازنده متکی است. در زیرساختهای ایزوله داخلی:
۱. کد سختافزاری سرور (Serial Number): در Service Center در صفحه لایسنس یک هش منحصربهفرد بر اساس شناسه ماشینهای Controller و Front-End تولید میشود.
۲. تزریق فایل کلید لایسنس Licentra: بسته سازمانی Licentra با ثبت کدهای سختافزاری تمام گرههای فارم در یک فایل امضاشده دیجیتال، امکان اجرای نامحدود Application Objectها و ساخت تعداد کاربر نامحدود را در حالت ۱۰۰٪ آفلاین فراهم میسازد.
۳. پایداری فرآیند 1-Click Publish: بدون نیاز به ارتباط با اینترنت، کدهای زبان میانی و پکیجهای جاوااسکریپت به درستی ساخته شده و روی تمامی نودهای IIS مستقر میشوند.
# استعلام وضعیت رجیستری و سرویس لایسنس پلتفرم
$regKey = "HKLM:\SOFTWARE\OutSystems\Platform Server"
Get-ItemProperty -Path $regKey -Name "InstallationPath", "Version"
۶. بهینهسازی عملکرد IIS و تنظیمات Application Pool #
برای پشتیبانی از هزاران کاربر همزمان روی پلتفرم سازمانی، تنظیمات زیر روی وبسرور تمامی Front-Endها اعمال گردد:
-
Queue Length: افزایش طول صف استخر برنامه از ۱۰۰۰ به ۵۰۰۰ درخواست جهت جلوگیری از خطای
HTTP 503 Service Unavailable. -
Idle Time-out (minutes): تنظیم روی
0(غیرفعالسازی خاموش شدن Worker Process در زمان بیکاری). -
Recycling Regular Time Interval (minutes): تنظیم بازیافت روزانه در ساعات کمبار (مثلاً ساعت ۰۳:۰۰ بامداد) جهت آزادسازی نشتی حافظه احتمالی برنامههای سنگین.
این معماری، پایداری، سرعت و امنیت کامل اپلیکیشنهای بومی و فرآیندهای سازمانی را بر روی زیرساخت دیتاسنتر داخلی فراهم میآورد.

