گاه نوشته های مهدی بیاضی

tail -f /dev/mind > blog

گاه نوشته های مهدی بیاضی

tail -f /dev/mind > blog

طبقه بندی موضوعی

۲ مطلب با کلمه‌ی کلیدی «آموزش» ثبت شده است

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

دیزل نام یک ابزار پایتونی برای توسعه نرم افزار های تحت شبکه می باشد. با کمک این ابزار می شه برنامه های سرور یا کلاینتی نوشت که با پروتکل های TCP یا َUDP کار کنند. از ویژگی های بارز این ابزار استفاده از تکنولوژی Non-blocking I/O هست که قدرت پردازشی و توسعه بسیار زیاد در عین استفاده کم از منابع رو فراهم می کنه. با این ابزار و در حالت معمول می شه برنامه هایی نوشت که در یک سرور تا ۱۰ هزار کانکشن همزمان و باز قابل پردازش باشه. همچمین در این حالت به ازای هر اتصال یا socjet باز حدودا ۱۴ کیلوبایت حافظه رم اشغال می شه که رقم بسیار خوبی هست. 


Python Diesel


یکی از جالب ترین چیز هایی که من توی Diesel دیدم سادگی اون هست. بخش زیادی از این سادگی و روان بودن رو مدیون پایتون شاید باشه اما خود ماژول هم خوب پیاده شده و بسیاری از پیچیدگی رو داخل خودش حفظ می کنه. معمولا بهینه بودن یا performance و پردازش یا حجم اطلاعات نسبتی هم جهت با پیچیدگی کد و نرم افزار داره. اما در این ابزار تا حد زیادی این پیچیدگی از بین برده شده و برنامه نویس فقط درگیر مشکل و کد سرویس می شه نه بحث های شبکه و توسعه نرم افزار تحت شبکه.

این ابزار بصورت پیش فرض داخل خودش چندین کلاینت از پیش نوشته شده هم داره که می شه به مواردی چون کلاینت MongoDB, Redis, Riak و ... اشاره کرد. همیچنین در این ابزار از تکنولوژی ها و پروتکل هایی چون WSGI, WebSockets, ZeroMQ, HTTP/1.1 و ... هم پشتیبانی می شه.


یک مثال ساده از یک سرور با استفاده از پایتون و دیزل:


# tcp_holla_server.py
import diesel

def holla_back(addr):
    while True:
        message = diesel.until_eol()
        shouted_message = message.upper()
        diesel.send(shouted_message)
 diesel.quickstart(diesel.Service(holla_back, 4321)) 


سایت رسمی Diesel

مستندات پروژه Diesel

سورس پروژه در GitHub

۰ موافقین ۲ مخالفین ۰ ۱۴ شهریور ۹۱ ، ۱۰:۴۹
مهدی بیاضی

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

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

خیلی دوست دارم در مورد بحث های پردازش ها و سیستم های توسعه پذیر یا دارای scalability بالا بنویسم. مواردی که ما با اون در یک نرم افزار با قابلیت توسعه بسیار زیادی که باید بتونه به حجم بسیار زیاد از کاربران جواب بده یا با داده های بسیاری سرو کار داشته باشه با سایر نرم افزار ها بسیار فرق داره. معمولا از این تکنولوژی ها زیاد نمی شنویم. آموزش یا راهنمای خوبی هم براشون نیست و بیشتر تجربی هست. کسی هم که تجربه خوبی داشته باشه به راحتی حاضر به ارائه اون نیست متاسفانه !

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

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

۱ موافقین ۲ مخالفین ۰ ۱۴ شهریور ۹۱ ، ۱۰:۳۵
مهدی بیاضی