ধাপ ২ - উচ্চ-স্তরের (high-level) ডিজাইন প্রস্তাব করা এবং সম্মতি নেওয়া
প্রয়োজনীয়তাগুলো স্পষ্ট হয়ে গেলে, আমরা উচ্চ-স্তরের ডিজাইনে চলে যাই। ওয়েব ক্রলিংয়ের পূর্ববর্তী গবেষণাগুলো দ্বারা অনুপ্রাণিত হয়ে [4] [5], আমরা চিত্র ২-এ দেখানো হিসাবে একটি উচ্চ-স্তরের ডিজাইন প্রস্তাব করি।
[চিত্র ২-এর বর্ণনা: ছবিটি একটি ওয়েব ক্রলার সিস্টেম আর্কিটেকচার উপস্থাপন করে। প্রক্রিয়াটি seed URLs-এর একটি সেট দিয়ে শুরু হয়, যা একটি URL Frontier-এ ফিড করা হয়। URL Frontier একটি HTML Downloader-এ একে একে URL পাঠায়, যা একটি DNS Resolver-এর মাধ্যমে ডোমেইন নেম সমাধান করার পরে প্রতিটি URL-এর HTML কন্টেন্ট পুনরুদ্ধার করে। ডাউনলোড করা HTML তারপর একটি Content Parser-এ পাঠানো হয়। পার্স করা কন্টেন্টটি একটি Content Seen? উপাদানের বিরুদ্ধে চেক করা হয়, যা Content St.. (সম্ভবত Content Storage) লেবেলযুক্ত একটি ডাটাবেসের সাথে পরামর্শ করে। যদি কন্টেন্টটি নতুন হয়, তবে একটি Link Extractor পার্স করা কন্টেন্ট থেকে সমস্ত URL বের করে। এই এক্সট্র্যাক্ট করা URL গুলো তারপর একটি URL Filter-এর মধ্য দিয়ে যাওয়ার আগে একটি URL Seen? উপাদানের বিরুদ্ধে চেক করা হয়, যা URL Storag.. (সম্ভবত URL Storage) ডাটাবেসের সাথে মিথস্ক্রিয়া করে। নতুন বলে বিবেচিত URL গুলো তারপর URL Frontier-এ ফিরে ফিড করা হয়, যা নতুন ওয়েব পেজ ক্রল এবং প্রসেস করার একটি চক্র তৈরি করে। পুরো সিস্টেমটি পদ্ধতিগতভাবে ওয়েব পেজ অন্বেষণ এবং প্রসেস করার জন্য ডিজাইন করা হয়েছে, উভয় ভিজিট করা URL এবং কন্টেন্ট সংরক্ষণ করে।]
চিত্র ২
প্রথমে, আমরা তাদের কার্যকারিতা বুঝতে প্রতিটি ডিজাইন উপাদান অন্বেষণ করি। তারপর, আমরা ধাপে ধাপে ক্রলারের ওয়ার্কফ্লো পরীক্ষা করি।
সিড URL (Seed URLs)
একটি ওয়েব ক্রলার ক্রল প্রক্রিয়ার শুরুর বিন্দু হিসাবে সিড URL ব্যবহার করে। উদাহরণস্বরূপ, একটি বিশ্ববিদ্যালয়ের ওয়েবসাইট থেকে সমস্ত ওয়েব পেজ ক্রল করতে, সিড URL নির্বাচন করার একটি সহজবোধ্য উপায় হলো বিশ্ববিদ্যালয়ের ডোমেইন নেম ব্যবহার করা।
পুরো ওয়েব ক্রল করতে, আমাদের সিড URL নির্বাচনে সৃজনশীল হতে হবে। একটি ভালো সিড URL একটি ভালো শুরুর বিন্দু হিসাবে কাজ করে যা একটি ক্রলার যতটা সম্ভব অনেক লিংক অতিক্রম করতে ব্যবহার করতে পারে। সাধারণ কৌশল হলো পুরো URL স্পেসকে ছোট ছোট ভাগে ভাগ করা। প্রথম প্রস্তাবিত পদ্ধতিটি লোকালিটির (locality) ওপর ভিত্তি করে কারণ বিভিন্ন দেশের বিভিন্ন জনপ্রিয় ওয়েবসাইট থাকতে পারে। আরেকটি উপায় হলো বিষয়ের ওপর ভিত্তি করে সিড URL বেছে নেওয়া; উদাহরণস্বরূপ, আমরা URL স্পেসকে শপিং, স্পোর্টস, হেলথকেয়ার ইত্যাদিতে ভাগ করতে পারি। সিড URL নির্বাচন একটি ওপেন-এন্ডেড (open-ended) প্রশ্ন। আপনার কাছ থেকে নিখুঁত উত্তর দেওয়ার আশা করা হচ্ছে না। শুধু মনে যা আসে তা ভেবে নিন (think out loud)।
URL Frontier
বেশিরভাগ আধুনিক ওয়েব ক্রলার ক্রল স্টেটকে দুটি ভাগে ভাগ করে: ডাউনলোড করা হবে এবং ইতিমধ্যে ডাউনলোড করা হয়েছে। যে উপাদানটি ডাউনলোড করার জন্য URL গুলো সংরক্ষণ করে তাকে URL Frontier বলা হয়। আপনি এটিকে একটি First-in-First-out (FIFO) কিউ হিসাবে উল্লেখ করতে পারেন। URL Frontier সম্পর্কে বিস্তারিত তথ্যের জন্য, ডিপ ডাইভ (deep dive) অংশটি দেখুন।
HTML Downloader
HTML ডাউনলোডার ইন্টারনেট থেকে ওয়েব পেজগুলো ডাউনলোড করে। সেই URL গুলো URL Frontier দ্বারা প্রদান করা হয়।
DNS Resolver
একটি ওয়েব পেজ ডাউনলোড করতে, একটি URL-কে অবশ্যই একটি IP অ্যাড্রেসে অনুবাদ করতে হবে। HTML Downloader URL-এর জন্য সংশ্লিষ্ট IP অ্যাড্রেস পেতে DNS Resolver-কে কল করে। উদাহরণস্বরূপ, ৩/৫/২০১৯ তারিখ অনুযায়ী URL www.wikipedia.org-কে IP অ্যাড্রেস 198.35.26.96-এ রূপান্তর করা হয়।
Content Parser
একটি ওয়েব পেজ ডাউনলোড করার পরে, এটিকে অবশ্যই পার্স এবং ভ্যালিডেট করতে হবে কারণ বিকৃত (malformed) ওয়েব পেজগুলো সমস্যার সৃষ্টি করতে পারে এবং স্টোরেজ স্পেস নষ্ট করতে পারে। একটি ক্রল সার্ভারে একটি কন্টেন্ট পার্সার বাস্তবায়ন করলে ক্রলিং প্রক্রিয়া ধীর হয়ে যাবে। তাই, কন্টেন্ট পার্সার একটি পৃথক উপাদান।
Content Seen?
অনলাইন গবেষণা [6] প্রকাশ করে যে ২৯% ওয়েব পেজ হলো ডুপ্লিকেট কন্টেন্ট, যার ফলে একই কন্টেন্ট একাধিকবার সংরক্ষণ হতে পারে। আমরা ডেটা অপ্রয়োজনীয়তা (redundancy) দূর করতে এবং প্রসেসিংয়ের সময় কমাতে “Content Seen?” ডেটা স্ট্রাকচার প্রবর্তন করি। এটি সিস্টেমে পূর্বে সংরক্ষিত নতুন কন্টেন্ট সনাক্ত করতে সাহায্য করে। দুটি HTML ডকুমেন্ট তুলনা করতে, আমরা সেগুলোকে ক্যারেক্টার বাই ক্যারেক্টার তুলনা করতে পারি। তবে, এই পদ্ধতিটি ধীরগতির এবং সময়সাপেক্ষ, বিশেষ করে যখন বিলিয়ন বিলিয়ন ওয়েব পেজ জড়িত থাকে। এই কাজটি সম্পন্ন করার একটি দক্ষ উপায় হলো দুটি ওয়েব পেজের হ্যাশ ভ্যালু (hash values) তুলনা করা [7]।
Content Storage
এটি HTML কন্টেন্ট সংরক্ষণ করার জন্য একটি স্টোরেজ সিস্টেম। স্টোরেজ সিস্টেমের পছন্দ নির্ভর করে ডেটার ধরন, ডেটার সাইজ, অ্যাক্সেসের ফ্রিকোয়েন্সি, জীবনকাল ইত্যাদি বিষয়গুলোর ওপর। ডিস্ক এবং মেমরি উভয়ই ব্যবহার করা হয়।
- বেশিরভাগ কন্টেন্ট ডিস্কে সংরক্ষণ করা হয় কারণ ডেটা সেটটি মেমরিতে ধরার জন্য অনেক বড়।
- লেটেন্সি কমাতে জনপ্রিয় কন্টেন্ট মেমরিতে রাখা হয়।
URL Extractor
URL Extractor HTML পেজগুলো থেকে লিংক পার্স এবং এক্সট্র্যাক্ট করে। চিত্র ৩ একটি লিংক এক্সট্রাকশন প্রক্রিয়ার একটি উদাহরণ দেখায়। “https://en.wikipedia.org ” প্রিফিক্স যোগ করে আপেক্ষিক পথগুলোকে (relative paths) পরম URL-এ (absolute URLs) রূপান্তর করা হয়।
[চিত্র ৩-এর বর্ণনা: ছবিটি ওয়েব পেজ লিংক এক্সট্রাকশনের একটি সরলীকৃত চিত্র উপস্থাপন করে। উপরের অংশটি একটি ওয়েবপেজের কাঠামো সংজ্ঞায়িত করে এমন HTML কোডের একটি স্নিপেট দেখায়। এই কোডে ক্যারেক্টার সেট এবং টাইটেল (‘Wikipedia, the free encyclopedia’) সহ একটি <head> বিভাগ এবং চারটি লিস্ট আইটেম (<li>) সহ একটি আনঅর্ডারড লিস্ট (<ul>) ধারণকারী একটি <body> বিভাগ রয়েছে। প্রতিটি লিস্ট আইটেমে একটি হাইপারলিংক (<a>) রয়েছে যার href অ্যাট্রিবিউটে একটি আপেক্ষিক URL (যেমন, ‘/wiki/Cong_Weixi’) এবং title অ্যাট্রিবিউটে বর্ণনামূলক টেক্সট রয়েছে। প্রতিটি <a> ট্যাগের ভেতরের টেক্সটটি প্রদর্শিত লিংক টেক্সট নির্দেশ করে (যেমন, ‘Cong Weixi’)। একটি নিচের দিকে নির্দেশকারী তীর চিহ্ন একটি প্রসেসিং ধাপ নির্দেশ করে। নিচের অংশটি ‘Extracted Links:’ লেবেলযুক্ত একটি আয়তক্ষেত্রাকার বাক্স দেখায় যাতে আংশিকভাবে প্রদর্শিত একটি URL (‘https://en.wikipedia.org/wiki/Cong_Weixi …’) রয়েছে যা Wikipedia ওয়েবসাইটের বেস URL প্রিপেন্ড করে HTML কোডের আপেক্ষিক URL গুলো থেকে তৈরি করা পূর্ণাঙ্গ URL নির্দেশ করে। ‘Viewer does not support full SVG 1.1’ টেক্সটটি নির্দেশ করে যে ছবিটি একটি আরও জটিল প্রক্রিয়ার সরলীকৃত উপস্থাপনা, যাতে সম্ভবত SVG উপাদান জড়িত রয়েছে যা সম্পূর্ণরূপে রেন্ডার করা হয়নি।]
চিত্র ৩
URL Filter
URL ফিল্টার নির্দিষ্ট কিছু কন্টেন্ট টাইপ, ফাইল এক্সটেনশন, এরর লিংক এবং “ব্ল্যাকলিস্টেড” সাইটের URL গুলো বাদ দেয়।
URL Seen?
“URL Seen?” হলো একটি ডেটা স্ট্রাকচার যা আগে ভিজিট করা বা ইতিমধ্যে Frontier-এ থাকা URL গুলোর ট্র্যাক রাখে। “URL Seen?” একই URL একাধিকবার যোগ করা এড়াতে সাহায্য করে কারণ এটি সার্ভারের লোড বাড়াতে পারে এবং সম্ভাব্য ইনফিনিট লুপ (infinite loops) তৈরি করতে পারে।
ব্লুম ফিল্টার (Bloom filter) এবং হ্যাশ টেবিল (hash table) হলো “URL Seen?” উপাদান বাস্তবায়ন করার সাধারণ কৌশল। আমরা এখানে ব্লুম ফিল্টার এবং হ্যাশ টেবিলের বিস্তারিত বাস্তবায়ন কভার করব না। আরও তথ্যের জন্য, রেফারেন্স ম্যাটেরিয়াল [4] [8] দেখুন।
URL Storage
URL Storage ইতিমধ্যে ভিজিট করা URL গুলো সংরক্ষণ করে।
এ পর্যন্ত, আমরা প্রতিটি সিস্টেম উপাদান নিয়ে আলোচনা করেছি। এরপর, আমরা ওয়ার্কফ্লো ব্যাখ্যা করতে সেগুলোকে একত্রিত করি।
ওয়েব ক্রলার ওয়ার্কফ্লো
ওয়ার্কফ্লোটি ধাপে ধাপে আরও ভালোভাবে ব্যাখ্যা করতে, চিত্র ৪-এ দেখানো হিসাবে ডিজাইন ডায়াগ্রামে সিকোয়েন্স নম্বর যোগ করা হয়েছে।
[চিত্র ৪-এর বর্ণনা: ছবিটি একটি ওয়েব ক্রলারের আর্কিটেকচার উপস্থাপন করে। প্রক্রিয়াটি seed URLs-এর একটি সেট (১) দিয়ে শুরু হয় যা URL Frontier (২)-এ ফিড করা হয়, যা তারপর সেগুলোকে HTML Downloader (৩)-এ পাঠায়। HTML Downloader HTML কন্টেন্ট ডাউনলোড করার আগে IP অ্যাড্রেস পেতে DNS Resolver (৩)-এর সাথে মিথস্ক্রিয়া করে। এই কন্টেন্টটি তারপর Content Parser (৪)-এ পাঠানো হয়, যা এটি প্রসেস করে এবং ফলাফল Content Storage ডাটাবেস (৬)-এর বিরুদ্ধে চেক করা Content Seen? (৫) উপাদানে ফরওয়ার্ড করে। যদি কন্টেন্টটি নতুন হয়, তবে Link Extractor (৭) পার্স করা কন্টেন্ট থেকে URL এক্সট্র্যাক্ট করে। এই URL গুলো তারপর URL Filter (৮) দ্বারা ফিল্টার করা হয় এবং URL Storage ডাটাবেস (১০)-এর রেফারেন্স নিয়ে URL Seen? (৯) উপাদানের বিরুদ্ধে চেক করা হয়। পরিশেষে, নতুন, বৈধ URL গুলো ক্রলিং প্রক্রিয়া চালিয়ে যেতে URL Frontier (১১)-এ ফিরে ফিড করা হয়। বন্ধনীতে সংখ্যাগুলো উপাদানগুলোর মধ্যে ডেটা প্রবাহ নির্দেশ করে।]
চিত্র ৪
ধাপ ১: URL Frontier-এ সিড URL যোগ করুন। ধাপ ২: HTML Downloader URL Frontier থেকে URL গুলোর একটি তালিকা নিয়ে আসে। ধাপ ৩: HTML Downloader DNS resolver থেকে URL গুলোর IP অ্যাড্রেস পায় এবং ডাউনলোড করা শুরু করে। ধাপ ৪: Content Parser HTML পেজগুলো পার্স করে এবং পেজগুলো বিকৃত (malformed) কিনা তা চেক করে। ধাপ ৫: কন্টেন্ট পার্স এবং ভ্যালিডেট হওয়ার পরে, এটি “Content Seen?” উপাদানে পাঠানো হয়। ধাপ ৬: “Content Seen” উপাদান চেক করে একটি HTML পেজ ইতিমধ্যে স্টোরেজে আছে কিনা।
- যদি এটি স্টোরেজে থাকে, তবে এর অর্থ হলো ভিন্ন URL-এ একই কন্টেন্ট ইতিমধ্যে প্রসেস করা হয়েছে। এই ক্ষেত্রে, HTML পেজটি বাতিল (discard) করে দেওয়া হয়।
- যদি এটি স্টোরেজে না থাকে, তবে সিস্টেম আগে একই কন্টেন্ট প্রসেস করেনি। কন্টেন্টটি Link Extractor-এ পাঠানো হয়। ধাপ ৭: Link extractor HTML পেজ থেকে লিংক এক্সট্র্যাক্ট করে। ধাপ ৮: এক্সট্র্যাক্ট করা লিংকগুলো URL ফিল্টারে পাঠানো হয়। ধাপ ৯: লিংকগুলো ফিল্টার হওয়ার পরে, সেগুলো “URL Seen?” উপাদানে পাঠানো হয়। ধাপ ১০: “URL Seen” উপাদান চেক করে একটি URL ইতিমধ্যে স্টোরেজে আছে কিনা, যদি থাকে, তবে এটি আগে প্রসেস করা হয়েছে, এবং কিছুই করার নেই। ধাপ ১১: যদি একটি URL আগে প্রসেস না করা হয়ে থাকে, তবে এটি URL Frontier-এ যোগ করা হয়।