Как видно на https://www.ausnews.org
Ausnews Search-это высокопроизводительная поисковая система с открытым исходным кодом, индексирующая некоторые австралийские новостные сайты. Он состоит из 5 компонентов:
Поиск поддерживает знакомые пользовательские запросы, такие как:
covid -china : Ищет статьи, содержащие слово «covid», а не «Китай»bylines:"Josh Taylor" google : Поиск статьи с «Google», написанным Джошем Тейлором.source:abc bushfire : статьи от Abc.net.au, содержащий «лесной пожар»covid source:guardian firstpubtime:>1612211170 Ковидные статьи о Guardian, опубликованные через определенное время.Web API конструирует запросы VESPA (YQL), используемые сайтом, чтобы упростить вышеуказанные запросы, но вы все равно можете ввести, как указано выше в поле поиска.
Рейтинг довольно прост и прост с самого начала. Он обладает чрезвычайно хорошим стволом и другими лингвистическими возможностями и использует алгоритм BM-25 в сочетании со статьей «свежесть» для ранжирования. Это может быть улучшено с течением времени, но цель здесь состоит в том, чтобы оценить новостные статьи о свойствах, которые не могут быть просто гамедом.
Рейтинг «Top News» учитывает опубликованное время и активность в социальных сетях. Статьи связаны с релевантностью при выполнении обработки документов, а затем сгруппированы в лучших результатах новостей. Это похоже на то, что нажимает «связанный» с историей, но это строго вовремя и актуально.
Рейтинг «Лучших статей» также учитывает социальные сети, но первую статью - не для группы соответствующих статей.
Поиск AusNews может обрабатывать 1400+ запросов/второй только на двух контейнере VESPA и трех узлах содержимого, с довольно ограниченным набором данных (~ 10 000 статей). Средняя частота ответов от Vespa до 10 мс . Это почти без настройки - производительность, безусловно, может быть улучшена. Производительность вряд ли будет затронута масштабом.

Vespa поддерживает живое масштабирование и автоматическое перебалансирование контента. Это означает, что контейнеры или узлы контента могут быть просто масштабированы вверх/вниз по мере необходимости, без простоя или изменений вручную. Чтобы масштабировать узлы VESPA, просто измените числа в Bootstrap.sh, запустите его и запустите Deploy.sh снова. Вот скриншот перебалансировки узлов документа при добавлении двух дополнительных узлов:

Веб -API также работает независимо и предназначен для работы на более мелких узлах.
Образец вывода ab :
Concurrency Level: 50
Time taken for tests: 70.147 seconds
Complete requests: 100000
Failed requests: 0
Keep-Alive requests: 100000
Total transferred: 284740792 bytes
HTML transferred: 271440792 bytes
Requests per second: 1425.57 [#/sec] (mean)
Time per request: 35.074 [ms] (mean)
Time per request: 0.701 [ms] (mean, across all concurrent requests)
Transfer rate: 3964.05 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 6
Processing: 7 35 17.8 31 361
Waiting: 7 35 17.8 31 361
Total: 7 35 17.8 31 361
Percentage of the requests served within a certain time (ms)
50% 31
66% 38
75% 43
80% 46
90% 56
95% 67
98% 81
99% 92
100% 361 (longest request)
Вся приложение развернуто в Kubernetes, а набор приложений и развертывание может быть воспроизведено.
┌─────────┐ ┌─────────────┐
│ Browser ├─────────────► Static Site │
└─────┬───┘ └─────────────┘
│
└───▲───────┐
GKE Cluster │Ingress│
┌───────────────────────────┼───────┼─────────────────────────────────────┐
│ └───┼───┘ │
│ │ │
│ │ │
│ ┌───────────▲───────┘ │
│ │ Service │ │
│ ├───────────┤ │
│ ┌─────┴───────────┴───────┐ │
│ │ │ ┌───────────┐ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ │ ┌─────┤ Augmenter │ │
│ │ │ Pod │ │ Pod │ │ Pod │ ├───────┐ │ └───────────┘ │
│ │ └─────┘ └─────┘ └─────┘ │ │ │ │
│ │ │ │ │ │
│ └─────────────────────────┘ │ │ ┌─────────┐ │
│ Scalable Web APIs │ │ ┌─────┤ Spiders │ │
│ │ │ │ └─────────┘ │
│ │ │ │ │
│ ┌─▼──▼──▼─┐ │
│ ┌──┤ Service ├──┐ │
│ │ └────┬────┘ │ │
│ Vespa Search Engine │ │ │
│ ┌─────────────┬───────┼───────┼────────────┐ │
│ │ │ │ │ │ │
│ │ ┌────▼───────▼───────▼────┐ │ │
│ │ │ │ │ │
│ │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │
│ ┌───────────┐ │ │ │ Pod │ │ Pod │ │ Pod │ │ │ │
│ │ Monitoring│ │ │ └─────┘ └─────┘ └─────┘ │ │ │
│ │ & ◄─────┤ │ │ │ │
│ │ Alerting │ │ └─────┬────────────┬──────┘ │ │
│ └───────────┘ │ Scalable│search & doc│processing │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ ┌─────▼────────────▼──────┐ │ │
│ │ │ │ │ │
│ │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │
│ │ │ │ Pod │ │ Pod │ │ Pod │ │ │ │
│ │ │ └─────┘ └─────┘ └─────┘ │ │ │
│ │ │ │ │ │
│ │ └─────────────────────────┘ │ │
│ │ Scalable content nodes │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Скрапия. В настоящее время поиск
Груплер периодически работает и подает контент прямо в поисковую систему для обработки. При ползании он в настоящее время кормит около 16 статей в секунду.
Простое приложение Micronaut, написанное в Kotlin. Интерфейс между клиентами и поисковой системой, поскольку приложения VESPA не предназначены для эксплуатации в общедоступном Интернете. Он абстрагирует язык запросов, обнажаемый и упрощает фронт. Также позволяет масштабировать этот компонент самостоятельно.
Запустите Vespa в локальном контейнере Docker и разверните приложение к нему (требует Maven):
cd search-engine-app
docker run --detach --name vespa --hostname vespa-container --privileged --volume `pwd`:/apps --publish 8080:8080 vespaengine/vespa
mvn clean package
docker exec vespa bash -c '/opt/vespa/bin/vespa-deploy prepare /apps/target/application.zip &&
/opt/vespa/bin/vespa-deploy activate'
Запустите пауки (требуется Python3, PIP) и подайте в VESPA
cd crawler
python3 -m venv aunews-spider
source aunews-spider/bin/activate
pip install -r requirements.txt
python spiders.py
Запустите веб -API:
cd web-api
MICRONAUT_ENVIRONMENTS=dev ./gradlew clean run
Запустите веб-сайт (требуется установлен Angular-Cli):
cd site
ng serve
Обратите внимание, что вы можете выполнять локальный разработчик отдельных компонентов против развертываний живых K8S, даже внутренних узлов VESPA, путем перевозки порта с Kubectl.
Убедитесь, что у вас есть правильный контекст Kubectl. Создайте свой кластер:
cd search-engine-app
./scripts/create_cluster.sh
Создайте и разверните поисковую систему:
./scripts/bootstrap.sh && ./scripts/deploy.sh
Создайте и разверните пауков:
cd ../crawler
docker build -t aunews-scrapy .
docker push aunews-scrapy
kubectl apply -f deployment/scrapy.yml
Создайте и разверните веб -API:
cd ../web-api
./gradlew jibDockerBuild
docker push ausnews-web-api
kubectl apply -f deployment/web-api.yml -f deployment/service.yml
Создайте и разверните Augmenter. Установите $ Twitter_API_KEY и $ Twitter_API_SECRET с вашим Twitter Creds.
cd ../augmenter
kubectl create secret generic twitter-secrets
--from-literal=api-key=$TWITTER_API_KEY
--from-literal=api-secret=$TWITTER_API_SECRET
docker build -t aunews-augmenter .
docker push aunews-augmenter
kubectl apply -f deployment/scrapy.yml
Запустите сайт локально, установив внешнюю конечную точку в сервис Web API (либо порт, или аннотировать службу, чтобы сделать ее внешним IP)
cd ../site
ng serve
Сделанный! Посетите местный хост: 4200
Для мониторинга Prometheus/Grafana (это включает в себя статистику VESPA; показатели запросов, статистика документов и т. Д.) Убедитесь, что у вас установлен helm и:
cd monitoring
helm install -f prometheus-stack.yml prometheus-grafana prometheus-community/kube-prometheus-stack
kubectl apply -f master-podmonitor.yml