Network File System یا سیستم فایل شبکهای یک پروتکل سیستم فایل توزیع شدهاست. این سیستمها شامل چندین دستگاه سرویسگیرنده و یک یا چند سرور هستند. سرور، دادهها را بر روی دیسکهای خود ذخیره میکند و سرویسگیرندگان ممکن است از طریق برخی از پیامهای پروتکل، دادهها را درخواست کنند.
مزایای سیستم فایل شبکهای یا توزیع شده
استفاده از NFS مزایای زیادی برای کاربران این سیستم ایجاد میکند. برخی از مزایای استفاده از سیستم فایل توزیع شده، شامل موارد زیر است:
- این سیستم، امکان اشتراکگذاری دادهها را بین مشتریان مختلف آسان میکند.
- امکان مدیریت متمرکز را ایجاد میکند.
- امنیت دارد؛ یعنی فقط باید سرورها را امن کنید تا از دادهها محافظت شود.
معماری سیستم فایل توزیع شده
یک معماری کلاینت/سرور، اجزای بیشتری نسبت به فایلهای فیزیکی سیستم دارد. این معماری متشکل از یک سیستم فایل سمت مشتری یا همان کلاینت و یک سیستم فایل سمت سرور است. برنامه مشتری با فراخوانی سیستمی (به عنوان مثال ()read(), write(), open(), close و…) برای دسترسی به پروندههای موجود در سیستم فایل سمت مشتری، باعث بازیابی فایلها از سمت سرور میشود. جالب است بدانید که از نظر یک اپلیکیشن یا برنامهی مشتری، این فرایند با درخواست داده از یک دیسک فیزیکی تفاوتی ندارد، زیرا برای این کار API خاصی لازم نیست. این پدیده به عنوان «شفافیت» از نظر دسترسی به فایلها معروف است. این سیستم فایلِ سمتِ مشتری است که دستوراتی را برای سرویسدهی به تماسهای سیستم اجرا میکند.
به عنوان مثال، فرض کنید که یک برنامه سرویسگیرنده، تماس سیستمی ()read را صادر میکند. سپس سیستم فایل سمت مشتری، به سیستم فایل سمت سرور پیام میدهد تا یک بلوک از دیسک سرور را بخواند و دادهها را به مشتری برگرداند. سرانجام، این دادهها را در بافر ()read ذخیره کرده و تماس سیستم را کامل میکند. سیستم فایل سمت سرور به صورت اختصار، سرور فایل نامیده میشود.
سیستم فایل توزیع شده سان (Sun)
اولین سیستم فایل توزیع شده موفق را میتوان به Sun Microsystems نسبت داد که سیستم فایل شبکه یا همان NFS را توسعه داده است. NFSv2 پروتکل استانداردی بود که سالها از آن استفاده میشد. این پروتکل با هدف بازیابی ساده و سریع خرابیهای سرور طراحی شده بود. این هدف در معماری شبکه مبتنی بر چند مشتری و یک سرور از اهمیت بالایی برخوردار است؛ زیرا در این نوع سیستم، یک لحظه خرابی و قطع شدن سرور به معنای عدم سرویسدهی به تمامی مشتریهاست. در چنین شرایطی کل سیستم خراب میشود و از کار میافتد.
در پروتکلهای Stateful وقتی حرف از خرابی میزنیم، اوضاع خیلی پیچیدهتر میشود. در چنین پروتکلی، اگر سرویسگیرنده درخواستی را به سرور ارسال کند، انتظار نوعی پاسخ دارد. درصورتی که پاسخی دریافت نکرد، درخواست را دوباره ارسال میکند. مشتری A را در نظر بگیرید که سعی دارد به برخی از دادههای سرور دسترسی پیدا کند. با این حال، درست بعد از اولین درخواست Read ()، سرور خراب میشود. حالا وقتی سرور هنوز فعال است، مشتری A درخواست دومین خواندن را صادر میکند. با این حال، سرور نمیداند مشتری به کدام فایل مراجعه میکند، زیرا همه این اطلاعات موقتی بوده و در هنگام خرابی سرور از بین رفتهاند.
اینجاست که پروتکل Stateless به کمک ما میآید. پروتکلهای Stateless نوعی پروتکل شبکه هستند که در آن، مشتری درخواست را به سرور ارسال میکند و سرور، پاسخ او را با توجه به وضعیت فعلی برمیگرداند. این پروتکلها طوری طراحی شدهاند که هیچگونه اطلاعات حالت را در سرور ذخیره نمیکنند. سرور از کارهایی که مشتریها انجام میدهند بیاطلاع است. مثلا این که چه بلوکهایی را ذخیره میکند، کدام فایلها توسط آنها باز میشود و نشانگرهای فایلهای فعلی آنها کجا قرار دارند. سرور به سادگی تمام اطلاعات مورد نیاز برای ارائه درخواست مشتری را ارائه میدهد. اگر سرور با مشکلی مواجه شده و خراب شود، مشتری میتواند به آسانی درخواست خود را مجددا ثبت کند.
فایل هندل یا File Handles
NFS از فایل هندل برای شناسایی منحصر به فرد یک فایل یا فهرست استفاده میکند که عملیات فعلی روی آن انجام میشود. فایل هندل شامل بخشهای زیر است:
- Volume Identifier: یک سرور NFS ممکن است دارای چندین فایل سیستم یا پارتیشن باشد. Volume Identifier به سرور میگوید که باید به کدام فایل سیستم ارجاع داده شود.
- شماره Inode: این شماره، فایل موجود در پارتیشن را مشخص میکند.
- شماره Generation: این شماره هنگام استفاده مجدد از شماره inode استفاده میشود.
صفات یا ویژگیهای فایل
ویژگیهای فایل، اصطلاحی است که معمولا در ترمینولوژی یا همان واژه شناسی NFS استفاده میشود. این واژه، یک اصطلاح جمعی برای متادیتای ردیابی شدهی یک فایل از جمله زمان ایجاد فایل، آخرین اصلاح، اندازه، مجوزهای مالکیت و… است. با فراخوانی()stat موجود در یک فایل میتوان به این مورد دسترسی داشت.
پروتکل NFSv2
برخی از پیامهای معمول پروتکل NFSv2 را در ادامه ذکر خواهیم کرد:
- NFSPROC_GETATTR: ا توجه به دسته فایل، ویژگیهای فایل را برمیگرداند.
- NFSPROC_SETATTR: ویژگیهای فایل را تنظیم یا به روز میکند.
- NFSPROC_LOOKUP: با توجه به دسته و نام فایل برای جستجو، فایل هندل را برمیگرداند.
- NFSPROC_READ: با توجه به دسته فایل، آفست، شمارش دادهها و ویژگیها، دادهها را میخواند.
- NFSPROC_WRITE: با توجه به دسته فایل، آفست، شمارش دادهها و ویژگیها، دادهها را در فایل مینویسد.
- NFSPROC_CREATE: با توجه به دسته دایرکتوری (فهرست)، نام فایل و ویژگیهای آن، یک فایل ایجاد میکند.
- NFSPROC_REMOVE: با توجه به دسته دایرکتوری، نام فایل، یک فایل را حذف میکند.
- NFSPROC_MKDIR: با توجه به دسته دایرکتوری، نام فهرست و ویژگیها، یک دایرکتوری جدید ایجاد میشود.
از پیام پروتکل LOOKUP برای به دست آوردن دسته فایل برای دسترسی بیشتر به دادهها استفاده میشود. پروتکل نصب NFS به دستیابی دسته دایرکتوری برای دایرکتوری (/)root در سیستم فایل کمک میکند. اگر برنامه سرویسگیرنده، فایل /abc.txt را باز کند، سیستم پرونده سمت مشتری، درخواست LOOKUP را از طریق دسته فایل(/) root به دنبال فایلی با نام abc.txt به سرور می فرستد. اگر جستجو موفقیتآمیز باشد، ویژگیهای فایل بازگردانده میشوند.
ذخیرهسازی سمت Client یا مشتری
برای بهبود عملکرد NFS، سیستمهای فایل توزیع شده، دادهها و همچنین متادیتاهای خوانده شده از سرور را بر روی کلاینتها ذخیره میکنند. این فرایند به عنوان ذخیرهسازی سمت کلاینت یا مشتری شناخته میشود. این کار کمک میکند تا زمان لازم برای دسترسیهای بعدی مشتری کاهش یابد. از ذخیرهسازی سمت کلاینت همچنین به عنوان یک بافر موقت برای نوشتن استفاده میشود. از آنجا که همه نوشتهها به طور هم زمان و یکباره روی سرور نوشته میشوند، این کار تا حد زیادی باعث بهبود کارایی سیستم میشود.