جلسات چسبناک با Apache APISIX

Sesticky sessions که به عنوان Session Affinity نیز شناخته میشود، مکانیزمی است که به وسیله آن یک جزء مسیریابی که به عنوان نما عمل میکند، همیشه یک درخواست را به همان گره بالادست زیرین هدایت میکند. در این پست، دلیل جلسات چسبناک، جایگزین های موجود و نحوه پیاده سازی آنها از طریق Apache APISIX را شرح خواهم داد.
چرا جلسات چسبناک؟
جلسات چسبنده زمانی محبوب شدند که وضعیت را در گره بالادست ذخیره کردیم، نه پایگاه داده. من از مثال یک فروشگاه تجارت الکترونیک ساده شده برای توضیح بیشتر استفاده خواهم کرد.
پایه های اساسی یک سایت تجارت الکترونیک کوچک می تواند شامل یک برنامه وب و یک پایگاه داده باشد.
اگر کسب و کار موفق باشد، رشد خواهد کرد، و شما باید این معماری را در مقطعی تغییر دهید. هنگامی که نمی توانید به صورت عمودی مقیاس کنید (ماشین های بزرگتر)، باید به صورت افقی (گره های بیشتر) مقیاس کنید. با گره برنامه های اضافی، شما همچنین به یک مکانیسم متعادل کننده بار در مقابل گره های برنامه وب نیاز دارید تا بار را بین آنها توزیع کنید.
هر بار رفتن به پایگاه داده یک عملیات گران است. برای داده هایی که به ندرت به آنها دسترسی پیدا می شود اشکالی ندارد. با این حال، ما می خواهیم محتوای سبد را برای هر درخواست نمایش دهیم. چند گزینه برای سرعت بخشیدن به کارها در دسترس است. اگر فرض کنیم که برنامه وب از رندر سمت سرور استفاده می کند، راه حل کلاسیک نگهداری داده های مربوط به سبد خرید در حافظه در گره برنامه وب است.
با این حال، اگر سبد خرید کاربر X را در گره 1 ذخیره کنیم، باید اطمینان حاصل کنیم که هر درخواست کاربر X را به همان گره ارسال می کنیم. در غیر این صورت، احساس می کنند که محتوای سبد خرید خود را گم کرده اند. Sesticky Sesions یا Session Affinity مکانیزمی است که کاربر را به طور مداوم به همان گره هدایت می کند.
محدودیت جلسات چسبناک
قبل از ادامه، باید محدودیت قابل توجهی از جلسات چسبناک را توضیح دهم. اگر گره برنامه وب که دادهها را ذخیره میکند به هر دلیلی از کار بیفتد، دادهها به طور غیرقابل جبرانی از بین میروند. F یا سناریوی تجارت الکترونیک بالا، به این معنی است که کاربران گهگاهی سبد خرید خود را گم میکنند، که از نظر تجاری غیرقابل قبول است.
به همین دلیل، جلسات چسبناک باید دست به دست هم بدهند تکرار جلسه: داده های ذخیره شده در یک گره باید کپی شده و با سایر گره ها همگام شوند.
در حالی که تکرار جلسه در تمام پشته های فناوری وجود دارد، هیچ مشخصات مرتبطی وجود ندارد. من با JVM آشنا هستم، بنابراین در اینجا چند گزینه وجود دارد:
هنگامی که داده ها در همه گره ها (یا یک خوشه راه دور) تکثیر می شوند، ممکن است فکر کنید دیگر نیازی به جلسات چسبناک ندارید. این درست است اگر یکی فقط برای در دسترس بودن و نه برای عملکرد در نظر گرفته شود. این در مورد محل داده ها است: واکشی داده ها در گره فعلی نه از در جای دیگری از طریق شبکه سریعتر است.
جلسات چسبناک در Apache APISIX
جلسات چسبناک برای هر Load Balancer، Reverse Proxy و API Gateway ضروری است. با این حال، باید اعتراف کنم که مستندات Apache APISIX به یک نقطه ورود آسان به موضوع نیاز دارد.
آپاچی APISIX a مسیر به یک بالادستیک بالادست از یک یا چند گره تشکیل شده است. وقتی یک درخواست با مسیر مطابقت دارد، Apache APISIX باید از بین تمام گرههای موجود برای ارسال درخواست به آن انتخاب کند. به طور پیشفرض، الگوریتم به صورت round-robin وزن میشود. Round-robin از یک گره بعد از دیگری، و بعد از آخرین مورد، به اولین مورد برگردید. با دور روبین وزندار، وزن بر تعداد درخواستهایی که Apache APISIX به یک گره ارسال میکند، قبل از اینکه به گره بعدی سوئیچ کند، تأثیر میگذارد.
با این حال، الگوریتم های دیگری در دسترس هستند:
هش کردن مداوم، بسته به مقداری از یک متغیر NGINX، یک هدر HTTP، یک کوکی و غیره، امکان ارسال به همان گره را می دهد.
به یاد داشته باشید که HTTP یک پروتکل بدون حالت است، بنابراین سرورهای برنامه یک کوکی در اولین پاسخ برای ردیابی کاربر در درخواستهای HTTP تنظیم میکنند. این همان چیزی است که ما آن را «sesion» مینامیم. ما باید نام کوکی جلسه اصلی را بدانیم. سرورهای برنامههای مختلف ارائه میدهند. کوکی های مختلف:
-
JSESSIONID
برای سرورهای مبتنی بر JVM -
PHPSESSID
برای PHP -
ASPSESSIONID
برای ASP.Net - و غیره.
من از تامکت معمولی استفاده خواهم کرد، بنابراین کوکی جلسه است JSESSIONID
. از این پس، اسناد Apache APISIX برای دو گره به شرح زیر است:
routes:
- uri: /*
upstream:
nodes:
"tomcat1:8080": 1 #1
"tomcat2:8080": 1 #1
type: chash #2
hash_on: cookie #3
key: cookie_JSESSIONID #4
- گره های بالادست را تعریف کنید
- الگوریتم هش ثابت را انتخاب کنید
- هش روی کوکی
- تعریف کنید که روی کدام کوکی هش شود
نتیجه
در این پست، جلسات استیکی را به تفصیل توضیح دادیم، که همیشه باید از تکرار جلسه با جلسات چسبناک استفاده کنید و نحوه پیادهسازی جلسات چسبناک در آپاچی APISIX.
فراتر رفتن:
در ابتدا در A Java Geek در 25 ژوئن منتشر شدهفتم، 2023