বড় আকারের অনলাইন অ্যাপ্লিকেশনগুলি আগের দুই দশকে অনেক দূর এগিয়েছে। এই উদ্ভাবনগুলি সফ্টওয়্যার বিকাশ সম্পর্কে আমাদের ধারণাকে পরিবর্তন করেছে। Facebook, Instagram, এবং Twitter, উদাহরণস্বরূপ, সমস্ত মাপযোগ্য প্ল্যাটফর্ম।
এই সিস্টেমগুলিকে ট্রাফিক এবং ডেটার বিশাল ভলিউম পরিচালনা করার জন্য তৈরি করা উচিত কারণ সারা বিশ্বে কোটি কোটি মানুষ একই সময়ে এগুলি ব্যবহার করে৷ এই যখন ব্যবস্থা পরিকল্পনা ছবি প্রবেশ করে।
নির্দিষ্ট মানদণ্ড পূরণ করে এমন একটি সিস্টেমের জন্য আর্কিটেকচার, ইন্টারফেস এবং ডেটা স্থাপনের প্রক্রিয়াটিকে সিস্টেম ডিজাইন বলা হয়। সমন্বিত এবং দক্ষ সিস্টেমের মাধ্যমে, সিস্টেম ডিজাইন আপনার ব্যবসা বা প্রতিষ্ঠানের চাহিদা পূরণ করে।
একবার আপনার কোম্পানি বা সংস্থা তার মানদণ্ড নির্ধারণ করলে, আপনি তাদের একটি ভৌত সিস্টেম ডিজাইনে অন্তর্ভুক্ত করা শুরু করতে পারেন যা আপনার গ্রাহকদের চাহিদা পূরণ করে।
আপনি বেসপোক ডেভেলপমেন্ট, বানিজ্যিক সমাধান বা দুটির সংমিশ্রণ নিয়ে যেতে চান কিনা, আপনি কীভাবে আপনার সিস্টেমটি ডিজাইন করবেন তা নির্ধারণ করবে আপনি কীভাবে এটি তৈরি করবেন।
আমরা এই পোস্টে টুইটার টাইমলাইনের সিস্টেম ডিজাইনের উপর বিস্তারিত দেখব, একটি টিউটোরিয়াল সহ সম্পূর্ণ। চল শুরু করি.
ধাপ 1: রূপরেখা ব্যবহারের ক্ষেত্রে এবং সীমাবদ্ধতা
ব্যবহারের ক্ষেত্রে
- একজন ব্যবহারকারী একটি টুইট আপলোড করেন।
- পরিষেবাটি টুইটের অনুসরণকারীদের পুশ বিজ্ঞপ্তি এবং ইমেল পাঠায়।
- ব্যবহারকারীর টাইমলাইন দেখা হয় (ব্যবহারকারীর কার্যকলাপ)
- ব্যবহারকারী হোম টাইমলাইন দেখেন (ব্যবহারকারীর অনুসরণ করা লোকেদের কার্যকলাপ)
- কীওয়ার্ড ব্যবহারকারী দ্বারা অনুসন্ধান করা হয়.
- সেবা সত্যিই অ্যাক্সেসযোগ্য.
সুযোগের বাইরে
- এই পরিষেবাটি ব্যবহার করে টুইটার ফায়ারহোস এবং অন্যান্য স্ট্রিমগুলিতে টুইটগুলি পাঠানো হয়৷
- পরিষেবাটি ব্যবহারকারীর দৃশ্যমানতার সেটিংসের উপর ভিত্তি করে টুইটগুলি সরিয়ে দেয়।
- ব্যবহারকারী যদি উত্তর দেওয়া ব্যক্তিকে অনুসরণ না করে, তাহলে উত্তরটি লুকান।
- 'রিটুইট লুকান' বিকল্পটি পর্যবেক্ষণ করুন।
- বৈশ্লেষিক ন্যায়
সীমাবদ্ধতা এবং অনুমান
রাষ্ট্রীয় অনুমান
- ট্রাফিক সমানভাবে বিচ্ছুরিত হয় না.
- একটি টুইট পাঠানো সহজ হওয়া উচিত।
- আপনার লক্ষ লক্ষ অনুসরণকারী না থাকলে, আপনার সমস্ত অনুসরণকারীদের একটি টুইট পাঠানো দ্রুত হওয়া উচিত।
- 100 মিলিয়ন সক্রিয় ব্যবহারকারী আছে।
- প্রতি মাসে 15 বিলিয়ন টুইট বা প্রতিদিন 500 মিলিয়ন টুইট
- প্রতিটি টুইট গড়ে 10টি ডেলিভারির ফ্যানআউট রয়েছে৷
- প্রতিদিন, ফ্যানআউট 5 বিলিয়ন টুইট বিতরণ করে।
- ফ্যানআউট প্রতি মাসে 150 বিলিয়ন টুইট বিতরণ করে।
- 250 বিলিয়ন মাসিক পড়ার অনুরোধ
- 10 বিলিয়ন মাসিক অনুসন্ধান
Timeline
- টাইমলাইন নেভিগেট করা সহজ হওয়া উচিত।
- টুইটার লেখার চেয়ে পড়ার বিষয়ে বেশি।
- দ্রুত টুইট পড়ার জন্য অপ্টিমাইজ করুন
- টুইট খরচ সময়সাপেক্ষ.
সার্চ
- অনুসন্ধান প্রক্রিয়া দ্রুত হওয়া উচিত।
- অনুসন্ধান করা সময়সাপেক্ষ।
ব্যবহার গণনা করুন
প্রতিটি টুইটের আকার:
- 8 বাইট টুইট আইডি
- 32 বাইট ব্যবহারকারী-আইডি
- পাঠ্যের 140 বাইট
- মিডিয়া - গড় 10 KB
- মোট: ~10 KB
প্রতি মাসে, 150 টিবি তাজা টুইট সামগ্রী তৈরি হয়।
- * প্রতিদিন 500 মিলিয়ন টুইট * প্রতি মাসে 30 দিন * প্রতি টুইট 10 KB
- তিন বছরে, 5.4 পিবি তাজা টুইট সামগ্রী হয়েছে।
প্রতি সেকেন্ডে 100,000 পড়ার অনুরোধ রয়েছে।
- * (প্রতি সেকেন্ডে 400 অনুরোধ / প্রতি মাসে 1 বিলিয়ন অনুরোধ) প্রতি মাসে 250 বিলিয়ন পড়ার অনুরোধ
প্রতি সেকেন্ডে 6,000টি টুইট হয়।
- * (প্রতি সেকেন্ডে 400 অনুরোধ / প্রতি মাসে 1 বিলিয়ন অনুরোধ) প্রতি মাসে 15 বিলিয়ন টুইট
ফ্যানআউটে, প্রতি সেকেন্ডে 60 হাজার টুইট পাঠানো হয়।
- ফ্যানআউট প্রতি মাসে 150 বিলিয়ন টুইট প্রদান করে* (প্রতি সেকেন্ডে 400 অনুরোধ / প্রতি মাসে 1 বিলিয়ন অনুরোধ)।
প্রতি সেকেন্ডে তথ্যের জন্য 4,000 অনুরোধ
- * (প্রতি সেকেন্ডে 400 অনুরোধ / প্রতি মাসে 1 বিলিয়ন অনুরোধ) প্রতি মাসে 10 বিলিয়ন অনুসন্ধান
কিছু দরকারী রূপান্তর
- প্রতি মাসে, 2.5 মিলিয়ন সেকেন্ড পাস।
- প্রতি সেকেন্ডে 2.5 অনুরোধে প্রতি মাসে 1 মিলিয়ন অনুরোধ
- প্রতি মাসে 100 মিলিয়ন অনুরোধ x প্রতি সেকেন্ডে 40টি অনুরোধ
- প্রতি মাসে 1 বিলিয়ন অনুরোধ = প্রতি সেকেন্ডে 400টি অনুরোধ
ধাপ 2: উচ্চ-স্তরের চিত্র
ধাপ 3: মূল উপাদানগুলি ব্যাখ্যা করা
ব্যবহারকারীর টাইমলাইন (ব্যবহারকারীর কাছ থেকে ক্রিয়াকলাপ) একটি রিলেশনাল ডাটাবেসে যদি তারা একটি টুইট জমা দেয় তবে আমরা ব্যবহারকারীর নিজস্ব টুইটগুলি সংরক্ষণ করতে পারি। টুইটগুলি সরবরাহ করা এবং হোম টাইমলাইন বিকাশ করা আরও কঠিন (ব্যবহারকারী অনুসরণ করে এমন ব্যক্তিদের থেকে কার্যকলাপ)।
একটি সাধারণ রিলেশনাল ডাটাবেস সমস্ত অনুগামীদের (প্রতি সেকেন্ডে 60 হাজার টুইট বিতরণ করা হয়) টুইট করার মাধ্যমে অভিভূত হবে। আমরা সম্ভবত একটি NoSQL ডাটাবেস বা মেমরি ক্যাশের মতো দ্রুত-লেখা ডেটা স্টোরেজের সাথে যেতে চাই।
মেমরি থেকে 1 MB ক্রমিকভাবে পড়তে প্রায় 250 মাইক্রোসেকেন্ড সময় লাগে, কিন্তু SSD থেকে পড়তে 4 গুণ সময় লাগে এবং ডিস্ক থেকে পড়তে 80 গুণ সময় লাগে।
একটি অবজেক্ট স্টোর ছবি এবং ভিডিওর মতো ডেটা সংরক্ষণ করতে ব্যবহার করা যেতে পারে।
- ওয়েব সার্ভার, যা একটি বিপরীত প্রক্সি হিসাবে কাজ করছে, ক্লায়েন্টের কাছ থেকে একটি টুইট পায়।
- অনুরোধটি ওয়েব সার্ভার দ্বারা Write API সার্ভারে পাঠানো হয়।
- Write API ব্যবহারকারীর টাইমলাইনে একটি SQL ডাটাবেসে টুইট সংরক্ষণ করে।
Write API দ্বারা ফ্যান-আউট পরিষেবার সাথে যোগাযোগ করা হয় এবং এটি নিম্নলিখিত কাজগুলি সম্পাদন করে৷
- মেমরি ক্যাশে ব্যবহারকারীর অনুগামীদের সন্ধান করে ব্যবহারকারীর গ্রাফ পরিষেবাটি অনুসন্ধান করে৷
- মেমরি ক্যাশে, টুইটটি ব্যবহারকারীর অনুসরণকারীদের হোম টাইমলাইনে সংরক্ষিত হয়।
- 1,000 অনুসরণকারী = 1,000 লুকআপ এবং সন্নিবেশ = O(n) অপারেশন।
- টুইটটি দ্রুত অনুসন্ধানের জন্য অনুসন্ধান সূচক পরিষেবাতে সংরক্ষণ করা হয়েছে।
- অবজেক্ট স্টোর মিডিয়া সংরক্ষণ করতে ব্যবহৃত হয়।
- বিজ্ঞপ্তি পরিষেবার মাধ্যমে অনুসরণকারীদের পুশ সতর্কতা পাঠায়।
- অ্যাসিঙ্ক্রোনাসভাবে সতর্কতা পাঠাতে, এটি একটি সারি ব্যবহার করে।
আমাদের মেমরি ক্যাশে রেডিস হলে আমরা নিম্নলিখিত কাঠামোর সাথে একটি নেটিভ রেডিস তালিকা ব্যবহার করতে পারি:
ব্যবহারকারীর হোম টাইমলাইন নতুন টুইটের সাথে আপডেট করা হবে, যা মেমরি ক্যাশে সংরক্ষণ করা হবে। আমরা নিম্নলিখিত সর্বজনীন REST API ব্যবহার করব:
ব্যবহারকারীর টাইমলাইন ব্যবহারকারী দ্বারা দেখা হয়.
- ওয়েব সার্ভার গ্রাহকের কাছ থেকে একটি ব্যবহারকারীর টাইমলাইন অনুরোধ গ্রহণ করে।
- অনুরোধটি ওয়েব সার্ভার দ্বারা Read API সার্ভারে পাঠানো হয়।
- Read API ব্যবহারকারীর সময়সীমার জন্য SQL ডেটাবেসকে প্রশ্ন করে।
REST API হোম টাইমলাইনের অনুরূপভাবে কাজ করবে, ব্যতিক্রম ছাড়া সমস্ত টুইট ব্যবহারকারীদের থেকে উদ্ভূত হবে তাদের অনুসরণ করা লোকেদের চেয়ে।
একজন ব্যবহারকারী কীওয়ার্ড অনুসন্ধান করে:
- ওয়েব সার্ভার ক্লায়েন্টের কাছ থেকে একটি অনুসন্ধান অনুরোধ পায়।
- অনুরোধটি ওয়েব সার্ভার দ্বারা অনুসন্ধান API সার্ভারে পাঠানো হয়।
ধাপ 4: টুইটার টাইমলাইন
টাইমলাইন তৈরি একটি কঠিন কাজ। একটি টাইমলাইন জেনারেটর সার্ভার যা ওয়েব বা অ্যাপ্লিকেশন সার্ভারের সাথে লিঙ্ক করে।
প্রতিবার একজন ব্যবহারকারী সাইন ইন করে, টাইমলাইন পরিষেবা অনুসরণকারীর টেবিলে ব্যবহারকারীদের থেকে নতুন টুইটগুলির ট্র্যাক বজায় রাখে এবং ব্যবহারকারীর টাইমলাইন আপডেট বা রিফ্রেশ করে।
আমরা এখানে কোন ধরণের র্যাঙ্কিং সিস্টেম প্রয়োগ করি না; পরিবর্তে, আমরা অনুমান করি যে ব্যবহারকারীর অনুগামীদের থেকে শীর্ষ 5টি টুইটগুলি তৈরির সময়ের ক্রমে টাইমলাইনে উপস্থাপন করা হয়েছে৷ আমরা একটি 50-টুইট রিফ্রেশ কাটঅফ বজায় রাখতে পারি। ব্যবহারকারী পৃষ্ঠাটি রিফ্রেশ না করা পর্যন্ত আমরা সেই থ্রেশহোল্ডে পৌঁছানোর পরেও রিফ্রেশ করা বা একটি টাইমলাইন তৈরি করা বন্ধ করি।
লাইভ ব্যবহারকারী ফিড তৈরি থেকে উচ্চ বিলম্ব এবং কর্মক্ষমতা উদ্বেগ আসবে। পরিবর্তে, একটি অফলাইন স্ট্রীম তৈরি করা যা তাত্ক্ষণিকভাবে উপস্থাপন করা যেতে পারে কর্মক্ষমতা উন্নত করার সর্বোত্তম উপায়। ডেডিকেটেড টাইমলাইন সার্ভারগুলি চালান যা তৈরি করা সময়ের উপর ভিত্তি করে ফিড রিফ্রেশ করতে নিয়মিতভাবে অ্যাপ্লিকেশন সার্ভারকে পিং করে।
র্যাঙ্কিং অ্যালগরিদমকে গুরুত্বপূর্ণ সংকেতগুলি বিবেচনায় নেওয়া উচিত এবং ওজন প্রদান করা উচিত যাতে নিশ্চিত করা যায় যে ব্যবহারকারীর টাইমলাইন তাদের অনুসরণ করা এক বা একাধিক অ্যাকাউন্টের উপাদান দ্বারা প্রভাবিত হয় না।
আরও স্পষ্টভাবে, আমরা যেকোনো ফিড আইটেমের প্রাসঙ্গিকতার সাথে সম্পর্কিত বৈশিষ্ট্যগুলি বেছে নিতে পারি, যেমন লাইকের সংখ্যা, মন্তব্য, শেয়ার এবং আপডেটের সময়। এই মানদণ্ডগুলির প্রতিটি টুইটকে রেট দেওয়ার জন্য ব্যবহার করা উচিত এবং তারপর সেই র্যাঙ্কটি টাইমলাইনে টুইটগুলি দেখানোর জন্য ব্যবহার করা উচিত।
যখন তাদের নিউজফিডের জন্য নতুন বিষয়বস্তু পাওয়া যায় তখন কি আমাদের ক্রমাগত ব্যবহারকারীদের সতর্ক করা উচিত? ব্যবহারকারীরা যখন নতুন ডেটা উপলব্ধ হয় তখন সতর্ক হওয়া উপকারী বলে মনে করতে পারেন। মোবাইল ডিভাইসে, তবে, যখন ডেটা ব্যবহার বেশ ব্যয়বহুল, এটি ব্যান্ডউইথ নষ্ট করতে পারে।
ফলস্বরূপ, আমরা মোবাইল ডিভাইসে ডেটা পুশ না করা বেছে নিতে পারি এবং পরিবর্তে ব্যবহারকারীদের নতুন পোস্টিংয়ের জন্য "পুল টু রিফ্রেশ" করার অনুমতি দিতে পারি।
ধাপ 5: স্কেলিং ডিজাইন
একটি সম্ভাব্য বাধা ফ্যানআউট পরিষেবা। লক্ষ লক্ষ অনুসরণকারী টুইটার ব্যবহারকারীদের তাদের টুইটগুলি রোল আউট হওয়ার জন্য কয়েক মিনিট অপেক্ষা করতে হবে। এটি টুইটের উত্তরগুলির সাথে একটি দৌড়ের কারণ হতে পারে, যা আমরা পরিবেশনের সময় টুইটগুলিকে পুনরায় অর্ডার দিয়ে এড়াতে পারি৷
আমরা প্রচুর সংখ্যক অনুগামীদের কাছ থেকে টুইট ছড়ানো প্রতিরোধ করতে পারি। পরিবর্তে, আমরা উচ্চ-অনুসরণ করা ব্যক্তিদের কাছ থেকে টুইটগুলির জন্য একটি অনুসন্ধান করতে পারি, ব্যবহারকারীর হোম টাইমলাইনের ফলাফলের সাথে অনুসন্ধানের ফলাফলগুলিকে একীভূত করতে পারি এবং তারপরে পরিষেবার সময়ে টুইটগুলিকে পুনরায় সাজাতে পারি৷
অতিরিক্ত উন্নতি অন্তর্ভুক্ত:
- প্রতিটি হোম টাইমলাইনের জন্য মেমরি ক্যাশে মাত্র কয়েকশ টুইট রাখুন।
- মেমরি ক্যাশে, শুধুমাত্র সক্রিয় ব্যবহারকারীদের হোম টাইমলাইন তথ্য সংরক্ষণ করা হয়।
- আমরা SQL ডাটাবেস থেকে কালানুক্রম পুনর্গঠন করতে পারি যদি একজন ব্যবহারকারী আগের 30 দিনে সক্রিয় না থাকে।
- ব্যবহারকারী কে তা জানতে, ব্যবহারকারী গ্রাফ পরিষেবাটি ব্যবহার করুন।
- টুইটগুলিকে SQL ডাটাবেস থেকে পুনরুদ্ধার করে মেমরি ক্যাশে যোগ করুন।
- Tweet Info Service শুধুমাত্র এক মাসের টুইট সংরক্ষণ করতে পারে।
- ব্যবহারকারীর তথ্য পরিষেবাতে, শুধুমাত্র সক্রিয় ব্যবহারকারীদের সংরক্ষণ করা হয়।
- লেটেন্সি কম রাখতে, সার্চ ক্লাস্টারকে সম্ভবত টুইটগুলি মেমরিতে বজায় রাখতে হবে।
উপসংহার
যদিও টুইটার একটি বৃহৎ সংস্থা, এটির আরও ভাল সিস্টেম ডিজাইন বোঝা. আমি আপনাকে টুইটার টাইমলাইনের একটি উচ্চ-স্তরের ওভারভিউ দেওয়ার জন্য আমার যথাসাধ্য চেষ্টা করেছি।
আমি আশা করি আপনি এটি থেকে দরকারী তথ্য অর্জন করেছেন এবং এটি ভাল ব্যবহার করতে পারেন।
নির্দেশিকা সমন্ধে মতামত দিন