Skip to content

Latest commit

 

History

History
101 lines (71 loc) · 36.5 KB

Miscellaneous.md

File metadata and controls

101 lines (71 loc) · 36.5 KB

مجوز ها

‫کلمه لایسنس در لغت به معنای پروانه یا مجوز است و نشان دهنده‌ی اجازه رسمی برای مالکیت یا استفاده از ابزار مورد نظر می‌باشد. License در علم كامپيوتر به معناي مجوز استفاده از يك نرم‌افزار يا سخت‌افزار مي‌باشد. در صورتی که اگر از لایسنس معتبر بر روی نرم‌افزار مورد نظر مانند ویندوز استفاده نمایید، از امنیت بیشتر و همچنین ارائه تسهیلات از جمله دریافت Update از شرکت مقابل می‌باشید. براي توليد نرم‌افزار معمولا هزينه‌هايي توسط سازنده آن نرم‌افزار مصرف مي‌شود. افراد يا شركت‌هاي تهيه كننده اين نرم‌افزارها پس از توليد محصول براي دريافت مزد زحمات خود در قبال استفاده ديگران از اين نرم‌افزار از آن‌ها درخواست پرداخت هزينه مي‌كنند. براي دريافت اين هزينه معمولا مجوزي صادر مي‌شود كه تنها افرادي كه هزينه مربوطه را پرداخت كرده باشند مجاز به استفاده از نرم‌افزار باشند. اين مجوز را اصطلاحا لایسنس  و یا اجازه‌نامه مي‌گويند. اجازه نامه علاوه بر دريافت هزينه براي صدور مجوز ممكن است درخواست‌های ديگری از كاربر داشته باشد . به عنوان مثال ممكن است Grant License يك نرم‌افزار تنها به كاربرانی داده شود كه توان و مهارت‌های لازم در استفاده از آن را داشته باشند. طبق قوانين بين المللي استفاده از نرم‌افزارهايی كه دارای پروانه مي‌باشند، تنها با تهيه جواز آن امكان‌پذير بوده و در صورت امتناع از انجام اين كار فرد متخلف مورد پيگرد قانونی قرار خواهد گرفت. البته با توجه به اینکه در کشورهای جهان سوم از جمله ایران که حق کپی رایت رعایت نمی‌شود، می‌توان از نرم‌افزارهای crack که در اینترنت می‌باشد استفاده کرد، البته منظور از کرک همان شکستن قفل لایسنس می‌باشد، که بدون پرداخت هزینه می‌توان ازآن محصول استفاده کرد، مانند انوع نسخه نصب ویندوز که در ایران کرک آن نصب می‌گردد.‬ ‫لایسنس ها دارای انواع متعددی هستند که عبارتند از:‬

  • لایسنس زمان دار
  • لایسنس مادام العمر

لایسنس زمان دار

‫این لایسنس‌ها بیشتر برای آنتی ویروس‌ها به کار می‌روند. مشتری پس از خرید این لایسنس‌ها برای مدت معینی برای مثال 365 روز می‌تواند از نرم‌افزار استفاده نماید و پس از آن باید دوباره یک سریال جدید را خریداری نماید.‬

لایسنس مادام العمر

‫این لایسنس‌ها پس از ثبت‌نام در نرم‌افزار برای همیشه یک نسخه از نرم‌افزار را فعال می‌نمایند. و تا نسخه بعدی نیازی به هیچگونه هزینه دیگری ندارند.‬

نرم‌افزارهای رایگان

‫‫نرم‌افزار یکی از بخش‌های اساسی کامپیوتر به شمار می‌آید. که در واقع سخت‌افزار کامپیوتر را به کار می‌گیرد. بعبارت دیگر رابط بین کاربر و سخت‌افزار را نرم‌افزار می‌نامند.  نرم‌افزار در حقیقت روح و جان یک کامپیوتر است که به سخت‌افزار هویت می‌بخشد. نرم‌افزار‌ها انواع مختلفی دارند، که از مشهورترین آن‌ها نرم‌افزار‌های سیستمی و کاربردی را می‌توان نام برد. سیستم عامل مشهورترین نوع نرم‌افزارهای سیستمی می‌باشد. که مدیریت منابع سیستمی را بر عهده دارد. سیستم عامل همچنین ارتباط بین کاربر و اجزاء سخت‌افزاری و نرم‌افزاری دیگر را برقرار می‌کند. همانطور که می‌دانیم نرم‌افزاها دارای دو دسته هستند 1) نرم افزارهای دارای مجوز 2) نرم‌افزارهای ازاد. در قسمت قبل با نرم‌افزارهای دارای مجوز اشنا شدید در ادامه به معرفی نرم‌افزارهای آزاد می‌پردازیم.‬ ‫نرم‌افزار آزاد (Free Software) به نرم‌افزاری اطلاق می‌شود که به کاربران اجازه می‌دهد آن را با هر هدفی اجرا، بررسی و مطالعه، تغییر (بهبود قابلیت‌ها و امکانات) و حتی توزیع نمایند. به عبارت بهتر، منظور از واژه Free در این اصطلاح، رایگان بودن قیمت یک نرم‌افزار نیست. بلکه منظور Freedom یا Liberty (آزادی) است به این معنا که کاربر می‌تواند هرکاری با نسخه‌ی خودش از این نرم‌افزار انجام دهد. به عنوان نمونه حتی بدون نیاز به کسب اجازه از ناشر یک نرم افزار آزاد، می‌توانید برای ارائه‌ی خدمات مرتبط با آن وجهی را از مشتریان خودتان دریافت نمایید و یا قابلیت‌های جدیدی به آن اضافه کرده و به صورت رایگان یا غیر رایگان منتشر کنید. بنابراین نباید این اصطلاح با مفهوم رایگان افزار (Freeware) اشتباه گرفته شود.‬ زمانی که سخن از آزادی مطالعه، تغییر و توزیع مجدد نرم‌افزارهای آزاد به میان می‌آید، بالطبع موضوع منبع باز بودن آن‌ها نیز مطرح می‌شود چرا که بدون دسترسی به سورس کد، این آزادی‌ها در عمل به موضوعی دشوار یا تقریبا غیرممکن تبدیل می‌شود. ‫‫پیشگامان متن‌باز تعریفی از نرم‌افزار متن‌باز در ۹ عبارت ارائه داده‌اند:‬

  • نرم‌افزار باید بدون نیاز به حق امتیاز یا هرگونه پرداختی برای فروش، امکان توزیع به صورت آزاد را داشته باشد.‬
  • ‫کد منبع باید در دسترس باشد؛ اگر توزیع نرم‌افزار شامل کد منبع نیست، برنامه‌نویس باید بتواند نرم‌افزار را به‌راحتی پیدا کند، تا امکان تغییر آنرا داشته باشد. (برای مثال از یک صفحه‌ی وب، قابل download باشد)
  • همچنین اعمال تغییرات و کارهای بعدی روی برنامه امکان‌پذیر باشد و این برنامه‌های جدید را باید بتوان تحت همان شرایط برنامه‌ی اولیه و نرم‌افزار اصلی تکثیر کرد.‬
  • نگهداری تمامیت کد منبع اولیه، چه با نیاز به تغییر جهت توزیع به عنوان فایل‌های وصله‌ای، و چه با نیاز به وجود نگارش‌های متفاوت، ممکن باشد.‬
  • ‫هیچگونه تبعیض و تمایزی بین اشخاص و گروه‌ها وجود نداشته باشد.‬
  • ‫هیچگونه تبعیض و تمایزی بین هر فعالیتی که در راستای نرم‌افزار انجام می‌گیرد، وجود نداشته باشد.‬
  • ‫اجازه‌نامه باید به هر کسی که یک کپی از برنامه را دریافت می‌کند، نیز اختصاص یابد؛ بدون اینکه آن‌ها نیاز به توافق و هماهنگی با اجازه‌نامه‌ی دیگری داشته باشند.‬
  • ‫اجازه‌نامه نباید به محصول یا توزیع خاصی اختصاص داشته باشد.‬
  • ‫اجازه‌نامه، نباید به دیگر نرم‌افزارهایی که در طول پروژه‌ی مجوزگرفته‌ی جاری، توزیع و تکثیر شده‌اند، تعلق بگیرد.‬ ‫سازمان OSI فهرستی از اجازه‌نامه‌های مصوب را در سایت http://www.opensource.org/license دارد. در سپتامبر سال ۲۰۰۳، OSI فهرست حدود ۴۵ مجوز متن‌باز و FSF تعداد ۵۶ مجوز آزاد را منتشر کردند. اغلب این‌ها، مثلاً GNUGPL و GNU Library یا LGPL در هر دو لیست وجود داشتند. GPL/LGPL محبوب‌ترین اجازه‌نامه‌های نرم‌افزارهای متن‌باز/آزاد هستند.‬

رابط دودویی نرم‌افزار ABI

‫رابط دودویی نرم‌افزار یا Application Binary Interface، یک رابط سطح-پایین بین برنامه رایانه‌ای و سیستم عامل یا یک نرم‌افزار دیگر ایجاد می‌نماید.‬ ‫رابط دودویی نرم‌افزار می‌تواند شامل موارد زیر باشد:‬ ‫•نوع داده، هم ترازی، اندازه‬ ‫•اندازه‌ها، پوسته‌ها و تراز‌ها از انواع داده‌های اساسی که پردازنده می‌تواند به طور مستقیم دسترسی داشته باشد.‬ ‫•قرارداد فراخوانی، که کنترل نحوه توزیع آرگومان‌ها و ارقام بازگشت را بازیابی می‌کند، برای مثال: آیا همه پارامترها به stack منتقل می‌شود یا تعدادی در registers، ذخیره گردیده‌اند، کدام registers برای کدامیک از پارمترهای تابع استفاده شده‌است، و آیا اولین پارامتر تابع وارد شده به stack آیا اول واردstack شده یا آخر.‬ ‫•چگونه یک برنامه کاربردی باید یک فراخوان سیستمی را از سیستم عامل صدا کند. آیا باید یک رابط کاربری دودویی بجای فراخوانی روال‌ها به فراخوان‌های سیستمی، مستقیماً یک فراخوان سیستمی را صدا نماید، کدام فراخوان سیستمی با چه شماره‌ای.‬ ‫•و در حالت تکمیل یک رابط دودویی نرم‌افزار با سیستم عامل، کدام قالب پرونده‌ای بر مبنای دودویی برای آبجکت‌فایل‌ها، کتابخانه‌ها و غیره مورد استفاده قرار خواهد گرفت.‬

رابط کاربردی برنامه نویسی API

‫رابط کاربردی برنامه‌نویسی مخفف واژگان Application Programming Interface است که به صورت تحت‌الفظی می‌توان آن را به «رابط برنامه‌نویسی نرم‌افزار» ترجمه کرد. به طور خلاصه، API مجموعه‌ای از روش‌های تعریف شده و شفاف به منظور ارتباط بین اجزای مختلف نرم‌افزار می‌باشد. یک API خوب با فراهم کردن سنگ بناهای لازم، توسعه یک نرم‌افزار کامپیوتری را آسان‌تر می‌کند. یک API می‌تواند برای یک سیستم تحت وب، سیستم عامل، سیستم بانک اطلاعاتی، سخت‌افزار کامپیوتر و یا کتابخانه نرم‌افزار طراحی شده باشد. مشخصات API می‌تواند شکل‌های مختلفی داشته باشد اما این مشخصات اغلب شامل روال‌ها، ساختمان داده‌ها، دسته‌های اشیا، متغیر‌ها یا دستورات فراخوانی می‌باشد. POSIX، C + + Standard Template Library، Microsoft Windows API و Java API مثال‌هایی از حالت‌های مختلف API هستند. معمولا مستند‌سازی نیز برای API‌ها ارائه می‌شود تا استفاده از آن‌ها را راحت‌تر کند. همان‌طور که یک رابط کاربری گرافیکی استفاده از نرم‌افزار را برای کاربران آسان‌تر می‌کند رابط‌های کاربردی برنامه‌نویسی نیز استفاده از برخی تکنولوژی‌های خاص به‌منظور ساخت نرم‌افزار‌ها را برای توسعه دهندگان آسان‌تر می‌کند. با انتزاع پایه‌های اولیه و تنها آشکار کردن اشیا یا اقداماتی که توسعه‌دهنده به آن نیاز دارد API‌ها در واقع برنامه‌نویسی را ساده سازی می‌کنند. در حالی که یک رابط گرافیکی برای یک کلاینت ایمیل می‌تواند دکمه‌ای را برای کاربر در نظر بگیرد که تمامی مراحل لازم برای دریافت و مشخص کردن ایمیل‌های دریافتی جدید را انجام دهد یک API برای استفاده از فایل‌ها به عنوان ورودی و خروجی می‌تواند برای توسعه دهنده تابعی را فراهم کند که بدون نیاز به این که او عمليات فایل سیستمی را که در پشت صحنه اتفاق می‌افتد درک کند، یک فایل را از محلی به محل دیگر کپی می‌کند.‬

کاربرد‌های API

‫یک API معمولا به یک کتابخانه نرم‌افزار مرتبط می‌شود. API رفتار مورد انتظار را توصیف و تجویز می‌کند در حالی که کتابخانه پیاده‌سازی واقعی این مجموعه قوانین به شمار می‌رود. یک API می‌تواند چندین پیاده‌سازی به شکل کتابخانه‌های مختلف که دارای رابط برنامه‌نویسی یکسانی هستند داشته باشد یا حتی نداشته باشد و به صورت انتزاعی عمل کند). جدایی API از پیاده‌سازی آن می‌تواند به برنامه‌های نوشته شده به یک زبان خاص اجازه دهد تا از کتابخانه‌هایی که به زبان‌های دیگر نوشته شده‌اند استفاده کنند. برای مثال چون Scala و Java به بایت کد سازگار، کامپایل می‌شوند توسعه دهندگان Scala می‌توانند از هر نوع API جاوا استفاده کنند.‬ ‫کاربرد API‌ها می‌تواند بسته به نوع زبان برنامه‌نویسی مورد استفاده، متفاوت باشد. یک API برای یک زبان رویه‌ای مانند Lua می‌تواند عمدتا شامل روال‌های پایه به منظور اجرای کد، دستکاری داده‌ها و برطرف کردن خطاها باشد در حالی که یک API برای یک زبان برنامه‌نویسی شی‌گرا مانند جاوا مشخصاتی از دسته‌ها و اسلوب‌های هر دسته را ارائه می‌کند.‬ ‫قید‌های زبانی نیز جز API‌ها به شمار می‌روند. با نگاشتن ویژگی‌ها و توانایی‌های یک زبان به یک رابط که به زبان دیگری در حال اجرا می‌باشد، یک قید زبانی این امکان را فراهم می‌کند که از یک کتابخانه یا سرویس که به یک زبان نوشته شده است به هنگام توسعه نرم‌افزار‌های مختلف در زبان‌های دیگر استفاده شود. ابزار‌هایی نظیر SWIG و F2PY-که یک رابط ساز از فرترن به پایتون می‌باشد . ساخت چنین رابط‌هایی را آسان تر می‌کنند.‬ ‫یک API همچنین می‌تواند به یک چارچوب نرم‌افزاری مرتبط شود: یک چارچوب می‌تواند مبتنی بر چندین کتابخانه باشد که در حال اجرای API‌های مختلفی هستند. اما برخلاف کاربرد معمول API، دسترسی به رفتار تعيين شده در بدنه چارچوب به واسطه گسترش محتوای آن با دسته‌های جدیدی که وارد خود چارچوب می‌شوند انجام می‌گیرد. علاوه بر این، کنترل جریان کلی برنامه می‌تواند از کنترل فراخواننده خارج باشد و با استفاده از وارونگی کنترل یا مکانیزمی مشابه آن، در اختیار چارچوب قرار بگیرد.‬

تفاوت بین ABI و API

‫یک API مجموعه‌ای از روش‌های تعریف شده و شفاف به منظور ارتباط بین اجزای مختلف نرم‌افزار می‌باشد، در حالی که ABI یک سطح دودویی سطح پایین بین دو یا چند قطعه نرم‌افزار را در یک معماری خاص تعریف می‌کند. این تعریف شامل این است که چگونه یک برنامه با خود تعامل دارد، چگونه یک برنامه با هسته ارتباط برقرار می‌کند، و چگونه یک برنامه با کتابخانه‌ها ارتباط برقرار می‌کند. هرگز یک رابط دودویی نرم‌افزار ABI نباید با رابط برنامه‌نویسی نرم‌افزار API اشتباه گرفته شود که رابط بین یک کتابخانه یا سیستم‌عامل و برنامه‌هایی است که از آن تقاضای سرویس می‌کنند.‬

پروژه WineHQ

‫یکی از مشکلات کاربرانی که به لینوکس مهاجرت می‌کنند از دست رفتن نرم‌افزارهایشان است. اگر چه نرم‌افزارهایی که برای لینوکس نوشته شده جواب‌گوی نیازهای کاربران است و خیلی از نرم‌افزارها، هم برای ویندوز و هم برای لینوکس وجود دارند ولی بعضی از کاربران دوست دارند همان نرم‌افزاری را که در ویندوز استفاده می‌کردند در لینوکس هم داشته باشند و یا هنوز نرم‌افزار مشابه را نیافته‌اند. همچنین خیلی از بازی‌های کامپیوتری فقط برای ویندوز وجود دارند و کاربران لینوکس نمی‌توانند آن‌ها را اجرا کنند. واین (Wine) نرم‌افزاری است که این محدودیت را از پیش روی کاربران لینوکس برداشته و امکان اجرای تمام نرم‌افزارهای تحت ویندوز را روی لینوکس فراهم می‌آورد.‬ ‫واین یا Wine یک لایه سازگاری آزاد و متن-باز است که به برنامه‌های نوشته‌شده برای سیستم‌عامل مایکروسافت ویندوز قابلیت اجرا شدن بر روی سیستم‌عامل‌های شبه-یونیکس را می‌دهد. همچنین واین دارای کتابخانه‌ای به نام Winelib است که توسعه‌دهندگان می‌توانند نرم‌افزارهای ویندوز خود را با آن کامپایل کنند تا سازگار کردن آن برای سیستم‌عامل‌های شبه-یونیکس راحت‌تر شود.‬ ‫واین یک شبیه‌ساز نیست بلکه یک لایه سازگاری است به این خاطر که پیاده‌سازی از دی‌ال‌ال‌های ویندوز است. نام واین از مخفف جمله Wine Is Not an Emulator آمده است که (واین یک شبیه‌ساز نیست) معنی آن است. واین در حالت پیش‌فرض بر روی اکثر توزیع‌های گنو/لینوکس نصب نیست و کاربر باید آن را نصب کند.‬

سیستم مانیتورsystem monitor

‫مانیتور سیستم یا system monitor یک جزء سخت‌افزاری یا نرم‌افزاری است که برای نظارت بر منابع سیستم و عملکرد در یک سیستم کامپیوتری استفاده می‌شود. مانیتور سخت‌افزار یک جزء رایج از مادربردهای مدرن است که می‌تواند به صورت یک تراشه جداگانه باشد که اغلب از طریق I²C یا SMBus متصل شود. این دستگاه امکان نظارت بر دما در شاسی، ولتاژ منبع تغذیه و سرعت فن‌های رایانه‌ای که به طور مستقیم به یکی از هدر‌های فن در مادربورد وصل شده‌اند، را دارد. بسیاری از این مانیتورهای سخت‌افزاری همچنین قابلیت کنترل‌پنل را دارند. نرم‌افزار نظارت بر سیستم مانند SpeedFan در ویندوز، lm_sensors در گنو / لینوکس، envastas در NetBSD و sysctl hw.sensors در OpenBSD و DragonFly می‌تواند با این تراشه‌ها برای ارتباط این اطلاعات حسگر محیطی به کاربر ارتباط برقرار کند.‬ مانیتور‌های نرم‌افزاری قادر خواهند بود به‌طور همزمان روی پردازنده، رم، برنامه‌ها و باتری دستگاه نظارت داشته باشند. آنها همچنین برای نمایش مواردی مانند فضای آزاد در یک یا چند هارد‌دیسک، درجه حرارت CPU و سایر اجزای مهم و اطلاعات شبکه‌ای از جمله آدرس IP سیستم و میزان فعلی آپلود و دانلود استفاده می‌شوند.‬ و همچنین سایر نمایش‌ها شامل تاریخ و زمان، طول عمر سیستم، نام کامپیوتر، نام کاربری، هارد‌دیسک S.M.A.R.T. داده‌ها، سرعت فن و ولتاژ توسط منبع تغذیه ممکن است ارائه شود.‬

مجازی سازی سطح سیستم عامل containerization/virtualization

‫مجازی‌سازی (virtualization ) ما را قادر می‌سازد، بارکاری یا workload مربوطه را در محیطی مستقل از سخت‌افزار اصلی توسط یک لایه‌ انتزاعی به اجرا درآوریم. این انتزاع مکان تقسیم سرورها را در ماشین‌های مجازی با سیستم عامل‌های مختلف فراهم می‌کند. از طرف دیگر فناوری کانتینر (Container) گزینه دومی رابرای انجام مجازی‌سازی به ما پیشنهاد می‌دهد, به این‌طریق که یک سیستم عامل تک برروی یک میزبان بتواند برنامه‌های مختلف و زیادی را از روی ابر (Cloud) اجرا کند. یک روش خوب برای فهم تفاوت این دو موضوع این است که، فرض کنید تعدادی ماشین مجازی در حال اجرای سیستم عامل‌های مختلف برروی یک گره محاسباتی هستند، فناوری کانتینر این امکان را پیشنهاد می‌دهد که هر سیستم عامل می‌تواند بدون وجود ماشین‌مجازی خودش را مجازی‌سازی کند.‬

مجازی‌سازی (virtualization )

‫یک ماشین‌مجازی یک محیط نرم‌افزار-محور است که برای شبیه‌سازی یک محیط سخت‌افزار-محور به منظور برنامه‌هایی که برروی آن اجرا می‌شوند تعبیه شده است. برنامه‌های مرسوم معمولا به این منظور طراحی می‌شوند تا توسط یک سیستم‌عامل مدیریت شوند و توسط مجموعه‌ای از هسته‌های پردازنده‌ها به اجرا دربیایند. چنین برنامه‌هایی می‌توانند داخل یک ماشین‌مجازی بدون هیچ‌گونه تغییری در معماری اجرا شوند.‬ ‫داخل ماشین‌مجازی یک مولفه نرم‌افزاری بنام ابرناظر (Hypervisor) بعنوان یک عامل بین محیط ماشین‌مجازی و سخت‌افزار زیرین عمل می‌کند و لایه لازم برای انتزاع مورد‌نظر را فراهم می‌آورد. یک ابرناظر مانند Vmware ESXi، مسئول اجرای ماشین‌مجازی مرتبط با خود می‌باشد و می‌تواند چندین مورد شبیه‌سازی مرتبط با ماشین‌های مجازی را انجام دهد. دیگر ابرناظرهای محبوب KVM, Citrix Xen و Microsoft Hyper-V هستند. در محیط‌های مربوط به ماشین‌های‌مجازی اخیر، پردازنده‌های پیشرفته قادر به تعامل به شکل مستقیم با ابرناظرها هستند و می‌توانند به جای استفاده از روشی مبهم در رابطه با اجرای برنامه‌ها داخل ماشین‌مجازی، آنها را با تامین کانال‌های مورد نیاز برای انجام Pipeline بهبود بخشند. آنها همچنین شامل مدل‌های مجازی‌سازی شبکه مانند Vmware NSX نیز می‌باشند.‬ ‫مقیاس بدست‌آمده از بارکاری یک سرویس‌دهنده ماشین‌مجازی بیشتر از روش bare metal (روش معمول مجازی سازی) می‌باشد. با داشتن یک وب‌سرور یا دیتابیس‌سرور، برنامه‌هایی که مسئول تحویل سرویس‌ هستند، دربین چندین میزبان توزیع شده‌اند. Load balancer ها درجلوی این میزبان‌ها قرارگرفته‌اند و ترافیک را به شکلی ملایم بین آنها ردوبدل می‌کنند. رویه‌های خودکار داخل محیط‌های ماشین‌مجازی عملکردی مانند Load balancer ها داشته و یک سری پردازش Load balancing که به تغییرات در الگوهای ترافیکی در دیتاسنترها حساس هستند، ایجاد میکنند.‬

#کانتینر (Container)

‫مفهوم کانتینر به عنوان یک گزینه دوم برای محیط‌های مجازی‌سازی توسعه‌داده شد، بلکه دراصل روشی بوده برای جداکردن فضاهای نام در سیستم عامل لینوکس به منظور اهداف امنیتی. اولین محیط‌های لینوکس، شباهت بسیاری به سیستم‌های کانتینر پیشرفته داشتند چرا که بخش‌های تولیدشده داخل برنامه‌های مشکوک به موارد امنیتی می‌توانستند بدون هیچگونه خطری مرتبط با هسته (kernel) اجرا شوند. هسته هنوز مسئول اجرا بود، گرچه یک لایه انتزاعی بین هسته و بارکاری وارد شد.‬ ‫زمانی که محیط داخل این بخش‌ها به‌دلایل افزایش کارایی به حداقل رسید، ایده ایجاد مفهوم این بخش‌ها به صورت قابل‌حمل بوجود آمد. اولین کانتینر رسمی ایجادشده که هنوز به عنوان یک سیستم مستقل نبود و به عنوان بخشی از لینوکس توسعه‌یافت، LXC نام داشت. Docker نیز به عنوان عاملی تجربی برای توسعه آسان LXC برروی پلتفرم PaaS، که بخشی از dotCloud (بخش اصلی سازمان Docker) بود، توسعه یافت و سازماندهی شد.‬ ‫بارهای کاری داخل کانتینرها مانند Docker نیز مجازی شده است، هرچند داخل محیط محلی Docker هیچگونه فوق ناظری وجود ندارد. درعوض هسته لینوکس یا در موارد جدیدتر هسته ویندوزسرور توسط یک daemon که تقسیم‌پذیری‌ها بین کانتینرها را درحالی که بار کاریشان درحال اتصال به هسته بود، تکمیل می‌شود.‬ ‫کانتینرهای پیشرفته‌ اغلب شامل سیستم‌عامل‌های minimized شده مانند CoreOS یا Vmware’s Photon OS می‌باشند و تنها هدف آنها نگهداری سرویس‌های محلی و اساسی و ارائه نکردن تصویری از یک فضای پردازشی کامل برای برنامه‌هایی است، که برروی میزبان هستند. ‬

وب سرور آپاچی (Apache)

‫وب سرور برنامه‌ای است که از HTTP برای نمایش فایل‌هایی استفاده می‌کند که صفحات فایل را برای کاربران ایجاد می‌نماید. هر سروری که اسناد XML را به دستگاه دیگر تحویل می‌دهد می‌تواند یک وب سرور باشد. شاید تعریف بهتر اینگونه باشد: وب سرور، سرور اینترنتی است که به درخواست‌های HTTP برای ارائه محتوا و خدمات پاسخ می‌دهد. همانطور که می دانید وب سرورهای مختلفی در دسترس افراد قرار دارد. در ادامه به معرفی یکی از محبوبترین وب سرورها به نام وب سرور آپاچی می پردازیم.‬ ‫آپاچه یا آپاچی از آوریل سال ۱۹۹۶ تا به امروز معروفترین و رایج ترین وب سرور (web server) در دنیای سرورها و میزبانی وب می‌باشد. این نام از قبیله آپاچی که از اولین اقوام ساکن آمریکا بوده‌اند اقتباس شده است. این وب سرور بر روی اکثر سیستم عامل‌های محبوب از جمه لینوکس ، ویندوز، یونیکس، FreeBSD ، Solaris ، OS X قابل نصب می‌باشد و از زبان‌های برنامه‌نویسی پی اچ پی، پایتون و پرل پشتیبانی می‌نماید. کاربر می‌تواند بر حسب نیاز ، از ماژول‌های مختلفی که توسط افراد مختلف توسعه یافته است به روی این وب سرور استفاده نماید. از محبوب‌ترین ماژول‌های مورد استفاده می‌توان از mod_evasive و modSecurity که ماژول امنیتی هستند و mod_rewrite که برای بهینه‌سازی آدرس‌های اینترنتی برای موتور‌های جستجو SEO کاربرد دارد و یا mod_gzip نام برد.‬

SQL

‫‫زبان ساختارمند پرسش‌ها یا اسکیوال یا سی کوال (Structured Query Language – SQL) زبانی است سطح بالا مبتنی بر زبان سطح پایین و ریاضی جبر رابطه‌ای که برای ایجاد، تغییر، و بازیابی داده‌ها و نیز عملیات بر روی آن‌ها به کار می‌رود. ازاین زبان در طراحی سایت ، وب سایت‌هایی داینامیک بر پایه پایگاه داده SQL (اس کیو ال) استفاده می‌کنند.منشأ اصلی سی‌کوال به مقاله سال ۱۹۷۰ ادگار کاد تحت عنوان «مدل رابطه‌ای داده‌ها برای بانک‌های بزرگ داده‌های اشتراکی» بازمی‌گردد. در دهه ۷۰ گروهی از شرکت آی‌بی‌ام در شهر سان خوزه بر روی سیستم پایگاه داده‌های سیستم آر بدون توجه به این مقاله کار می‌کردند و زبان SEQUEL را به منظور عملیات و بازیابی اطلاعات ذخیره شده در سیستم آر ایجاد کردند. اگر چه اس‌کیوال ناشی از تلاش‌های کاد بود اما دونالد چامبرلین و ریموند بویس به عنوان طراحان زبان SEQUEL شناخته می‌شوند.‬ ‫بسیاری از اصطلاحات زبان اس‌کیوال تحت استاندارد بین‌المللی بوده، و در نتیجه، آن‌ها شبیه بقیه زبان‌های استاندارد مثل محصولات شرکت اوراکل PL/SQL یا Sybase و SQL PL (مدل رویه‌ای) از شرکت آی‌بی‌ام می‌باشد. اس‌کیوال برای کارهای ویژه و محدودی (گزارش گیری از داده‌ها در پایگاه داده‌های رابطه‌ای) طراحی شده‌ است. بر خلاف زبان‌های دستوری مثل بیسیک یا سی که برای حل مسائل طراحی شده، SQL زبانی بر پایه اعلان است.‬ ‫زبان‌های توسعه یافته‌ای مثل PL/SQL به دنبال کامل کردن زبان به هدف ایجاد زبان برنامه‌نویسی با حفظ مزیت‌های SQL می‌باشد. شیوه دیگر کار این است که به کدهای زبان برنامه‌نویسی اجازه دسترسی به پایگاه داده به کمک دستورهای SQL داده شود مثلاً PostgreSQL به توابعش اجازه می‌دهد که درون کدهای Perl, Tcl و C نوشته شوند. گاهی به شوخی گفته می‌شود که SQL نه ساخت یافته‌است، نه محدود به گزارش گیری‌ها و اصلاً یک زبان نیست.‬

افزونگی Redundancy

‫افزونگی (Redundancy) یک معیار امنیت و ایمنی فنی است که برای هر سرویس دو یا چند سرور در نظر گرفته می‌شود که در صورتی که به هر دلیل یک سرور دچار خرابی گردید سرویس‌های موجود برروی سرورهای دیگر به درخواست‌های مشتریان پاسخ دهند. استفاده از مجازی‌سازی جهت پیاده‌سازی افزونگی راحت‌تر و کم هزینه‌تر از روش فیزیکی آن است. در شبکه مجازی سازمان باید قابلیت HA راه‌اندازی گردد و کلیه ملاحظات مربوط به سازگاری سخت‌افزارها و نرم‌افزارها باید صورت گیرد.‬ ‫البته پیاده سازی redundancy در ساختار و طراحی شبکه سازمانی طبیعتا هزینه‌های بیشتری را نسبت به راه‌اندازی عادی شبکه خواهد داشت و البته وجود افزونگی‌های غیر ضروری باعث خواهد شد که هزینه‌های سازمان یا شرکت به طرز بی‌موردی افزایش پیدا کند.‬ ‫در طراحی ساختار شبکه شخص متخصص در طراحی شبکه می‌بایست نقاط حساس و استراتژیک موجود در شبکه را شناسایی و برای اطمینان از عدم از دسترس خارج شدن سرویس‌ها تدابیر لازم را انجام دهد یکی از موثر‌ترین راه‌ها برای جلوگیری از وجود مشکل احتمالی وجود افزونگی در شبکه است. میزان افزونگی موجود در شبکه همانطور که گفته شد به عوامل زیادی بستگی دارد و عامل خرابی و مستعد بودن در خراب شدن دستگاه یکی از این عوامل مهم می باشد.‬ ‫به عنوان مثال زمانی که دستگاهی در شبکه خود قرار داده‌اید که به علت پروسس بالا احتمال می‌دهید عمر کوتاهی داشته باشد می‌توانید برای آن یک redundancy و یا همان افزونگی را قرار دهید تا در صورت خرابی و از کار افتادن، دستگاه دیگر به عنوان یک جایگزین برای آن عمل کند.‬