سوالی که برای خودم جوابش خیلی مهمه و همیشه هر article ای میخونم دنبالشم اینه که با چه منطقی سرویس ها از هم جدا میشن؟
وقتی که یه سرویست آنقدر بزرگ هست که میشه به چند تا سیستم کوچیک تر تقسیمش کرد
از اون سرویس قرار هست بیشتر از یک سرویس دیگه استفاده بکنه.
جدا کردن auth به عنوان یه سرویس جداگونه در شرایطی که با یه سرویس دیگه هست خیلی منطقی هست. فرض کن یه سرویس اصلی داری که Auth رو هم همون هندل میکنه (توکن میده، یوزر میسازه، rule/permission ها رو کنترل میکنه)
تکنولوژی هایی که باهاش معمولا درگیر میشی چیا هستن؟
تکنولوژی message bus rabbitmq/kafka
پکیج PassportJS یا Auth دستی نوشتن. مطالعه بیشتر در لینک۱، لینک۲، لینک۳، برای اطلاعات بیشتر توی گوگل nodejs nestjs microservice openid رو سرچ کن
سرویس Auth
توی جدول/کالکشن یوزر یه فیلد از نوع timestamp به اسم tokenTimestamp بزار.
هر وقت کاربر پسورد، یوزرنیم، شماره تلفن، یا permission هاش عوض شد فیلد tokenTimestamp رو اپدیت کن.
اپدیت کردن permission ها اینجوری هست که وقتی permission یه rule ای عوض میشه ما میایم یوزر هایی که اون rule رو دارن پیدا کرده و فیلد tokenTimestamp رو اپیدت میکنیم.
وقتی توکن صادر میکنی فیلد tokenTimestamp رو توی توکن میزاری.
سمت بک اند هم اطلاعات کاربر رو توی کش (Redis یا memory) ذخیره میکنی.
حالا اگه اطلاعات مشخص شده عوض بشن میایم کش رو invalid یا آپدیت میکنیم. این بخشش یه trigger یا store procedure تو دیتابیس هست که اطلاعات رو اپدیت نگه میداره
خیلیا من جمله خودم وقتی اولین بار میخوان یه میکروسرویس بسازن گیج میشن که از کدوم فریم ورک استفاده بکنن. خب من این زیر یه سری مطالبی مینویسم که به نظرم بدردتون میخوره
نکته اولی که میخوام بگم اینه: فریم ورکا زیادن. پس برید ببینید کدومشون جواب کار شما رو میده. یعنی دنبال بهترین نباش. ببین کدوم کارتو راه میندازه.
نکته دوم: اکثرا میگن که خود express بهترین گزینه هس یا حاقل یکی از بهترین گزینه ها هس. به نظرم این جمله: less abstraction better control برا اینجا ساخته شده.
نکته سوم: بعضی موقع ها هس که اصلا هیچ کدوم از فریمورکا جواب گوی نیاز شما نیس. پس تو این موارد بهترین کار اینه که دیگه هی وقتتو با سرچ بیخود هدر ندی و بری سراغ express
لیست فریم ورکا:
فریمورک Express که همه باهاش آشنایید
فریمورک Sails
فریمورک express-gateway
فریمورک restify
فریمورک Hapi
فریمورک Loopback که با swagger سازگاره و REST خوبه. ORM هم داره که کارو راحت تر میکنه
فریمرک Koa سبکه و performance اون هم خوبه
فریمورک سریع و قدرتمند moleculer که تو ساختن سرویس های reliable و scalable بهمون کمک میکنه.
چند مسئله که ذهن خودمم مدتی درگیرش بود و هست:
برای این که از ORM هایی مثل sequelize یا mongoose تو میکروسرویس ها استفاده بکنیم باید چکار کرد؟ سه راه جلوته:
چند تا دیتابیس داشته باشی که هر دیتابیس model یا schema خودشو داره. هر کدوم از این دیتابیسا برا یه سرویس میتونه باشه.
چند دیتابیس داری ولی همشونو از یه api میدی بیرون.
یه دیتابیس داری که از یه ماژول ثابت و abstract شده میدیش بیرون
۲. برای web socket ها چکار بکنم؟ میتونی از faye یا پکیج هایی مثل پکیج faye-websocket استفاده بکنی.
شاید زیاد برات جالب نباشه که در مورد HTTP بشنوی ولی برای اینکه بتونی یه RESTful API خوب بسازی نیاز داری این ماژول رو قشنگ درک کنی.
یه پروتکل برای ایجاد ارتباط بین سرور و کلاینته. چرخه response و request همون درخواست های کلاینت و پاسخ هایی هست که سرور میده. مثلا کلاینت درخواست ایجاد حساب کاربری میده و سرور هم یه جواب + یه status کد میده.
هر درخواست یه header و یه body داره. header ها همون key-value های مشهور هستن و body هم یه مشته دیتا هست که از سمت کلاینت به سرور یا از سمت سرور به کلاینت ارسال میشه.