معماری Pipe و Filter یا Pipe and Filter Architecture

در راستای صحبت های مان در قسمت قبلی از این آموزش، در رابطه با معماری های جریان داده، در این قسمت در رابطه با معماری pipe و filter و یا pipe and filter architecture صحبت خواهیم کرد. در این رویکرد؛ تمرکز بر روی تغییرات افزایشی و مرحله‌به‌مرحله داده هاست که توسط component های پشت سر هم اتفاق می‌افتد. در این رویکرد؛ جریان داده‌ها توسط خود داده ها اتفاق می‌افتد و تمامی یک سیستم به component های کوچکتر تجزیه می شود. این component ها شامل؛ data source ها و filter ها و pipe ها data sink ها می باشد. ضمناً به دلیل فنی بودن این واژگان از ترجمه کردن آنها جلوگیری کرده‌ایم.علاوه بر این؛ ارتباط و اتصال بین ماژول های مختلف، مبتنی بر data stream ها می باشند. در واقع data stream ها buffer هایی هستند که به صورت first in first out کار می‌کنند و می‌توانند از stream هایی از نوع byte و character و یا هر نوع داده ای دیگری باشند. ویژگی اصلی این معماری، اجرا شدن عملیات به صورت موازی و همچنین افزایشی می‌باشد.فیلتر (filter) چیست؟در این سبک معماری، ماهیت filter مطرح می شود که یک تغییر دهنده data stream ها است که به صورت مستقل کار می کند. وظیفه یک فیلتر، تغییر دادن داده های ورودی، پردازش کردن آنها و سپس نوشتن آنها به درون data stream خروجی می باشد. این کار با استفاده از یک pipe اتفاق می‌افتد تا فیلتر بعدی بتواند داده ها را دریافت کرده و آنها را پردازش کند. فیلترها به صورت incremental و یا افزایشی عمل می‌کنند و این بدان معناست که به محض ورود داده ها به درون سیستم، عملیات پردازش اتفاق می‌افتد. به طور کلی دو نوع فیلتر با نام‌های active filter و passive filter وجود دارند. در ادامه به بررسی هر کدام از این دو مورد خواهیم پرداخت.بررسی active filter هایک active filter اجازه می دهد تا pipe های متصل، داده‌ها را خوانده و سپس آنها را به درون خروجی بنویسند. فیلترهای فعال و یا active filter ها با passive pipe ها کار میکنند که وظیفه آنها فراهم کردن مکانیزم هایی برای خواندن و نوشتن داده ها می باشد. این موضوع در pipe های مربوط به UNIX مورد استفاده قرار می گیرد.بررسی passive filterیک passive filter اجازه می دهد که pipe های متصل، داده ها را نوشته و همچنین آنها را بخوانند. passive filter ها با active pipe ها کار می کنند که وظیفه آنها خواندن داده ها از درون یک فیلتر و نوشتن آن ها به درون فیلتر بعدی می باشد. اینگونه از فیلترها می بایست مکانیسم‌های خواندن و نوشتن را نیز فراهم کنند. این موضوع در تصویر زیر نشان داده شده است.در ادامه در رابطه با مزایا و معایب این سیستم صحبت خواهیم کرد.مزیت های سیستم pipe and filter architectureیکی از مهم‌ترین مزیت‌های مربوط به این، سیستم امکان کار کردن به صورت موازی و ایجاد بهره‌وری بسیار بالا برای حجم داده های در حال پردازش سنگین می باشد.قابلیت استفاده مجدد و ساده تر شدن سطح نگهداری و یا maintenance سیستم نیز از دیگر مزیت‌های این معماری به حساب می‌آید.اضافه کردن قابلیت تغییر پذیری و همچنین coupling کم مابین فیلترها از دیگر مزیت های این سیستم به حساب می آیند.این سیستم با سادگی خاص خود می‌تواند تفکیک مناسبی بین فیلترها و pipe ها ایجاد کند.انعطاف پذیری این سیستم و پشتیبانی کردن از اجرای موازی و ترتیبی نیز از دیگر مزیت های آن است.معایب سیستم pipe and filter architectureعلیرغم مزیت های بی شمار این سیستم تعداد معایب آن نیز کم نیست. یکی از مهم‌ترین آنها عدم مناسب بودن این سیستم برای تعاملات پویا است.علاوه بر این؛ برای تغییرات بر روی فرمت ASCII نیاز به تنظیمات اضافی وجود دارد.سربار انجام دادن تغییرات بر روی داده ها، مابین فیلترها، نیز از دیگر عیب های این سیستم است.این سیستم روشی را برای فیلترها فراهم نمی‌کند تا بتوانند به صورت همکارانه اقدام به حل و فصل کردن یک مسئله کنند.مورد آخر اینکه پیکربندی کردن این معماری به صورت پویا کار ساده ای نیست.خط لوله (pipe) چیست؟خط لوله و یا pipe ها در واقع stateless و یا بدون حالت هستند و وظیفه اصلی آنها انتقال stream هایی از نوع character و یا داده های binary مابین دو فیلتر می باشد. pipe ها می توانند یک data stream را از یک فیلتر به یک فیلتر دیگر منتقل کنند. با استفاده از pipe ها، اطلاعات مختلفی منتقل می گردند. اما به هیچ وجه هیچ گونه اطلاعاتی در رابطه با state مربوط به فیلتر ها جابجا نمی گردد.در قسمت بعدی از این آموزش در رابطه با معماری کنترل پردازش و یا اصطلاحاً process control architecture صحبت خواهیم کرد.