Cloud چیست؟

۲۹ مرداد ۱۳۹۳ بدون دیدگاه
Cloud چیست؟

Cloud چیست؟

Cloud چیست؟ (تعریف عمومی)

Cloud ، (یا همان پردازش ابری !!!)  واژه‌ایست که این‌روزها بسیار درباره آن می‌شنوید. از ابرشرکت‌های کامپیوتری گرفته تا استارتاپ‌های کوچک و نوپا به سمت cloud درحال حرکت هستند.
اما واقعا Cloud چیست؟  من در این مقاله از دوجنبه‌ی عمومی و تخصصی cloud را بررسی خواهم کرد.شاید به جرات بتوان گفت که  این نوشته شایداولین مقاله کامل فارسی دراین موضوع خواهد بود.

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

cloud ابداع شد تا همه‌ی این مشکلات را حل کند. فلسفه‌ای که پشت طراحی نرم‌افزارهای Cloud جریان دارد، دقیقا همانی است که شما هرروز با آن درگیر هستید! برای مثال شما آب ، برق، گاز و تلفن استفاده میکنید و ماهیانه هزینه‌ی قبض‌تان را پرداخت میکنید. در یک سرویس مبتنی بر Cloud ، شما  اشتراک استفاده از نرم‌افزار را تهیه میکنید. اشتراکی برای استفاده یک ماهه دوماهه یا هر بازه‌ی زمانی که شما نیاز به استفاده از نرم‌افزار دارید. نرم‌افزار موردنظرتان نیاز به سخت‌افزار خاصی ندارد و فقط کافیست اینترنت داشته باشید تا به اطلاعات خود بصورت آنلاین دسترسی داشته باشید. نگران آپدیت هم نیستید. کسی که سرویس cloud برای شما فراهم کرده خودش کلیه بروزرسانی ها را اتوماتیک انجام میدهد. از نظر مالی هم برای شما صرفه اقتصادی دارد. نرم‌افزار استفاده میکنید و همانقدر که برای شما کاربرد داشته پول پرداخت میکنید.

درواقع ارایه‌ی یک نرم‌افزار به عنوان یک خدمت (سرویس) و دریافت حق اشتراک در دنیای مهندسی نرم‌افزار با اسم تخصصی SaaS خطاب میشود. SaaS مخفف کلمات Software as a Service میباشد. اما cloud با saas تفاوت‌های کوچکی از نظر فنی دارد. اما از همان نوع طراحی با کمی تغییرات اضافی استفاده میکند.
هم سرویس‌دهنده cloud از شما ماهیانه پول میگیرد و خدمات ارایه میدهد و هم شرکتی که سرویس‌های saas ارایه میدهد اما تفاوتشان کجاست؟
برای مثال در یک شرکتی که خدمات هاستینگ وبسایت مبتنی بر cloud ارائه میکند، شما بصورت لحظه‌ای و بلادرنگ  یک سرور جدید بخرید و به سرور قبلی خودتان اضافه کنید بدون اینکه آب از آب تکان بخورد!
اما در یک شرکت عادی که خدمات هاستینگ را بصورت سنتی ارایه میدهد ،‌ شما باید سرور سفارش دهید، و منتظر باشید تا کارهای جانبی‌اش انجام شود. تنها چیزی که cloud را برتر از saas کرده همین یک نکته است! این نکته هم در طراحی نرم‌افزار پیاده‌سازی میشود.
برای مثال شما ممکن است یک نرم‌افزار saas را خریداری کنید و روی دسکتاپتان نصب کنید (آنلاین نباشد) و هرماه قفل شود و شما مجبور باشید ماهیانه هزینه‌اش را پرداخت کنید تا دوباره فعال شود. اما یک نرم‌افزار cloud کاملا آنلاین است و کاری با سیستم شما ندارد . بصورت خلاصه ، شباهت cloud و saas در بحث‌های تخصصی و روش پرداخت است با این تفاوت که cloud باید آنلاین باشد در حالیکه این برای یک سرویس saas اجباری نیست و یک آپشن هست.

اما آیا هرسایتی که اشتراک میفروشد ، یک سایت Cloud میباشد؟ جواب قطعا خیر است.
یادتان باشد در یک سرویس Cloud ، شما هیچ نیازی به سیستمتان ندارید. چیزی را در سیستم خود ذخیره نمیکنید. همه چیز در سرورهای سرویس‌دهنده ذخیره میشود.

بعد از یک مثال وارد بحث تخصصی طراحی نرم‌افزارهای Cloud میشویم.

شما سرویس  Google Docs شرکت گوگل یا سرویس Amazon S3 شرکت آمازون را در نظر بگیرید. این یک سرویس رایگان و تمام عیار مبتنی بر cloud است.گوگل به شما یک درایو ۱۵ گیگابایتی برای ذخیره سازی هدیه میکند و شما در این سرویس بصورت کاملا آنلاین ، فایل‌های متنی ، فایل‌های spreedsheet (اکسل) ، اسلایدها و حتی طراحی های خود را تنها توسط یه براوزر مثل فایرفاکس ایجاد میکنید و همانجا نگه‌داری میکنید.  هرزمان هم که نیاز به آن فایل خاص داشتید تنها کافیست به اینترنت دسترسی باشید و سراغ گوگل داکس خود بروید.حالا اینترنت داشته باشید دیگر مهم نیست با موبایل باشید ویا browser. هرچند تقریبا تمامی سرویس‌های cloud اپ‌های موبایل و دسکتاپ برای پلتفرم‌های مختلف ارایه میکنند.
البته بیاد داشته باشید که هر سرویس cloud علاوه بر مزایای فوق‌العاده، معایب خاص خودش را دارد. شاید معایبی که در کشورما بسیار بیشتر به چشم بیاید. یکی همه‌گیر نبودن اینترنت در اقصی نقاط کشور است. فعلا با گذشت سالها ما هنوز یک سرویس‌دهنده موبایل در کشور نداریم که به ما تضمین دهد همه جا ۳G داشته باشیم و به قول خودمان “لنگ اینترنت” نمانیم. حالا کاری با ارز و تحریم و سیاست و غیره ندارم که ممکن است آتش به دودمان یه کاربر ایرانی سرویس cloud خارجی بزند!
اما در کشور نیز سرویس‌های cloud خاصی در حال راه‌اندازی است که به عنوان مثال یکی از سرویس‌های استانداردی که میشود از آن به نیکی یاد کرد فکس آنلاین در سایت fax.ir میباشد.

Cloud چیست؟ (تعریف تخصصی)

cloud فضایی است که به‌سرعت قابلیت گسترش دارد و به میزان بالایی انعطاف پذیری با نیاز‌های مشتری دارد. cloud این انعطاف پذیری  خود را به طراحی سه‌لایه خویش مدیون است:

Cloud چیست؟

Cloud چیست؟ بررسی تخصصی زیرساخت پردازش ابری

 

لایه‌ی اول:‌ لایه‌ی زیرساخت (IaaS)

این لایه که از آن به عنوان IaaS هم یاد میشود (Insfrastructure As A Service)،  شامل سرورهای اختصاصی ، سرورهای مجازی ، سرورهای ذخیره‌سازی مثل  SAN (و حتی NAS) ، لود بالانسرها ، زیرساخت‌های شبکه‌ای و… میباشد.  طراحی زیرساخت cloud کاری بس تخصصی‌است و میتوان درباره‌ی آن کتاب‌ها نوشت. پس با اجازه شما به همین مقدار توضیح بسنده میکنم. اما دوستانی که علاقه‌»ند به مطالعه بیشتر هستند، یک نگاه به اینجا ، اینجا و اینجا بیندازند ;)
وقتی که زیرساخت به عنوان یک سرویس ارایه میشود، مشتری با پرداخت مبلغ مشخصی به ازای استفاده‌ای که از زیرساخت (نظیر پهنای‌باند سرور و…) میکند ، در این لایه فعال میشود. سرورهای مجازی یا اختصاصی که روی دیتاسنتر‌های cloud ارائه میشوند ، دقیقا IaaS هستند.

لایه‌ی دوم: لایه‌ی پلتفرم (PaaS)

این لایه که به اختصار PaaS نامیده میشود (Platform As A Service) ، شامل سیستم‌عامل، تنظیمات مخصوص محیط اجرای نرم‌افزار (یعنی execution runtime) ، پیاده‌سازی بانک‌اطلاعاتی (دیتابیس) ، پیاده‌سازی وب‌سرور و ابزارهای موردنیاز برای توسعه میباشد.
اجازه دهید اینطور توضیح دهم که شما بعد از اینکه زیرساختتان را انتخاب کردید ، سیستم‌عامل و زبان‌برنامه‌نویسی سرویستان را انتخاب میکنید و تنظیمات مناسب با آن را انجام میدهید. شاید شما قبلا اسکریپت php را روی IIS اجرا میکردید اما Cloud نظم خاص خود را دارد. اگر پلتفرم شما مایکروسافتی است ، باید با استانداردهای مایکروسافت cloud خود را پیاده‌سازی کنید. یا اگر برنامه‌نویس php هستید حتما باید پلتفرم یونیکس کار کنید. این یک استاندارد است و شما به‌عنوان یک حرفه‌ای باید به پلتفرم خود کاملا مسلط باشید.
حالا بعضی از خدمات‌دهنده‌ها اقدام به فراهم کردن این پلتفرم میکنند و آنرا به شما در ازای مبلغی اجاره میدهند. مانند Google App Engine.

لایه سوم: لایه‌ی نرم‌افزار (SaaS)

خوب این را پیشتر توضیح دادم و با این کاملا آشنا هستید.SaaS نوعی روش تحویل نرم‌افزار است که  امکان دسترسی از راه دور به یک نرم افزار، توابع آن و دیگر امکانات و ملحقات آن را از طریق وب فراهم می کند .  اما از نظر فنی یک سری نکته میخواهم ذکر کنم که چطور به‌عنوان یک برنامه‌نویس، یک سرویس cloud را برنامه‌نویسی کنید. سرویس های cloud در لایه‌ی نرم‌افزار، از webserviceها استفاده میکنند. الان سرویس‌های cloud که موجود هستند از webserviceهایی بامعماری rest استفاده میکنند که به آنها وب‌سرویس‌های restful گفته میشود.
در برنامه‌نویسی سنتی شما یک برنامه مینوشتید که مستقیم با دیتابیس در ارتباط بود. اما در طراحی یک سرویس cloud این روش اشتباه است. در لایه SaaS شما یک وب‌سرویس پیاده‌سازی میکنید و فقط و فقط وب‌سرویس با دیتابیس درارتباط خواهد بود. حالا شما اگر میخواهید نرم‌افزار وب یا موبایل پیاده‌سازی کنید تمامی اطلاعات موردنیازتان را برای وب‌سرویس ارسال میکنید و جوابش را به کلاینت میدهید. هیچ ارتباط مستقیمی بین client ها و دیتابیس وجود ندارد.

بطور خلاصه یک سرویس cloud ساختاری به شکل زیر دارد:

ساختار cloud

ساختار cloud

cloud آینده‌ی اینترنت است و مطمئن باشید که جهش‌های بزرگی در این عرصه در حال شکل‌گیری است. بسیار خوشحال خواهم شد با به اشتراک گذاری این مقاله با ذکر منبع به گسترش فناوری‌های نوین و استاندارد‌شدنشان در کشورمان کمک کنید. امیدوارم مطالبی که نوشتم مورد توجه شما عزیزان قرار گرفته باشد.
رضاسیف

انجین‌های دیتابیس مای‌اس‌کیو‌ال – MyISAM و Innodb

۲۷ مرداد ۱۳۹۳ بدون دیدگاه
انجین‌های دیتابیس مای‌اس‌کیو‌ال - MyISAM و Innodb و Innodb

انجین‌های دیتابیس مای‌اس‌کیو‌ال – MyISAM و Innodb

دیتابیس MySQL از Table Engineهای متفاوتی پشتیبانی میکند که با عنوان “Table Type” هم شناخته میشوند.
یک دیتابیس میتواند مخلوطی از table های مختلف با engineهای متفاوت ویا یکسان باشد. برای مشاهده لیست کاملی از انجین‌های موردپشتیبانی دیتابیس MySQL به این صفحه مراجعه کنید.

اما در بین این انجین‌های مختلف، در سایت‌های طراحی شده بصورت کلاود (cloud) ، از دیتابیس MySQL و دو انجین استفاده میشود: InnoDB و MyISAM.

توجه داشته باشید در این مقاله قصد دارم بصورت کامل مطالب مرتبط با موارد کاربرد این دو انجین در وبسایت‌های کلاود را پوشش دهم و کاری با performance نخواهم داشت. اگر نیاز به مطالعه مطالب مرتبط با performance دارید, اینجا و اینجا را مطالعه کنید.

در دیتابیس MySQL 5.0 به بعد ، انجین MyISAM ، بصورت table engine پیش‌فرض استفاده میگردد اما سایت‌های کلاود از انجین InnoDB بصورت پیش‌فرض در طراحی‌هایشان استفاده میکنند. به عبارت دیگر وبسایت‌های کلاود، اگر شما بصورت کاملا واضح توسط DDL نوع انجین خودتان را مشخص نکرده باشید، از InnoDB در DDL* تیبل شما استفاده میکند. با استفاده از InnoDB ، performance نرم‌افزارتان نیز بصورت کاملا محسوسی افزایش خواهد یافت.

 

انجین‌های دیتابیس مای‌اس‌کیو‌ال – MyISAM و Innodb

MyISAM Innodb
عدم سازگاری با ACID* و دیتا قابل برگشت نیست (به عبارتی non-transactional* است) پشتیبانی کامل از ACID و دیتای قابل برگشت . انجین transactional* است.
پشتیبانی کامل از commit و rollback در foreign keyها
 انجین پیش‌فرض در MySQL 5.0 به بالا انجین پیش‌فرض در بعضی سرورهای هاستینگ کلاود و توزیع‌های خاص مانند CloudLinux
قابلیت فشرده‌سازی داده‌ها را دارد قابلیت فشرده‌سازی داده‌ها را دارد
هرازگاهی نیاز به repair/rebuild کلیه‌ی indexها و tableها دارد با استفاده از فناوری Auto recovery در صورت کراش کردن، توسط لاگ‌ها خودش را تعمیر میکند
تغییرات در داده‌ها بصورت لحظه‌ای روی دیسک سرور نوشته‌ میشود. قبل از commit و flush کردن داده‌ها روی دیسک سرور، از یک فاصله رندم یا تعیین‌شده استفاده میکند تا لود سرور بیش از حد بالا نرود.
هیچ نظمی در هنگام ذخیره‌سازی برروی دیتاهای شما اعمال نمیشود تمامی ردیف‌ها (rowها) در صفحات مختلف توسط primary keyها مرتب میشوند.
قفل کردن Table هنگام نوشتن داده‌ها قفل کردن ردیف‌ها (rowها) هنگام نوشتن داده‌ها

مفاهیم مقدماتی بانک اطلاعاتی (برای دوستانی که آشنایی ندارند)

* transactional و non-transactional چیست؟
— transactional یعنی سیستم دیتابیس شما از عملیات بازگردانی خودکار rollback و commit پشتیبانی میکند و اگر مشکلی پیش بیاید خودش بصورت اتوماتیک repiar میکند.
— non-transactional از سیستم rollback و commit اتوماتیک پشتیبانی نمیکند،بخاطر همین پرفرمنس برنامه‌ را افزایش میدهد. اما اگر مشکلی پیش بیاید باید خودتان آستین بالا بزنید.

* DDL چیست؟
مخفف  Data Definition Language که در واقع شامل عملیات اولیه راه‌اندازی دیتابیس است . این عملیات عبارتند از CREATE , ALTER , DROP , TRUNCATE , COMMENT و RENAME

* DML چیست؟
Data Manipulation Language که به اختصار DML نامیده میشود ،‌نامی است که به عملیات دستکاری در داده‌ها اطلاق میشود. این عملیات عبارتند از:  SELECT , INSERT, UPDATE,  DELETE, MERGE, CALL, EXPLAIN PLAN و LOCK TABLE

* ACID  چیست؟
مخفف  یکتایی، قابلیت اطمینان، انزوا و پایداری (Atomicity, Consistency, Isolation, Durability)، خصوصیتی است که در اکثر پایگاه داده‌ها و در انجام تراکنش‌ها باید پیاده‌سازی شود.این مشخصه در تراکنش‌های بانک‌ها بیشتر مورد توجه قرار می‌گیرد زیرا یک مجموعه عملیات تراکنش باید به شکل یک عملیات در نظر گرفته شود تا تراکنش با موفقیت صورت گیرد به طور مثال تراکنش انتقال وجه از یک حساب به حساب دیگر،باید دو عملیات به شکل کامل انجام شود.  شما میتوانید اطلاعات بیشتری از اینجا کسب کنید

مقایسه‌های بیشتری نیاز دارید؟ به مستندات MySQL نگاهی بیندازید! مستندات InnoDB و مستندات MyISAM

چه زمانی از MyISAM استفاده کنیم؟

دلایل مختلفی میتواند وجود داشته باشد که شما MyISAM را بعنوان انجین پیش‌فرض یک table استفاده کنید. اول از همه بخاطر داشته باشید که  MyISAM طراحی شد تا متن خام ذخیره کند و برای برنامه‌هایی درنظر گرفته شد که دیتاهایشان به ندرت تغییر میکرد و بیشتر عملیات SELECT روی table انجام میگرفت تا insert ویا update. پس مطمین باشید اگر قرار است دیتای شما به ندرت تغییر کند ولی بسیار خوانده شود، MyISAM سریعترین پیشنهاد موجود برای شماست!
دلیل دیگری که شاید شما بخواهید بخاطرش از خیر InnoDB بگذرید و MyISAM استفاده کنید ، همین پیشتیبانی نکردن از ACID باعث میشود که سیستم دیتابیس شما عملیات کمتری روی دیتابیس شما انجام دهد و این یعنی پرفرمنس بیشتر.
بهرحال بهترین راه برای انتخاب انجین دیتابیس، فقط انجام BENCHMARK توسط شخص خودتان میباشد و باید امتحان کنید تا اندازه خمیر دستتان بیاید!

چه زمانی تغییر انجین از MYISAM به INNODB جزو اوجب واجبات محسوب میشود؟

خوب! جواب همه در جدول بالا قید شده! هروقت که به امکانات InnoDB نیاز داشتید! امکاناتی مثل رول‌بک‌های اتوماتیک و سازگاری با اسید و تعمیرات اتوماتیک!
و یا زمانیکه شما بصورت خیلی سخت همانقدر که عملیات SELECT دارید ، برنامه‌تان از سایر گزینه‌های *DML استفاده میکند. مثل INSERT و UPDATE. بهرحال بیاد داشته باشید LOAD سرور شما بالاخواهد رفت پس زیرساخت سخت‌افزاری خود را درنظر بگیرید.
وقتی هم حس کردید کاربرانتان زیاد شده و دیگر TABLE LOCK گزینه‌ی خوبی نیست و بهتر است در سطح بالاتری مراقب race condition باشید، InnoDB پیشنهاد میشود!

چطور TABLE هایم را از MYISAM به INNODB تبدیل کنم؟

به سادگی! با یک خط کد در mysqld یا phpmyadmin:

ALTER TABLE ENGINE=INNODB;

چطور یک table با انجین پیش‌فرض innoDB بسازم؟

CREATE TABLE  mytable (
  `pk_id` int(11) NOT NULL,
  `name` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`pk_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

نگارش و جمع‌آوری توسط رضاسیف

Categories: طراحی دیتابیس Tags:

کتاب Patterns of Enterprise Application Architecture مارتین فاولر

۲۴ مرداد ۱۳۹۳ بدون دیدگاه
کتاب Patterns of Enterprise Application Architecture مارتین فاولر

کتاب Patterns of Enterprise Application Architecture مارتین فاولر

معماری نرم‌افزار یعنی ساختار و سازمان یک سیستم نرم‌افزاری که به منظور پشتیبانی از عملیات مشخص، بر روی سازماندهی اجزاء متمرکز می‌باشد. در واقع اجزاء را در حوزه‌های مرتبط به هم گروه بندی می‌کند. دیگر حوزه‌های مرتبط به هم، بر روی تبادل و تعامل با این حوزه متمرکز می‌شوند.
معماری نرم‌افزار از کلیدی‌ترین بخشهای تولید نرم‌افزار مخصوصا نوع تجاری آن است که البته در سالهای اخیر با ایجاد مدلهای کلاسیک تولید نرم‌افزار به نرم‌افزارهای عظیم تر محدود شده است.
معماری نرم‌افزار در واقع انتخاب یک ساختار کلی برای پیاده سازی یک پروژه نرم‌افزاری بر مبنای مجموعه ای از نیازهای کاربری و تجاری یک سیستم نرم‌افزاری است تا هم بتوان کاربردهای مورد نظر را پیاده سازی کرد و هم بتوان کیفیت نرم‌افزار، تولید آن و نگهداری آن را نیز بهینه کرد و سرعت بخشید. به عبارتی دیگر: معماری نرم افزار یک برنامه یا سیستم محاسباتی، ساختار یا ساختارهای آن سیستم محاسباتی است که خصوصیات قابل رویت از بیرون، عناصر و ارتباطات بین آنها را نشان می دهد.

یکی از مسائل مهم برنامه‌نویسی ، طراحی نرم‌افزارهای عظیم تجاری یا به اصطلاح نرم‌افزارهای Enterprise میباشد.
مارتین فاولر (Martin Fowler)  مهندس بریتانیایی نرم‌افزار ، مولف و متخصص معماری‌های نرم‌افزاری Object Oriented هستند که تالیفات مختلف ایشان، جزو بهترین‌ آموزش‌ها در این زمینه میباشد.

مارتین فاولرکتاب Patterns of Enterprise Application Architecture مارتین فاولر یکی از این تالیفات بسیار معروف استاد میباشد که مطالعه آن به تمامی علاقه‌مندان و برنامه‌نویسان توصیه میشود. البته باید توجه نمود که کتاب Patterns of Enterprise Application Architecture مارتین فاولر در سال ۲۰۰۳ نگارش شده و ممکن است در بعضی‌ موارد شامل مطالب جدید (به اصطلاح trendهای جدید معماری نرم‌افزار) نباشد، ولی شروع بسیار خوبی برای یادگیری طراحی نرم‌افزار بوده و هست.

دانلود کتاب

برای دانلود کتاب Patterns of Enterprise Application Architecture مارتین فاولر بصورت آنلاین  اینجا کلیک کنید.
درصورتیکه نیاز به مطالعه اسلاید در این زمینه دارید، پیشنهاد بنده به شما مطالعه این صفحه میباشد.

با به اشتراک گذاشتن این مطلب در شبکه‌های اجتماعی، به ما در توسعه این سایت کمک کنید.

باتشکر
رضاسیف