دربارهٔ این فصل
یادداشتِ همراه نواروقتی درگیر ساخت برنامههای سمت سرور هستید، مدام با کلمات دهانپُرکنی مثل پایگاههای دادهٔ غیررابطهای، مقیاسپذیری وب و معماری ابری بمباران میشوید. اما واقعاً پشت این همه اصطلاح رنگارنگ چه اصول پایداری نهفته است که با تغییر کردن ابزارها همچنان سر جای خودشان باقی میمانند؟
این پرسش محوری کتاب «طراحی برنامههای دادهگرا» نوشتهٔ «مارتین کلپمن» است؛ راهنمایی عمیق که کمک میکند از سطح این اصطلاحات عبور کنیم و به درک درستی از مهندسی داده برسیم.
نخستین چالش در این مسیر، ساختن سیستمی است که در برابر خطاهای مختلف مقاومت کند. در مهندسی نرمافزار، قابلیت اعتماد (Reliability) یعنی توانایی سیستم در ادامهٔ کار درست حتی وقتی خطا رخ میدهد. فرض کنید در یک سامانهٔ بانکی، بروز یک نقص سختافزاری یا خطای انسانی نباید کل داراییها را به خطر بیندازد. انتخابهای معماری ما باید طوری باشد که سیستم در مواجهه با این مشکلات پیشبینینشده، پابرجا بماند.
چالش دوم به رشد مداوم حجم اطلاعات مربوط میشود. وقتی یک اپلیکیشن با میلیونها کاربر روبهرو میشود، مقیاسپذیری (Scalability) یعنی توانایی سیستم در مدیریت رشد بار و حجم داده اهمیت حیاتی پیدا میکند. اگر بدون نیاز واقعی سراغ معماریهای پیچیده و توزیعشده برویم، دچار بهینهسازی زودهنگام میشویم و هزینههای گزافی میپردازیم؛ اما اگر سیستم را درست طراحی نکنیم، در روزهای اوج ترافیک زمین گیر خواهیم شد.
مسئلهٔ سوم به طول عمر کدها و زیرساختها برمیگردد. قابلیت نگهداری (Maintainability) یعنی سهولت تغییر، تعمیر و ادارهٔ سیستم در طول زمان که کمک میکند تیمهای نرمافزاری بدون هدر دادن انرژی، ویژگیهای جدید را به محصول اضافه کنند. کتاب توضیح میدهد که چطور میتوان ساختارها را طوری چید که تغییر نیازمندیهای کسبوکار، کل پروژه را از بین نبرد و توسعهدهندگان در سالهای آینده هم از کار کردن روی کدها لذت ببرند.
در نهایت، وقتی از یک ماشین فراتر میرویم و به سراغ سامانههای توزیعشده میرویم، هماهنگی بین بخشهای مختلف سخت میشود. سازگاری نهایی (Eventual Consistency) یعنی نسخهها در نهایت همخوان میشوند، نه لزوماً در همان لحظه؛ روشی که در بسیاری از پایگاههای دادهٔ مقیاسپذیر برای سرعت بخشیدن به پاسخدهی به کار میرود و البته پیچیدگیهای منطقی خاص خودش را دارد.
پیشنهاد من این است که وقتی ابزار جدیدی وارد بازار میشود، بهجای هجوم آوردن برای یادگیری تمام جزئیات سطحی آن، ابتدا اصول پایهای ذخیرهسازی، پردازش و توزیع داده را مرور کنید تا ببینید آیا واقعاً حلکنندهٔ مسئلهٔ واقعی شما هستید یا خیر.
شناخت این اصول زیربنای ساخت هر نرمافزار مقاومتپذیری است که باید هر روز در دنیای واقعی دوئت کند. امیدوارم این مرور کوتاه نگاه تازهای به معماری دادهها به شما داده باشد.