ایجاد تعادل میان سرعت، ارتباطپذیری و مقیاسپذیری (Balancing Speed, Relevance, and Scalability)
نکات کلیدی
- بهینهسازی ایندکسگذاری دادهها و چیدمان آنها میتواند بهطور قابلتوجهی زمان بازیابی را کاهش داده و کارایی ذخیرهسازی را بهبود دهد.
- دستهبندی و اولویتبندی دادههای مرتبط بر اساس عوامل مشخص، مانند موقعیت مکانی یا زمان تحویل، دقت و سرعت کوئریها را افزایش میدهد.
- تکنیکهای شاردینگ، مانند ژئو-شاردینگ، به متعادلسازی بار سیستم و بهبود کارایی جستجو در سیستمهای پیچیده و بزرگمقیاس کمک میکنند.
- موازیسازی کوئریها و پردازش همزمان انواع مختلف تطابق میتواند عملکرد و ارتباطپذیری جستجو را تقویت کند.
- تضمین سازگاری در سطوح مختلف کشف، به تجربه کاربری روانتر و شهودیتر منجر میشود.
بهعنوان مهندسان نرمافزار، ما همواره در تلاش هستیم سیستمهایی بسازیم که نهتنها کاربردی، بلکه کارا و مقیاسپذیر نیز باشند. در جهانی که کاربران نتایج سریعتر و دقیقتری میطلبند، بهینهسازی عملکرد جستجو به یکی از تمرکزهای اصلی در توسعه برنامههای مدرن تبدیل شده است.
این مقاله بر اساس ارائه ما در QCon San Francisco 2024 نوشته شده است؛ جایی که به بررسی چشمانداز در حال تحول ایندکسگذاری داده، بازیابی و رتبهبندی پرداختیم. با پلتفرمهایی مانند Uber Eats که کوئریهای پیچیده را بر روی مجموعهدادههای عظیم مدیریت میکنند، بهینهسازی جستجو اکنون به چالشی حیاتی تبدیل شده است که نیازمند راهبردهای پیشرفتهای مانند ایندکسگذاری، شاردینگ و پردازش موازی کوئریهاست.
پیچیدگی سیستمهای جستجو همچنان در حال افزایش است و همین موضوع، ایجاد تعادل میان سرعت، ارتباطپذیری و مقیاسپذیری را بیش از هر زمان دیگری حیاتی میکند. این مقاله تکنیکهای پشت این بهینهسازیها و تأثیر آنها بر تجربه کاربری و عملکرد سیستم را بررسی میکند.
گسترش انتخاب در Uber Eats: رویکرد nX
انتخاب در Uber Eats مسئلهای پیچیده است که بسته به دیدگاه، متفاوت به نظر میرسد. برای تیم جذب فروشندگان و عملیات، موفقیت با اضافهکردن هرچه بیشتر رستورانها و فروشگاهها سنجیده میشود. برای مصرفکنندگان، انتخاب معانی مختلفی دارد؛ برخی زمان تحویل سریع را در اولویت میگذارند، برخی بهدنبال رستورانهای محبوب خود هستند و برخی دیگر به کشف مکانهای جدید در اپلیکیشن علاقه دارند. چالش اصلی، پاسخدادن به این نیازهای متنوع و در عین حال تضمین تجربهای یکپارچه در فرایند کشف است.
فراتر از جنبههای مفهومی انتخاب، موانع فنی قابلتوجهی نیز وجود دارد. با گسترش کسبوکار، بهویژه در دوران و پس از همهگیری، Uber Eats حوزههای جدیدی فراتر از رستورانها اضافه کرده است؛ از جمله فروشگاههای مواد غذایی، فروشگاههای خردهفروشی و حتی تحویل کالا یا بسته. این گسترش، پیچیدگی رتبهبندی و پیشنهاددهی را وارد زیرساخت انتخاب پلتفرم کرده است.
یکی از تفاوتهای کلیدی در مقیاسدهی انتخاب، میان جذب رستورانها و فروشگاههای مواد غذایی است. منوهای رستورانها معمولاً شامل بیست تا سی آیتم هستند، در حالی که فروشگاههای مواد غذایی میتوانند بیش از صد هزار واحد نگهداری موجودی (SKU) داشته باشند. این تفاوت، نیازمند یک سیستم ایندکسگذاری پیشرفته برای ارائه کارآمد گزینههای مرتبط به کاربران است.
یکی دیگر از تحولات مهم در راهبرد انتخاب Uber Eats، گسترش دامنه جغرافیایی تحویلها بوده است. پیشتر، کاربران تنها میتوانستند از رستورانهایی در شعاع ده تا پانزده دقیقه سفارش دهند. اکنون، پلتفرم امکان سفارش از محدودهای نزدیک به یک ساعت را فراهم کرده است. برای مثال، کاربری در یک شهر میتواند از رستوران یا فروشگاهی در شهری دیگر سفارش ثبت کند و آن را از طریق Uber Eats تحویل بگیرد. این گسترش دامنه، چالشهای فنی بیشتری بهویژه در لجستیک و انجام سفارش ایجاد میکند.
تمرکز اصلی راهبرد انتخاب Uber Eats، بیشینهسازی تعداد گزینههای در دسترس در تمامی سطوح کشف داخل اپلیکیشن است. شخصیسازی، اگرچه جنبهای مهم محسوب میشود، اما چالشی جداگانه است که به راهکارهای متمایز نیاز دارد. Uber Eats با تکامل مداوم فناوریهای ایندکسگذاری، رتبهبندی و پیشنهاددهی، در پی ایجاد انتخابی جامعتر و پویاتر برای کاربران است تا بتوانند سریع و کارآمد به آنچه میخواهند برسند؛ چه یک رستوران محبوب باشد، چه تجربهای جدید از غذا، یا یک کالای ضروری از فروشگاه.
سطوح کشف مانند Home Feed، Search، Suggestions و Ads نقشی حیاتی در اتصال کاربران به گزینههای موجود دارند. Home Feed بهعنوان نقطه ورود اصلی سفارشها عمل میکند و شامل کاروسلهایی بر اساس تاریخچه کاربر، فهرست فروشگاهها و بخشهای میانبُر برای پیشنهادها و دستههای غذایی است. قابلیت جستجو شامل جستجوی رستوران، غذا و نوع آشپزی میشود، در حالی که پیشنهادها به کاربران کمک میکنند گزینههای مشابه یا جایگزین را بهصورت پویا کشف کنند. تبلیغات نیز با افزایش دیدهشدن، به فروشندگان کمک میکند بهطور مؤثر به مشتریان مرتبط دسترسی پیدا کنند. تضمین سازگاری میان این سطوح کشف، کلید ارائه تجربهای یکپارچه و شهودی برای کاربر است.

معماری Uber Eats: از زیرساخت تا لایه کاربردی
معماری Uber Eats چندین لایه را در بر میگیرد؛ از لایه زیرساختی تا لایه کاربردی، تا بازیابی و جایدهی فروشگاهها و رستورانها بهصورت یکپارچه انجام شود. در پایه، لایه زیرساخت قرار دارد که تمامی فروشندگان و آیتمهای موجود را ذخیره و ایندکس میکند. این لایه، مجموعهداده اصلی است که فروشگاههای مرتبط از آن بازیابی میشوند.

لایه بازیابی با واکشی طیف گستردهای از فروشگاههای بالقوه، میزان یادآوری را بهینه میکند و سپس این نتایج از طریق سیستم «رتبهبندی» برای ارتباطپذیری پالایش میشوند. رتبهبندی مرحله اول بر دقت تمرکز دارد و از تطابق لغوی برای همراستا کردن کوئریهای کاربر با اسناد بازیابیشده استفاده میکند. لایه هیدریشن منطق کسبوکار را اضافه میکند و عواملی مانند پروموشنها، مزایای عضویت و زمانهای تخمینی تحویل را در نظر میگیرد. در نهایت، رتبهبندی مرحله دوم نتایج را بر اساس تاریخچه سفارش کاربر و نرخ تبدیل شخصیسازی میکند تا مرتبطترین گزینهها ارائه شوند.
با گسترش انتخاب در Uber Eats، چالشهای جدی مقیاسدهی پدیدار شد. تلاش اولیه برای افزایش تعداد فروشگاههای بازیابیشده منجر به افزایش چهاربرابری تأخیر شد که بررسی عمیقتری از ناکارآمدیها در ورود داده، عملکرد کوئری و رتبهبندی را ضروری کرد.

یکی از چالشهای کلیدی، ایندکسگذاری و کوئریگیری بود. Uber Eats برای تعیین مناطق تحویل به ایندکسگذاری جغرافیایی ششضلعی H3 متکی است، اما فرایند ورود داده فروشگاهها را بهاشتباه بهعنوان «نزدیک» یا «دور» دستهبندی میکرد. این طبقهبندی نادرست باعث ناهماهنگی در رتبهبندی شد؛ بهطوری که فروشگاههای واقعاً نزدیک، اولویت کمتری میگرفتند.

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

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

برای حل این مسائل، Uber Eats نیاز داشت راهبردهای ایندکسگذاری، بازیابی و رتبهبندی خود را اصلاح کند. تمرکز به سمت ایجاد تعادل میان مقیاس و کارایی تغییر یافت تا پلتفرم بتواند مرتبطترین فروشگاهها را بدون افت عملکرد نمایش دهد. این بهینهسازیها برای حفظ تجربه کاربری روان در کنار پشتیبانی از انتخاب روبهرشد Uber Eats حیاتی بودند.
پلتفرم جستجوی Uber Eats
پلتفرم جستجویی که Uber Eats را پشتیبانی میکند و روزانه دهها میلیون درخواست را مدیریت میکند، بر پایه Apache Lucene ساخته شده و از معماری Lambda برای ورود داده استفاده میکند. این ساختار شامل ورود دستهای از طریق Spark و ورود بلادرنگ از مسیر استریم است که نتایج جستجوی بهروز را تضمین میکند.

یکی از ویژگیهای کلیدی، ورود داده آگاه از اولویت است که اجازه میدهد درخواستهای با اولویت بالا زودتر پردازش شوند و تازگی داده حفظ شود. Uber همچنین بهشدت به ژئو-شاردینگ برای بهینهسازی موارد استفاده جستجوی مکانی متکی است. افزون بر این، چیدمانهای سفارشی ایندکس و عملگرهای کوئری، با بهرهگیری از رتبهبندی آفلاین اسناد و خاتمه زودهنگام، کارایی جستجو را افزایش میدهند.
معماری پلتفرم جستجو از سه مؤلفه اصلی تشکیل شده است:
- Batch Indexing Pipeline: وظایف Spark دادهها را پردازش میکنند، آنها را به اسناد جستجو تبدیل کرده، به شاردها تقسیم میکنند و ایندکسهای Lucene را تولید میکنند که در یک ذخیرهساز شیء نگهداری میشود.
- Streaming/Real-Time Updates Path: بهروزرسانیها از طریق یک سرویس استریم وارد میشوند که اسناد را برای بهروزرسانی بلادرنگ به پارتیشنهای مشخص Kafka نگاشت میکند. بین هر پارتیشن Kafka و هر شارد، نگاشت یکبهیک وجود دارد. Kafka بهعنوان یک لاگ نوشتنپیشرو عمل میکند و امکان مدیریت مناسب جهشهای ورود داده، ورود آگاه از اولویت، تکثیر و تحمل خطا را فراهم میسازد.
- Serving Stack: نود جستجوگر ایندکسها را از ذخیرهساز دریافت میکند، با بهروزرسانیهای استریم همگام میشود و کوئریها را اجرا میکند. یک سرویس تجمیعگر بدون وضعیت، درخواستهای جستجو را به نود جستجوگر مناسب هدایت میکند، fanout کوئریها را مدیریت کرده و نتایج را پیش از بازگرداندن به کاربر تجمیع میکند.
تکنیکهای شاردینگ
مدیریت کارآمد کوئریهای جستجوی مکانی در Uber Eats حیاتی است، زیرا کاربران اغلب بهدنبال رستورانها یا فروشگاههای نزدیک هستند. برای این منظور، Uber Eats از ژئو-شاردینگ استفاده میکند؛ تکنیکی که تضمین میکند تمام دادههای مرتبط با یک موقعیت مکانی مشخص در یک شارد واحد ذخیره شوند. این کار سربار کوئری را کاهش داده و ناکارآمدیهای ناشی از واکشی و تجمیع نتایج از چندین شارد را حذف میکند. علاوه بر این، ژئو-شاردینگ امکان رتبهبندی مرحله اول را مستقیماً روی نودهای داده فراهم میکند و سرعت و دقت را بهبود میبخشد. Uber Eats عمدتاً از دو تکنیک ژئو-شاردینگ استفاده میکند: شاردینگ عرض جغرافیایی و شاردینگ ششضلعی.
شاردینگ عرض جغرافیایی، جهان را به نوارهای افقی تقسیم میکند که هر نوار نماینده یک شارد مجزا است. بازههای شارد بهصورت آفلاین با استفاده از وظایف Spark محاسبه میشوند؛ ابتدا نقشه به هزاران نوار باریک عرضی تقسیم شده و سپس نوارهای مجاور برای ایجاد شاردهایی با اندازه تقریباً برابر گروهبندی میشوند. اسنادی که روی مرز شاردها قرار میگیرند، در هر دو شارد همسایه ایندکس میشوند تا از از دست رفتن نتایج جلوگیری شود.
یکی از مزیتهای کلیدی شاردینگ عرض جغرافیایی، توانایی آن در توزیع کارآمد ترافیک در مناطق زمانی مختلف است. با توجه به اینکه Uber Eats الگوی اوج فعالیت مبتنی بر «الگوی خورشید» دارد و تقاضا در روز بالا و در شب پایینتر است، این روش به جلوگیری از بار بیش از حد روی شاردهای خاص کمک میکند. با این حال، در مناطق شهری متراکم، شاردها ممکن است نامتوازن شوند و به تأخیر در ایندکسگذاری و افزایش تأخیر کوئری منجر شوند.

برای رفع این چالشها، Uber Eats از شاردینگ ششضلعی نیز استفاده میکند که بر پایه سیستم ایندکسگذاری مکانی H3 است. بهجای تقسیم جهان به نوارها، شاردینگ ششضلعی دادهها را در کاشیهای ششضلعی با رزولوشنهای مختلف سازماندهی میکند. انتخاب اندازه مناسب ششضلعی بسیار مهم است و Uber معمولاً اندازه H3 برابر ۲ یا ۳ را برای ایجاد تعادل میان کارایی و دقت انتخاب میکند. مشابه شاردینگ عرض جغرافیایی، شاردینگ ششضلعی نیز از نواحی حائل استفاده میکند تا اسناد نزدیک مرز شاردها در چندین ششضلعی ایندکس شوند و شکاف جستجو ایجاد نشود. مزیت اصلی شاردینگ ششضلعی، ایجاد توزیع متوازنتر شاردها، بهویژه در مناطق شهری متراکم است؛ جایی که شاردینگ عرض جغرافیایی با مشکل مواجه میشود.

با ترکیب این دو تکنیک، Uber Eats زیرساخت جستجوی خود را برای ارائه کوئریهای مکانی سریع، دقیق و مقیاسپذیر بهینه میکند و تجربهای یکپارچه برای کاربران، صرفنظر از محل سفارش، فراهم میآورد.
برای بهینهسازی عملکرد جستجوی Uber Eats، چندین بهبود با بهرهگیری از الگوهای کوئری و اصلاح چیدمان دادهها انجام شد تا یادآوری افزایش یابد و در عین حال تأخیر کاهش پیدا کند. یکی از بهبودهای کلیدی، ایجاد چیدمانهای داده تخصصی متناسب با موارد استفاده مختلف، مانند تحویل غذا و جستجوی مواد غذایی بود. با همراستا کردن ساختار داده با الگوهای کوئری، کارایی بازیابی بهبود یافت و محاسبات غیرضروری کاهش پیدا کرد. بهینهسازی مهم دیگر، ایندکسگذاری زمان تخمینی تحویل (ETD) بود که امکان تقسیم فضای جستجو به بازههای غیرهمپوشان و پردازش موازی آنها را فراهم کرد و اجرای کوئری را تسریع نمود، در حالی که دقت رتبهبندی حفظ شد.

علاوه بر این، وظایفی مانند تفکیک فروشگاههای نزدیک و دور، زودتر در خط لوله ایندکسگذاری اولویتبندی شدند که منجر به کاهش پردازش در زمان کوئری و بهبود عملکرد کلی شد. این بهبودها کارایی جستجو را بهطور چشمگیری افزایش دادند و نتایج سریعتر و مرتبطتری را در کنار حفظ مقیاسپذیری ارائه کردند.
بهبود چیدمان داده برای کوئریهای سریعتر و مقیاسپذیرتر
Uber Eats با بهینهسازی چیدمان داده و همراستا کردن بهتر آن با الگوهای کوئری، کارایی جستجو را بهبود داد و تأخیر را بهطور قابلتوجهی کاهش داد و مقیاسپذیری را افزایش داد. ایندکس Eats بهگونهای بازساختاردهی شد که ابتدا رستورانها بر اساس شهر، سپس بر اساس هر رستوران و در نهایت آیتمهای منوی آنها گروهبندی شوند. این رویکرد به کوئریها اجازه داد شهرهای نامرتبط را فیلتر کرده و بهسرعت پردازشهای غیرضروری را کاهش دهند. علاوه بر این، از آنجا که Lucene از کدگذاری دلتا استفاده میکند، خوشهبندی ویژگیهای مشابه کنار هم، کارایی فشردهسازی را بهبود داد و منجر به کاهش بیستدرصدی اندازه ایندکس شد.

برای جستجوی مواد غذایی، به دلیل مقیاس بالاتر موجودی نسبت به رستورانها، راهبردی اندکی متفاوت مورد نیاز بود. فروشگاهها بر اساس نرخ تبدیل آفلاین رتبهبندی شدند و آیتمهای آنها درون هر فروشگاه گروهبندی شدند. این چیدمان به سیستم امکان داد برای هر فروشگاه سقف بازیابی تعیین کند و از نتایج بیش از حد از یک فروشگاه جلوگیری نماید و تنوع نتایج میان چندین تأمینکننده مواد غذایی را تضمین کند. این موضوع بهویژه برای جستجوهایی با کلیدواژههای عمومی مانند «chicken» مفید بود؛ جایی که ممکن است هزاران تطابق از یک فروشگاه واحد ظاهر شود.

این بهینهسازیهای چیدمان داده به بهبود ۶۰ درصدی تأخیر بازیابی منجر شد و زمان کوئری را از ۱۴۵ میلیثانیه به ۶۰ میلیثانیه کاهش داد. همچنین، مرتبسازی اسناد باعث جستجوی کارآمدتر شد و زمان بازیابی بهازای هر سند را از ده تا ۶۰ میکروثانیه به کمتر از ۵ میکروثانیه رساند. اثر کلی، بهبود ۵۰ درصدی در تأخیرهای P95 بود که جستجویی بسیار سریعتر و روانتر را تضمین کرد.
بهینهسازی ایندکسگذاری ETA در Uber
Uber ایندکسگذاری ETA (زمان تخمینی رسیدن) را برای بهینهسازی کارایی جستجو، کاهش تأخیر و افزایش یادآوری بهبود داد و فرادادههایی درباره مناطق تحویل رستورانها و برآوردهای زمانی را در پلتفرم جستجو ادغام کرد. در ابتدا، سیستم اطلاعاتی درباره فاصلههای نسبی میان مناطق تحویل (ششضلعیها) نداشت و این موضوع ارزیابی کارآمد رستورانهای دورتر را برای رتبهبندها دشوار میکرد. برای رفع این مشکل، Uber زمانهای تحویل را به بازههای زمانی ثابت دستهبندی کرد و رستورانها را بر اساس نزدیکی به هر ششضلعی ایندکس نمود.

این رویکرد، یک بدهبستان میان فضای ذخیرهسازی و کارایی پردازش ایجاد کرد. رستورانها باید در صورتی که در بازههای زمانی مختلف برای ششضلعیهای گوناگون قرار میگرفتند، چندین بار ذخیره میشدند. اگرچه این کار سربار ذخیرهسازی را افزایش داد، اما سرعت کوئری را بهطور چشمگیری بهبود بخشید و بازیابی نتایج مرتبط را بسیار سریعتر کرد. Uber روشهای جایگزین ایندکسگذاری، از جمله درختهای BKD و بازیابی مبتنی بر gRPC را آزمایش کرد، اما در نهایت به این نتیجه رسید که پیشمحاسبه این روابط و ذخیره آنها در ایندکس، بهترین عملکرد را ارائه میدهد.
سیستم جدید امکان موازیسازی کوئریها را فراهم کرد، بهطوری که یک درخواست واحد میتوانست چندین جستجو را برای باکتهای ETA مختلف با تأخیر ثابت فعال کند. این کار به کاهش پنجاهدرصدی تأخیر کوئری و بهبود یادآوری انجامید، زیرا رتبهبندها بدون افت عملکرد به کاندیداهای مرتبطتری دسترسی پیدا کردند.
بهبود مهم دیگر، مدیریت فروشگاههای غیرقابلتحویل اما قابلکشف بود. رستورانها گاهی در نتایج جستجو ظاهر میشوند اما بهدلیل عواملی مانند در دسترس بودن پیک، موقعیت مکانی و زمان روز قادر به پذیرش سفارش نیستند. بهجای مدیریت پویای این موضوع در زمان کوئری، Uber قابلیت تحویلپذیری را در لایه ورود داده پیشمحاسبه کرد. این کار به سیستم اجازه داد بهسرعت میان رستورانهای قابلتحویل و صرفاً قابلکشف تمایز قائل شود و تجربه کاربری را بهبود دهد.
جنبههای کلیدی بهینهسازی جستجوی Uber
مسیر Uber در بهینهسازی عملکرد جستجو و بازیابی، نقش حیاتی ایندکسگذاری ساختیافته، راهبردهای کارآمد شاردینگ و تکنیکهای موازیسازی را نشان میدهد. در ابتدا، مشکلات عملکردی ناشی از ذخیرهسازی و بازیابی ناکارآمد داده بود که باعث تأخیر در پردازش کوئریها روی حجم عظیمی از اسناد در چندین منطقه میشد. Uber با تحلیل دقیق الگوهای کوئری، چیدمان ایندکس را بازساختاردهی کرد تا خوشهبندی مبتنی بر شهر و فروشگاه در اولویت قرار گیرد و نتایج مرتبط سریعتر بازیابی شوند.
این بازسازماندهی زمانهای بازیابی را بیش از پنجاه درصد کاهش داد و نسبتهای فشردهسازی را بهبود بخشید و به سیستمی کارآمدتر از نظر ذخیرهسازی انجامید. معرفی ایندکسگذاری ETA فرایند رتبهبندی را با «جریمهکردن» فروشگاههای دورتر و اولویتدادن به گزینههای در محدوده بهینه تحویل، دقیقتر کرد. از طریق راهبردهای هوشمند ورود داده و ایندکسگذاری، Uber تعادل میان یادآوری و تأخیر را بهینه کرد و تضمین نمود کاربران سریعتر به نتایج مرتبطتری دست یابند.

فراتر از بازساخت ایندکس، Uber بر انتقال عملیاتهای پیچیده fallback از لایه کوئری به لایه ورود داده تمرکز کرد. این انتقال پردازش غیرضروری هنگام اجرای کوئری را کاهش داد و تجربه جستجو را روانتر کرد. استفاده از کوئریهای بازهای موازیسازیشده به Uber اجازه داد فضای انتخاب را بدون تأثیر بر تأخیر گسترش دهد و تنوع نتایج جستجو را در کنار زمان پاسخ سریع حفظ کند. سیستم با حذف ناکارآمدیها، مانند پردازش فروشگاههای آزمایشی در کنار دادههای تولیدی که پیشتر زمان کوئری را افزایش میداد، بیشازپیش بهینه شد. با استفاده از زیرکوئریهای غیرهمپوشان، Uber موازیسازی را به حداکثر رساند و اجرای همزمان انواع مختلف تطابق، از جمله تطابقهای قوی، فازی و جزئی کلیدواژهها را برای کارایی بیشتر ممکن ساخت.
جمعبندی
این بهینهسازیها به همکاری گسترده میان تیمها نیاز داشت؛ تیمهای جستجو، فید، تبلیغات و پیشنهادها باید بر سر تغییراتی که کل اکوسیستم جستجو را تحت تأثیر قرار میداد، همراستا میشدند. هماهنگی این تلاشها پیچیده بود، زیرا هر تیم باید اطمینان حاصل میکرد خدمات مربوط به خود بهصورت یکپارچه ادغام شدهاند. این فرایند چندین ماه بنچمارک، آزمون و تنظیم دقیق را در بر گرفت، اما نتایج آن تحولآفرین بود. تأخیرها بهطور قابلتوجهی کاهش یافت، یادآوری بهبود پیدا کرد و مقیاسپذیری سیستم افزایش چشمگیری داشت و پایهای برای تجربه جستجویی پاسخگوتر و شهودیتر در سراسر Uber Eats فراهم شد.
با ادامه گسترش و بهبود پلتفرم Uber در مقیاس جهانی، این پیشرفتها اهمیت تصمیمگیری مبتنی بر داده، طراحی کارآمد سیستم و تکرار مستمر را برجسته میکنند. Uber با ارزیابی و بهینهسازی مداوم سیستمهای خود، چابک و رقابتی در چشمانداز بهسرعت در حال تحول سیستمهای توزیعشده بزرگمقیاس باقی میماند و تجربهای هرچه یکپارچهتر برای کاربران فراهم میکند و از گسترش خدمات خود پشتیبانی مینماید.
