زیرساخت Restful API

زیرساختی مبتنی بر میکرو سرویس ها به منظور پیاده سازی پروژه هایی با سایز متوسط و بزرگ

امروزه اکثر نرم افزارها دارای ویژگی های مشترکی مانند احراز هویت، خبر رسانی، مالی و غیره می باشند. بهره گیری از یک زیرساخت نرم افزاری مبتنی بر فناوری روز که کلیه اجزای نامبرده به صورت مستقل طراحی و پیاده سازی شده باشد می تواند سرعت توسعه نرم افزارهایی که بر روی این زیر ساخت بنا شده اند را افزایش داده و در نهایت هزینه آن را کاهش دهد. از سوی دیگر بهره گیری از فناوری روز و پیاده سازی این زیر ساخت نرم افزاری با معماری میکرو سرویس می تواند آن را برای نرم افزارهایی با قابلیت دسترس پذیری بالا و قابل اعتماد فراهم سازد. تیم ثانی مهر سعی بر آن نهاده تا در طراحی و پیاده سازی این زیر ساخت کاربردی از Best Practice های موجود در تمامی اجزای آن بهره برده و در نهایت موفق به تولید محصولی کاربردی برای نرم افزارهای سایز متوسط و بزرگ گردد.

چند پلتفرمی

پشتیبانی از چندین سیستم عامل یکی از برگترین اهداف در پیاده سازی این زیر ساخت نرم افزاری بوده است. این زیرساخت قابلیت نصب بروی سیستم عامل Windows، Linux و MacOS را دارد و در کنار آن می تواند به بانک های اطلاعاتی متنوعی مانند Microsoft SQL Server، MySQL، Oracle و Redis متصل شود.

بنابراین نرم افزاری که روی این زیرساخت توسعه یابد بسیار منعطف بوده و بنابر نیاز مشتری و شرایط کسب و کار از سیستم عامل یا بانک اطلاعاتی مختلف استفاده خواهد نمود و این امر شرایط پشتیبانی و مباحث Software License را سهولت می بخشد.

عدم وابستگی به سیستم عامل یا بانک اطلاعاتی خاص یکی از امتیازات ویژه این زیرساخت نرم افزاری است که تیم ثانی مهر در زمان تحلیل و طراحی، این موضوع را یکی از اهداف اصلی خود مد نظر داشته است.

Generic placeholder image

پشتیبانی از مدل های مختلف برنامه های کاربردی کاربر نهایی

امروزه نرم افزارها در قالب وب، موبایل و یا اپلیکیشن دسکتاپ به کاربران هایی ارائه می شود. همچنین در برخی مواقع لازم است خدمات کسب و کار به شکل سرویس در اختیار سایر کسب و کار های قرار گیرد. بنابراین زیرساخت نرم افزاری ثانی مهر با انعطاف پذیری خود، پشتیبانی از همه نوع برنامه کاربردی را فراهم ساخته است و این قابلیت نقطه قوت آن در فراهم سازی نیازمندی مشتریان گردیده است. از جمله انواع برنامه های کاربردی کاربر نهایی به موارد زیر می توان اشاره نمود:

  • وب
  • موبایل
  • دسکتاپ
  • دستگاه های کاربردی در حوزه اینترنت اشیاء
  • دیگر سامانه های کابردی بیرونی

Generic placeholder image

میکروسرویس ها

زیرساخت نرم افزاری Restful API از میکروسرویس مختلفی تشکیل شده است که سعی شده در همه آنها حداقل نیاز هر نوع نرم افزار پیاده سازی شود تا در آینده هرگاه نیاز به استفاده از آن بود در بهترین حالت نیازی به تغییر آن وجود نداشته باشد و در غیر اینصورت پس از جلسات تحلیل، متناسب به کسب و کار هدف، فرآیند شخصی سازی بر روی آن در کمترین زمان ممکن صورت پذیرد.

در طراحی و تفکیک میکروسرویس ها دقت لازم شده است تا مفاهم مربوط به طراحی مبتنی بر دامنه به صورت کامل درنظر گرفته شود. در معماری میتنی بر میکروسرویس، میکروسرویس ها از حضور یکدیگر اطلاع ندارند و اگر طراحی درستی در مرز بندی آنها صورت نگرفته باشد، می تواند به افزونگی زیاد اطلاعات و یا ارتباط در هم تنیده دو یا چند میکروسرویس متنهی شود.

احزار و تصدیق هویت

در پیاده سازی این میکرو سرویس سعی بر آن شده تا کلیه مفاهیم احراز و تصدیق به کار گرفته شود. این میکروسرویس احراز و تصدیق هویت از سه دیدگاه متفاوت را بر عهده دارد.

  • کاربر نهایی: شخص یا کدی که از طریق برنامه کاربردی با سیستم در حال کار است.
  • برنامه کاربردی: کاربر نهایی باید از طریق یک برنامه کاربردی با زیرساخت ثانی مهر کار کند و این میکروسرویس قادر است دسترسی را برای برنامه کاربردی کنترل نماید.
  • منابع: کاربر نهایی بنا بر نیاز خود در طول کار با برنامه کاربردی به اطلاعات مختلف دسترسی دارد. این اطلاعات همان منابع نرم افزار هتسند که در اختیار ایشان قرار گرفته است. بنابراین این میکروسرویس قدرت کنترل دسترسی به منابع مختلف را دارا می باشد.

 در پیاده سازی این میکرو سرویس از فناوری متن باز Identity Server 4 استفاده شده است که به طور کامل منطبق بر اکوسیستم مایکروسافت بوده و یکی از پرکاربردترین ها در این زمینه است. این میکروسرویس بر اساس نیازمندی این زیرساخت شخصی سازی شده است و متدهای احراز هویت بر اساس کد تأییدیه نیز به آن اضافه شده است.

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

Generic placeholder image

مشتری

کاربر پس از احراز هویت موفق، در قالب یک مشتری در سامانه ثبت می گردد تا از آن پس قادر به تکمیل اطلاعات پروفایلی خود گردد. از جمله اطلاعاتی که به عنوان مشتری ثبت می گردد می توان به موارد زیر اشاره نمود:

  • اطلاعات فردی
  • اطلاعات تماس
  • عکس پروفایل
  • نام جایگزین (Nickname)
  • و سایر اطلاعاتی که بسته به نوع کسب و کار ممکن است به آن افزوده گردد. 

Generic placeholder image

هسته تنظیمات

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

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

Generic placeholder image

اطلاع رسانی

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

  • پیام کوتاه: بکارگیری دو بستر ارسال پیامک به منظور تحمل پذیری اشکال و تقسیم بار.
  • ایمیل: اتصال به Mail Server بیرونی به منظور ارسال ایمیل.
  • نوتیفیکیشن
  • SignalR: تبادل اطلاعات دوطرفه به منظور پشتیبانی از چت و بروزرسانی لحظه اطلاعات در سمت کلاینت. به منظور ارتقاء سطح کیفیت این فناوری، موارد زیر در آن پیاده سازی شده است.
Generic placeholder image

محصولات

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

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

Generic placeholder image

پرداخت

در اکثر نرم افزارهای مرتبط با کسب و کار، فرآیند پرداخت یکی از نیازمندی های اساسی در تکمیل روال کاری آن می باشد. در این زیرساخت نیز فرآیند پرداخت از طریق درگاه پرداخت به صورت ساده و تسهیم پیاده سازی شده است.

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

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

Generic placeholder image

سفارش

پس از عملیات پرداخت، فرآیند سفارش دهی و رساندن محصول به خریدار طی خواهد شد. این فرآیند برای کالای فیزیکی می تواند از طریق پیک، پست و یا تحویل در فروشگاه صورت گیرد و برای محصولات دیجیتال به وصورت لینک دانلود، ارسال ایمیل و پیامک و طرق دیگر باشد. بنابراین کلیه فرآیندهای مربوط به تحویل محصول به مشتری، مرجوعی و یا تغییر در روال سفارش از طریق این میکرو سرویس صورت می گیرد.

همچنین این بخش وظیفه اطلاع رسانی وضعیت کنونی سفارش به کاربر نهایی را نیز در کلیه مراحل این فرآیند بر عهده دارد.

Generic placeholder image

سبد خرید

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

همچنین با توجه به معماری میکروسرویس ها، در شرایطی که به هر دلیلی (بروزرسانی اجزای سیستم و یا مشکل فنی) میکروسرویس محصولات در دسترس نباشد کاربر قادر است فرآیندهای سفارش و پرداخت را برای سبد خرید خود را تکمیل نماید.

در این میکروسرویس رویدادهای زیر در نظر گرفته شده تا سبد خرید کاربر بروزرسانی گردد:

  • تغییر قیمت محصول
  • عدم موجودی محصول
  • بروزرسانی قیمت بر اساس تخفیف صورت گرفته به آن
Generic placeholder image

مالی

هر نرم افزاری که در آن تراکنش مالی انجام گیرد نیاز دارد تا سند مالی آن در سیستم ثبت گردد تا در صورت نیاز خروجی منطبق با کدینگ حسابداری شرکت واکشی شود. در این میکروسرویس کلیه تراکنش های موفق، برگشتی و اصلاح شده به صورت سند حسابداری ذخیره و نگهداری می شود و تمامی گزارشات مالی از آن اخذ می گردد.

Generic placeholder image

زیرساخت نرم افزاری

وقتی صحبت از معماری میکروسرویس ها است، یکی از موارد مهمی که باعث می شود از تمامی قابلیت های این معماری بهره برداری گردد، بکارگیری زیرساخت نرم افزاری مورد نیاز آن است. برخی از نیازمندی های معماری میکروسرویس به شرح زیر است:

  • میکروسرویس ها باید در مواقع خاص با یکدیگر تعامل اطلاعات داشته باشند. به عنوان مثال وقتی قیمت یک محصول تغییر می کند باید این تغییر به اطلاع میکروسرویس سبد خرید نیز برسد تا قیمت کالاهای درون سبد مشتریان را بروزرسانی نماید.
  • برخی اطلاعات ممکن است به دفعات مورد استفاده میکروسرویس ها باشد اما نرخ تغییرات آنها پایین است، بنابراین به منظور بهبود کارایی و کاهش سربار سیستم بهتر است از حافظه نهان توزیعی (Distributed Cache) استفاده شود.
  • لاگ های میکروسرویس ها باید به صورت متمرکز جمع آوری و تحلیل شود تا در آینده فرآیندهای رفع مشکل، نظارت و کنترل به بهترین شکل انجام گیرد.
  • برنامه کاربردی که از این زیرساخت استفاده می کند باید از طریق یک آدرس به همه میکروسرویس ها دسترسی داشته باشد که وظیفه آن بر عهده API Gateway است.
  • برخی از فرآیندها نیازدارند در بیش از یک میکروسرویس اجرا شوند. به بیان دیگر یک فرآیند وقتی به صورت کامل انجام می شود که دو زیر فرآیند آن در دو میکروسرویس مجزا اجرا شده باشد. در اینجا وظیفه Aggregator هاست تا این روال را تسهیل سازند.
  • میکروسرویس ها از حضور یکدیگر اطلاع ندارند بنابراین فناوری ای باید در این زیرساخت حضور داشته باشد تا آدرس آنها را داشته باشد.

ارتباط بین میکروسرویس ها

میکروسرویس ها بنا بر شرایط و فرآیندهای گوناگون نیاز است تا با یکدیگر ارتباط داشته باشند. این ارتباط اگر به درستی پیاده سازی نشود و از فناوری مناسب بهره برده نشود می تواند مبدل به گلوگاهی برای کارایی نرم افزار گردد و در نهایت در این زیرساخت شاهد افزایش زمان پاسخگویی خواهیم بود. از جمله روش هایی که می توان برای ارتباط بین میکروسرویس ها استفاده نمود به موارد زیر می توان اشاره نمود:

  • ارتباط مبتنی بر پیام (Message-based Communication)
  • ارتباط از طریق پروتکل Grpc
  • ارتباط از طریق Distributed Cache
Generic placeholder image

حافظه نهان توزیع شده (Distributed Cache)

در اکثر نرم افزارهای مرسوم، همواره اطلاعاتی وجود دارد که نرخ بروزرسانی آنها پایین اما میزان واکشی آنها زیاد است. در چنین شرایطی بهتر است از حافظه نهان (Cache) استفاده نمود تا هم از سربار بانک اطلاعاتی کاسته شود و هم سرعت پاسخگویی به درخواست ها بالا رود.

حافظه نهان را می توان به صورت محلی (Local Cache) و توزیعی پیاده سازی نمود. زیرساخت نرم افزاری مبتنی بر Restful API ثانی مهر از دو لایه حافظه نهان بهره می گیرد.

  1. حافظه نهان محلی
  2. حافظه نهان توزیعی

در حافظه نهان توزیعی از محصولی به نام Redis استفاده شده است که با اختلاف بهترین ابزار در این حوزه است و در بکارگیری آن، موارد زیر نیز پیاده سازی شده اند:

  • Connection Pool
  • Message Packing
  • Health Check
Generic placeholder image

لاگ متمرکز

زمانی که یک سیستم نرم افزاری بزرگ می شود بحث لاگ ها و رویدادهای آن از اهمیت بالایی برخوردار خواهد بود. اپراتور و یا راهبر نرم افزار باید بتواند قبل از اعلام خرابی از سوی کاربر نهایی، مشکلات و اختلالات سیستم را مشاهده کرده و نسبت به رفع آنها اقدام نماید. بنابراین داشتن یک سیستم لاگ متمرکز جهت تجمیع تمامی رویدادها و لاگ های سیستم، جزء جدانشدنی این زیرساخت خواهد بود. در پیاده سازی این فناوری از ابزار کاربردی و معروف Elastic Search & Kibana بهره برده شده است.

با استفاده از این ابزار و ارسال تمامی لاگ های میکروسرویس ها برای آن، قادر به ساخت داشبورد های شخصی سازی شده بر اساس نیاز تیم راهبر و پشتیبان خواهید بود.

Generic placeholder image

بانک اطلاعاتی

بانک اطلاعاتی قلب هر سیستم نرم افزاری است. زیرساخت طراحی شده توسط ثانی مهر، انواع مختلف بانک اطلاعاتی را پشتیبانی می کند. به عنوان بانک اطلاعاتی رابطه ای می توان به موارد زیر شاره نمود:

و درصورت نیاز به بانک اطلاعاتی NoSQL می تواند از Redis استفاده نمود.

Generic placeholder image

تجمیع کننده (Aggregator)

در نرم افزارهایی که بر اساس معماری میکروسرویس طراحی و پیاده سازی می شوند، فرآیندهایی وجود دارند که حاصل اجرای دو فرآیند دیگر دردو میکروسرویس مجزا هستند. از سوی دیگر فرض کنید یکی از میکروسرویس ها به دلیل بار کاری زیاد، مقیاس پذیری داشته است و چندین کپی از آن، به منظور تقسیم بار، هم اکنون در حال سرویس دهی می باشد. بنابراین یکی از میکروسرویس ها نمی تواند مسئولیت فرآیند اصلی را بر عهده بگیرد، زیرا هیچ یک از میکروسرویس ها از حضور سایر میکروسرویس ها و آدرس آنها اطلاعی ندارد.

چنین فرآیندهایی باید از طریق تجمیع کننده ها (Aggregator) انجام شوند که با داشتن Service Discovery آدرس تمامی میکروسرویس ها را دارند و  با استفاده از پروتکل Grpc اقدام به فراخوانی زیر فرآیندها می نمایند.

Generic placeholder image

درگاه خدمات (API Gateway)

هر یک از میکروسرویس ها بر روی آدرس و پورت منحصر به فرد در حال خدمت رسانی هستند و این موضوع کار را برای برنامه کاربردی کاربر نهایی مشکل می سازد. هدف از بکارگیری API Gateway تجمیع کلیه سرویس ها در قالب یک معبر خدمات است.

به منظور پیاده سازی این فناوری از ابزار کاربردی Ocelot استفاده شده است و در کنار تجمیع سرویس ها از قابلیت های زیر نیز بهره برداری شده است تا سطح کیفیت ارائه سرویس را تا حد قابل قبول ارتقاء یابد.

  • SSL Offload: کلیه ارتباطات از برنامه کاربردی تا API Gateway بر بستر HTTPS است و با استفاده از SSL رمزنگاری شده است که موجب افزایش امنیت در ارتباطات می گردد. اما به منظور افزایش سرعت پاسخگویی به درخواست ها، ارتباط بین API Gateway و میکروسرویس ها بر اساس پروتکل HTTP است که دیگر سربار محاسباتی مشابه با HTTPS را ندارد.
  • QoS: به منظور افزایش کیفیت سرویس دهی، در صورتی که فراخوانی یکی از API ها با خطا مواجه شود بر اساس یک الگوریتم خاص، پیش از پاسخ به کاربر نهایی، تلاش مجدد کرده و سپس پاسخ می دهد. 
  • Rate Limit: دسترسی به یک منبع اطلاعاتی را می توان بر اساس کاربر محدود سازی نمود. به عنوان مثال دریافت یک گزارش خاص توسط هر کاربر در طول یک ساعت تنها یکبار قابل اجرا است.
  • Load Balancing: این تکنولوژی قادر است بار کاری را بین میکروسرویس های یکسان تقسیم نماید.
  • Caching: بهترین مکان برای عملیات Cache پیش از رسیدن درخواست به لایه های پایینی است. با استفاده از این قابلیت در API Gateway، درخواست های تکراری در بازه زمانی کوتاه، در همان API Gateway پاسخ داده خواهند شد و بنابراین سربار زیادی از میکروسرویس ها برداشته خواهد شد.
Generic placeholder image

شبکه مبتنی بر سرویس (Service-based Networking)

ممکن است به دلیل افزایش تحمل پذیری اشکال و یا مقیاس دادن به یک میکروسرویس جهت افزایش سرعت پاسخگویی به درخواست ها، از یک نسخه میکروسرویس تعدادی بیش از یک عدد موجود باشد. از سوی دیگر، میکروسرویس های منتشر شده در این بستر می تواند آدرس و پورت متفاوتی داشته باشد که در زمان انتشار و بدلیل به کارگیری Docker، ممکن است تغییر کند.

وظیفه Service Discovery جمع آوری اطلاعات شبکه ای میکروسرویس ها و معرفی آنها به Aggregator ها و API Gateway ها است. به منظور پیاده سازی این فناوری از ابزار کاربردی Cosul استفاده شده است.

Generic placeholder image

کنترل سلامت نرم افزار

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

  • میکروسرویس
  • بانک اطلاعاتی
  • Distributed Cache
  • RabbitMQ
  • Identity Server
Generic placeholder image