یک فروشگاه را تصور کن: مشتری میآید، صندوقدار کار را انجام میدهد، انبار جنس را نگه میدارد. سایت هم همین است. کسی که درخواست میفرستد Client است؛ ماشینی که جواب میدهد Server است. اگر این دو را قاطی کنی، بعداً نمیفهمی چرا اضافه کردن یک سرور سایت را نجات میدهد یا خرابتر میکند.
تقریباً هر سیستم وب را میشود مثل یک ساختمان چندطبقه دید. هر طبقه یک شغل دارد. جدا کردنشان کار اضافه نیست؛ همان چیزی است که بعداً اجازه میدهد هر طبقه را جدا بزرگ کنی، جدا عوض کنی، یا جدا تعمیر کنی.
معماری سهلایه
از بیرون به داخل، معمولاً سه طبقه میبینی. اسمها را حفظ نکن؛ بپرس هر طبقه چه چیزی را «یادش میماند» و چه چیزی را فقط «رد میکند».
بالا مشتری با گوشی و لپتاپ (Client). وسط میز پذیرش و منطق کار (Web / App). پایین بایگانی و گاوصندوق (Data). هر طبقه شغل جدا دارد.
DIAGRAMمعماری سهلایه
Client (Web / Mobile)
→
Web Layer — LB, CDN
→
App Layer — منطق کسبوکار
→
Data Layer — DB, Cache
Client
دستگاه و برنامه کاربر: مرورگر، اپ موبایل، حتی یک سرویس دیگر. درخواست را میسازد و جواب را نشان میدهد. خودش معمولاً منبع حقیقت داده نیست.
Web Layer
درب ورودی. Load Balancer ترافیک را پخش میکند، CDN فایلهای سنگین را نزدیک کاربر میدهد، TLS قفل را تمام میکند. این لایه تا حد ممکن سبک میماند.
App Layer
مغز کسبوکار: قیمت را حساب میکند، اجازه را چک میکند، سفارش را میسازد. اینجا باید تا حد ممکن Stateless باشد — یعنی حافظه گفتگو را روی خودش نگه ندارد.
Data Layer
حافظه سیستم. دیتابیس، Cache، صف، فایل. هر چیزی که State ماندگار دارد اینجاست. اگر این لایه بخوابد، معمولاً کل فروشگاه میخوابد.
مهمترین تصمیم لایه App: Stateful یا Stateless
فرض کن در بانک، هر بار باید به همان باجهای برگردی که پروندهات روی میز اوست. اگر آن باجه ناهار برود، کار تو میخوابد. اگر باجهها پرونده را در سیستم مرکزی بگذارند، هر باجهای میتواند کمکت کند. این همان فرق Stateful و Stateless است.
Stateful
سرور حافظه گفتگو را روی خودش نگه میدارد — مثلاً session در RAM همان ماشین. کاربر باید همیشه به همان سرور برگردد. اضافه کردن ماشین سخت است؛ ریاستارت یعنی از دست رفتن State.
Stateless
هر درخواست خودش کامل است. سرور چیزی از دفعه قبل یادش نیست. State مشترک در Redis یا دیتابیس است، یا داخل توکن JWT. هر سرور میتواند به هر درخواستی جواب دهد.
session
نشست ورود: سیستم باید بداند این همان کسی است که پنج دقیقه پیش وارد شد. سؤال این نیست «session داشته باشیم یا نه»؛ سؤال این است کجا نگهش داریم.
JWT
توکنی که خودِ درخواست آن را با خودش میآورد. سرور لازم نیست پرونده تو را در RAM نگه دارد؛ امضای توکن را چک میکند و جلو میرود.
وقتی سرورهای App لایه Stateless باشند، سه هدیه میگیری: سرور جدید فقط یک ماشین اضافه است، خراب شدن یکی فاجعه نیست، و Load Balancer آزاد است ترافیک را هر جا بفرستد. به همین دلیل قانون تکرارشونده این دوره این است: State را از سرورهای اپلیکیشن بیرون بکش.
به زبان ساده
سرور Stateless یعنی هر درخواست را مثل مشتری جدید میبیند و حافظه مشترک را جای دیگری نگه میدارد.
مثال واقعی
در بانک اگر پرونده روی میز یک باجه باشد فقط همان باجه کمکت میکند؛ اگر در سیستم مرکزی باشد، هر باجهای کار را تمام میکند.
دانشسنجی
آزمون درس
۴ Q
01
چرا Stateless بودن لایه App برای Scalability حیاتی است؟
02
session کاربر در معماری Stateless معمولاً کجا نگه داشته میشود؟