سوال در مورد چگونگی ارسال درخواست از Phoeinix به کانتینر Elixir

داکر
میکروسرویس
سرور

#1

با درود خدمت دوستان .

چیزی که نیاز دارم به شرح زیر هست :

من از کانتینر فونیکس می یام یک درخواستی رو به یک کانتینر فونیکس دیگر که api gateway‍ من هست می فرستم یا بجای فونیکس اولی از اپلیکیشن موبایل می فرستم به فونیکسی که درگاه api من هست تا اینجا مشکلی نیست اون دامنه می یاد توی ساب دامینم حله

مثلا

name.com/api/v1/showlost

حالا اون فونیکسی که درگاه api من هست می یاد یک درخواست به کانتینر تیکت دهی می فرسته و ازش اطلاعات می خواد که بگیره به موبایل بر گردونه

چطور می شه از فونیکس به یک کانتینر مجزا که ارتباطشون فقط شبکه داخلی هستو الکسیر هست بفرسته . مثل فونیکس نیست که روتر داشته باشه و بگه درخواست get و … رو بگیره

نکته : کلیه درخواست ها json می فرسته و json می گیره .

api gateway من به ده کانتینر مجزا متصل هست که هر کدوم کار خودشون می کنند

مثلا :
۱. مدیریت تیکت دهی
۲. مدیریت دسترسی
۳. فروشگاه
۴. …

با تشکر

به روز رسانی


#2

سلام باید خودت روتر درست کنی, از plug استفاده کن.

https://hexdocs.pm/plug/Plug.Conn.html


#3

درود توماج جان . اینجوری پیچیدگی زیاد نمی شه ؟ بهتر نیست بجای همه پروژه الکسیر بک گراند بجاشون pheonix بزنیم ؟


#4

ممکنه پیچیدگی با phoenix بیشتر میشه، خود phoenix از plug استفاده میکنه + خیلی چیزهای دیگه، در صورتی که کار شما با الیکسر راه میوفته و فقط یک json api خیلی کوچک لازم داری از phoenix استفاده نکنی بهتره اما اگر بیشتر از این باشه ممکنه با phoenix کار بهتر راه بیوفته. با توضیح شما انگار نیازی به یک فریمورک واقعا نیست


#5

تشکر . من عکس هم قرار دادم در پست اول - همه کار ها در api یعنی کانتینرش انجام می شه و فقط به اون کانتینر هایی که درخواست ارسال می شه اونا خواننده و ویرایش کننده دیتابیس هستند . نه کار دیگه ای .


#6

فکر کنم اگر proxy هم Phoenix باشه بهتره، ولی سعی کن خیلی ساده باشه. ممکنه بعدا کارت با الیکسر سخت بشه.


#7

در کل سعی کن یه استاندارد و کنوانسیون کلی هم برای همه اپ ها داشته باشی بعد هر سرویس جدیدی که بخوای پیاده کنی میدونی دقیقا از کجا و چطوری باید شروع کرد. منظورم اشاره به پیچدگی بود که فرمودی


#8

درود توماج جان تشکر از راهنمایی هات . مظنرو از پرو-ک-سی همون کانتینری هست که من api نوشتم درسته ؟ تو تصویر پست اول ؟


#9

بله منظورم همون بود.
راستش کانتینر بودن یا نبودنش خیلی مهم نیست و فکر کردن به کانتینر فقط باعث پیچیدگی میشه، از دید من این ها یک سری ماژل یا سرویس هستند که با هم بوسیله json api تبادل داده میکنند


#10

بله توماج جان درست می فرمایید بیشتر هی می گم کانتینر چون ممکن هست در آینده هر میکرو سرویس روی یک سرور باشد .

تشکر از شما بخاطر کمک های همیشگی ممنونم


#11

من یک سوالی برام پیش اومده . اون کانتینر پرو-ک/-س-ی من هیچ دخل و تصرفی روی داده های ارسال نداره؟

البته قبلا هم پرسیدم ولی یک بار دیگه تایید کامل بگیرم از دوستان

آیا من به صورت مثال باید params رو کامل بفرستم به میکروسرویس مثلا user یا باید در کانتینر پرو-ک/-س-یم بیام بگم مثلا فقط اگر پارامتر های name, last بود بفرست به میکروسرویس در غیر این صورت قبل از ارسال به میکروسرویس مورد نظر ارور به کاربر برگشت بده.

یعنی من باید یک لایه کوچیک دریافت درست داده رو در پرو-ک/-س-ی داشته باشم یا خیر؟


#12

شهریار جان یکمی بیشتر توضیح میدی؟


#13

درود توماج جان ببخشید توضیحم نا کامل بود .

فکر کنید بنده یک کاربر از موبایل درخواستی رو برای فراخوانی اطلاعات شخصیم به پروکسی که در عکس بالا api نوشتم می فرستم . به آدرس /api/show و پروکسی اون اطلاعات رو برای وب سرویس اول یعنی user می فرسته به آدرس localhost/user/showuser

وب سرویس user برای نشان دادن کاربر سه پارامتر نیاز داره

۱. مثلا توکن
۲.مثلا ایمیل
۳.مثلا نوع زبان

اگر کاربر یکی از این فیلد هارو نفرسته میکروسرویس user می یاد می گه یکی نفرستادی و ارور ۴۰۳ بر می گردونه .

حالا سوالم این هست که بهتر نیست من یک بار هم در api چک کنم سه مورد بالا یعنی توکن - ایمیل - زبان اگر کاربر در لینک /api/show نفرستاد همونجا ارور بده دیگه نره توی وب سرویس user که اونجا ارور بگیره.

نکته من در خود وب سرویس مورد نظر شرط های مربوطه رو نوشتم ولی گفتم بهتر نیست قبل از درگیر کردن میکروسرویس بجای ارسال دو درخواست بیاییم در api پروکسی این کارو بکنیم . زمان کمتری ببره ؟


#14

گاهی شرایطی وجود داره که مجبوریم یک‌سری از فیلد ها رو در مثلا مورد شما در پروکسی ولیدیت کنیم‌ اما خیلی couple کردن دوتا سرویس بر اساس یک فیلد شاید کار جالبی نباشه، من ترجیح میدم سرویس مقصد کاملا مسئولیت validation و مدیریت ارور رو به عهده بگیره و بین سرویس های درونی به جای business rules دیتا جابه جا بشه.
اگر شرایطی پیش اومد که دیتای مشابه زیادی بین سرویس ها وجود داشت و نیاز بود که ولیدیشن زیادی انجام بشه، خب یک validation service ممکنه تا حدودی به‌کمکون بیاد،