یه برنامه نویس!
داستان تولد یک استارتآپ! مسیری که با نگاره شروع کرده ایم...
حدودا ۶ ماه پیش بود که کاملا اتفاقی با مدیر وبسایت گلدتگ، آقای علی سفیداری، در مورد مشکلات جستجوی سایتشون صحبت کردم. سرویس جستجوی پیشفرضی که روی سایتشون بود نتایج کاملا بیربطی رو برمیگردوند. بعضی وقتا هم عین عبارت رو تایپ میکردیم ولی هیچ نتیجهای برگردونده نمیشد. در واقع قسمت جستجوی سایتشون عملا هیچ کمکی به کاربران سایت نمیکرد.
با توجه به تجربه اندکی که توی هوش مصنوعی و مباحث Information Retrieval داشتم، پیشنهاد یه موتور جستجوی بهتر رو بهشون دادم و قرار شد تو ۲ هفته یه نسخه اولیه به عنوان MVP بسازیم و تستش کنیم. بعد از ۲ هفته نسخه اولیه آماده شد.
تو نسخه اولیه یه مفهومی داشتیم به اسم مجموعه داده که میشد اسناد رو دستهبندی کرد. ایده این بود که بشه اسناد و محصولات مختلف مجموعه دادههای مختلفی ساخت. مثلا مطالب وبلاگ و محصولات سایت میبایست از هم جدا میشد. تنها کاری که این نسخه انجام میداد ذخیره و ویرایش محصولات و جستجو بین اونها بود.
آماده برای پرتاپ!
وقتی همه چیز آماده شد، یه سرور مجازی گرفتم که ۸ هسته CPU و ۸ گیگ رم داشت! سرویس رو روی این سرور راه اندازی کردیم و به عنوان یه شروع نتیجه خوبی گرفته بودیم.
تا ۵ ماه این سرویس روی گلدتگ فعال بود و به کاربرا سرویس میداد. تو این مدت کلی فیدبک خوب از آقای سفیداری گرفتم که توی ادامه راه خیلی کمکم کرد. همین فیدبک های مثبت و کارایی سرویس تو این مدت باعث شد نیاز به همچین سرویسی رو برای بقیه کسب و کارها هم حس کنم.
یه جلسه با محسن گذاشتم. قضیه آشنایی من با محسن برمیگرده به ۳ سال پیش که برای یه پروژه دنبال همتیمی میگشتم که با محسن آشنا شدم. با اینکه در نهایت اون ایده موفق نشد، اما تو این سه سال باهم رو پروژههای مختلف کار کردیم و به دوستای خوبی برای هم تبدیل شدیم. قرار شد سرویس رو مجدد بازنویسی کنیم و اشکالاتی که در نسخه اولیه سرویس بود رو رفع کنیم. الگوریتم های خطایابی خیلی کاملتر شد. روش ذخیره سازی بسیار بهینه تر شد بطوری که تونستیم از ذخیره اطلاعات تکراری برای وبسایتهای مختلف جلوگیری کنیم که همین کار باعث شد فضای مصرفی تا ۷۵ درصد کاهش پیدا کنه! امکان تعریف روابط معنایی هم به سرویس اضافه شد تا نتایج دقیقتر بشن. همه چیز آماده بود تا نسخه اولیه محصول رو آپلود و تست کنیم.
راهاندازی سرویس و روبرو شدن با اولین چالش
ما توی بخشای مختلفی از سرویسمون از دیتابیس ردیس برای اهداف مختلفی استفاده میکنیم. طبق بررسی هایی که انجام دادیم قرار شد ردیس رو بصورت کلاستر نصب و کانفیگ کنیم تا بتونیم مقیاس پذیرتر باشیم و کارایی سرویس رو بالا ببریم. بعضی از توابع ردیس تو حالت کلاستر کار نمیکنن، یعنی اونهایی که چند تا کلید رو به عنوان ورودی میگیرن یا اصطلاحا multi-key هستند. عملیات سورت کردن، محاسبه اشتراک و اجتماع روی مجموعه های مرتب شده و ... جزء اون دستورات بود.
روشهای مختلفی رو تست کردیم ولی کارایی سرویس با افت شدید مواجه شد بطوری که به این نتیجه رسیدیم که نمیتونیم سرویس مقیاسپذیری داشته باشیم مگر اینکه همه الگوریتمها و ساختارهای داده ای رو از پایه کدنویسی کنیم. بعد از ۲ روز تلاش شبانه روزی تونستیم بعضی از الگوریتم هارو با توجه به انواع داده های قابل پشتیبانی توسط ردیس دوباره نویسی کنیم. پشتیبانی ردیس از زبان LUA هم باعث شد تا خیلی از کارها رو بصورت سفارشی شده و کاملا بهینه انجام بدیم. همین بازنویسی مجدد باعث شد میانگین زمان پاسخ دهی سرویس با ۲۰ درصد بهبود به ۸.۷ میلی ثانیه برسه که تجربه خیلی خوبی رو به کاربر میده.
بعد از اینکه همه چیز تموم شد سایت رو بالا آوردیم و همه چیز طبق انتظار خیلی خوب کار میکرد. بعد از برطرف کردن این چالش، که باعث شده بود تا مرز ناامیدی پیش بریم، مصمم تر از قبل سرویس رو توسعه میدیم.
تکمیل کننده جستجو
بعد از یه مدت کوتاهی متوجه شدیم که در کنار سرویس جستجوی اصلی نیاز به یه سرویس مکمل داریم که هنگام تایپ، عبارات مناسب را به کاربر پیشنهاد دهد. یکی از اصلیترین چالش های این سرویس، درنظر گرفتن کلمات قبلی در پیشنهادات آتی بود. مثلا وقتی عبارت پیراهن مر تایپ میشود میبایست عبارت پیراهن مردانه در لیست گزینههای پیشنهادی میبود. از طرفی وقتی عبارت تخم مر تایپ میشود میبایست عبارات تخم مرغ در لیست گزینههای پیشنهادی میبود. با این کار میتوان نتایج مرتبطتری را به کاربر نمایش داد.
پس از حل این چالش، امکان تکمیل کننده جستجو نیز به سرویس جستجوی نگاره اضافه شد.
بعد از اینکه مطمئن شدیم سرویس به خوبی داره کار میکنه، یه سری کارای جانبی داشیم که باید انجام میدادیم. اول از همه باید یه صفحه فرود طراحی میکردیم که کاربرامون بتونن با سرویسمون آشنا شن. چیزی که برامون مهم به نظر میاومد طراحی یه دمو خیلی خوب بود که هر کسی مستقل از دانش فنی و ... بتونه سرویس رو تست کنه. یه دمو که نشون بده سرویس ما چیه، به چه دردی میخوره، و چقد خوبه.
طبق صحبتهایی که با آقای سفیداری انجام شد، قرار شد از اطلاعات و محصولات وبسایت گلدتگ برای ساخت این دمو استفاده کنیم. (برای دیدن دمو میتونید اینجا کلیک کنید)
بعد از اینکه دمو آماده شده باید مستندات رو تکمیل میکردیم تا کاربرا به راحتی بتونن از سرویس استفاده کنن. یه کتابخونه برای زبان PHP هم نوشتیم که در بخش مستندات قرار داره.
مسیر همچنان ادامه دارد...
هنوز مثل خیلی از استارتآپای دیگه مسیر طولانی و دشواری رو در پیش داریم؛ موانع و چالش هایی هستن که باید بهشون غلبه کنیم. با انگیزه و پرانرژی به حرکت کردن ادامه میدیم چون کاری رو که انجام میدیم رو دوست داریم.
در حال حاضر داریم روی پنل کاربری کار میکنیم که بشه مجموعه داده هارو تعریف کرد و یه سری تحلیل ها رو اونجا دید. در کنارش داریم یه سری کتابخونه هم واسه سیستم های مدیریت محتوای مختلف مینویسیم که کاربرا براحتی بتونن وبسایت یا اپلیکیشن موبایل خودشون رو به سرویس نگاره وصل کنن.
اگه علاقه دارید که توی این مسیر بهمون کمک کنید، حتما بهمون پیام بدید. خوشحال میشیم که شما رو توی تیممون داشته باشیم.
مطلبی دیگر از این انتشارات
مفهوم SaaS (نرمافزار به عنوان سرویس) به زبان ساده
مطلبی دیگر از این انتشارات
جمع بندی زمستونه؛ دسته بندی موضوعی مطالب
مطلبی دیگر از این انتشارات
کارهایی را انجام دهید که مقیاس پذیر نیستند (قسمت آخر)