MohammadReza Rahmatzadeh
MohammadReza Rahmatzadeh
خواندن ۴ دقیقه·۴ سال پیش

خلاصه کتاب Pragmatic Programmer. درس 36

درس 36: Blackboards

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

چند تا از نکته های کلیدی و مهم استفاده از این تخته سیاه اینه:

- کارآگاه ها میتونن به صورت تیمی روی پرونده کار کنن و حتما نیاز به حضور یک یا چند نفر خاص نیست و همه چیزه پرونده روی تخته واضحه

- افراد با سواد و تجربه و حوزه های مختلف میتونن ایده هاشونو به اشتراک بزارن

- افراد در شیفت های زمانی مختلف میتونن روی پرونده پیش برن

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

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

A BLACKBOARD IN ACTION

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

مشکلات زیرو توی این مسئله داریم:

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

- ثبت داده ها توسط افراد مختلف انجام میشه به صورت توزیع شده و در دفاتر مختلف با تایم زون های مختلف

- برخی از ثبت ها بایستی اتومات توسط ساب سیستم های دیگر انجام شود و به صورت async به مرکز برسه

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

- ورود داده های جدید خودش ممکنه منجر به سوالات و ایجاد قوانینی روشون بشه، مثلا چک اعتباری که ثبت شده اگر شرایط خاصی رو داشته باشه باید یکسری اطلاعات تکمیلی دیگه هم براش پرسیده بشه

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

MESSAGING SYSTEMS CAN BE LIKE BLACKBOARDS

خیلی از اپلیکیشن ها از سرویس های جداشده(decouple) و کوچیک ساخته میشه، که این سرویس ها توسط یک سیستم مسیج بروکر باهمدیگه در ارتباط و صحبت میکنن. سیستم های مسیج بروکر مثل Kafka, NATS, RabitMQ و ... کارهای فراتر از ارسال داده از A به B انجام میدن. حتی مدل های Persistance دارن که برای Logging هم قابل استفاده است. همچنین قابلیت دریافت مسیج در مقصد با پترن خاص. قابلیت هایی بهتون میده که ازشون هم به عنوان blackboard system و هم پلتفرمی برای ران کردن actor ها استفاده کنید.

(توضیحات تکمیلی مترجم: مسیج بروکرها نرم افزارهایی هستند که بهمون این امکانو میدن که روشون صف هایی رو بسازیم و روی آی پی و پورت و رمز خاص سرویس های مختلفمون میتونن روی صف های مختلف دیتا رو در قالب مسیج بزارن و سرویس های دیگه ام از صف ها مسیج ها رو بردارن. در سیستم های توزیع شده و میکروسرویس ها، بخش اعظم و مهم معماری استفاده از مسیج بروکر خوب هستش. مثلا فرض کنید در یک سیستم فروش اینترنتی، سرویس ثبت سفارشات وقتی سفارشاتو توی دیتابیس خودش ثبت میکنه، اونها رو روی صف خاصی هم میفرسته، از اونور سیستم بک افیس مالی، مسیج های سفارشات رو برمیداره و در دیتابیس بک افیس هم اعمالشون میکنه. در این معماری، سرویس ثبت سفارشات نیازی به معطلی برای ارسال سفارش به سرویس بک افیس رو نداره و صرفا مسیج ها رو روی صف ارسال میکنه و سرویس بک افیس ممکنه در تایمی خاص مسیج ها رو برداره و صدها مثال و کاربرد مختلف. در برخی سیستم ها ممکنه از این صف ها به عنوان دیتابیس استفاده بشه و مد های مختلفی مثل in memory, durable رو ساپورت میکنن و کاربردشون فقط به مسیج ختم نمیشه)

اما ساده ام نیست...

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

دروس مرتبط: 28, 29, 33, 35

منبع کانال تلگرامی: https://t.me/pragmaticprogrammer_fa

pragmatic programmerprogrammermarshal
شاید از این پست‌ها خوشتان بیاید