সুচিপত্র[লুকান][দেখান]
হোয়াটসঅ্যাপ হল একটি সামাজিক মেসেজিং প্রোগ্রাম যা ব্যবহারকারীদের একে অপরের সাথে বার্তা বিনিময় করতে দেয়।
আপনি কি কখনও ভেবে দেখেছেন কিভাবে হোয়াটসঅ্যাপ কাজ করে?
তার সৃষ্টি এবং অপারেশন underpin যে ধারণা কি কি?
এই নিবন্ধটি হোয়াটসঅ্যাপের মূল বিষয়গুলি নিয়ে যাবে ব্যবস্থা পরিকল্পনা.
আমরা হোয়াটসঅ্যাপের সাধারণ আর্কিটেকচারের মাধ্যমেও যাব, যা যেকোনো ধরনের চ্যাট সফ্টওয়্যার তৈরি করতে ব্যবহার করা যেতে পারে।
তাই, আর কোনো ঝামেলা ছাড়াই, আসুন দেখে নেওয়া যাক হোয়াটসঅ্যাপের সিস্টেম ডিজাইন!
1. মূল প্রয়োজনীয়তা
হোয়াটসঅ্যাপ একটি অত্যন্ত মাপযোগ্য প্রযুক্তি যা সারা বিশ্বের অনেক লোক ব্যবহার করে। ফলস্বরূপ, এটি কার্যত সর্বদা নির্ভরযোগ্য এবং কার্যকরী হওয়ার জন্য ভালভাবে ডিজাইন করা উচিত।
ফলস্বরূপ, সিস্টেমের গুরুত্বপূর্ণ চাহিদাগুলি নির্ধারণ করা গুরুত্বপূর্ণ।
হোয়াটসঅ্যাপ মেসেঞ্জারের ন্যূনতম প্রয়োজনীয়তাগুলি হল:
- একের পর এক মিথস্ক্রিয়া সহজতর করতে সক্ষম।
- বার্তার স্বীকৃতি এবং সর্বশেষ দেখা উভয়ই সম্ভব (প্রেরিত, বিতরণ করা এবং পড়া)।
- এন্ড-টু-এন্ড এনক্রিপশন এবং মিডিয়া সমর্থন (ছবি/ভিডিও) অনুমতি দিন।
আসুন জেনে নিন আমাদের প্রয়োজনীয় পরিষেবার জন্য কতটা ক্ষমতা প্রয়োজন।
2. অনুমান ক্ষমতা
আমাদের উদ্দেশ্য হল একটি প্ল্যাটফর্ম তৈরি করা যা প্রচুর পরিমাণে ট্রাফিক পরিচালনা করতে সক্ষম। অনুমান করুন যে প্রতিদিন 10 বিলিয়ন এসএমএস পাঠানো হয়। আমরা পেয়েছি:
- প্রতিদিন 10 বিলিয়ন এসএমএস পাঠানো হয় এক বিলিয়ন মানুষ।
- সর্বোচ্চ ট্রাফিকের সময়ে (প্রতি সেকেন্ডে), 700,000 জন সক্রিয় ছিল (6X গড়)
- সর্বোচ্চ ব্যবহারের সময়, প্রতি সেকেন্ডে 40 মিলিয়ন বার্তা প্রেরণ করা হয়।
- একটি বার্তার গড় দৈর্ঘ্য হল 160 অক্ষর: 10B * 160 = 1.6TB ডেটা প্রতিদিন তৈরি হয়৷
- উদাহরণ হিসাবে দশ বছরের পরিষেবা নিন: 10 * 1.6B * 365 PB
- সম্পূর্ণ অ্যাপ্লিকেশনটি মাইক্রোসার্ভিসেস দ্বারা গঠিত হবে, যার প্রত্যেকটি একটি বিশেষ কাজ সম্পাদন করবে। অনুমান করুন যে একটি বার্তা পাঠাতে 20 মিলিসেকেন্ড সময় লাগে এবং প্রতি সার্ভারে 100টি সমবর্তী সংযোগ রয়েছে৷ ফলস্বরূপ, প্রয়োজনীয় চ্যাট সার্ভারের প্রত্যাশিত সংখ্যা = (চ্যাট বার্তা প্রতি সেকেন্ড লেটেন্সি)/ সার্ভার প্রতি সমবর্তী সংযোগ = 40M * 20ms / 100 = 8000 সার্ভার।
3. উচ্চ-স্তরের স্থাপত্য
এই সিস্টেমটি দুটি মূল পরিষেবার উপর নির্মিত। চ্যাট পরিষেবা এবং ট্রানজিটরি পরিষেবা, উদাহরণস্বরূপ। চ্যাট পরিষেবা ব্যবহারকারীদের অনলাইন বার্তাগুলির দ্বারা উত্পন্ন সমস্ত ট্র্যাফিক পরিচালনা করে৷ একই সাথে, ব্যবহারকারী অফলাইনে থাকাকালীন অস্থায়ী পরিষেবা ট্র্যাফিক পরিচালনা করে।
ব্যবহারকারী অনলাইন হলে, চ্যাট পরিষেবা বার্তা প্রদানের দায়িত্বে থাকে।
এটি বার্তার প্রাপক অনলাইন কিনা তা যাচাই করবে; প্রাপক অনলাইন হলে, এই পরিষেবাটি অবিলম্বে বার্তা প্রদান করবে; প্রাপক অনলাইনে না থাকলে, তারা অনলাইনে ফিরলে ট্রানজিটরি সার্ভিস তাদের কাছে বার্তা পাঠাবে।
অফলাইন ব্যবহারকারী পুনরায় সংযোগ না করা পর্যন্ত অস্থায়ীভাবে অ্যাক্সেসযোগ্য ডেটা রাখার জন্য ট্রানজিটরি পরিষেবা একটি পৃথক স্টোরেজ এলাকা রাখে।
উচ্চ-স্তরের API ডিজাইন করা
বার্তা পাঠানো এবং পড়ার জন্য এই পরিষেবাটিতে দুটি উচ্চ-স্তরের কার্যকরী API রয়েছে। সিস্টেমটি REST আর্কিটেকচার ব্যবহার করে প্রয়োগ করা যেতে পারে।
বার্তা পাঠানোর জন্য পরামিতি
এই API দুই ব্যবহারকারীর মধ্যে বার্তা প্রেরণ করতে ব্যবহার করা হবে.
কথোপকথনের পরামিতি
এই API থ্রেডেড চ্যাট প্রদর্শন করতে ব্যবহার করা হয়. হোয়াটসঅ্যাপ খুললেই আপনি প্রথম যে জিনিসটি দেখতে পান তা বিবেচনা করুন। আমরা শুধুমাত্র একটি API ক্যোয়ারীতে একজন ব্যবহারকারীর জন্য কয়েকটি বার্তা পেতে চাই। এটি পরিচালনা করার জন্য, অফসেট এবং বার্তা গণনা পরামিতি প্রয়োজন।
সর্বশেষ দেখা, একক টিক এবং ডবল টিক মত বৈশিষ্ট্যগুলির কাজ কি?
এই পরিষেবাগুলি স্থাপনে গুরুত্বপূর্ণ ভূমিকা হল স্বীকৃতি পরিষেবা৷ এই বৈশিষ্ট্যগুলি তৈরি করা হয়েছিল যেহেতু এই পরিষেবাটি স্বীকৃতির উত্তরগুলি তৈরি এবং যাচাই করে চলেছে৷
- একক টিক: যখন ব্যবহারকারী A থেকে একটি বার্তা ব্যবহারকারী B এর কাছে পৌঁছায়, তখন সার্ভার একটি একক টিক প্রেরণ করে স্বীকার করে যে বার্তাটি প্রেরণ করা হয়েছে।
- ডাবল টিক: সঠিক সংযোগের মাধ্যমে ব্যবহারকারী B কে সার্ভারের বার্তা পাঠানোর পরে, ব্যবহারকারী B সার্ভারে বার্তার প্রাপ্তি স্বীকার করবে। সার্ভার তারপর ব্যবহারকারী A কে অন্য একটি স্বীকৃতি প্রদান করবে। ফলস্বরূপ, একটি ডুপ্লিকেট টিক প্রদর্শিত হবে।
- নীল টিক: ব্যবহারকারী B বার্তা চেক করার পর সার্ভারে আরেকটি স্বীকৃতি পাঠাবে। সার্ভার তারপর ব্যবহারকারী A কে একটি অতিরিক্ত স্বীকৃতি বার্তা পাঠাবে। এর পরে ব্যবহারকারী A এর স্ক্রিনে একটি নীল টিক প্রদর্শিত হবে।
- শেষ দেখা: হার্টবিট মেকানিজম শেষ দেখা বৈশিষ্ট্যের জন্য সম্পূর্ণরূপে দায়ী। প্রতি 5 সেকেন্ডে, একটি হৃদস্পন্দন সার্ভারে প্রেরণ করা হয়, যা প্রতিটি ব্যবহারকারীর সর্বশেষ দেখা স্ট্যাটাস একটি টেবিলে ট্র্যাক রাখে যা অন্য যেকোনো ব্যবহারকারী সহজেই অ্যাক্সেস করতে পারে।
4. মূল বৈশিষ্ট্য ডিজাইন করা
ব্যক্তিগতকৃত মিথস্ক্রিয়া
এটি চ্যাট পরিষেবার একটি প্রয়োজনীয় অংশ। একজন ব্যবহারকারী এই পরিষেবাটি ব্যবহার করে অন্য ব্যবহারকারীকে বার্তা পাঠাতে পারেন। চলুন দেখে নেই কিভাবে এটি কাজ করে:
ধরে নিন জয় আয়ুষের সাথে যোগাযোগ করতে চায়। জে একটি চ্যাট সার্ভারের সাথে সংযুক্ত থাকে যার সাথে সে বার্তাটি পায়। জে চ্যাট সার্ভার থেকে নিশ্চিতকরণ পায় যে বার্তাটি পাঠানো হয়েছে। চ্যাট সার্ভার এখন যে চ্যাট সার্ভারের সাথে আয়ুশ সংযুক্ত রয়েছে সে সম্পর্কে ডেটা স্টোর থেকে তথ্যের জন্য অনুরোধ করছে। জয়ের চ্যাট সার্ভার এখন বার্তাটি আয়ুশের চ্যাট সার্ভারে প্রেরণ করে এবং আয়ুশ একটি পুশ প্রক্রিয়ার মাধ্যমে বার্তাটি গ্রহণ করে। আয়ুষ এখন জয়ের চ্যাট সার্ভারে একটি স্বীকৃতি পাঠায়, যা জেকে জানায় যে বার্তাটি বিতরণ করা হয়েছে। যদি আয়ুশ আবার বার্তাটি পড়েন, তাহলে একটি নতুন স্বীকৃতি যে বার্তাটি পড়া হয়েছে জয়ের কাছে পৌঁছে দেওয়া হয়েছিল।
ব্যবহারকারীর কার্যকলাপের অবস্থা
শেষবার একজন ব্যক্তি সক্রিয় ছিলেন তা তাত্ক্ষণিক মেসেঞ্জারগুলির একটি নিয়মিত বৈশিষ্ট্য।
ক্লায়েন্ট এবং সার্ভারের মধ্যে সংযোগ বজায় রাখার জন্য একটি সিস্টেম এই চিত্রটিতে চিত্রিত করা হয়েছে। সার্ভার এবং ক্লায়েন্টের মধ্যে একটি দ্বিমুখী সংযোগ স্থাপন করতে ওয়েব সকেট ব্যবহার করা হয়েছিল। এই সংযোগগুলি হার্টবিট পাঠায়, যা ব্যবহারকারীর কার্যকলাপের অবস্থা নিরীক্ষণ করতে ব্যবহৃত হয়।
এন্ড-টু-এন্ড প্রাইভেসি
এন্ড-টু-এন্ড এনক্রিপশন হল একটি মূল বৈশিষ্ট্য যা নিশ্চিত করে যে শুধুমাত্র কথোপকথনকারী ব্যবহারকারীরা যোগাযোগ পড়তে পারে। একটি সর্বজনীন কী যোগাযোগের সাথে জড়িত সমস্ত ব্যবহারকারীদের মধ্যে ভাগ করা হয় এবং এন্ড-টু-এন্ড এনক্রিপশন বজায় রাখার জন্য গুরুত্বপূর্ণ। অনুমান করুন যে চ্যানেলে দুটি ব্যবহারকারী রয়েছে, জয় এবং আয়ুশ, যারা একে অপরের সাথে যোগাযোগ করে।
জয়ের কাছে আয়ুশের সর্বজনীন কী আছে এবং আয়ুষের কাছে জয়ের সর্বজনীন কী পাশাপাশি তাদের অ-ভাগ করা ব্যক্তিগত কী রয়েছে৷ ফলস্বরূপ, জে যখন বার্তাটি প্রেরণ করেন, তখন তিনি এটি আয়ুশের সর্বজনীন কী দিয়ে এনক্রিপ্ট করেন, যা শুধুমাত্র আয়ুশের ব্যক্তিগত কী দিয়ে ডিকোড করা যেতে পারে।
একইভাবে, জয় শুধুমাত্র আয়ুশের যোগাযোগ ডিকোড করতে সক্ষম হবে। ফলস্বরূপ, শুধুমাত্র Jay এবং Aaysuh একে অপরের যোগাযোগ দেখতে সক্ষম হবে, এবং সার্ভার পুরো প্রক্রিয়ার একটি গেটওয়ে হিসাবে কাজ করবে।
5. বাধা
প্রতিটি সিস্টেম ত্রুটিপূর্ণ প্রবণ হয়. এত বড় পরিমানে ট্র্যাফিক পরিচালনা করার জন্য, পরিষেবাটি অবশ্যই চালু থাকতে হবে এবং প্রতিবন্ধকতা এড়াতে ত্রুটি-সহনশীল থাকতে হবে। যেহেতু আমাদের পরিষেবা সম্পূর্ণরূপে চ্যাট এবং ট্রানজিয়েন্ট সার্ভারের উপর নির্ভরশীল, আমাদের অবশ্যই তাদের অপারেশন থেকে উদ্ভূত সমস্ত সমস্যা সমাধান করতে হবে।
চ্যাট সার্ভারের ব্যর্থতা: এটি আমাদের সিস্টেমের হৃদয়। ব্যবহারকারীরা যখন অনলাইন থাকে, তখন এটি বার্তা পরিচালনা এবং বিতরণের জন্য দায়ী। ফলস্বরূপ, এই সিস্টেমটি তার ব্যবহারকারীদের সাথে সংযোগ বজায় রাখে।
ফলে এই পরিষেবা ব্যর্থ হলে পুরো স্থাপত্যই ক্ষতিগ্রস্ত হবে। চ্যাট সার্ভারের ব্যর্থতা পরিচালনা করার জন্য দুটি পদ্ধতি রয়েছে। একটি পদ্ধতি হল TCP সংযোগগুলিকে অন্য সার্ভারে স্থানান্তর করা, অন্যটি হল সংযোগ হারানোর ক্ষেত্রে ব্যবহারকারীদের স্বয়ংক্রিয়ভাবে সংযোগ শুরু করার অনুমতি দেওয়া।
ক্ষণস্থায়ী সঞ্চয়স্থানের ব্যর্থতা: ব্যর্থতার প্রবণ আরেকটি উপাদান যা শেষ পর্যন্ত পুরো পরিষেবার ক্ষতি করতে পারে তা হল ক্ষণস্থায়ী স্টোরেজ। এই পরিষেবা ব্যর্থ হলে অফলাইন ব্যবহারকারীদের রুটে বার্তাগুলি হারিয়ে যায়৷
আমরা প্রতিটি ব্যবহারকারীর অস্থায়ী সঞ্চয়স্থান প্রতিলিপি করে বার্তার ক্ষতি রোধ করতে পারি। ফলস্বরূপ, ব্যবহারকারী যখনই অনলাইনে ফিরে আসে তখনই প্রতিরূপটি ফাংশনগুলি প্রক্রিয়া করার জন্য নিযুক্ত করা যেতে পারে। যদি আসল সার্ভারটি অ্যাক্সেসযোগ্য হয়ে যায়, ব্যবহারকারীর ট্রানজিটরি স্টোরেজের আসল এবং প্রতিলিপি উভয় দৃষ্টান্ত একটি একক স্টোরে একত্রিত হয়।
6. অপ্টিমাইজেশান কৌশল
অদৃশ্যতা: একটি নির্বিঘ্ন এবং উন্নত ক্লায়েন্ট অভিজ্ঞতা প্রদান করতে, মেসেঞ্জার পরিষেবাটি অবশ্যই রিয়েল-টাইম হতে হবে। ফলস্বরূপ, প্রায়শই অ্যাক্সেস করা ডেটার অংশ ক্যাশে করে লেটেন্সি কমাতে হবে। আমরা Redis এর মতো বিতরণ করা ক্যাশে ব্যবহার করে মেমরিতে ব্যবহারকারীর কার্যকলাপের স্থিতি এবং সাম্প্রতিক কথোপকথন ক্যাশে করতে পারি।
উপস্থিতি: আমাদের পরিষেবা বেশির ভাগ সময় উপলব্ধ থাকতে হবে। আমাদের সিস্টেমটি অবশ্যই ত্রুটি-সহনশীল হতে হবে, এইভাবে আমরা ক্ষণস্থায়ী বার্তাগুলির বেশ কয়েকটি অনুলিপি রাখতে পারি যাতে হারিয়ে যাওয়া কোনও বার্তা দ্রুত তার সদৃশ থেকে পুনরুদ্ধার করা যায়। ফলস্বরূপ, সিস্টেমের প্রাপ্যতা বিপন্ন হতে পারে না।
উপসংহার
আমাদের সিস্টেম এখন শুধুমাত্র কয়েকটি ক্ষমতা সমর্থন করে, কিন্তু আমরা সহজেই এটিকে প্রসারিত করতে পারি যাতে একাধিক ব্যক্তিকে বার্তা বিতরণ করতে গ্রুপ চ্যাট যোগ করা যায়। আপনি ভিডিও এবং ফোন কল ক্ষমতা প্রদান করতে পারেন। এই সিস্টেমটি এমনভাবে তৈরি করা যেতে পারে যাতে ব্যবহারকারীরা স্ট্যাটাস আপডেট বা বর্ণনা প্রকাশ করতে পারে এবং একে অপরকে পড়তে পারে।
আমি আপনাকে WhatsApp সিস্টেম ডিজাইনের একটি উচ্চ-স্তরের ওভারভিউ প্রদান করার জন্য কঠোর পরিশ্রম করেছি। আমি আশা করি আপনি এটি উপভোগ করেছেন এবং এটি ভাল ব্যবহার করবেন।
নির্দেশিকা সমন্ধে মতামত দিন