Вы в принципе не можете выполнить пункт 1 в реальном времени - временной интервал слишком короткий. Поэтому вам нужно заранее проанализировать все страницы, на которых вы будете показывать рекламу, и сохранить эту информацию так, чтобы к ней можно было быстро получить доступ во время показа рекламы.
Это не обязательно означает «быть компанией поисковой системы»: в конце концов, вы, вероятно, не собираетесь показывать объявления на миллиардах различных URL-адресов, а только на гораздо меньшем количестве URL-адресов, принадлежащих вашей компании или его партнеры (так что вы, вероятно, также можете получить сотрудничество от владельцев URL-адресов: например, вам не нужен общий паук, но вы можете положиться на владельцев, использующих протокол Sitemap должным образом, чтобы вы знали о новых, обновленных или удаленных URL-адресах, вы может доверять ключевым словам, заголовку и заголовкам каждой страницы, чтобы предоставить важную информацию и т. д.).
Таким образом, при относительно небольшом количестве серверов (скажем, нескольких десятках, может быть, в EC2 или другой «облачной» службе) вы можете хранить URL-адреса распределенных хеш-таблиц в памяти (например) для наборов связанных ключевых слов и весов. относительно относительной важности ключевых слов и аналогичной таблицы для объявлений-кандидатов - действительно, если у вас нет аспекта «аукциона в реальном времени» в вашей системе, вам может даже сойтись с предварительным вычислением соответствия URL-адресов объявлениям ( предположительно, вы делаете хотите выполнить динамическую корректировку, аукционную или другую, но с некоторым разумным приближением, которое можно смоделировать как простую инкрементную операцию для предварительно вычисленного соответствия).
Если вам нужно масштабировать показ объявлений на миллиардах URL-адресов, тогда вам нужен гораздо более сложный подход, чем можно было бы эффективно обобщить в ответе SO, - но тогда, если это масштаб ваших амбиций, у вас есть лучше собрать команду инженеров, которая не боится этой задачи (и гораздо больше, чем несколько десятков серверов; -).