در این بخش می خوانید:
- طراحی سیستم (System Design) چیست؟
- چرا باید طراحی سیستم را یاد بگیرم؟
- اصول طراحی سیستم
- الگوهای طراحی سیستم
- پایگاه داده ها در طراحی سیستم
- طراحی سیستم توزیع شده
- یادگیری ماشین و طراحی سیستم
- کانتینرسازی و طراحی سیستم
- طراحی کلود و سیستم
طراحی سیستم (System Design) چیست؟
طراحی سیستم فرآیند تعریف عناصر یک سیستم مانند معماری، ماژول ها و اجزاء، رابط های مختلف آن اجزا و داده هایی است که از طریق آن سیستم می گذرد. طراحی سیستم به معنای برآوردن نیازها و الزامات خاص یک کسب و کار یا سازمان از طریق مهندسی یک سیستم منسجم و خوب است.
طراحی سیستم به معنای یک رویکرد سیستماتیک برای طراحی یک سیستم است. ممکن است رویکردی از پایین به بالا یا از بالا به پایین داشته باشد، اما در هر صورت این فرآیند سیستماتیک است که در آن همه متغیرهای مرتبط سیستم که باید ایجاد شوند - از معماری گرفته تا سخت افزار و نرم افزار مورد نیاز و داده ها و نحوه حرکت و تبدیل آن در طول سفر خود از طریق سیستم در نظر گرفته می شود. سپس طراحی سیستم ها با تجزیه و تحلیل سیستم ها، مهندسی سیستم ها و معماری سیستم ها همپوشانی دارد.
رویکرد طراحی سیستم ها برای اولین بار درست قبل از جنگ جهانی دوم ظاهر شد، زمانی که مهندسان در تلاش برای حل مشکلات پیچیده کنترل و ارتباطات بودند. آنها باید بتوانند کار خود را به یک رشته رسمی با روش های مناسب، به ویژه در زمینه های جدید مانند نظریه اطلاعات، تحقیقات عملیات و به طور کلی علوم کامپیوتر، استاندارد کنند.
هنگامی که کسب و کار یا سازمان شما الزامات خود را مشخص کرد، می توانید شروع به ایجاد آنها در یک طراحی سیستم فیزیکی کنید که نیازهای مشتریان شما را برطرف می کند. روشی که سیستم خود را طراحی می کنید به این بستگی دارد که آیا می خواهید به سمت توسعه سفارشی، راه حل های تجاری یا ترکیبی از این دو بروید. طراحی سیستم نیازمند یک رویکرد سیستماتیک به ساختمان و سیستم های مهندسی است. یک طراحی خوب سیستم مستلزم آن است که به همه چیز از سخت افزار و نرم افزار گرفته تا داده ها و نحوه ذخیره آن در یک زیرساخت فکر کنید.
چرا باید طراحی سیستم را یاد بگیرم؟
در طول دو دهه گذشته، پیشرفت های زیادی در وب اپلیکیشن ها در مقیاس بزرگ صورت گرفته است. این پیشرفت ها طرز تفکر ما را در مورد توسعه نرم افزار بازتعریف کرده است. همه برنامه ها و سرویس هایی که روزانه استفاده می کنیم، مانند فیس بوک، اینستاگرام و توییتر، سیستم های مقیاس پذیر هستند. میلیاردها نفر در سراسر جهان به طور همزمان به این سیستم ها دسترسی دارند، بنابراین باید برای مدیریت حجم زیادی از ترافیک و داده طراحی شوند. اینجاست که طراحی سیستم وارد می شود.
بهعنوان یک توسعه دهنده نرمافزار، انتظار می رود که به طور فزآیندهای از شما انتظار می رود که مفاهیم طراحی سیستم و نحوه اعمال آنها را درک کنید. در مراحل اولیه حرفه خود، یادگیری طراحی سیستم به شما این امکان را می دهد که با اعتماد به نفس بیشتری با مشکلات طراحی نرم افزار مقابله کنید و اصول طراحی را در کارهای روزمره خود اعمال کنید. همانطور که در حرفه خود پیشرفت می کنید و شروع به مصاحبه برای موقعیت های سطح بالاتر می کنید، طراحی سیستم به بخش بزرگی از فرآیند مصاحبه شما تبدیل می شود. بنابراین، مهم نیست که چه سطحی دارید، طراحی سیستم برای شما مهم است.
به دلیل اهمیت روزافزون آن، ما می خواستیم منبعی ایجاد کنیم تا به شما کمک کند در دنیای طراحی سیستم حرکت کنید.
اصول طراحی سیستم
اصول طراحی سیستم به مباحث زیر وابسته است:
- اصول طراحی سیستم
- مقیاس بندی افقی و عمودی
- میکروسرویس ها
- سرورهای پروکسی
- قضیه CAP
- افزونگی و تکرار
- ذخیره سازی
- ذخیره سازی بلاک
- ذخیره سازی فایل
- ذخیره سازی اشیاء
- آرایه های دیسک اضافی (RAID)
- صف های پیام
- کافکا
- فایل سیستم ها
- فایل سیستم گوگل (GFS)
- فایل سیستم توزیع شده هدوپ (HDFS)
الگوهای طراحی سیستم
دانستن الگوهای طراحی سیستم بسیار مهم است زیرا می توان آنها را برای انواع سیستم های توزیع شده اعمال کرد. آنها همچنین نقش عمده ای در مصاحبه های طراحی سیستم ایفا می کنند. الگوهای طراحی سیستم به مشکلات طراحی رایج مربوط به سیستم های توزیع شده و راه حل های آنها اشاره دارد. بیایید نگاهی به برخی از الگوهای رایج بیندازیم.
- بلوم فیلتر (Bloom Filter)
- Consistent hashing
- چک سام (Checksum)
- Quorum
- درخت مرکل (Merkle Tree)
- Leader election
پایگاه داده ها در طراحی سیستم
پایگاه داده ها پایه اساسی توسعه نرم افزار هستند. آنها اهداف مختلفی را برای پروژه های ساخت در هر اندازه و نوع انجام می دهند. هنگام انتخاب ساختار پایگاه داده خود، مهم است که سرعت، قابلیت اطمینان و دقت را در نظر بگیرید. ما پایگاه داده رابطهای داریم که میتوانند اعتبار داده ها را تضمین کنند، و پایگاهه داده های غیر رابطه ای داریم که میتوانند ثبات نهایی را تضمین کنند. هنگام انتخاب ساختار پایگاه داده خود، مهم است که اصول پایگاه داده را در نظر بگیرید، مانند:
- ACID
- BASE
- SQL joins
- نرمال سازی
- ماندگاری
تصمیمات پایگاه داده بخش مهمی از مصاحبه های طراحی سیستم هستند، بنابراین مهم است که با تصمیم گیری بر اساس موارد استفاده منحصر به فرد راحت باشید. پایگاه داده ای که انتخاب می کنید به پروژه شما بستگی دارد.
پایگاه داده ها در طراحی سیستم به دسته های زیر تقسیم می شوند:
- پایگاه داده ها
- پایگاه داده های رابطه ای
- MySQL
- PostgreSQL
- پایگاه داده های غیر رابطه ای
- MongoDB
- پایگاه داده های رابطه ای
طراحی سیستم توزیع شده
سیستم توزیع شده مجموعه ای از کامپیوترها است که با هم کار می کنند تا یک کامپیوتر واحد را برای کاربر نهایی تشکیل دهند. همه رایانه های مجموعه دارای وضعیت مشابهی هستند و به طور همزمان کار میکنند. این ماشین ها همچنین می توانند به طور مستقل بدون تأثیر بر کل سیستم از کار بیفتند. استقرار و نگهداری سیستم های توزیع شده ممکن است دشوار باشد، اما آنها مزایای زیادی را ارائه می دهند، از جمله: مقیاسبندی، رشد ماژولار، تحمل خطا، مقرون به صرفه، تاخیر کم، کارایی بالا، موازی سازی.
الگوهای طراحی به ما راه هایی برای ساختن سیستم هایی می دهد که متناسب با موارد استفاده خاص باشد. آنها مانند بلوک های ساخت هستند که به ما اجازه می دهند به جای شروع هر سیستم از ابتدا، از دانش موجود بیرون بکشیم. آنها همچنین مجموعه ای از مدلهای استاندارد برای طراحی سیستم ایجاد می کنند که به توسعه دهندگان دیگر کمک می کند تا ببینند پروژه هایشان چگونه می توانند با یک سیستم معین ارتباط برقرار کنند. الگوهای طراحی سیستم توزیع شده یک معماری نرم افزاری را برای نحوه ارتباط گره های مختلف با یکدیگر، انجام وظایف خاص و اینکه جریان فرآیند برای وظایف مختلف چگونه باید باشد، ترسیم می کند. اکثر الگوهای طراحی سیستم توزیع شده بر اساس عملکردی که با آن کار می کنند در یکی از سه دسته قرار می گیرند:
ارتباط شی: پروتکل های پیام رسانی و مجوزهای اجزای مختلف سیستم را برای برقراری ارتباط توضیح می دهد.
امنیت: نگرانیهای مربوط به محرمانگی، یکپارچگی و در دسترس بودن را بررسی می کند تا مطمئن شود سیستم از دسترسی غیرمجاز ایمن است.
رویداد محور: تولید، تشخیص، مصرف و پاسخ به رویدادهای سیستم را توصیف می کند.
یادگیری ماشین و طراحی سیستم
طراحی سیستم یادگیری ماشینی فرآیند تعریف معماری نرمافزار، الگوریتمها، زیرساختها و دادهها برای سیستمهای یادگیری ماشین برای برآوردن نیازهای خاص است. اگر می خواهید یک مهندس یادگیری ماشین باشید، از شما انتظار می رود که پایه های مهندسی محکم و تجربیات عملی ML داشته باشید. چرخه توسعه استاندارد یادگیری ماشینی شامل جمع آوری داده ها، مسئله، فرمول بندی، ایجاد مدل، پیاده سازی مدل ها و بهبود مدل ها است. هیچ دستورالعمل استاندارد و معمولی برای نزدیک شدن به طراحی سیستم یادگیری ماشینی از ابتدا تا انتهای آن وجود ندارد.
کانتینرسازی و طراحی سیستم
مشابه فناوریهای یادگیری ماشینی، فناوریهای کانتینرسازی نیز در حال افزایش محبوبیت هستند و در صنایع مختلف گسترش بیشتری پیدا میکنند. به همین دلیل، طراحی و اجرای سیستمهای کانتینر سازی نیز در حال افزایش است.
رایانش ابری امکان دسترسی به خدماتی مانند بسترهای ذخیره سازی یا توسعه را بر اساس تقاضا از طریق مراکز داده خارج از سایت متصل به اینترنت فراهم می کند. مراکز داده توسط شرکت های شخص ثالث یا ارائه دهندگان کلود مدیریت می شوند. مدل رایانش ابری نه تنها مشکلاتی را که در سیستمهای داخلی رخ میدهد برطرف میکند، بلکه مقرون به صرفه تر، مقیاس پذیرتر و کار با آن راحت تر است. سرویس های ابری ابزارهایی را در اختیار شما قرار می دهند که بتوانید سیستم های انعطاف پذیر و کارآمد را طراحی و پیاده سازی کنید. معماری های مختلف سیستم ابری عبارتند از:
- چند ابری
- ابر هیبریدی
- تک ابر
- ابر عمومی
- ابر خصوصی
محبوبیت رایانش ابری همچنان در حال افزایش است. می تواند نقش عمده ای در طراحی و معماری سیستم داشته باشد. دانستن این خدمات و مدل ها هنگام طراحی یک سیستم مهم است.