نقشه راه یادگیری بک‌اند

نقشه راه یادگیری بک‌اند

مقدمه

آیا تا به حال به این فکر کرده‌اید که یک سازمان چگونه هماهنگی بین تیم‌ها و تغییرات مداوم در محیط کسب و کار  را مدیریت می‌کند؟ آیا تا به حال برنامه‌نویسی را دیده‌اید که مسیر چند ساله‌ی شما را در زمان خیلی کوتاه‌تری طی کرده و احساس می‌کنید انتخاب‌های نادرست باعث شده تا از مسیر اصلی و هدف خود دور شوید؟

یکی از دلایل تمام این سوالات نداشتن یک نقشه راه مناسب بر اساس اهداف شماست. افراد و سازمان‌های زیادی نقشه راه برنامه‌نویسی بک‌اند منتشر کرده‌اند. معتبرترین نقشه‌راه‌ توسعه‌دهندگان نرم‌افزار را سایت roadmap.sh منتشر کرده و در Github قرار داده تا برنامه‌نویسان دیگر بتوانند آن را کامل کنند. این نقشه راه همیشه با تغییرات تکنولوژی به روز می‌شود.

اما سوال مهم این است که آیا می‌توان یک نسخه یکسان برای همه افراد پیچید؟ برنامه‌نویسان و شرکت‌ها بر اساس اهداف متفاوتی که دارند نیاز به نقشه راه متفاوتی  دارند. من قرار نیست در این مقاله یک نقشه راه به تمام Backend Developerها نشان بدهم. بلکه سعی خواهم کرد که یک دید جامع به شما بدهم تا بتوانید بر اساس اهداف خود و شرکت نقشه راه مناسب خود را پیدا کنید.

اهمیت و کاربردهای نقشه‌ی راه بک‌اند در توسعه نرم‌افزار

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

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

یکی از نکات مهم این است که تیم‌های برنامه‌نویسی باید با آگاهی کامل و با استراتژی رو به جلو حرکت کنند. استراتژی یک تیم باید هم راستا با اهداف شرکت باشد و شرکت نیز باید نیروهایی جذب کند که در مسیر همکاری حداقل یک هدف مشترک داشته باشند. اینجاست که نقشه راه به عنوان یک زبان مشترک بین مدیران و تیم‌های توسعه نرم‌افزار می‌تواند نقش کلیدی داشته باشد.

توسعه بک‌اند (Backend Development) چیست؟

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

  1. دیتابیس: دیتابیس یا پایگاه داده یک ساختار سازماندهی شده است که برای ذخیره و مدیریت داده‌ها استفاده می‌شود. دیتابیس می‌تواند انواع مختلفی از داده‌ها را ذخیره کند. برای اطلاعات بیشتر، پیشنهاد می‌شود پست «راهنمای انتخاب دیتابیس مناسب پروژه‌های تحت وب» را بخوانید. 
  2. سرور: سرور یا سرویس‌دهنده یک کامپیوتر همیشه روشن است که با اتصال دائمی به اینترنت به درخواست‌های کاربران پاسخ می‌دهد. یک سرور باید از منابع سخت‌افزاری قدرتمندی استفاده کند تا بتواند درخواست‌های بالا را بدون وقفه پشتیبانی کند. برای اطلاعات بیشتر، پیشنهاد می‌شود پست «راهنمای بهترین سرور» را بخوانید. 
  3. اپلیکیشن: اپلیکیشن یک برنامه کامپیوتری است که روی سرور قرار می‌گیرد و به درخواست‌ها گوش می‌کند، اطلاعات مورد نیاز را از دیتابیس استخراج می‌کند و پاسخ مناسب را به کلاینت برمیگرداند.

مسئولیت‌های فنی توسعه‌دهنده بک‌اند

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

  • نوشتن کدهای تمیز و قابل نگهداری: این می‌تواند شامل ایجاد یک پروژه از ابتدا باشد یا اضافه کردن ویژگی‌های دلخواه به یک سورس کدی که از قبل وجود داشته است.
  • طراحی و مدیریت دیتابیس: یک توسعه‌دهنده بک‌اند باید بتواند انواع دیتابیس را بشناسد، مراحلی که برای بهینه‌سازی پایگاه داده انجام می‌شود را بداند تا در نهایت بتواند کدی را توسعه دهد که منابع کمی از سرور و دیتابیس مصرف کند. همچنین برای ارتباط با تیم نگهداری دیتابیس نیازمند یک دانش عمومی از دیتابیس هستیم. هرچه دانش ما در زمینه دیتابیس بیشتر باشد، هزینه‌ی توسعه نرم‌افزار نیز کاهش میابد.
  • ایجاد و مدیریت APIها: یک توسعه‌دهنده وب باید با مفاهیم Restful ،Soap ،RPC و انواع معماری‌های Api آشنا باشد و بتواند با سرویس‌های مختلف کار کند.
  • عیب‌یابی و رفع باگ برنامه: صرف نظر از اینکه توسعه دهنده فرانت‌اند باشیم یا بک‌اند، یکی از کارهای روتین و روزمره یک توسعه‌دهنده، رفع باگ‌ها و اشکالات برنامه است. پس به دو مهارت قدرت تحلیل و حل مسئله خیلی نیاز داریم.
  • مدیریت وب‌سرور: انتظار پیکربندی و نگهداری از وب‌سرور از توسعه‌دهنده بک‌اند انتظار به‌جایی است. مخصوصا در کسب و کارهای کوچک و استارتاپ‌هایی که بودجه استخدام یک مدیر سیستم وجود ندارد. وب‌سرورها روی یک سیستم‌عامل نصب می‌شوند. پس باید به سیستم‌عاملی که وب‌سرور را روی آن نصب‌ می‌کنید، مسلط باشید.
    لینک به دوره lpic1,lpic2,lpic3 جادی
  • مشارکت با تیم‌های دیگر: بیشترین ارتباط بین تیمی را با توسعه‌دهندگان فرانت‌اند خواهیم داشت. باید درک کاملی از فرآیند‌ها در توسعه فرانت داشته باشیم و روی مهارت‌ ارتباطی خود کار کنیم. به علاوه درک کلی از فرآیندهای DevOps و مدیریت دیتابیس و حتی دانش نسبی در مدیریت کسب و کار به توسعه‌دهنده و شرکت کمک فراوانی می‌کند تا وضایف خود را با سرعت بیشتری انجام دهند.

شروع مسیر تبدیل به یک توسعه‌دهنده بک‌اند

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

نقطه صفر: پیدا کردن یک منتور برنامه‌نویسی

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

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

مفاهیم پایه اینترنت، سیستم‌عامل و دانش فرانت‌اند

 اصلاحات تخصصی اینترنت نظیر پروتکل‌های اینترنت، مرورگرها، ip، پورت و غیره را بداند. مفاهیم پایه سیستم عامل، kernel، system software، application software و لغات تخصصی سیستم عامل را در حد تعریف و آشنایی بداند. همچنین باید با ابزارهای توسعه فرانت‌اند و لغات تخصصی این حوزه آشنا باشد تا ارتباط موثری با تیم فرانت‌اند داشته باشد.

اصطلاحات تخصصی اینترنت که یک توسعه‌دهنده بکد‌اند باید بداند

تعاریف و اصطلاحات تخصصی سیستم‌عامل برای توسعه‌دهندگان بک‌اند

هرآنچه یک توسعه‌دهنده بک‌اند باید در مورد فرانت‌اند بداند

ساختمان داده و طراحی الگوریتم

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

 چرا یک توسعه‌دهنده بک‌اند باید به مفاهیم ساختمان داده و طراحی الگوریتم مسلط باشد؟

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

منابع یادگیری ساختمان داده و طراحی الگوریتم

انتخاب یک زبان برنامه‌نویسی

قبل از شروع کردن به یادگیری زبان برنامه‌نویسی جدید لازم است به چند نکته توجه کنیم:

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

آموزش جستجوی پیشرفته در گوگل

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

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

راهنمای انتخاب بهترین زبان برنامه‌نویسی

میانگین حقوق برنامه‌نویسان بک‌اند در ایران

لیست ۱۰ بلاگ پست آموزش برنامه‌نویسی

آموزش version control systems و گیت

یادگیری سیستم‌های کنترل نسخه یا به اختصار VCS برای تمام برنامه‌نویسان بسیار حیاتی است. مدیریت و ردیابی تغییرات کدهای یک نرم‌افزار از طریق version control systems انجام می‌شود. گیت نیز یکی از سیستم‌های کنترل ورژن توزیع‌شده است که در سال ۲۰۰۵ توسط Linus Torvalds (خالق هسته سیستم‌عامل لینوکس) ایجاد شده است.

مزایای استفاده از سیستم‌های ورژن کنترل

  • افزایش سرعت توسعه
  • مدیریت راحت‌تر کد
  • همکاری و مشارکت به صورت تیمی و همزمان
  • بازگشت سریع به نسخه‌های پایدار
  • امکان مقایسه و بررسی کد‌ها در نسخه‌های مختلف
  • نسخه‌های پشتیبان
  • و …

همچنین صفحه پروفایل Github توسعه‌دهندگان نیز به عنوان یکی از سنجه‌های ارزیابی کیفی دانش آن‌ها به شمار می‌رود. مشارکت در پروژه‌های Open Source یک فرصت برای توسعه دهندگان است تا رزومه بهتری داشته باشند؛ ارتباطات جهانی ایجاد کرده و به جامعه Open Source کمک کنند. برای آموزش گیت نیز می‌توانید از مستندات git-scm شروع کنید.

دیتابیس‌های sql و nosql

یک توسعه‌دهنده بک‌اند باید به یک دیتابیس رابطه‌ای مانند Mysql و یک دیتابیس غیر رابطه‌ای مانند ردیس مسلط باشد. ذخیره و بازیابی اطلاعات در دیتابیس‌های مختلف، یکی از وظایف اصلی توسعه‌دهنده بک‌اند است. همچنین یک توسعه‌دهنده بک‌اند باید به زبان کوئری‌نویسی SQL مسلط باشد و پس از آشنایی با مفاهیم ORM بتواند با یک ORM کار کرده و یا دستورات SQL مستقل بنویسد.

مدیریت و نگهداری دیتابیس در شرایطی می‌تواند وظیفه توسعه‌دهنده بک‌اند باشد. هرچند که انتظار از توسعه‌دهنده بک‌اند در حد انتظارات از یک DBA نیست. اما انتظار می‌رود به مفاهیم نرمال‌سازی، بهینه‌سازی کوئری‌ها، ACID و مفاهیم مهم دیتابیس مسلط باشد.

کلین کد، دیزاین‌پترن‌ها، اصول طراحی و الگوهای معماری نرم‌افزار

چند تعریف نزدیک به هم و بسیار مهم در دنیای برنامه‌نویسی هستند که در توسعه‌دهنده‌ای باید به آن‌ها مسلط باشد. ابتدا در مورد کلین کد به چند نقل قول از افراد معروف دنیای نرم‌افزار اشاره می‌کنیم:

هر احمقی می‌تواند کدی بنویسد که کامپیوتر بتواند آن را بفهمد. برنامه‌نویسان خوب کدی را می نویسند که انسان بتواند آن را درک کند.
مارتین فولر

بسیاری از پروژه‌های نرم‌افزاری با افزایش چشمگیر هزینه‌های توسعه و نگهداری نرم‌افزار روبرو می‌شوند. با ادامه حیات پروژه، پیاده‌سازی ویژگی‌های جدید در Base Code گران‌تر می‌شود. بنابراین نوشتن کدهای قابل درک، قابل نگهداری و قابل توسعه به کاهش هزینه‌های نرم‌افزار کمک می‌کند. به علاوه مهارتی است که برای هر توسعه‌دهنده‌ای ضروری است. 

برنامه نویسی، هنر این است که به انسان‌های دیگر بگوییم که کامپیوتر چه کاری را می‌خواهد انجام دهد.
- دونالد کنوت

  • Clean Code اصطلاحی از توسعه نرم‌افزار است که کمک می‌کند تا کدهای نرم‌افزار خواندنی، تغییرپذیر،قابل تست، قابل توسعه و نگهداری باشد. اگرچه نوشتن کد تمیز در کوتاه مدت ممکن است طولانی‌تر باشد، اما ثابت شده است که نوشتن کد تمیز باعث صرفه‌جویی در زمان، تلاش و در نهایت پول می‌شود. به علاوه فرآیند تست کد تمیز بسیار ساده‌تر خواهد بود.
  • Design Principles: یا اصول طراحی، استانداردهایی هستند که برای سازماندهی و چیدمان اجزای ساختاری طراحی مهندسی نرم‌افزار استفاده می‌شوند. متد‌هایی که در آن‌ها این اصول طراحی اعمال می‌شود، از همان ابتدا بر روند کار تاثیر می‌گذارد.
  • Design Patterns: دیزاین پترن یک راه حل کلی و قابل استفاده مجدد برای مشکلات رایجی که در طراحی نرم‌افزار رخ می‌دهد، ارائه می‌دهد. این الگوها معمولا  روابط و تعاملات بین کلاس‌ها و اشیاء را نشان می‌دهد. 
    الگوهای طراحی همان استراتژی‌های مستقل از زبان‌های برنامه‌نویسی هستند که برای حل مشکلات رایج ارائه شده‌اند. به این معنا که یک الگوی طراحی نشان‌دهنده یک ایده است. استفاده از الگوهای طراحی، کدها را انعطاف‌پذیرتر ، قابل نگهداری و قابل توسعه می‌کند. 
  • Software Architectural Pattern: معماری نرم‌افزار یک راهکار ساختاریافته که انتظارات فنی و تجاری از نرم‌افزار را برآورده می‌کند. معماری نرم‌افزار مسائلی همچون نیازمندی‌ها و انتظارات آن را در سطوح عملیاتی و فنی توصیف می‌کند و از همین روی برای ماندن در عرصۀ رقابت در بازارهایی که به سرعت در حال تغییر هستند، باید بتوان در مواقع لزوم مدل کسب‌وکار خود را به سرعت تغییر داد. الگوهای متعددی وجود دارد که نرم‌افزار را در رسیدن به این اهداف نزدیک می‌کند.
    معماری نرم‌افزار شامل الگوهایی است که بر اساس اهداف و نیاز پروژه از آن‌ها استفاده می‌شود. میکروسرویس، مترجم و MVC از جمله الگوهای متداول معماری نرم‌افزار هستند.

آموزش اصول کدنویسی تمیز

۱۰ دیزاین پترن که برنامه‌نویسان باید آن‌ها را بدانند

۶ اصل طراحی که برنامه‌نویسان باید بدانند

آموزش ریفکتور کردن کد مخصوص برنامه‌نویسان با تجربه

تفاوت معماری نرم‌افزار و طراحی نرم‌افزار

Application Programming Interface (API)

apiها مجموعه‌ای از پروتکل‌ها و ابزارهایی هستند که به نرم‌افزارها این امکان را می‌دهد تا با یکدیگر ارتباط برقرار کنند.یک توسعه‌دهنده بک‌اند باید با توجه به نیاز کسب و کار یکی از انواع API را پیاده‌سازی کند. بنابراین باید به پیاده‌سازی انواع آن‌ها مسلط باشد. Restful Api، GraphQL، Soap و RPC  متداول‌ترین apiها هستند. در جدول زیر نیم‌نگاهی به تفاوت آن‌ها خواهیم داشت.

APIs GraphQL Rest Soap RPC
Organized in terms of schema & type system compliance with six architectural constraints envelope message structure local procedure calling
Format JSON XML,JSON,HTML, plain text XML only JSON, XML, Protobuf, Thrift, FlatBuffers
Learning Curve Medium Easy Difficult Easy
community Growing Large Small Large
use cases >Mobile APIs
Complex system
Micro services
>public APIs
simple resource driven apps
>Payment gateways
Identity management
CRM Solutions
Financial and Telecommunication Services
Legacy system support
>Command and action oriented Apis
internal
high performance
massive microservices systems

caching

کش یک لایه ذخیره‌سازی است که برای افزایش سرعت دسترسی به داده‌ها و بهبود عملکرد آن‌ها استفاده می‌شود. به طوری که سرعت دستیابی به داده‌ها در درخواست‌های بعدی با سرعت بیشتری توسط سرور ارائه می‌شود.

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

مزایای استفاده از سیستم caching

  • بهبود عملکرد برنامه
  • کاهش هزینه پایگاه داده
  • کاهش بار روی سرور
  • افزایش سرعت خواندن
  • عملکرد قابل پیش‌بینی

انواع روش‌های caching

  • cpu caching
  • in-memory caching
  • virtual memory caching
  • dns caching
  • کش در دیتابیس
  • کش سمت سرور
  • کش سمت کلاینت
  • کش در لایه CDN

آموزش استراتژی‌های مختلف caching در لاراول

تست‌نویسی

تست‌نویسی انواع مختلفی دارد و یک برنامه‌نویس بک‌اند به طور کلی باید به روش‌های زیر مسلط باشد

  • تست واحد یا unit test: برای بررسی صحت اجرای یک قسمت کوچک از کد استفاده می‌شود.
  • تست عملکرد یا performance test: عملکرد یک نرم‌افزار و ویژگی‌های آن با تست عملکرد مشخص می‌شود. هدف از این کار تعیین کارایی سیستم و حداکثر باری است که سیستم می‌تواند در برابر آن مقاومت کند.
  • تست ادغام یا integration test:  پس از ادغام ماژول‌های مختلف یا قسمت‌های مختلف یک ماژول که به صورت مجزا و به درستی کار می‌کند، انجام می‌شود و در این تست بررسی می‌شود که با ادغام آن‌ها مشکلی رخ نمی‌دهد.

database scaling یا مقیاس‌پذیری دیتابیس

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

  • مقیاس‌پذیری عمودی:  ارتقاء سخت‌افزاری تجهیزات سرور فعلی
  • مقیاس‌پذیری افقی: اضافه کردن سرورهای جدید و توزیع بار بین آن‌ها

زمانی که تعداد کاربران سیستم بیش از حد مورد انتظار باشد، ما با سه چالش مهم روبرو می‌شویم:

  • مصرف بیش از حد Ram و CPU که در این صورت سرور نمی‌تواند در زمان مناسب به همه درخواست‌ها پاسخ‌ دهد.
  • تمام شدن فضای ذخیره‌سازی و عدم توانایی ذخیره داده‌های جدید در دیتابیس
  • بار زیاد شبکه به طوری که سرور نمی‌تواند تمام درخواست‌های دریافتی را پشتیبانی کند.

در این صورت ما سراغ الگوهای طراحی دیتابیس مانند database sharding می‌رویم.

امنیت

امنیت را می‌توان در سطوح مختلف تعریف کرد. توسعه‌دهندگان بک‌اند باید به مباحث امنیت در لایه کدنویسی مسلط باشند. همچنین تسلط به امنیت وب سرور و مباحثی مانند hardening به توسعه‌دهنده بک‌اند کمک می‌کند تا تعامل بهتری با تیم داشته باشند. 

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

  • احراز هویت و مدیریت دسترسی کاربران (authentication, authorization)
  • الگوریتم‌های رمزنگاری
  • مانیتورینگ
  • امنیت apiها
  • امنیت فایل‌ها و محیط توسعه و نگهداری
  • hardening

وب‌سرور

وب‌سرور رایانه‌ای است که فایل‌های وب‌سایت را ذخیره، پردازش و به مرورگر تحویل می‌دهد. به طور کلی برای تفسیر و اجرای فایل‌های زبان‌های برنامه‌نویسی سمت سرور نیاز به وب‌سرور داریم. برای مثال زمانی که آدرس سایت رایانش سیستم (www.rayaneshsystem.com) را در مرورگر وارد می‌کنید، درخواست شما برای دریافت اطلاعات صفحه اصلی به سایت به دامنه ارسال می‌شود. 

بعد از رد شدن درخواست از لایه DNS درخواست به سرور می‌رسد. در این مرحله درخواست توسط وب‌سرور مدیریت می‌شود و پاسخ مناسب در قالب صفحات Html همراه با اطلاعاتی دیگر تحت پروتکل HTTP به مرورگر ارسال می‌شود.

nginx و apache به عنوان وب‌سرورهای محبوب و متداول وب‌اپلیکیشن‌ها به شمار می‌رود. انتظار می‌رود که یک توسعه‌دهنده بک‌اند به پیکربندی و راه‌اندازی این وب‌سرورها مسلط باشد. همچنین به فرآیند استقرار وب‌اپلیکیشن و انتقال سایت از محیط توسعه به محیط production و مباحث reserve proxy نیز مسلط باشد.

Containerization / Virtualization

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

حال تعریف مجازی‌سازی و کانتینرسازی ساده‌تر می‌شود. 

  • Virtualization یا مجازی‌سازی در مورد انتزاع سخت‌افزار و اجرای یک سیستم‌عامل است.
  • Containerization یا کانتینرسازی در مورد انتزاع یک سیستم‌عامل و اجرای یک برنامه است.

بنابراین انتظار می‌رود که یک توسعه‌دهنده بک‌اند علاوه بر این مفاهیم، به ابزارهای کار با آن‌ها مانند docker و kubernetes نیز مسلط باشد.

نتیجه‌گیری و نکات پایانی

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

امیدوارم از این پست لذت برده باشید. اگر نظری در مورد نقشه‌راه ارائه شده دارید حتما از طریق کامنت یا ایمیل مطرح کنید و این نقشه‌راه را با دوستان خود به اشتراک بگذارید.

دیدگاه‌ها

دیدگاهی ثبت نشده است

ایجاد دیدگاه

اولین نفری باشید که دیدگاه ثبت می‌کند

* ایمیل شما نمایش داده نخواهد شد

اعلانات


نظر شما با موفقیت ثبت شد. پس از تایید مدیران، در سایت نمایش داده می‌شود.

اعلانات


عملیات با موفقیت انجام شد