سرور مجازی

سرور مجازی ایران یا خارج؟ انتخاب بر اساس کاربران و سرویس های پروژه

برای انتخاب سرور مجازی ایران یا خارج دو سوال را جواب بدهید: کاربران شما کجا هستند و برنامه تان به چه سرویس هایی وصل می شود. بعد با چند دستور ساده، پینگ و مسیر شبکه را پیش از خرید اندازه بگیرید.

نوشته تیم فنی پیکوهاستبه روزرسانی: ۲۳ شهریور ۱۴۰۵۱۶ دقیقه مطالعه

انتخاب سرور مجازی ایران یا خارج از کجا شروع می شود

اگر کاربران شما در ایران هستند و برنامه به سرویس خارجی وابسته نیست، سرور مجازی ایران انتخاب ساده تری است. اگر برنامه به API خارجی مثل تلگرام وصل می شود یا مخاطب تان خارج از ایران است، سرور خارج را بگیرید و اگر هر دو نیاز را دارید، کار را بین دو سرور تقسیم کنید.

هر سرور مجازی دو مسیر ارتباطی دارد. در یک مسیر کاربران به سرور وصل می شوند: بازدیدکننده سایت، اپلیکیشن موبایل یا خود شما با SSH. در مسیر دیگر سرور به بیرون درخواست می فرستد، مثلاً به API تلگرام، سرور درگاه پرداخت، مخزن پکیج های لینوکس یا GitHub. محل سرور معمولاً یکی از این دو مسیر را کوتاه تر و دیگری را طولانی تر می کند.

کیفیت سخت افزار و پشتیبانی به خود ارائه دهنده بستگی دارد و در ایران و خارج هر دو، سرویس خوب و ضعیف پیدا می شود. پس پیش از مقایسه پلن ها این سوال ها را درباره پروژه تان جواب بدهید:

  • کاربران یا مشتری ها بیشتر از داخل ایران وصل می شوند، از خارج یا از هر دو؟
  • برنامه به کدام API یا سرویس خارجی درخواست می فرستد و هر چند وقت یک بار؟
  • درگاه پرداخت ایرانی دارید؟ آدرس بازگشت (callback) آن روی کدام سرور است؟
  • به روزرسانی سیستم عامل، پکیج های Python یا PHP و ایمیج های Docker از کجا دانلود می شوند؟
  • اگر ارتباط اینترنت بین الملل چند ساعت مختل شود، کدام بخش کار شما زودتر آسیب می بیند؟

پینگ کاربر تا سرور و تاخیر سرور تا API

سرور داخل ایران برای کاربر ایرانی پینگ کمتری دارد، چون ترافیک از درگاه های ارتباطی بین الملل عبور نمی کند. ولی در برنامه ای که برای جواب دادن به کاربر به API خارجی درخواست می فرستد، تاخیر سرور تا همان API اثر بیشتری روی سرعت دارد.

پینگ زمان رفت و برگشت یک بسته بین دو نقطه است و در هر بازدید از سایت چند بار تکرار می شود: یک بار برای اتصال TCP، یک یا دو بار برای دست دادن TLS و بعد برای درخواست هایی که مرورگر روی همان اتصال می فرستد. سرور مجازی خارج، حتی در کشوری نسبتاً نزدیک، برای کاربر ایرانی از درگاه های بین الملل می گذرد و کیفیت این مسیر در ساعت های پرترافیک شب ممکن است با بقیه روز فرق کند.

فاصله روی نقشه معیار دقیقی نیست، چون مسیر بسته ها به ارتباط اپراتورها با یکدیگر بستگی دارد. عدد پینگی که ارائه دهنده اعلام می کند هم فقط برای مبدأ همان اندازه گیری درست است؛ پینگ را از شبکه کاربران خودتان بگیرید.

ربات تلگرام نمونه خوبی از مسیر دوم است. در ربات معمولی کاربر با سرورهای تلگرام در ارتباط است و به سرور شما وصل نمی شود. تلگرام پیام را با webhook برای ربات می فرستد یا ربات آن را با getUpdates می گیرد و جواب را با درخواست دیگری به API تلگرام برمی گرداند. در نتیجه سرعت پاسخ ربات به فاصله سرور تا تلگرام بستگی دارد و فاصله سرور تا کاربر تقریباً اثری ندارد.

برنامه های وابسته به API خارجی هم همین طورند. اگر هر درخواست کاربر به دو یا سه فراخوانی API خارجی نیاز داشته باشد، تاخیر مسیر تا آن سرویس چند بار روی زمان پاسخ جمع می شود و بهتر است سرور نزدیک API باشد، حتی اگر از کاربر دورتر شود. دیتابیس را هم در همان دیتاسنتر برنامه نگه دارید؛ صفحه ای که ده کوئری پشت سر هم اجرا می کند، با دیتابیسی در کشور دیگر ده بار تاخیر مسیر بین دو کشور را می پردازد.

دسترسی به سرویس ها از IP ایران و IP خارجی

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

سرویس های خارجی روی سرور مجازی ایران

بعضی شرکت های خارجی به دلیل تحریم ها دسترسی از IP ایران را محدود می کنند. این محدودیت ممکن است ثبت نام، دانلود نرم افزار، ایمیج های Docker، مخزن پکیج یا API یک سرویس ابری را شامل شود. فهرست این سرویس ها ثابت نیست و سرویسی که امروز باز است ممکن است بعداً محدود شود. به همین دلیل روی سرور ایران دستورهایی مثل docker pull، pip install یا composer install گاهی خطا می دهند یا خیلی کند اجرا می شوند.

پیش از انتقال اصلی، همه مراحل deploy پروژه را روی سرور تست اجرا کنید، از گرفتن کد از GitHub تا دانلود ایمیج ها و اتصال به سرویس ایمیل.

تلگرام در ایران فیلتر است و سرور داخل ایران معمولاً به API آن دسترسی مستقیم ندارد، برای همین سرور خارج از ایران ساده ترین جا برای ربات تلگرام است. اگر به هر دلیلی هاست یا سرور ربات را در ایران می گیرید، پیش از خرید بپرسید اتصال به api.telegram.org از آن سرور چطور برقرار می شود. معیارهای دیگر، مثل نوع سورس ربات و منابع لازم، در انتخاب هاست ربات تلگرام بر اساس سورس و لوکیشن آمده است.

سرویس های ایرانی روی سرور مجازی خارج

بعضی سایت ها و سامانه های ایرانی درخواست هایی را که از IP خارجی می آید محدود یا مسدود می کنند، گاهی همیشه و گاهی فقط در بعضی دوره ها. اگر برنامه شما از سمت سرور به یک سامانه ایرانی وصل می شود، این اتصال را روی سرور خارج تست کنید.

درگاه پرداخت جایی است که این مشکل بیشتر از همه دیده می شود. درگاه های پرداخت اینترنتی در ایران روی شبکه شاپرک کار می کنند و روند معمولشان این است:

  1. سایت شما از سرور درگاه یک شناسه تراکنش می گیرد و کاربر را به صفحه پرداخت می فرستد.
  2. کاربر پرداخت می کند و مرورگرش به آدرس بازگشت (callback) سایت شما برمی گردد.
  3. سرور شما درخواست تایید (verify) را به سرور درگاه می فرستد و تا جواب مثبت نگیرد سفارش را نهایی نمی کند.

در مرحله اول و سوم، سرور شما مستقیم با سرور درگاه ارتباط دارد. اگر درگاه درخواست IP خارجی را نپذیرد یا این درخواست در زمان اختلال نرسد، ممکن است مبلغ از حساب مشتری کم شود ولی سفارش در سایت تایید نشود. بعضی درگاه ها هم ثبت IP سرور در پنل خودشان را لازم می دانند. پیش از انتخاب محل سرور، مستندات درگاه خودتان را بخوانید یا از پشتیبانی آن بپرسید.

وقتی ارتباط بین الملل مختل می شود

ارتباط اینترنت بین الملل در ایران بارها قطع یا کند شده و مدت و شدت آن از قبل معلوم نبوده است. در این وضعیت یکی از دو حالت زیر برای سرور شما پیش می آید:

  • سرور خارج روشن است و به سرویس های خارجی دسترسی دارد، ولی کاربر داخل ایران به آن نمی رسد یا خیلی کند می رسد.
  • سرور داخل ایران برای کاربران داخلی در دسترس می ماند، ولی ارتباط خودش با سرویس های خارجی قطع یا کند می شود.

فروشگاهی که مشتری ایرانی دارد در حالت اول نمی تواند بفروشد و رباتی که به API تلگرام وابسته است در حالت دوم از کار می افتد. محل سرور را بر اساس بخشی از کار انتخاب کنید که قطع شدنش بیشترین ضرر را دارد.

پرداخت هزینه سرور خارج و اینماد فروشگاه

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

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

فروشگاه اینترنتی برای گرفتن درگاه پرداخت معمولاً به نماد اعتماد الکترونیکی (اینماد) نیاز دارد. شرایط اینماد و درگاه ها گاهی تغییر می کند، پس شرایط جاری را از سایت اینماد و ارائه دهنده درگاه خودتان بخوانید. این توضیح عمومی است و جای مشاوره حقوقی را نمی گیرد.

سرور مجازی ایران یا خارج برای هر نوع پروژه

فروشگاه و سایتی که مخاطب ایرانی و درگاه داخلی دارد روی سرور ایران بهتر کار می کند. ربات تلگرام، برنامه وابسته به API خارجی و سایتی با مخاطب خارج از ایران به سرور خارج نیاز دارند. ستون آخر جدول می گوید پیش از خرید چه چیزی را تست کنید و اگر پروژه تان در دو ردیف جا می گیرد، بخش بعد درباره ترکیب دو سرور است.

نوع پروژهانتخاب پیشنهادیدلیل اصلیقبل از خرید تست کنید
فروشگاه یا سایت خدماتی با مشتری ایرانی و درگاه پرداخت داخلیایرانپینگ کمتر برای کاربران و ارسال درخواست های درگاه از IP ایرانپینگ از چند اپراتور، callback و verify درگاه، دانلود به روزرسانی افزونه ها
سایت خبری یا محتوایی با خواننده ایرانیایرانبیشتر ترافیک داخلی استسرعت باز شدن صفحه از اینترنت همراه و ثابت
ربات تلگرام (Bot API یا MadelineProto)خارجدسترسی به API تلگرامزمان پاسخ api.telegram.org از سرور در چند روز
برنامه وابسته به API یا سرویس ابری خارجیخارجمسیر کوتاه تر تا API و نبودن محدودیت IP ایرانزمان پاسخ API از سرور و اجرای کامل مراحل deploy
سایت یا سرویس با مخاطب خارج از ایرانخارج، نزدیک به مخاطبکاربران از مسیر کوتاه تری وصل می شوندپینگ از کشور مخاطب با کمک یک کاربر یا سرور در همان کشور
CI، build و کار با Dockerخارجدسترسی به مخزن ها و ایمیج هاdocker pull و نصب وابستگی ها
فروشگاه ایرانی که ربات تلگرام هم داردترکیبیهر بخش در جای مناسب خودش اجرا می شودزمان پاسخ API بین دو سرور
فروش هاست به مشتریان دیگرمحل مشتریان هدفمشتری نهایی همان بازدیدکننده سایت استپینگ از شبکه مشتریان هدف
محیط تست یا آموزش لینوکسهر دوتفاوت زیادی نداردپایداری SSH از جایی که کار می کنید

اگر می خواهید به مشتریان دیگر هاست بفروشید، شروع نمایندگی هاست با WHM را هم بخوانید.

سایت روی سرور ایران و ربات روی سرور خارج

فروشگاهی که هم درگاه پرداخت ایرانی دارد و هم ربات تلگرام، می تواند سایت و درگاه را روی سرور ایران و ربات را روی سرور خارج اجرا کند و این دو را با یک API کوچک به هم وصل کند. تقسیم کار بین دو سرور این طور است:

  • سایت، دیتابیس فروشگاه و ارتباط با درگاه روی سرور ایران هستند و callback و verify درگاه از IP ایران انجام می شود.
  • ربات روی سرور خارج اجرا می شود و webhook تلگرام به آن می رسد. طبق مستندات webhook تلگرام، webhook فقط روی پورت های 443، 80، 88 و 8443 پشتیبانی می شود.
  • ربات مستقیم به دیتابیس سرور ایران وصل نمی شود. سایت یک API کوچک با توکن احراز هویت دارد و ربات فقط از طریق HTTPS با آن کار می کند. پورت MySQL باز روی اینترنت خطر امنیتی دارد و هر کوئری را هم از مسیر بین الملل عبور می دهد.
  • وقتی کاربر در ربات خرید می کند، ربات لینک صفحه پرداخت سایت را برایش می فرستد. پرداخت روی سرور ایران تایید می شود و سایت نتیجه را به API ربات خبر می دهد.
  • درخواست های ناموفق بین دو سرور را در صف نگه دارید و دوباره بفرستید تا سفارشی در یک قطعی کوتاه از دست نرود.

هزینه این معماری نگهداری دو سرور است، هر کدام با به روزرسانی و بکاپ جداگانه. برای پروژه کوچکی که درگاه پرداخت ایرانی ندارد، یک سرور خارج ساده تر است. اگر ربات را با Python نوشته اید و پنل مدیریتش با Django است، راه اندازی جنگو و ربات تلگرام پایتون روی cPanel هم به کارتان می آید.

تست پینگ و مسیر شبکه پیش از خرید سرور

پیش از اینکه سرور مجازی ایران یا خارج را برای دوره طولانی بخرید، پینگ و مسیر شبکه را از سمت کاربران و زمان اتصال به سرویس های لازم را از سمت سرور اندازه بگیرید. اگر ارائه دهنده IP تست یا صفحه looking glass ندارد، کوتاه ترین دوره سرویس را بگیرید و روی خود سرور تست کنید. در مثال های زیر به جای 203.0.113.10 آدرس سرور خودتان را بگذارید.

از شبکه کاربران تا سرور

روی لینوکس یا macOS:

ping -c 50 203.0.113.10
mtr -r -w -c 100 203.0.113.10

روی ویندوز:

ping -n 50 203.0.113.10
tracert 203.0.113.10

در خروجی ping لینوکس، دو خط آخر خلاصه نتیجه است. درصد packet loss باید صفر یا خیلی نزدیک به صفر باشد. در خط rtt min/avg/max/mdev عدد avg میانگین تاخیر و mdev پراکندگی آن است. اگر mdev نسبت به avg بزرگ باشد پینگ ناپایدار است و این را در SSH و برنامه های بلادرنگ حس می کنید.

هر ردیف گزارش mtr یکی از روترهای مسیر است. اگر یک ردیف میانی Loss دارد ولی ردیف آخر ندارد، معمولاً آن روتر به بسته هایی که مقصدشان خود روتر است با اولویت پایین یا با محدودیت نرخ جواب می دهد و ترافیک عبوری مشکلی ندارد. Loss وقتی مهم است که تا ردیف آخر ادامه پیدا کند. اگر ICMP در مسیر بسته است، طبق صفحه راهنمای mtr با گزینه -T بسته TCP SYN بفرستید و با -P پورت مقصد را تعیین کنید:

mtr -r -w -T -P 443 -c 100 203.0.113.10

این تست را از اینترنت همراه و ثابت و روی چند اپراتور اجرا کنید، یک بار هم در ساعت های شلوغ شب. اگر کاربرانی روی اپراتورهای مختلف می شناسید، از چند نفرشان هم بخواهید پینگ بگیرند.

از سرور تا سرویس هایی که لازم دارید

روی سرور تست، زمان اتصال به سرویس های مورد نیاز پروژه را بسنجید. دامنه API درگاه پرداخت، سرویس پیامک یا هر API دیگری را که استفاده می کنید به فهرست اضافه کنید:

for u in https://api.telegram.org https://github.com https://deb.debian.org; do
  curl -o /dev/null -s -m 15 \
    -w "$u dns=%{time_namelookup}s connect=%{time_connect}s tls=%{time_appconnect}s total=%{time_total}s code=%{http_code}\n" "$u"
done

همه زمان ها از شروع درخواست حساب می شوند: dns تا پیدا شدن آدرس IP، connect تا برقراری اتصال TCP، tls تا پایان دست دادن TLS و total تا پایان کل درخواست. هر کد سه رقمی مثل 200 یا 302 یعنی سرور مقصد جواب داده و 000 یعنی جوابی نرسیده است.

مراحل واقعی نصب را هم زمان سنجی کنید:

time sudo apt-get update
time docker pull alpine

این اندازه گیری ها را چند روز پشت سر هم و در ساعت های مختلف تکرار کنید و نتیجه ها را کنار هم یادداشت کنید.

ارتباط بین دو سرور در معماری ترکیبی

اگر دو سرور دارید، سرعت و پایداری ارتباط بین آنها را با iperf3 بسنجید. پورت 5201 را فقط برای مدت تست روی فایروال سرور اول باز کنید و بعد ببندید:

# server A
iperf3 -s

# server B
iperf3 -c 203.0.113.10 -t 30
iperf3 -c 203.0.113.10 -t 30 -R

گزینه -R جهت ارسال را برعکس می کند. برای ترافیک API تاخیر و پایداری معمولاً از پهنای باند مهم ترند، پس تست curl را هم از سرور ربات به API سایت اجرا کنید.

سوال هایی که بعد از انتخاب لوکیشن از ارائه دهنده بپرسید

وقتی محل سرور مشخص شد، پیشنهادها را با این جدول مقایسه کنید. هر موردی را که در صفحه فروش نیامده از ارائه دهنده بپرسید و جواب را کتبی بگیرید.

موردچرا مهم استچطور بررسی کنید
مجازی سازی، منابع و سقف I/Oدر KVM هر ماشین مجازی کرنل مستقل دارد، ولی سرعت واقعی به اختصاصی بودن منابع و سقف I/O سرویس هم بستگی داردنوع مجازی سازی و سقف I/O را بپرسید و بعد از تحویل تست کنید
بکاپبکاپی که روی همان میزبان نگه داری شود با خرابی سخت افزار ممکن است از بین برودبپرسید بکاپ با چه فاصله ای و کجا نگه داری می شود و بازگردانی چطور انجام می شود
اسنپ شاتقبل از ارتقای سیستم عامل یا تغییر بزرگ، راه برگشت سریع داریددر پنل دنبال گزینه snapshot بگردید یا بپرسید
سیستم عامل و کنسولاگر با یک قاعده اشتباه فایروال SSH قطع شود، فقط کنسول VNC یا مشابه آن کمک می کندفهرست توزیع ها، امکان نصب مجدد و دسترسی کنسول را بپرسید
ترافیک ماهانهبعد از رسیدن به سقف ترافیک ممکن است سرعت پورت کم شود یا هزینه اضافه داشته باشدسقف ترافیک و اتفاقی را که بعد از آن می افتد بپرسید
IP و DNS معکوسایمیل سروری که رکورد PTR درست ندارد ممکن است رد شود یا به اسپم برودبپرسید تنظیم PTR ممکن است یا نه
ساعت پشتیبانیمشکل ممکن است نیمه شب یا روز تعطیل پیش بیایدساعت پاسخگویی و کانال های پشتیبانی را بپرسید
ارتقااگر ارتقا نصب مجدد لازم داشته باشد، باید سرور را از نو راه اندازی کنیدبپرسید ارتقا چطور انجام می شود و خاموشی دارد یا نه

روش تست دیسک و پردازنده بعد از تحویل، و اینکه سخت افزار روی کدام بارها اثر دارد، در اثر هارد NVMe و رم DDR4 بر سرعت سرور مجازی آمده است.

سرورهای مجازی پیکوهاست در ایران، هلند و فرانسه

مشخصات زیر از صفحه هر سرویس برداشته شده و جزئیات پلن ها در همان صفحه است.

  • سرور مجازی ایران در دیتاسنترهای تهران است. صفحه این سرویس مجازی سازی KVM، منابع اختصاصی، دسترسی Root کامل، هارد NVMe و پورت ۱۰ گیگابیت را ذکر می کند. برای فروشگاه یا سایتی با مشتری ایرانی و درگاه داخلی از این صفحه شروع کنید.
  • سرور مجازی هلند در دیتاسنتری در آمستردام است و مجازی سازی KVM، هارد SSD NVMe و رم DDR4 دارد. طبق صفحه سرویس، منابع بیشتر از ظرفیت فروخته نمی شوند و ارتقا از ناحیه کاربری یا با تیکت انجام می شود. ربات تلگرام و برنامه های وابسته به سرویس خارجی را می توانید روی این سرور اجرا کنید.
  • سرور مجازی فرانسه در دیتاسنتری در فرانسه است و صفحه آن هارد SSD NVMe و رم DDR4 را ذکر می کند.

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