কম্পিউটার

ইনফ্রাস্ট্রাকচার মাইক্রোসার্ভিসে রেডিস কীভাবে ব্যবহার করবেন

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

মাইক্রোসার্ভিস, অবকাঠামো পরিষেবা, এবং বিতরণ করা সিস্টেমের উপর একটি দ্রুত নজর

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

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

ইভেন্ট সোর্সিং, যা একটি ব্যবসায়িক সত্তার অবস্থা যেমন একটি আদেশ, বা একটি গ্রাহক, রাষ্ট্র-পরিবর্তন ঘটনাগুলির ক্রম হিসাবে স্থির থাকে, সামঞ্জস্যের পরিবর্তে প্রাপ্যতার জন্য যায়৷ এটি লেখার ক্রিয়াকলাপগুলিকে তুচ্ছ করার অনুমতি দেয়, তবে পঠন ক্রিয়াকলাপগুলি আরও ব্যয়বহুল কারণ, যদি সেগুলি একাধিক পরিষেবায় বিস্তৃত হয়, তবে তাদের একটি অতিরিক্ত প্রক্রিয়া যেমন একটি পঠিত মডেলের প্রয়োজন হতে পারে৷

একটি বিতরণ ব্যবস্থায় যোগাযোগ দালালি বা দালালহীন হতে পারে। ব্রোকারলেস শৈলী সুপরিচিত, HTTP এর সবচেয়ে বিখ্যাত উদাহরণ হিসেবে। ব্রোকারড পদ্ধতিতে, নাম থেকে বোঝা যায়, একটি বার্তা প্রেরক এবং গ্রহণকারীর মধ্যে একটি দালাল। এটি প্রেরক এবং প্রাপককে দ্বিগুণ করে, সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস যোগাযোগ সক্ষম করে। এটি আরও স্থিতিস্থাপক আচরণের ফলাফল দেয় কারণ বার্তাটি পাঠানোর সময় বার্তা গ্রাহককে উপলব্ধ থাকতে হবে না। ব্রোকারড যোগাযোগ প্রেরক এবং প্রাপকের স্বাধীন স্কেলিংকেও অনুমতি দেয়।

(আরো তথ্যের জন্য, আপনার সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস যোগাযোগের প্রয়োজনের জন্য কী বেছে নেবেন সে বিষয়ে আমাদের পোস্ট দেখুন—রেডিস স্ট্রিম, রেডিস পাব/সাব, কাফকা, ইত্যাদি)

OrderShop:একটি নমুনা ই-কমার্স বাস্তবায়ন

একটি মাইক্রোসার্ভিস আর্কিটেকচারের "হ্যালো ওয়ার্ল্ড" হল অর্ডারশপ, ইভেন্ট-ভিত্তিক পদ্ধতি ব্যবহার করে একটি ই-কমার্স সিস্টেমের একটি সহজ বাস্তবায়ন। এই নমুনা অ্যাপ্লিকেশনটি একটি সাধারণ ডোমেন মডেল ব্যবহার করে, কিন্তু এটি অ্যাপ্লিকেশনটির উদ্দেশ্য পূরণ করে৷

অর্ডারশপ ডকার কম্পোজ ব্যবহার করে সাজানো হয়েছে। সমস্ত নেটওয়ার্ক যোগাযোগ gRPC এর মাধ্যমে সম্পন্ন হয়। কেন্দ্রীয় উপাদানগুলি হল ইভেন্ট স্টোর এবং বার্তা সারি:প্রতিটি পরিষেবা জিআরপিসি এর মাধ্যমে এবং শুধুমাত্র তাদের সাথে সংযুক্ত। OrderShop পাইথনে একটি নমুনা বাস্তবায়ন। আপনি GitHub-এ OrderShop সোর্স কোড দেখতে পারেন।

(দ্রষ্টব্য: এই কোডটি না উৎপাদন-প্রস্তুত এবং শুধুমাত্র ডেমো উদ্দেশ্যে!)

রান এবং মজা করুন

  • GitHub সংগ্রহস্থল ক্লোন করুন:https://github.com/redis-demos/ordershop-v2
  • একটি সহজ পাঁচ-পদক্ষেপ প্রক্রিয়ায় OrderShop v2 চালান:
  1. ডকার-কম্পোজ আপ দিয়ে অ্যাপ্লিকেশন শুরু করুন
  2. আপনার ব্রাউজার খুলুন এবং https://localhost:5000/ এ যান
    1. ইভেন্টগুলি দেখুন এবং অবস্থা ব্রাউজ করুন
  3. python -m unittest tests/unit.py দিয়ে ক্লায়েন্ট চালান
  4. আপনার ব্রাউজারে আরেকটি ট্যাব খুলুন https://localhost:8001/
    1. redis:6379 ব্যবহার করুন পরীক্ষার ডাটাবেসের সাথে সংযোগ করতে
  5. ডকার-কম্পোজ ডাউন দিয়ে অ্যাপ্লিকেশন বন্ধ করুন

OrderShop v2 আর্কিটেকচার

এই ক্ষেত্রে, সার্ভার আর্কিটেকচার একাধিক পরিষেবা নিয়ে গঠিত। রাজ্যটি বেশ কয়েকটি ডোমেন পরিষেবাতে বিতরণ করা হয় তবে একটি একক ইভেন্ট স্টোরে সংরক্ষণ করা হয়। পড়ুন মডেল৷ কম্পোনেন্ট স্টেট পড়ার এবং ক্যাশ করার জন্য যুক্তিকে কেন্দ্রীভূত করে, যেমনটি এখানে দেখানো হয়েছে:

ইনফ্রাস্ট্রাকচার মাইক্রোসার্ভিসে রেডিস কীভাবে ব্যবহার করবেন

কমান্ড এবং প্রশ্নগুলি বার্তা সারি এর মাধ্যমে যোগাযোগ করা হয় কম্পোনেন্ট, যেখানে ইভেন্টগুলি ইভেন্ট স্টোর এর মাধ্যমে যোগাযোগ করা হয় কম্পোনেন্ট, যা একটি ইভেন্ট বাস হিসেবেও কাজ করে।

অবকাঠামো পরিষেবা

OrderShop v2-এ, সমস্ত ইউনিকাস্ট যোগাযোগ বার্তা সারিতে হয় উপাদান. এই জন্য, আমি Redis তালিকা ব্যবহার করব, এবং বিশেষ করে, একটি তথাকথিত "নির্ভরযোগ্য সারিতে" মিলিত দুটি তালিকা। এটি সিঙ্ক্রোনাসভাবে সহজ কমান্ডগুলি (যেমন একক সত্তার ক্রিয়াকলাপ) প্রক্রিয়া করে, কিন্তু দীর্ঘমেয়াদী (যেমন ব্যাচ, মেল) অ্যাসিঙ্ক্রোনাসভাবে প্রক্রিয়া করে এবং বাক্সের বাইরে সিঙ্ক্রোনাস বার্তাগুলির প্রতিক্রিয়া সমর্থন করে৷

ইভেন্ট স্টোরটি রেডিস স্ট্রিমের উপর ভিত্তি করে। ডোমেন পরিষেবাগুলি (যেগুলি OrderShop-এর কার্যকারিতা প্রদর্শনের জন্য শুধুমাত্র ডামি) ইভেন্ট বিষয়ের (অর্থাৎ সত্তার নাম) নামে ইভেন্ট স্ট্রীমগুলিতে সদস্যতা নেওয়া হয় এবং এই স্ট্রিমগুলিতে ইভেন্টগুলি প্রকাশ করে৷ প্রতিটি ইভেন্ট হল একটি স্ট্রীম-এন্ট্রি যাতে ইভেন্ট টাইমস্ট্যাম্প আইডি হিসাবে কাজ করে। স্ট্রীমগুলিতে প্রকাশিত ইভেন্টগুলির যোগফল সামগ্রিক সিস্টেমের অবস্থার ফলাফল করে৷

অ্যাপ্লিকেশন পরিষেবাগুলি

পড়ুন মডেলইভেন্ট স্টোর থেকে অনুমানকৃত সত্তা ক্যাশে করে ডোমেন মডেল ব্যবহার করে রেডিসে। ক্যাশে উপেক্ষা করে, এটি রাষ্ট্রহীন।

API গেটওয়ে৷ পাশাপাশি স্টেটলেস, এবং পোর্ট 5000-এ REST-API পরিবেশন করে। এটি এইচটিটিপি কানেকশন বন্ধ করে দেয় এবং স্টেট (কোয়ারি) পড়ার জন্য রিড মডেলে অথবা স্টেট (কমান্ড) লেখার জন্য ডেডিকেটেড ডোমেন সার্ভিসে রুট করে। পঠন এবং লেখার ক্রিয়াকলাপের মধ্যে এই ধারণাগত বিচ্ছেদ একটি প্যাটার্ন যাকে বলা হয় কমান্ড কোয়েরি রেসপন্সিবিলিটি সেগ্রিগেশন (CQRS)।

ডোমেন পরিষেবাগুলি

ডোমেন পরিষেবাগুলি বার্তা সারিতে লেখার ক্রিয়াকলাপ গ্রহণ করে৷ API গেটওয়ে থেকে . সফলভাবে সম্পাদনের পর, তারা তাদের প্রত্যেকের জন্য একটি ইভেন্ট প্রকাশ করে ইভেন্ট স্টোরে . বিপরীতে, সমস্ত পঠন ক্রিয়াকলাপ পড়ুন মডেল দ্বারা পরিচালিত হয় যা ইভেন্ট স্টোর থেকে তার অবস্থা পায় .

CRM পরিষেবা৷ (কাস্টমার রিলেশন ম্যানেজমেন্ট সার্ভিস) রাষ্ট্রহীন—এটি ইভেন্ট স্টোর থেকে ডোমেন ইভেন্টে সদস্যতা নিয়েছে এবং মেল পরিষেবা ব্যবহার করে গ্রাহকদের ইমেল পাঠায় .

কেন্দ্রীয় ডোমেইন সত্তা হল অর্ডার। এটির 'স্থিতি' নামে একটি ক্ষেত্র রয়েছে যা একটি স্টেট মেশিন ব্যবহার করে রূপান্তর করা হয়, যেমনটি নীচের চিত্রে দেখানো হয়েছে৷

ইনফ্রাস্ট্রাকচার মাইক্রোসার্ভিসে রেডিস কীভাবে ব্যবহার করবেন

এই রূপান্তরগুলি বেশ কয়েকটি ইভেন্ট হ্যান্ডলারে করা হয়, যেগুলি ডোমেন ইভেন্টে (SAGA প্যাটার্ন) সদস্যতা নিয়েছে, উদাহরণস্বরূপ:

ক্লায়েন্ট

পাইথন থেকে ইউনিট টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করে ক্লায়েন্টদের সিমুলেট করা হয়। বর্তমানে 10টি ইউনিট পরীক্ষা কার্যকর করা হয়েছে। tests/unit.py দেখুন আরও বিস্তারিত জানার জন্য।

একটি সাধারণ UI পোর্ট 5000-এ ইভেন্টগুলি দেখতে এবং অবস্থা ব্রাউজ করার জন্য (ওয়েবসকেট ব্যবহার করে) পরিবেশন করা হয়।

Redis ইনস্ট্যান্স পরিদর্শন করার জন্য একটি RedisInsight ধারকও উপলব্ধ। ওয়েব ব্রাউজার খুলুন https://localhost:8001/ এবং redis:6379 ব্যবহার করুন পরীক্ষার ডাটাবেসের সাথে সংযোগ করতে।

ইনফ্রাস্ট্রাকচার মাইক্রোসার্ভিসে রেডিস কীভাবে ব্যবহার করবেন

উপসংহার

Redis শুধুমাত্র ডোমেইন স্তর (যেমন একটি ক্যাটালগ অনুসন্ধান) এবং অ্যাপ্লিকেশন স্তর (যেমন একটি HTTP সেশন স্টোর) একটি শক্তিশালী হাতিয়ার নয় বরং অবকাঠামো স্তরেও (যেমন একটি ইভেন্ট স্টোর বা বার্তা সারি)। এই স্তরগুলি জুড়ে Redis ব্যবহার করা অপারেশনাল ওভারহেড হ্রাস করে এবং ডেভেলপারদের তারা ইতিমধ্যে পরিচিত প্রযুক্তিগুলিকে পুনরায় ব্যবহার করতে দেয়৷

কোডে উঁকি দিন এবং এটি বাস্তবায়নে আপনার হাত চেষ্টা করুন। আমি আশা করি এটি ডোমেন এবং অবকাঠামো পরিষেবাগুলিতে Redis-এর বহুমুখীতা এবং নমনীয়তা প্রদর্শন করতে সাহায্য করবে এবং প্রমাণ করবে কিভাবে এটি ক্যাশিংয়ের বাইরে ব্যবহার করা যেতে পারে।

টুইটারে এটি কীভাবে যায় তা আমাকে জানান:@martinez099.


  1. ফাস্টলি কম্পিউটে রেডিস ব্যবহার করুন

  2. কিভাবে উইন্ডোজ 10 ইভেন্ট ভিউয়ার খুলবেন এবং ব্যবহার করবেন

  3. Windows 10 এ টাস্কবার থেকে ক্যালেন্ডার অ্যাপ কিভাবে ব্যবহার করবেন

  4. কিভাবে উইন্ডোজ ইভেন্ট ভিউয়ার ব্যবহার করবেন? কেন এটি দরকারী?