چرا ظاهر سایت مهم است؟
نوامبر 17, 2020مقدمه ای بر معماری event-driven
نوامبر 17, 2020مقدمه:
بحث کارآیی یکی از دغدغه های هر سیستم نرم افزاری است که امروزه با گسترش و بزرگتر شدن نرم افزارها این دغدغه یک نقطه بازدارنده است. علاوه بر الگوها و نکات فراوانی که در معماری های نرم افزاری در نظر گرفته میشود (در مقاله معماری مبتنی بر رویداد به شما کمک میکند) بکارگیری از تکنیکهایی ساده باعث جهشی چشمگیر (boost) در کارآیی میشود. یکی از این تکنیکها caching یا کش کردن است که در این نوشته به آن خواهیم پرداخت.
کش کردن همونطور که از نامش هم مشخص هست یک روش برای سرعت بخشیدن به یکسری دیتا هست. این داده ها عمدتا داده هایی هستند که تغییر نمیکنند یا تغییراتشون کم هست و مکررا از دیتابیس خونده میشن.
یک مثال دنیای واقعی:
مثلا فرض کنید یک سری دسترسی ها دارید که به کاربرانتون منتسب شده و کاربرانتون بر اساس اون دسترسی ها به بخشهای مختلفی از سامانه دسترسی دارند. فرض کنید میخواید به محض اینکه این دسترسی رواز کاربر گرفتید کاربر دیگه نتونه اون بخش رو استفاده کنه. برای همچین سناریویی شما باید مدام پیش از انجام هر عملیات دسترسی های کاربراتون رو چک کنید. خوب کاملا مشخص هست که مراجعه مکرر به بانک اطلاعاتی باعث افت کارآیی و بالارفتن زمان پاسخگویی همه سرویسهاتون میشه. علاوه بر این این واقعیت رو هم در نظر داریم که به ندرت داده های دسترسی مورد تغییر قرار میگیره.
در این مثال استفاده از مکانیزم caching باعث بهبود چندصد برابر کارآیی سرویسها و سامانه خواهد شد. در مثالی واقعی دز یکی از پروژه های آویهنگ زمان پاسخ متوسط 60 میلی ثانیه در سناریویی مشابه سناریوی بالا به 2 یا 1 یا بعضا نانو ثانیه بهبود پیدا کرد.
تعریف:
caching به معنی نگه داشتن یک کپی از داده در فضایی بغیر از محل اصلی است که دسترسی به آن به مراتب سریعتر باشد.
با تعریف فوق محل نگهداری این داده میتواند هم client-side باشد و هم server-side. یک نمونه همیشگی که هر روز با آن در تماس هستیم cache مرورگرها هستند. تمامی صفحات و resource های یک صفحه تحت وب در فضای اختصاصی مرورگر cache میشود و برای لود شدن مجدد مرورگر تصمیم میگیرد که آیا از cache خود استفاده کند یا نه. توی یک نرم افزار تحت وب cache در تمامی لایه ها وجود داره. توضیحات بیشتر در https://www.bigcommerce.com/ecommerce-answers/what-browser-cache-and-why-it-important/
همانطور که تو شکل بالا هم مشخصه در لایه بانک اطلاعاتی سرویس دهنده های وب و خود مرورگر که توضیح دادیم cache وجود داره و مکانیزم caching مورد استفاده قرار میگیره.
ابزارها:
همونطور که میدونیم سرعت واکشی داده از مموری چندین برابر سرعت واکشی داده از دیسکه. با همین تعریف دیتابیسهای خاص منظوره ای بنام in-memory database ها بوجود اومدن که یکی از شناخته شده ترین شون Redis هست.
ردیس یک دیتابیس in-memory هست که میشه برای سناریوهای مختلفی مورد استفاده قرار بگیره. ما در آویهنگ در پروژه هایی که نیاز به استفاده از مکانیزم cache داشتیم از redis استفاده کردیم. Redis یک دیتابیس از جنس key-value هست که داده هاش رو در memory نگهداری میکنه و سرعت بازیابی خارق العاده ای داره.
در نوشته های بعدی در خصوص redis و موارد استفاده اش بیشتر توضیح خواهیم داد.