এসওএ / মাইক্রোসার্ভেসিস: আন্তঃ-পরিষেবা যোগাযোগে অনুমোদন কীভাবে পরিচালনা করবেন?


18

পুরোভূমি

আমরা একতরফা প্ল্যাটফর্ম থেকে আরও পরিষেবা ওরিয়েন্টেড আর্কিটেকচারে চলেছি। আমরা খুব বুনিয়াদি ডিডিডি নীতি প্রয়োগ করছি এবং আমাদের ডোমেনকে বিভিন্ন সীমানা প্রসঙ্গে ছড়িয়ে দিচ্ছি। প্রতিটি ডোমেন বিতরণ করা হয় এবং একটি ওয়েব API (REST) ​​এর মাধ্যমে একটি পরিষেবা উন্মুক্ত করে।

আমাদের ব্যবসায়ের প্রকৃতির কারণে আমাদের বুকিং , পরিষেবাদি , গ্রাহক , পণ্য ইত্যাদির মতো পরিষেবা রয়েছে

আমরা একটি পরিচয় সার্ভারও স্থাপন করেছি (থিঙ্কটেকচার আইডেন্টিটি সার্ভার 3 ভিত্তিক) যার মূল ভূমিকাটি হ'ল:

  • প্রমাণীকরণকে কেন্দ্রিয়করণ করুন (প্রদত্ত শংসাপত্রগুলি এটি টোকেনগুলি প্রদান করে)
  • টোকেনগুলিতে দাবি যুক্ত করুন যেমন: ক্লায়েন্টের স্কোপস (ক্লায়েন্ট অনুসারে আমি আবেদনটি অনুরোধটি করছি), গ্রাহক শনাক্তকারী (গ্রাহক হিসাবে আমি অ্যাপ্লিকেশনটি ব্যবহারকারী ব্যক্তি হিসাবে বোঝাচ্ছি)

আমরা এমন একটি API গেটওয়ের ভূমিকাও প্রবর্তন করেছি যা আমাদের পরিষেবাগুলিতে বাহ্যিক অ্যাক্সেসকে কেন্দ্রীভূত করে। এপিআই গেটওয়ে ক্রিয়াকলাপ সরবরাহ করে যা অভ্যন্তরীণ ডোমেনগুলির গভীর জ্ঞানের প্রয়োজন হয় না যেমন:

  • বিপরীত প্রক্সি: ইনকামিং অনুরোধগুলি যথাযথ অভ্যন্তরীণ পরিষেবাতে যাত্রা করে
  • সংস্করণ: অভ্যন্তরীণ পরিষেবার বিভিন্ন সংস্করণে এপিআই গেটওয়ে মানচিত্রের একটি সংস্করণ
  • প্রমাণীকরণ: ক্লায়েন্টের অনুরোধগুলিতে আইডেন্টিটি সার্ভার দ্বারা জারি করা টোকেন অন্তর্ভুক্ত রয়েছে এবং এপিআই গেটওয়ে টোকেনকে বৈধতা দেয় (নিশ্চিত হন যে তিনি কে তিনি বলছেন)
  • থ্রোটলিং: প্রতি ক্লায়েন্টের অনুরোধের সীমাবদ্ধতা

অনুমোদন

অনুমোদনের বিষয়ে কী উদ্বেগ রয়েছে, এটি এপিআই গেটওয়েতে নয় অভ্যন্তরীণ পরিষেবাগুলিতেই পরিচালিত হয়। আমরা বর্তমানে ২ টি প্রধান ধরণের অনুমোদন করছি:

  • ক্লায়েন্ট স্কোপের উপর ভিত্তি করে অনুমোদন। উদাহরণ: কোনও ক্লায়েন্ট (আমাদের API গুলি ব্যবহার করে এমন বাহ্যিক অ্যাপ্লিকেশন) বুকিং পরিষেবা API এর শেষ পয়েন্টগুলিতে অ্যাক্সেস করার জন্য "বুকিং" সুযোগের প্রয়োজন হয়
  • গ্রাহকের উপর ভিত্তি করে অনুমোদন। উদাহরণ: কেবলমাত্র যদি কোনও গ্রাহক (অ্যাপ্লিকেশন ব্যবহার করে শারীরিক ব্যক্তি) বুকিংয়ের অংশগ্রহীতা বুকিং পরিষেবা থেকে শেষ পয়েন্ট জিইটি / বুকিং অ্যাক্সেস করতে পারে

অভ্যন্তরীণ পরিষেবাগুলিতে অনুমোদন পরিচালনা করতে সক্ষম হতে, এপিআই গেটওয়ে কেবলমাত্র টোকন (অভ্যন্তরীণ পরিষেবায় অনুরোধটি রুট করার সময়) ফরোয়ার্ড করে যার মধ্যে ক্লায়েন্ট (অনুরোধটি করা অ্যাপ্লিকেশন) এবং গ্রাহক সম্পর্কে দাবি হিসাবে উভয়ই অন্তর্ভুক্ত থাকে (এতে) এই ক্ষেত্রে যেখানে কোনও ব্যক্তি ক্লায়েন্ট অ্যাপ্লিকেশনটিতে লগ ইন করেছেন)।

সমস্যার বিবরণ

আমরা আন্তঃ-পরিষেবা যোগাযোগ চালু না করা পর্যন্ত এতটা ভাল (কিছু পরিষেবা কিছু ডেটা পাওয়ার জন্য অন্যান্য পরিষেবার সাথে যোগাযোগ করতে পারে)।

প্রশ্ন

আন্তঃ-পরিষেবা যোগাযোগে আমাদের কীভাবে অনুমোদনের কাছে যেতে হবে?

বিকল্প বিবেচনা করা হয়

বিভিন্ন অপশন সম্পর্কে আলোচনা করতে আমি নীচের নমুনা পরিস্থিতিটি ব্যবহার করব:

  • আমরা একটি বহিরাগত অ্যাপ্লিকেশন নামের ExternalApp যে আমাদের API (ব্যবহারের ExternalApp হিসেবে দেখা যেতে পারে ক্লায়েন্ট অর্ডার বুকিং প্রবাহ গড়ে তুলতে মধ্যে)
  • এক্সটার্নাল অ্যাপ্লিকেশন বুকিং পরিষেবা অ্যাক্সেস প্রয়োজন , সুতরাং আমরা বহিরাগত অ্যাপ্লিকেশন "বুকিং" সুযোগ প্রদান
  • অভ্যন্তরীণভাবে (এই জন্য সম্পূর্ণরূপে স্বচ্ছ কিছু ExternalApp ) বুকিং সেবা acesses সার্ভিস পরিষেবাটি ফ্লাইট, বিমা বা গাড়ী ভাড়া হিসাবে একটি বুকিং এর ডিফল্ট সেবা প্রাপ্ত

এই সমস্যাটি অভ্যন্তরীণভাবে আলোচনা করার সময় বেশ কয়েকটি বিকল্প পপ আপ হয়ে গেছে, তবে কোন বিকল্পটি সেরা তা আমরা নিশ্চিত নই:

  1. যখন বুকিং পরিষেবাগুলির সাথে যোগাযোগ করে , এটি কেবলমাত্র এপিআই গেটওয়ে থেকে প্রাপ্ত মূল টোকেনটি ফরোয়ার্ড করা উচিত (ক্লায়েন্টটি বহিরাগত অ্যাপ্লিকেশনটি নির্দেশ করে )
    • ফলস্বরূপ: আমাদের বহিরাগত অ্যাপ্লিকেশনগুলিকে স্কোপগুলি প্রদান করতে হবে যা দেওয়া উচিত ছিল না। উদাহরণ: এক্সটার্নাল অ্যাপ্লিকেশনটির জন্য "বুকিং" এবং "পরিষেবা" উভয়ই সুযোগ থাকতে পারে যখন কেবল "বুকিং" স্কোপই যথেষ্ট হতে পারে
  2. যখন বুকিং পরিষেবাগুলির সাথে যোগাযোগ করে , এটি ক্লায়েন্টকে নির্দেশ করে এমন একটি টোকেন ফরোয়ার্ড করে এখন এটি এক্সটার্নাল অ্যাপের পরিবর্তে বুকিং হয়ে গেছে + এটি বুকিংয়ের মূল ক্লায়েন্টের বহিরাগত অ্যাপ্লিকেশনটি চিহ্নিত করে এমন দাবি যুক্ত করে
    • এছাড়াও তথ্য মূল ক্লায়েন্ট যে অন্তর্ভুক্ত করে ExternalApp সার্ভিস সেবা যেমন মূল আহ্বায়ক উপর নির্ভর করে, কিছু সার্ভিস ফিল্টার আউট হিসাবে যুক্তিবিজ্ঞান করতে পারে (যেমন অভ্যন্তরীণ অ্যাপসের জন্য আমরা সবাই মারামারি বহিরাগত অ্যাপসের জন্য আসতে হবে, শুধুমাত্র কিছু)
  3. পরিষেবাদি একে অপরের সাথে যোগাযোগ করা উচিত নয় (যাতে আমাদের এমনকি এই প্রশ্নের মুখোমুখি হওয়া উচিত নয়)

আপনার মতামতের জন্য অগ্রিম ধন্যবাদ।


1
আপনি কীভাবে এই সমস্যার সমাধান করলেন? আমরাও একইরকম পরিস্থিতিতে আছি।
বরুণ মেহতা

+1: আপনি কীভাবে আপনার সমস্যার সমাধান করবেন তা সম্পর্কে আমি আগ্রহী।
ডায়পসো

পয়েন্ট 3 করার জন্য - পরিষেবাগুলি একে অপরের সাথে যোগাযোগ করে না, আপনার একটি যৌগিক ইউআই দরকার। বিশেষ.
net

উত্তর:


3

আমি আপনাকে পরামর্শ দিচ্ছি যে মাইক্রোসার্চেসের মধ্যে যোগাযোগের একটি অভ্যন্তরীণ চ্যানেল রয়েছে।

উদাহরণস্বরূপ মাইক্রো সার্ভিসেসের মধ্যে বার্তা প্রেরণ / গ্রহণ বা প্রকাশ / সাবস্ক্রাইব করার জন্য অভ্যন্তরীণভাবে রব্বিটএমকিউ এর মতো কিছু বার্তা ব্রোকার ব্যবহার করা ।

তারপরে আপনার প্রথম প্রান্তের ব্যবহারকারী "আপনার উদাহরণে বুকিং পরিষেবা" এর মুখোমুখি পরিষেবাটি টোকেনকে বৈধ করার জন্য এবং গ্রাহককে এই নির্দিষ্ট ক্রিয়াকলাপটি অনুমোদিত করার জন্য দায়বদ্ধ হবে আইডেন্টিটি সার্ভারের সাথে যোগাযোগ করে।

তারপরে এটি বার্তা ব্রোকারের মাধ্যমে পরিষেবাদি পরিষেবার সাথে যোগাযোগ করবে এবং সেক্ষেত্রে, আবার টোকেনকে বৈধতা দেওয়ার দরকার নেই।

আমার ধারণা এই মডেলটি আরও সহজ হবে এবং আপনাকে আরও ভাল পারফরম্যান্স দেবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.