মাল্টি টেন্যান্ট মাইক্রোসার্ভাইস ডিজাইন


13

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

নিম্নলিখিত ডিজাইনগুলি যা আমরা বিবেচনা করছি তা নিম্নরূপ:

বিকল্প 1: হাইবারনেট মাল্টি-টেন্যান্ট সাপোর্ট সহ একটি মাল্টি-টেন্যান্ট অ্যাপ্লিকেশন যা চাহিদার উপর নির্ভরশীল N কে বহুবার স্কেল করা যেতে পারে (কুবেরনেট পোডগুলি ভাবেন)। এই অ্যাপ্লিকেশনটির একটি একক উদাহরণ সমস্ত ডাটাবেসের সাথে সংযোগ করতে সক্ষম হবে।

বিকল্প 2: দেশি ডাটাবেস প্রতি 1 মাইক্রোসার্চিয়াস উদাহরণ স্থাপন করুন। তাদের সামনে একটি এপিআই গেটওয়ে সহ ট্র্যাফিকের রাস্তা

আপনি যদি এই ধরণের সিস্টেম ডিজাইন করেন তবে আপনার পছন্দগুলি কী হবে?


3
আমি মনে করি এটি আপনার নির্দিষ্ট কার্যকরী এবং অ-কার্যকরী প্রয়োজনীয়তাগুলি কিসের উপর নির্ভর করে।
রবার্ট হার্ভে

বিভিন্ন ডাটাবেস কিন্তু একই উদাহরণ এটি পড়ছে? এটি কি নিয়ন্ত্রকের প্রয়োজনীয়তাও লঙ্ঘন করে না?
জিমি টি।

বিকল্প 1 মাইক্রোসার্চেস আর্কিটেকচার শৈলীর সাথে খুব বেশি সংযুক্ত বলে মনে হচ্ছে না।
লাইভ

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

উত্তর:


4

আমি মনে করি বিকল্প 2 কোনও খারাপ নয়, তবে এটির প্রয়োজনও নেই। মাইক্রো পরিষেবাগুলি আপনাকে একাধিক অ্যাপ্লিকেশনগুলির প্রয়োজনের সাথে মোকাবিলা করার জন্য।

এখানে একটি বড় ফ্যাক্টর হ'ল, যদি দুটি স্কিমার মধ্যে কোনও পার্থক্য থাকে এবং যদি ভবিষ্যতে কখনও হয়।

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

বিকল্প 1 এর সাথে আমার সমস্যাটি এটি খুব নির্দিষ্ট। আপনি যে সেটআপটি বর্ণনা করেছেন সেটি থেকে আপনার নিজের ডিবিতে সহজেই নির্দেশ করে দুটি পৃথক ইভেন্টে যেতে সক্ষম হওয়া উচিত। অ্যাপ্লিকেশনটি কোথা থেকে এটি থেকে ডেটা নিচ্ছে তা যত্নশীল হওয়া উচিত নয়।

যদিও আপনার দুটি ভিন্ন ডাটাবেসের জন্য স্কিমা পৃথক নয়, আপনার পার্থক্যটি না জেনে আপনার কাছে একটি সংগ্রহস্থল সহজেই উভয়ের সাথেই ডিল করতে পারে:

public class MyEntityRepository : ISavesMyEntity, IGetsMyEntity
{
    public MyEntityRepository(string connectionString)
    {
       _connectionString = connectionString;
    }
}

public class MyEntitySaverFactory
{
    public ISavesMyEntity GetSaver(User user)
    {
        if (user.IsUK)
            return new MyEntityRepository(Config.Get("UKConnString"));
        if (user.IsUS)
            return new MyEntityRepository(Config.Get("USConnString"));
        throw new NotImplementedException();
    }
}

//USE
ISavesMyEntity saver = factory.GetSaver(currentUser);
saver.Save(myEntityInstance);

ডিবি স্কিমা যদি কখনও মার্কিন যুক্তরাষ্ট্র এবং যুক্তরাজ্যের মধ্যে স্বতন্ত্র হয়ে যায়, তবে আপনি তারপরে কার্যকারিতাটি দুটি সম্পূর্ণ ভিন্ন স্টোরগুলিতে বিভক্ত করবেন। এটি সহজ হবে, যেহেতু আপনাকে যা করতে হবে তা হ'ল আপনার কারখানার পরিবর্তন।


1
আপনার কেন এই কারখানার দরকার তা আমি পাই না। কেন শুরুতে কনফিগারেশনের বিশদটি পাবে না? এটির সাথে আপনাকে যখনই একটি নতুন অঞ্চল / দেশ যুক্ত করতে চাইছে তখনই কোডটি পরিবর্তন করতে হবে।
জিমি জেমস

1
এখানে সমস্যাটি পৃথক দেশগুলির ব্যবহারকারীদের সাথে কাজ করছে না ... এটি বিভিন্ন ডাটাবেসের সাথে কাজ করে dealing সেখানে যদি আলাদা স্কিমা থাকে? ডিবি সংযোগের স্ট্রিংটি কোথায় পাবেন তা নির্ধারণের জন্য কেন গ্রাহক শ্রেণি দায়বদ্ধ হতে হবে?
দ্যাটিক্যাটহিস্পেরার

আমি কী বলতে চাইছি তা আমি জানি না। কোডের কোনও কিছুই সংযোগের স্ট্রিংটি কোথায় পাবেন তা খুঁজে বের করার জন্য দায়বদ্ধ হওয়া উচিত না। এটি কনফিগারেশন। কিউএ ডেটাবেস বনাম উত্পাদনের জন্য কনফিগারেশন ব্যবহারের চেয়ে কেন এটি আলাদা তা আমি দেখতে পাচ্ছি না। আপনি কোডের জন্য বিবৃতি যদি রাখেন না, আপনি কি?
জিমি জেমস

এটি দুটি ডাটাবেসের সাথে কথা বলার একটি অ্যাপ্লিকেশন।
দ্যাটিক্যাটহিস্পেরার

আমি মনে করি আপনি সমস্যার ভুল বুঝেছেন: "আমাদের আলাদা আলাদা দেশ থেকে ক্লায়েন্টের ডেটা আলাদা (দেশ নির্দিষ্ট) ডাটাবেসে রাখতে হবে" দুটি ডাটাবেসের সাথে কথা বলার জন্য "একক অ্যাপ্লিকেশনটির প্রয়োজন নেই" উদাহরণস্বরূপ। আমার সন্দেহ হয় এটি মাত্র দুটি ডিবি।
ওপিটির

0

আমি দ্বিতীয় বিকল্পটি নিয়ে যাব, এটি উন্নয়ন এবং স্থাপনার ক্ষেত্রে কম ঘর্ষণ দেয়।

আপনি পুরো বিশ্বের জন্য কমপক্ষে একটির বিপরীতে অঞ্চল প্রতি 1 (বা কমপক্ষে একটি) ইনস্ট্যান্সে আপনার অ্যাপ্লিকেশন বিতরণ করায় এটি আরও ভাল স্কেলিবিলিটি এবং উপলভ্যতা এবং আরও ভাল শূন্য ডাউনটাইম মোতায়েনের বিকল্পের জন্য অনুমতি দেবে।

প্রয়োজনীয়তাগুলি পরিবর্তন হওয়ার সাথে সাথে আপনার আরও অঞ্চল নির্দিষ্ট ব্যবসায়ের যুক্তি থাকতে পারে এবং সম্ভবত ডেটা পরিবর্তনও হতে পারে, আমি চেষ্টা করব এবং অঞ্চল অনুযায়ী প্রতি কোডটি এবং এর ডেটা বিভক্ত করব এবং অঞ্চল নির্দিষ্ট ব্যবসায়ের যুক্তি ভাগ করে নেওয়া এড়াব (আপনি কিছু মূল কোড ভাগ করে নিতে পারেন)।

ধারণা তৈরী কর?

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