একটি ওয়েব ক্রলার ডিজাইন (Design A Web Crawler)
এই অধ্যায়ে, আমরা ওয়েব ক্রলার ডিজাইনের ওপর ফোকাস করব: একটি আকর্ষণীয় এবং ক্লাসিক সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন।
একটি ওয়েব ক্রলারকে রোবট বা স্পাইডার হিসেবেও জানানো হয়। ওয়েবে নতুন বা আপডেট করা কন্টেন্ট আবিষ্কার করতে সার্চ ইঞ্জিনগুলো এটি ব্যাপকভাবে ব্যবহার করে। কন্টেন্ট হতে পারে একটি ওয়েব পেজ, একটি ছবি, একটি ভিডিও, একটি PDF ফাইল ইত্যাদি। একটি ওয়েব ক্রলার কয়েকটি ওয়েব পেজ সংগ্রহ করার মাধ্যমে শুরু হয় এবং তারপর নতুন কন্টেন্ট সংগ্রহ করতে সেই পেজগুলোর লিংক অনুসরণ করে। চিত্র ১ ক্রল প্রক্রিয়ার একটি ভিজ্যুয়াল উদাহরণ দেখায়।
[চিত্র ১-এর বর্ণনা: ছবিটি একটি ওয়েবসাইটের রিডাইরেকশন বা লিংকিং স্ট্রাকচার চিত্রিত করে এমন একটি ডায়াগ্রাম উপস্থাপন করে। একটি কেন্দ্রীয় ‘a.com page’ বক্সে www.a.com, www.b.com, এবং www.c.com URL গুলো দেখানো হয়েছে। এই কেন্দ্রীয় বক্স থেকে নীল তীর চিহ্ন বের হয়ে অন্য ওয়েবপেজের উপস্থাপনার দিকে নির্দেশ করছে। প্রথম তীরটি একটি ‘b.com page’-এর সাথে সংযুক্ত যা www.banana.com দেখায়, যার আবার একটি তীর ‘banana.com page’-এর দিকে নির্দেশিত। ‘a.com page’ থেকে দ্বিতীয় তীরটি একটি ‘c.com page’-এর সাথে সংযুক্ত যা www.orange.com এবং www.plum.com দেখায়, যার থেকে আলাদা তীর চিহ্ন যথাক্রমে ‘orange.com page’ এবং ‘plum.com page’-এর দিকে নিয়ে যায়। পরিশেষে, ‘a.com page’ থেকে তৃতীয় তীরটি একটি ‘a.com page’-এর দিকে নির্দেশ করে যা www.lime.com, www.peach.com, এবং www.mango.com দেখায়, যার পরবর্তী তীর চিহ্নগুলো পৃথক ‘lime.com page’, ‘peach.com page’, এবং ‘mango.com page’ উপস্থাপনার সাথে সংযুক্ত। প্রতিটি ওয়েবপেজ উপস্থাপনা একটি সাধারণ ব্রাউজার উইন্ডো আইকন যার অ্যাড্রেস বারে তিনটি ডট রয়েছে, যা একাধিক ট্যাব বা উইন্ডো নির্দেশ করে। সামগ্রিক কাঠামোটি দেখায় কীভাবে একটি একক ওয়েবসাইট (a.com) অন্য একাধিক ওয়েবসাইটে লিংক করতে পারে এবং ব্যবহারকারীদের রিডাইরেক্ট করতে পারে।]
চিত্র ১
একটি ক্রলার অনেক উদ্দেশ্যে ব্যবহার করা হয়:
- সার্চ ইঞ্জিন ইনডেক্সিং (Search engine indexing): এটি সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্র। একটি ক্রলার সার্চ ইঞ্জিনগুলোর জন্য একটি লোকাল ইনডেক্স তৈরি করতে ওয়েব পেজগুলো সংগ্রহ করে। উদাহরণস্বরূপ, Googlebot হলো গুগল সার্চ ইঞ্জিনের পেছনের ওয়েব ক্রলার।
- ওয়েব আর্কাইভিং (Web archiving): এটি ভবিষ্যতের ব্যবহারের জন্য ডেটা সংরক্ষণ করতে ওয়েব থেকে তথ্য সংগ্রহ করার প্রক্রিয়া। উদাহরণস্বরূপ, অনেক জাতীয় লাইব্রেরি ওয়েব সাইট আর্কাইভ করতে ক্রলার চালায়। উল্লেখযোগ্য উদাহরণগুলো হলো US Library of Congress [1] এবং EU web archive [2]।
- ওয়েব মাইনিং (Web mining): ওয়েবের বিস্ফোরক বৃদ্ধি ডেটা মাইনিংয়ের জন্য এক অভূতপূর্ব সুযোগ তৈরি করেছে। ওয়েব মাইনিং ইন্টারনেট থেকে দরকারী জ্ঞান আবিষ্কার করতে সাহায্য করে। উদাহরণস্বরূপ, শীর্ষ আর্থিক প্রতিষ্ঠানগুলো মূল কোম্পানি উদ্যোগগুলো সম্পর্কে জানতে শেয়ারহোল্ডার মিটিং এবং বার্ষিক প্রতিবেদন ডাউনলোড করতে ক্রলার ব্যবহার করে।
- ওয়েব মনিটরিং (Web monitoring): ক্রলারগুলো ইন্টারনেটে কপিরাইট এবং ট্রেডমার্ক লঙ্ঘন মনিটর করতে সাহায্য করে। উদাহরণস্বরূপ, Digimarc [3] পাইরেটেড কাজ এবং রিপোর্ট আবিষ্কার করতে ক্রলার ব্যবহার করে।
একটি ওয়েব ক্রলার তৈরির জটিলতা নির্ভর করে আমরা কোন স্কেল সমর্থন করতে চাই তার ওপর। এটি একটি ছোট স্কুল প্রজেক্ট হতে পারে, যা সম্পূর্ণ করতে মাত্র কয়েক ঘন্টা সময় লাগে, অথবা একটি বিশাল প্রজেক্ট হতে পারে যার জন্য একটি নিবেদিত প্রকৌশলী দলের কাছ থেকে ক্রমাগত উন্নতির প্রয়োজন হয়। সুতরাং, আমরা নিচে সমর্থন করার জন্য স্কেল এবং ফিচারগুলো অন্বেষণ করব।
ধাপ ১ - সমস্যাটি বোঝা এবং ডিজাইনের সুনির্দিষ্ট ক্ষেত্র (scope) নির্ধারণ করা
একটি ওয়েব ক্রলারের মৌলিক অ্যালগরিদম সহজ: ১. URL গুলোর একটি সেট দেওয়া থাকলে, URL গুলো দ্বারা নির্দেশিত সমস্ত ওয়েব পেজ ডাউনলোড করুন। ২. এই ওয়েব পেজগুলো থেকে URL এক্সট্র্যাক্ট (বের) করুন। ৩. ডাউনলোড করার জন্য URL গুলোর তালিকায় নতুন URL যোগ করুন। এই ৩টি ধাপ পুনরাবৃত্তি করুন।
একটি ওয়েব ক্রলার কি সত্যিই এই মৌলিক অ্যালগরিদমের মতো সহজভাবে কাজ করে? একদম তা নয়। একটি ব্যাপকভাবে স্কেলেবল ওয়েব ক্রলার ডিজাইন করা অত্যন্ত জটিল একটি কাজ। ইন্টারভিউয়ের সময়সীমার মধ্যে কারও পক্ষে একটি বিশাল ওয়েব ক্রলার ডিজাইন করা সম্ভব নয়। ডিজাইনে ঝাঁপ দেওয়ার আগে, আমাদের প্রয়োজনীয়তাগুলো বুঝতে এবং ডিজাইনের সুনির্দিষ্ট ক্ষেত্র প্রতিষ্ঠা করতে প্রশ্ন করতে হবে:
প্রার্থী: ক্রলারটির মূল উদ্দেশ্য কী? এটি কি সার্চ ইঞ্জিন ইনডেক্সিং, ডেটা মাইনিং, নাকি অন্য কিছুর জন্য ব্যবহার করা হচ্ছে? ইন্টারভিউয়ার: সার্চ ইঞ্জিন ইনডেক্সিং।
প্রার্থী: ওয়েব ক্রলারটি প্রতি মাসে কতগুলো ওয়েব পেজ সংগ্রহ করে? ইন্টারভিউয়ার: ১ বিলিয়ন (১০০ কোটি) পেজ।
প্রার্থী: কোন কোন কন্টেন্ট টাইপ অন্তর্ভুক্ত? শুধুমাত্র HTML নাকি PDF এবং ছবির মতো অন্যান্য কন্টেন্ট টাইপও? ইন্টারভিউয়ার: শুধুমাত্র HTML।
প্রার্থী: আমাদের কি নতুন যুক্ত করা বা সম্পাদিত ওয়েব পেজগুলো বিবেচনা করা উচিত? ইন্টারভিউয়ার: হ্যাঁ, আমাদের নতুন যুক্ত করা বা সম্পাদিত ওয়েব পেজগুলো বিবেচনা করা উচিত।
প্রার্থী: আমাদের কি ওয়েব থেকে ক্রল করা HTML পেজগুলো সংরক্ষণ করতে হবে? ইন্টারভিউয়ার: হ্যাঁ, ৫ বছর পর্যন্ত।
প্রার্থী: ডুপ্লিকেট কন্টেন্ট সহ ওয়েব পেজগুলো আমরা কীভাবে হ্যান্ডেল করব? ইন্টারভিউয়ার: ডুপ্লিকেট কন্টেন্ট সহ পেজগুলো উপেক্ষা (ignore) করা উচিত।
উপরের প্রশ্নগুলো হলো কিছু নমুনা প্রশ্ন যা আপনি আপনার ইন্টারভিউয়ারকে জিজ্ঞেস করতে পারেন। প্রয়োজনীয়তাগুলো বোঝা এবং অস্পষ্টতা দূর করা গুরুত্বপূর্ণ। এমনকি যদি আপনাকে ওয়েব ক্রলারের মতো একটি সরাসরি পণ্য ডিজাইন করতে বলা হয়, তবুও আপনি এবং আপনার ইন্টারভিউয়ারের ধারণা এক নাও হতে পারে।
আপনার ইন্টারভিউয়ারের সাথে স্পষ্ট করার জন্য ফাংশনালিটিগুলোর পাশাপাশি, একটি ভালো ওয়েব ক্রলারের নিচের বৈশিষ্ট্যগুলো নোট করাও গুরুত্বপূর্ণ:
- স্কেলেবিলিটি (Scalability): ওয়েব অনেক বড়। সেখানে বিলিয়ন বিলিয়ন ওয়েব পেজ রয়েছে। ওয়েব ক্রলিং প্যারালালাইজেশন (parallelization) ব্যবহার করে অত্যন্ত দক্ষ হওয়া উচিত।
- রোবাস্টনেস (Robustness): ওয়েব ফাঁদে ভরা। খারাপ HTML, রেসপন্স না করা সার্ভার, ক্র্যাশ, ম্যালিশাস লিংক ইত্যাদি সবই সাধারণ বিষয়। ক্রলারকে অবশ্যই সেই সমস্ত এজ কেস (edge cases) হ্যান্ডেল করতে হবে।
- ভদ্রতা (Politeness): ক্রলারের উচিত নয় অল্প সময়ের মধ্যে একটি ওয়েবসাইটে খুব বেশি রিকোয়েস্ট করা।
- এক্সটেনসিবিলিটি (Extensibility): সিস্টেমটি নমনীয় হতে হবে যাতে নতুন কন্টেন্ট টাইপ সমর্থন করতে ন্যূনতম পরিবর্তনের প্রয়োজন হয়। উদাহরণস্বরূপ, যদি আমরা ভবিষ্যতে ছবির ফাইল ক্রল করতে চাই, তবে আমাদের পুরো সিস্টেমটি পুনরায় ডিজাইন করার প্রয়োজন হওয়া উচিত নয়।
খসড়া অনুমান (Back of the envelope estimation)
নিচের অনুমানগুলো অনেকগুলি ধারণার ওপর ভিত্তি করে করা, এবং একই পৃষ্ঠায় (same page) থাকতে ইন্টারভিউয়ারের সাথে যোগাযোগ করা গুরুত্বপূর্ণ।
- ধরে নিন প্রতি মাসে ১ বিলিয়ন ওয়েব পেজ ডাউনলোড করা হয়।
- QPS (প্রতি সেকেন্ডে রিকোয়েস্ট): ১,০০০,০০০,০০০ / ৩০ দিন / ২৪ ঘন্টা / ৩৬০০ সেকেন্ড = ~৪০০ পেজ প্রতি সেকেন্ডে।
- পিক QPS = ২ * QPS = ৮০০
- ধরে নিন গড় ওয়েব পেজের সাইজ ৫০০ KB (500k)।
- ১ বিলিয়ন পেজ x ৫০০k = প্রতি মাসে ৫০০ TB স্টোরেজ। যদি আপনি ডিজিটাল স্টোরেজ ইউনিট সম্পর্কে স্পষ্ট না হন, তবে “Back-of-the-envelope Estimation” অধ্যায়ের “Power of 2” বিভাগটি আবার পড়ে নিন।
- ধরে নিচ্ছি ডেটা পাঁচ বছরের জন্য সংরক্ষণ করা হয়, ৫০০ TB * ১২ মাস * ৫ বছর = ৩০ PB। পাঁচ বছরের কন্টেন্ট সংরক্ষণ করতে ৩০ PB স্টোরেজ প্রয়োজন।