PDA

View Full Version : نحوه کار خزنده های و یا رباتهای جستجو گر



n0o0b_sina
چهارشنبه 06 اسفند 1393, 16:42 عصر
دوستان چند وقتی ذهنم مشغول این موضوع شده و هر چقدرم سرچ کردم به نتیجه ای نرسیدم. موتورهای جستجویی مثل گوگل یا یاهو و... یا موتورهای جستجوری ایرانی مانند "یوز" که تازه رو نمایی شده، نحوه کارشون به چه صورته؟ یعنی وبسایت هارو از کجا پیدا میکنن؟ البته نحوه جستجوشون با تجزیه تحلیل کدهای HTML هست ولی نحوه ی پیدا کردم وبسایت هارو و مخصوصا تمام صفحات اون وبسایت رو نفهمیدم! چند جا خودم که با پیدا کردم href تگ a در html صفحه هارو پیدا میکنه ولی ممکنه همه ی صفحه ها با تگ لینک به هم وصل نشده باشد. در کل ممنون میشم به این 2 تا سوال پاسخ بدید چون مطمئنم برای خیلی از دوستان مفیده و باعث افزایش اطلاعاتشون میشه.
1- نحوه پیدا کردن وبسایت های تازیه تاسیس شده یا کلا همه ی وبسایت ها
2- نحوه یافتن تمام صفحات آن وبسایت
3- آیا php برای نوشتن ربات جستجو که نحوه کارش در سوالات بالا شرح داده شد (توسط شما) مناسبه یا باید از زبان های جامع تر مثله python یا java استفاده کنیم؟
پ.ن: دوستان سوالاته من تنها برای افزایش اطلاعاتمه و هیچ قصدی مثله راه اندازی موتور جستجو یا ... ندارم.
ممنون

n0o0b_sina
چهارشنبه 06 اسفند 1393, 23:21 عصر
کسی اطلاعاتی نداره؟

n0o0b_sina
پنج شنبه 07 اسفند 1393, 00:33 صبح
حداقل یه شکلک بزارید :((

aliphp1
پنج شنبه 07 اسفند 1393, 00:47 صبح
تا لینک جایی گذاشته نشده باشه یعید می دونم بتونن پیدا کنن
البته بعضی وقتا لینک رو جایی میزاریم که اصلا خودمون متوجه نمیشیم
مثلا ممکنه با افزونه های فایرفاکس و . . . بتونه لینک هایی که باز میشه رو پیدا کنه
اما این بحث به کنار من هم مدتی هست روی همین موضوع فکرم مشغول هست و میخوام بدونم دقیقا ربات های گوگل چطوری کار می کنن و اگر بتونم یک ربات بنویسم
اگر کسی می تونه کمک کنه

n0o0b_sina
پنج شنبه 07 اسفند 1393, 00:55 صبح
تا لینک جایی گذاشته نشده باشه یعید می دونم بتونن پیدا کنن
البته بعضی وقتا لینک رو جایی میزاریم که اصلا خودمون متوجه نمیشیم
مثلا ممکنه با افزونه های فایرفاکس و . . . بتونه لینک هایی که باز میشه رو پیدا کنه
اما این بحث به کنار من هم مدتی هست روی همین موضوع فکرم مشغول هست و میخوام بدونم دقیقا ربات های گوگل چطوری کار می کنن و اگر بتونم یک ربات بنویسم
اگر کسی می تونه کمک کنه
برادرا گوگل رو نخواستیم "یوز" موتور جستجوری ایرانی چطوری کار میکنه و سایت هارو برای بررسی سورس html پیدا میکنه؟
مغزم هنگ کرد به خدا :دی
اینم آدرس یوز : http://yooz.ir/

prans.info
پنج شنبه 07 اسفند 1393, 01:45 صبح
برادرا گوگل رو نخواستیم "یوز" موتور جستجوری ایرانی چطوری کار میکنه و سایت هارو برای بررسی سورس html پیدا میکنه؟
مغزم هنگ کرد به خدا :دی
اینم آدرس یوز : http://yooz.ir/

بیش از نصف سایت های جدید رو از صفحات سایت های فعلی که تویه دیتابیس هستند استخراح می کنند و سایت هایی که تخصصشون لینک و سایت باشه کم نیست .
پیدا کردت لینک های یک سایت هم که بیش از 95 درصدش خود سایت اصلی هست و میشه از لینک هایی که به سایت مورد نظر در سایت دیگه هست هم استفاده کرد .

prans.info
پنج شنبه 07 اسفند 1393, 01:47 صبح
در ضمن با php هم میشه موتور جستجو ساخت بلاخره پی اچ پی هم یک زبان تحت وب هست و موتور ها معمولا تحت وب .
اگر بخواهید بلند مدت نگاه کنید و امکانات خاصی از زبان انتظار دارید باید برید سمت یک زبان دیگه که برای کار شما مناسب باشه ، بلاخره هر زبانی را بهر کاری ساختند .:لبخند:

n0o0b_sina
پنج شنبه 07 اسفند 1393, 08:34 صبح
میدونم بیشتر جاها نوشته بودن python مناسبه، ربات گوگل هم از python استفاده میکنه!
ببینید فرض کنید من یه سایت جدید ایجاد کردم بدون حتی 1 تبلیغ!!! این موتورهای جستجو از کجا سایته منو پیدا میکنن؟! این اصلا منطقی نیست که از سایتای دیگ لینک رو بگیره، چون مثلا همین موتور جستجوی ایرانی که تازه تاسیس شده از کجا این همه سایت رو ایندکس کرده؟!

MMSHFE
پنج شنبه 07 اسفند 1393, 09:18 صبح
دوست عزیز، سایتهایی مثل dmoz یا yahoo directory و... هستن که سایتها توی اونها توسط وب مسترها لینک میشن. گوگل با کمک پنجره Search که توی firefox داره و با همکاری مرورگرهایی مثل Chrome خودش میتونه به سایتهایی که مشاهده میکنید دسترسی پیدا کنه (لزوماً نه با این هدف که جاسوسی کنه بلکه صرفاً به این منظور که سایتها رو به دیتابیس خودش اضافه کنه). گوگل به سرورهای DNS پول میده تا آمار DNS Lookup Record های خودشون رو بهش بفروشن. مثلاً شما هاست میخرین، ممکنه سرویس دهنده هاست شما پول بگیره و آدرس سایتهایی که روش هست رو به گوگل بفروشه. امضای شما توی صفحات سایتهایی مثل برنامه نویس و... خونده میشه. کلی راههای دیگه هم هست مثل نوشتن Toolbar برای مرورگرها یا باگهای مرورگرهایی مثل IE و... که یک موتور جستجوی غول مثل گوگل از همه استفاده میکنه و اینطوریه که میشه گوگل (معنی گوگل یعنی یک عدد 1 با صد صفر جلوش!).

freeman99
پنج شنبه 07 اسفند 1393, 09:28 صبح
میدونم بیشتر جاها نوشته بودن python مناسبه، ربات گوگل هم از python استفاده میکنه!

یه چیزی به عظمت گوگل بعید میدونم فقط از پایتون استفاده کنه. احتمالا در بعضی بخشها که نیاز به پرفورمنس بالا دارن از زبانهایی مثل سی++ هم استفاده کردن. ولی منطق و عملیات سطح بالاش که نیازی به پرفورمنس حداکثری نداره احتمالا با همون پایتون و اینا باشه.
بهرحال یه موتور جستجو و روبات اونم در حد گوگل چیز ساده و کم حجمی نیست و لایه های مختلفی داره. مثلا یه بخشش اینه که میره توی سایتها گشت میزنه، ولی بخشهایی دیگری هم داره، مثلا ذخیره سازی و سرچ و آپدیت در دیتابیس و غیره.

MMSHFE
پنج شنبه 07 اسفند 1393, 09:30 صبح
گوگل جدا از پایتون یه زبان داره به اسم GWT یا Google Web Toolkit که کارهای اصلیش رو با اون انجام میده.

freeman99
پنج شنبه 07 اسفند 1393, 09:37 صبح
باوجود تمام تبحر و قدرت موتورهای جستجو، با روشهایی که مهندس شهرکی اشاره کرد، درواقع بخش بزرگی از اطلاعات وب در دسترس موتورهای جستجو نیست. این بخش درواقع چند ده برابر وب مرئی برای موتورهای جستجو است!
مقالهء ویکیپدیا در این مورد: https://en.wikipedia.org/wiki/Deep_Web

البته وقتی شما میگید صفحات وب، مفهومش با چیزی که ما میگیم، یعنی اطلاعات موجود در وب بطور کلی، تفاوت میکنه، چون همهء اطلاعات که لزوما بصورت یک صفحهء خاص و دارای دسترسی از طریق لینک مستقیم نیست (مثلا موقعی که با استفاده از یک فرم اطلاعاتی رو سرچ میکنید که توی اون سایت هست اما صفحه و لینک مستقیمی برای نتایج جستجوی خاصی لزوما وجود نداره).

n0o0b_sina
پنج شنبه 07 اسفند 1393, 09:50 صبح
میشه اینم "yooz.ir" توضیح بدید که از کجا 1 میلیار صفحه (به گفته خودشون) ایندکس کرده و هر روزم بیشتر داره ایندکس میکنه؟

freeman99
پنج شنبه 07 اسفند 1393, 10:09 صبح
اینا بیشترش با لینکه دیگه. از یک یا چندجا شروع میکنه، ممکنه این نقاط شروع رو بصورت دستی بهش بدن، بعد میره و به هر لینک میرسه چه توی اون سایت باشه چه توی سایت دیگه دنبال میکنه و همینطوری آدرس سایتها و صفحات رو ایندکس میکنه.
اصلا وب یعنی چی؟
web به انگلیسی یعنی تار عنکبوت. چرا؟ چون مثل تار عنکبوت همینطور اسناد/صفحات و سایتها به هم لینک دادن و متصل هستن. شما از هرجای این تار عنکبوت که شروع کنید و اونجا رو نقطهء شروع خودتون قرار بدید و همینطور سر نخ ها/تارها یا همون لینک ها رو بگیرید و دنبال کنید نهایتا از تمام تارها و نقاط عبور میکنید، چون همهء نقاط به هم وصل هستن. البته الگوریتم جستجو هم هوشمندی و نکات خاص خودش رو داره که مثلا جاهایی که قبلا رفته رو میدونه و از افتادن در loop پیشگیری میکنه (مثلا از یه لینک بره به سایت دیگری که اون سایت دوباره به همون سایت و صفحهء قبلی لینک داده، روبات نباید توی این حلقه بینهایت گیر بیفته) و این حرفا.

freeman99
پنج شنبه 07 اسفند 1393, 10:14 صبح
مثلا روبات بیاد توی همین فروم شونصدهزارتا تا سایت و لینک دیگه توش پیدا میکنه. بعد بره توی هر کدام از اون شونصدهزارتا سایت و لینک دیگه دوباره آدرس شونصدتا سایت و لینک دیگه رو پیدا میکنه. به همین ترتیب تقریبا هیچ سایت و لینکی در نهایت باقی نمیمونه که در دسترس روبات قرار نگیره. روبات همینطور فقط باید مسیرها رو دنبال و نقاط و آدرسها و سایتها و لینک هایی رو که پیدا میکنه رو در دیتابیس خودش ثبت کنه. ممکنه به یک لینک در اون سایت دیگری که میره، دوباره یک لینک باشه به همین سایت برنامه نویس ولی لینکی که روبات قبلا در خود سایت برنامه نویس ندیده، بنابراین روبات باید این رو تشخیص بده و دوباره، حالا هروقت که نوبت طبق الگوریتم بهش رسید، برگرده و محتویات اون لینک رو هم چک کنه و ایندکس کنه و اگر سایت و لینک جدید دیگری درش بود اونا رو هم دنبال کنه.
البته این کارها به حرف ساده است اما در عمل مسائل جزیی و نکات زیادی داره بنظر بنده. یکیش از نظر بهینه سازی، چون بهرحال تعداد و عمق این لینک ها بسیار زیاده و همزمان هم که نمیشه تعداد خیلی زیادی رو fetch و پردازش کرد (البته گوگل میتونه چون سرورهای زیاد و قدرتمندی داره)، و واکشی هر صفحه هم که زمان میبره و ممکنه در مواقعی یکسری خطاهایی پیش بیاد سایت هدف داون یا تحت بار شدید باشه و درست جواب نده و غیره، پس اینا باید طبق یک الگوریتمی اولویت بندی و برنامه ریزی و پیشبینی بشن و هوشمند عمل کنه. مثلا هر لینک رو اول تا چه عمقی دنبال کنه و تا چه تعداد سایت یا لینک دیگر رو که در مسیر بهشون میرسه fetch کنه، با چه هزینه هایی چه حداکثر زمانی چه پردازش و حجمی، و چه وقت بره سراغ لینک های سطح اول دیگری که در صف قرار گرفتن. اینا همه دانش و تحلیل و منطق و اصول میخواد اگر بخواد یک موتور جستجوی قوی و حرفه ای باشه و حجم زیادی از وب رو جستجو و ایندکس کنه.
بعد مسائل آپدیت هست. مثلا هر چند وقت یک بار بر اساس چه معیاری سر بزنه ببینه کدوم سایت کدوم لینک ها کدوم فایلها هنوز سرجاشون هستن و آیا تغییری کردن و یا نه و چه تغییری چقدر چطوری و آیا هنوز با اطلاعات قبلی هم میشه ربطشون داد یا نه و غیره (مسائل مربوط به رتبه بندی و page ranking و اینها). منبع تا منبع میتونه فرق کنه. مثلا یک فایل استاتیک HTML رو آیا باید فرق بذاریم با صفحهء PHP، یک عکس رو با چیز دیگه، و اصلا چطور آیا میشه و درسته اینا رو با چه معیاری از هم تفکیک کنیم، برای هرکدام در چه دوره زمانی ای بازدید و چک مجدد بشن، دستورات کش ارسال شده از طرف سرورها در این موارد در نظر گرفته بشن، آیا صفحهء اول یا تا عمق فلان با صفحات درونی تر و یا کم لینک تر تفاوت بذاریم و خلاصه خیلی هوشمندی ها و منطق میشه در این موتورهای جستجو و روبات هاشون درنظر گرفت که حتما امثال گوگل خیلی از این بند و بساط ها و جزییات در درون موتورهای جستجو/روبات های خودشون دارن!

n0o0b_sina
پنج شنبه 07 اسفند 1393, 10:26 صبح
چی بگم، به نظر من این روش زیاد منطقی نیومد واسه همین سوال کردم! توی درباره ما موتور جستجوی یوز نوشته نخبه ها و محقق های بهترین دانشگاه های کشور گفتم حتما روش خاصی داره و این روش چقدر پیچیده و سختی داره :| اینو که اگه یکی باشه شکممونو پر کنه و هزینه سرورهارو بده میتونیم بزنیم :| تجزیه تحلیل html هم که خیلی سادست
خسته نباشید برادرا

freeman99
پنج شنبه 07 اسفند 1393, 10:31 صبح
چی بگم، به نظر من این روش زیاد منطقی نیومد واسه همین سوال کردم! توی درباره ما موتور جستجوی یوز نوشته نخبه ها و محقق های بهترین دانشگاه های کشور گفتم حتما روش خاصی داره و این روش چقدر پیچیده و سختی داره :| اینو که اگه یکی باشه شکممونو پر کنه و هزینه سرورهارو بده میتونیم بزنیم :| تجزیه تحلیل html هم که خیلی سادست
خسته نباشید برادرا
جزییاتی رو که بنده گفتم و تازه اینا فقط یکسری موارد کلی بود که بالبداهه در عرض همین چند دقیقه به ذهن منی که تاحالا روبات و موتور جستجو ننوشتم و درموردش تخصص ندارم رسید بخونید و دقت کنید. اینا رو با مقیاس بزرگی که کار باید درش انجام بشه جمع کنید که کلی مسائل بهینه سازی و کلاسترینگ و توزیع شدگی و در دسترس بودن دائمی و بلاانقطاع و redundancy و reliability و فلان و فلان در کارهای جدی و بزرگ رو هم باید درنظر گرفت و طراحی و پیاده سازی کرد در خودش داره.
اونوقت متوجه میشید که در مجموع این یک کار بزرگ و کاملا حرفه ای خواهد بود.

البته بنده معمولا به تدریج در همون زمان پستهام رو ویرایش میکنم و مطالبی رو اضافه و ویرایش میکنم که شاید به همین علت همهء مطالب و جزییاتی رو که اشاره کردم ندیدید.

برای پیاده سازی یک موتور جستجوی بزرگ و حرفه ای نیاز به دانش و مهارت های گسترده ای هست و برنامه نویسان نخبه در سطوح مختلف میخواد. شما باید خیلی چیزها بدونید و در چند سطح کار کنید. مثلا باید به پروتکل های مختلف بخصوص HTTP احاطه داشته باشید. به گمانم باید در بهینه سازی در زبانهای سطح بالا و پایین هم دانش و مهارت خوبی داشته باشید. در مسائل توزیع کردن و کلاسترینگ و Load balance و این حرفها.
اینا کجاش کار کم و ساده ایه؟!

بله کلیت و روش و قدم اول و پایه ساده است، ولی مقیاس و جزییات و هوشمندی و منطق و تمهیدات مورد نیاز در نهایت خیلی زیاده.
موتورهای جستجوی موفقی مثل گوگل هم به مرور رشد پیدا کردن و به تکامل رسیدن. بنظر من الگوریتم و برنامه های بسیار حجیم و پیچیده ای باید داشته باشن و موارد خاص و موردی زیادی هم درشون لحاظ شده، و با این حال باید نظارت و کمک انسانی هم همواره درشون وجود داشته باشه. البته الان کسی بخواد موتور جستجو بنویسه کارش طبیعتا راحت تره، چون قبلا این راه توسط دیگران رفته شده و به تکامل رسیده و خیلی ابزارها و نکات و جزییات و تجربه ها در دسترس دیگران قرار گرفته.

-سیّد-
پنج شنبه 13 فروردین 1394, 15:39 عصر
سلام
من از نیروهای فنی تیم موتور یوز هستم.


دوستان چند وقتی ذهنم مشغول این موضوع شده و هر چقدرم سرچ کردم به نتیجه ای نرسیدم. موتورهای جستجویی مثل گوگل یا یاهو و... یا موتورهای جستجوری ایرانی مانند "یوز" که تازه رو نمایی شده، نحوه کارشون به چه صورته؟ یعنی وبسایت هارو از کجا پیدا میکنن؟ البته نحوه جستجوشون با تجزیه تحلیل کدهای HTML هست ولی نحوه ی پیدا کردم وبسایت هارو و مخصوصا تمام صفحات اون وبسایت رو نفهمیدم! چند جا خودم که با پیدا کردم href تگ a در html صفحه هارو پیدا میکنه ولی ممکنه همه ی صفحه ها با تگ لینک به هم وصل نشده باشد. در کل ممنون میشم به این 2 تا سوال پاسخ بدید چون مطمئنم برای خیلی از دوستان مفیده و باعث افزایش اطلاعاتشون میشه.
1- نحوه پیدا کردن وبسایت های تازیه تاسیس شده یا کلا همه ی وبسایت ها
2- نحوه یافتن تمام صفحات آن وبسایت
3- آیا php برای نوشتن ربات جستجو که نحوه کارش در سوالات بالا شرح داده شد (توسط شما) مناسبه یا باید از زبان های جامع تر مثله python یا java استفاده کنیم؟
پ.ن: دوستان سوالاته من تنها برای افزایش اطلاعاتمه و هیچ قصدی مثله راه اندازی موتور جستجو یا ... ندارم.
ممنون

خوب دوستان تقریباً جواب دادن. من فقط برای تکمیل بحث عرض می‌کنم:

یه موتور جستجو برای کشف صفحات از روش‌های مختلفی می‌تونه استفاده کنه که معروف‌ترینش (همونطور که دوستان به خوبی اشاره کردن) پیمایش صفحه به صفحه هست (کلمات web و spider و خود crawler به خاطر همین روش به کار می‌رن). توجه کنید که لینک فقط تگ a به همراه href نیست. خیلی چیزای دیگه هم لینک هستن که باید بررسی بشن (مثلاً img:src یا script:src، البته اینا به صفحات معمولی وب اشاره نمی‌کنن ولی بالاخره لینک هستن و توی گراف وب اهمیت دارن).
یه راه دیگه، که باز هم دوستان اشاره کردن، گرفتن آمار از جاهای مختلف هست. مثلاً گوگل با شرکت (فکر می‌کنم) parallels قرارداد داره که هر دامنه‌ای رو شما توی parallels ثبت می‌کنید، بلافاصله به گوگل اطلاع می‌ده. یا مثلاً از طریق وبمستر تولز به گوگل اطلاع می‌دید. یا مثلاً توی chrome به محض این که یه آدرس رو تایپ می‌کنید، برای گوگل فرستاده می‌شه (برای همین می‌تونه برای شما آدرس هایی رو که تا به حال از طریق chrome بهشون سر نزدید auto-complete کنه). یا مثلاً از طریق DNS خود گوگل (به آدرس 8.8.8.8).
ولی روش اصلی همون روش پیمایش هست. این روشهای دیگه فقط کمک می‌کنن.

همه‌ی اینایی که گفتم رو تقریباً دوستان اشاره کرده بودن، من فقط جمع‌بندی کردم.

در مورد این که آیا php برای نوشتن یه خزشگر مناسبه یا نه:
بستگی به scale کارتون داره. اگه فقط می‌خواین یه خزشگر داشته باشین که آروم آروم کار کنه و جلو بره، می‌شه با php نوشت و اصلاً کار سختی نیست (البته هر چقدر بخواین بهش قابلیت اضافه کنید، کارتون سخت‌تر می‌شه). ولی اگه می‌خواین توی scale بزرگ فکر کنید (مثلاً بالای ۱۰۰ میلیون صفحه)، php اصلاً برای این کار مناسب نیست. چرا؟ چون php برای این کار ساخته نشده. اگر facebook رو به عنوان سردسته‌ی استفاده کنندگان از php فرض کنیم، می‌بینیم که خود facebook فقط برای UI از PHP استفاده می‌کنه و پشت سیستم برای همچین کارهایی از زبون‌هایی مثل جاوا و فریم‌ورک‌هایی مثل hadoop استفاده می‌کنه. چون اصلاً توی scale بالا نمی‌صرفه بخواین با php یه همچین چیزی بسازین. python هم همچنین. معمولاً برای کارهایی در این ابعاد از زبان‌هایی مثل جاوا و دات نت استفاده می‌کنن، یا اگه خیلی خفن باشن و توانایی فنی‌اش رو داشته باشن، از ++C استفاده می‌کنن (مثل گوگل).


گوگل جدا از پایتون یه زبان داره به اسم GWT یا Google Web Toolkit که کارهای اصلیش رو با اون انجام میده.
البته این خیلی درست نیست. GWT یه زبون نیست، یه مجموعه‌ی کمکی هست که می‌شه باهاش ژانگولرهای UI رو (در قالب جاوا اسکریپت) راحت‌تر و در زبان جاوا انجام داد. ویکیپدیا:
https://en.wikipedia.org/wiki/Google_Web_Toolkit
در نتیجه کارهای داخلی گوگل (مثل خزش کردن وب، یا نمایه‌گذاری (indexing) صفحات) ارتباطی به GWT نداره.


چی بگم، به نظر من این روش زیاد منطقی نیومد واسه همین سوال کردم! توی درباره ما موتور جستجوی یوز نوشته نخبه ها و محقق های بهترین دانشگاه های کشور گفتم حتما روش خاصی داره و این روش چقدر پیچیده و سختی داره :| اینو که اگه یکی باشه شکممونو پر کنه و هزینه سرورهارو بده میتونیم بزنیم :| تجزیه تحلیل html هم که خیلی سادست
خسته نباشید برادرا

همونطور که دوستمون اشاره کردن، انقدا هم که فکر می‌کنید ساده نیست! آقای freeman99 بسیار خوب توضیح دادند (یه لحظه شک کردم از بچه‌های تیم خودمون باشن! :) ) :


جزییاتی رو که بنده گفتم و تازه اینا فقط یکسری موارد کلی بود که بالبداهه در عرض همین چند دقیقه به ذهن منی که تاحالا روبات و موتور جستجو ننوشتم و درموردش تخصص ندارم رسید بخونید و دقت کنید. اینا رو با مقیاس بزرگی که کار باید درش انجام بشه جمع کنید که کلی مسائل بهینه سازی و کلاسترینگ و توزیع شدگی و در دسترس بودن دائمی و بلاانقطاع و redundancy و reliability و فلان و فلان در کارهای جدی و بزرگ رو هم باید درنظر گرفت و طراحی و پیاده سازی کرد در خودش داره.
اونوقت متوجه میشید که در مجموع این یک کار بزرگ و کاملا حرفه ای خواهد بود.

البته بنده معمولا به تدریج در همون زمان پستهام رو ویرایش میکنم و مطالبی رو اضافه و ویرایش میکنم که شاید به همین علت همهء مطالب و جزییاتی رو که اشاره کردم ندیدید.

برای پیاده سازی یک موتور جستجوی بزرگ و حرفه ای نیاز به دانش و مهارت های گسترده ای هست و برنامه نویسان نخبه در سطوح مختلف میخواد. شما باید خیلی چیزها بدونید و در چند سطح کار کنید. مثلا باید به پروتکل های مختلف بخصوص HTTP احاطه داشته باشید. به گمانم باید در بهینه سازی در زبانهای سطح بالا و پایین هم دانش و مهارت خوبی داشته باشید. در مسائل توزیع کردن و کلاسترینگ و Load balance و این حرفها.
اینا کجاش کار کم و ساده ایه؟!

بله کلیت و روش و قدم اول و پایه ساده است، ولی مقیاس و جزییات و هوشمندی و منطق و تمهیدات مورد نیاز در نهایت خیلی زیاده.
موتورهای جستجوی موفقی مثل گوگل هم به مرور رشد پیدا کردن و به تکامل رسیدن. بنظر من الگوریتم و برنامه های بسیار حجیم و پیچیده ای باید داشته باشن و موارد خاص و موردی زیادی هم درشون لحاظ شده، و با این حال باید نظارت و کمک انسانی هم همواره درشون وجود داشته باشه. البته الان کسی بخواد موتور جستجو بنویسه کارش طبیعتا راحت تره، چون قبلا این راه توسط دیگران رفته شده و به تکامل رسیده و خیلی ابزارها و نکات و جزییات و تجربه ها در دسترس دیگران قرار گرفته.

کاملاً درست می‌فرمایید و ما توی موتور یوز با همه‌ی این مسائل درگیر هستیم. یعنی کار به خاطر scale بالا توزیع شده هست، scalable هست، fault-tolerant هست، سیستم کاملاً realtime هست (از خزش تا پیدا شدن صفحه در نتایج جستجو حدوداً یک دقیقه طول می‌کشه)، و بقیه‌ی چیزایی که اشاره کردید.
شما فقط در نظر بگیرید که یک میلیارد صفحه دارید، که باید update هم بشن (البته با rate های مختلف)، صفحات جدید هم باید خزش بشن. پهنای باندتون هم بالاخره محدود هست. پس باید بتونید از بین این صفحات بهترین‌ها رو انتخاب کنید. در ضمن باید حواستون به politeness هم باشه! نمی‌تونید یه دفعه بریزید سر یه سایت و ازش هزار تا صفحه بگیرید! خزشگر باید برنامه‌ریزی شده حرکت کنه و آروم آروم صفحات یه سایت رو بگیره.
از طرف دیگه درگیر یه سری مسائل می‌شید، مثلاً این که یه سایتی به هر دلیلی تو یه بازه به شما اصلاً جواب نمی‌ده، بعد از یه مدت درست می‌شه.
یا یه سایتی توی robots.txt به شما می‌گه شما حق ندارید با rate بیش از یک بار در هر ده ثانیه به من سر بزنید! خوب خزشگر بدبخت چطوری می‌تونه از این سایت مثلاً یک میلیون صفحه بگیره؟! حساب کن ببین چقدر طول می‌کشه!
یا مثلاً توی بحث‌های HTTP، مثلاً در مورد redirect ها، چند جور redirect داریم. یکی ۳۰۱، یکی ۳۰۲، یکی با meta، یکی با جاوا اسکریپت! شما باید بتونید همه‌ی اینا رو درست handle کنید. بعد تازه این که redirect آیا همیشه اوکی هست؟ من میام یه سایت می‌سازم توش مزخرف می‌نویسم، بعد redirect می‌کنم به ویکیپدیا! آیا ویکیپدیا باید از redirect ای که از من گرفته، توی سیستم من اثر بگیره؟
بعد اون طرف توی بحث parse کردن، فکر نکنید همینطوری می‌زنیم صفحه‌ی HTML پارس می‌شه! انواع و اقسام صفحه‌ی HTML توی وب هست که از نظر syntax مشکل دارن! شما باید بتونید همه‌ی اینا رو handle کنید. مثلاً بعضی سایت‌ها ۲ تا تگ title دارن! (حتی بعضیا ۳ تا دارن!!!) یا مثلاً یه تگی رو باز کردن و نبستن! اینا همه مثالهایی هستن که ریز ریز هستن، ولی تعدادشون خیلی زیاده!

یه نکته در مورد جمله‌ی آخرتون:
«البته الان کسی بخواد موتور جستجو بنویسه کارش طبیعتا راحت تره، چون قبلا این راه توسط دیگران رفته شده و به تکامل رسیده و خیلی ابزارها و نکات و جزییات و تجربه ها در دسترس دیگران قرار گرفته.»
کلیت حرفتون درسته. حتی اگه به سخت‌افزارها نگاه کنید، الان بسیار پیشرفته‌تر شدن و نگهداری کمتری نسبت به ۱۷ سال پیش که گوگل کارشو شروع کرد نیاز دارن.
ولی یه نکته‌ی دیگه که هست اینه که در کنار این که ابزارهای این کار تکامل پیدا کردن و در دسترس هستن، وب هم به شدت پیشرفت کرده و بسیاری مسائل جدید به وجود اومده. همچنین اندازه‌ی کار به شدت بالا رفته! ابتدای کار گوگل فکر می‌کنید چند صفحه index کرده بود؟ یعنی از نظر حجمی، الان یوز با یک میلیارد صفحه از گوگل اولیه جلوتر هست!
خلاصه‌ی حرفم اینه که این یک trade-off هست. هر چقدر ابزارها پیشرفت می‌کنن، مسائل هم پیچیده‌تر می‌شه. از طرفی معمولاً ابزارهای open-source جواب کار رو توی scale بالا نمی‌دن. این اتفاق دقیقاً در مورد یوز افتاده. ما اول کار (حدود ۵ سال پیش) که شروع کردیم، اول به سراغ ابزارهای متن باز رفتیم. ولی هیچ کدوم از اونا جواب کار ما رو نمی‌داد (ما از اول برای میلیاردها صفحه برنامه‌ریزی کردیم). برای همین ما توی بخش index مون، ۳ بار معماری‌مون رو عوض کردیم تا به این معماری رسیدیم و مجبور شدیم خودمون خیلی از بخش‌ها رو پیاده‌سازی کنیم.

امیدوارم ابهامی باقی نمونده باشه. اگه سؤالی هست تا جایی که وقتم اجازه بده در خدمتم.

m.esmaeilzadeh
شنبه 15 فروردین 1394, 10:24 صبح
کاملاً درست می‌فرمایید و ما توی موتور یوز با همه‌ی این مسائل درگیر هستیم. یعنی کار به خاطر scale بالا توزیع شده هست، scalable هست، fault-tolerant هست، سیستم کاملاً realtime هست (از خزش تا پیدا شدن صفحه در نتایج جستجو حدوداً یک دقیقه طول می‌کشه)، و بقیه‌ی چیزایی که اشاره کردید.

موتور جستجو realtime ؟ کلا مفهوم موتور جستجو و بحث index و cache رو زیر سوال بردی ؟!؟!؟!؟
عجب ......

MMSHFE
شنبه 15 فروردین 1394, 10:39 صبح
البته این خیلی درست نیست. GWT یه زبون نیست، یه مجموعه‌ی کمکی هست که می‌شه باهاش ژانگولرهای UI رو (در قالب جاوا اسکریپت) راحت‌تر و در زبان جاوا انجام داد. ویکیپدیا:
https://en.wikipedia.org/wiki/Google_Web_Toolkit
در نتیجه کارهای داخلی گوگل (مثل خزش کردن وب، یا نمایه‌گذاری (indexing) صفحات) ارتباطی به GWT نداره.

مطمئن باشین گوگل خیلی از جزئیات کاری خودش رو نمیگذاره توی ویکیپدیا منتشر بشن. اینکه گوگل بخشهایی از GWT رو بطور عمومی منتشر نکرده، موضوع واضحیه که اگه یکم به سیاستهای شرکتهای بزرگ دقت کنید، متوجهش میشین. البته من خودم توی چت با یکی از کارمندان سابقشون متوجه این مسئله شدم.

-سیّد-
شنبه 15 فروردین 1394, 21:38 عصر
موتور جستجو realtime ؟ کلا مفهوم موتور جستجو و بحث index و cache رو زیر سوال بردی ؟!؟!؟!؟
عجب ......
ببخشید متوجه منظورتون نشدم. چطوری من مفهوم موتور جستجو رو زیر سؤال بردم؟

همونطور که توی پرانتز نوشتم، «از خزش تا پیدا شدن صفحه در نتایج جستجو حدوداً یک دقیقه طول می‌کشه».
realtime اینجا در مقابل batch هست. موتورهای جستجویی که batch هستن، صفحات جدید خزش شده رو توی یه index مجزا ذخیره می‌کنن، و جستجوهای کاربران رو از یه index دیگه جواب می‌دن. بعد به صورت دوره‌ای (مثلاً هر هفته، یا هر شب) جای این دو تا index رو با هم عوض می‌کنن. در نتیجه اگه مثلاً هر شب این کار انجام بشه، صفحات خزش شده در یک روز، در روز بعد توی index اصلی قرار گرفته و در نتیجه قابل جستجو می‌شن.
اما موتورهای realtime به این صورت کار نمی‌کنن. به عنوان مثال در موتور یوز هر صفحه وقتی خزش می‌شه، به طور متوسط حدود یک دقیقه طول می‌کشه تا قابل جستجو بشه (توجه کنید که این صفحات شامل update ها هم می‌شن، یعنی از زمانی که یه صفحه update می‌شه، بعد از مدت زمانی که خزشگر متوجه update شدنش می‌شه و مجدداً می‌گیرش، حدود یک دقیقه بعد توی index هم update می‌شه و در نتیجه توی نتایج جستجو هم update می‌شه).

قابل ذکره که گوگل از ابتدای کار (۱۷ سال پیش) به صورت batch کار می‌کرد و ذره ذره به سمت realtime رفت، و الان نزدیک ۴ سال هست که کاملاً realtime شده.
ما هم از ابتدای کار بنا رو بر realtime بودن گذاشتیم که البته یکی از دلایلی که پروژه بیش از ۴ سال طول کشید تا به مرحله‌ی بهره‌برداری بود، همین قابلیت‌هایی هست که از اول توش دیده بودیم. یعنی اگه از اول می‌خواستیم یه موتور batch داشته باشیم که مثلاً ۵۰ میلیون صفحه رو توش جا بدیم، قطعاً خیلی سریع‌تر از این به نتیجه می‌رسید. چون وقتی شما بعضی از مشخصات سیستم رو عوض می‌کنید، بخش‌هایی از معماری کلاً عوض می‌شن. مثلاً همین تعداد صفحات، اگه قرار بود عددای چند ده میلیونی باشه، اصلاً نیازی به استفاده از سیستم‌های توزیع شده نبود و می‌شد خیلی راحت‌تر handle اش کرد. ولی به محض این که می‌خواستیم بریم بالاتر (مثلاً یک میلیارد الان)، باید معماری رو زیر و رو می‌کردیم. برای همین از اول به فکر scale بالا بودیم و الان تا حد بسیار خوبی تونستیم این مسئله رو برآورده کنیم. معماری فعلی ما بهمون اجازه می‌ده که به راحتی تا ۱۰ میلیارد صفحه رو پشتیبانی کنیم (البته این عدد رو خیلی مطمئن حساب کردم، اگه از روی تئوری بخوام بگم تا ۴۰ میلیارد هم می‌شه بالا بره، ولی تجربه نشون داده توی عمل مشکلاتی پیش میاد که معمولاً آدم به عددای تئوری نمی‌رسه).

این رو هم بگم که منظورم این نیست که ما تونستیم دقیقاً کاری رو که گوگل کرده بکنیم! قطعاً scale گوگل از ما خیلی بالاتر هست و توی اون scale مسائل دیگه‌ای پیش میاد که ما هنوز بهش برخورد نکردیم.

اگه هنوز ابهامی مونده خوشحال می‌شم درباره‌اش بحث کنیم.