Wie auf https://www.ausnews.org zu sehen
Die Ausnews-Suche ist eine hohe Leistung von Open-Source-Suchmaschinen, die einige australische Nachrichtenseiten indizieren. Es besteht aus 5 Komponenten:
Die Suche unterstützt bekannte Benutzeranfragen wie:
covid -china : Suchen Sie nach Artikeln, die das Wort "Covid" und nicht "China" enthalten, und nicht nach "China"bylines:"Josh Taylor" google : Suchen Sie nach Artikeln mit "Google" von Josh Taylor.source:abc bushfire : Artikel von ABC.net.au mit "Bushfire" enthaltencovid source:guardian firstpubtime:>1612211170 Covid -Artikel über den nach einer bestimmten Zeit veröffentlichten Guardian.Die Web -API konstruiert Vespa Abfragen (YQL), die von der Website verwendet werden, um die obigen Abfragen zu vereinfachen. Sie können jedoch weiterhin wie oben in das Suchfeld eingeben.
Ranking ist zunächst ziemlich einfach und unkompliziert. Es verfügt über ein extrem gutes Stamm und andere sprachliche Fähigkeiten und verwendet den BM-25-Algorithmus in Kombination mit Artikel "Frische" für die Rangliste. Dies kann im Laufe der Zeit verbessert werden, aber das Ziel ist es, Nachrichtenartikel über Eigenschaften zu bewerten, die nicht einfach abgeschrieben werden können.
Die Rangliste der "Top -Nachrichten" berücksichtigt die veröffentlichte Zeit und die Aktivitäten in den sozialen Medien. Die Artikel sind durch Relevanz bei der Dokumentverarbeitung verknüpft und dann in den Top -Nachrichtenergebnissen gruppiert. Dies ähnelt dem Klicken auf "verwandt" in einer Geschichte - ist aber strenger und relevant.
Die Rangliste von "Top -Artikeln" berücksichtigt auch soziale Medien, aber pro Artikeln - nicht pro Gruppe relevanter Artikel.
Die AusNews -Suche kann bei nur zwei Vespa -Containern und drei Inhaltsknoten mit einem ziemlich begrenzten Datensatz (~ 10.000 Artikel) über 1400 Abfragen/Sekunden verarbeiten. Mittlere Rücklaufquote von Vespa unter 10 ms . Dies ist mit fast ohne Abstimmung - die Leistung kann sicherlich verbessert werden. Es ist unwahrscheinlich, dass die Leistung von der Skala betroffen ist.

Vespa unterstützt Live -Skalierung und automatisches Neuausgleich von Inhalten. Dies bedeutet, dass Container- oder Inhaltsknoten nach Bedarf einfach nach oben/unten skaliert werden können, ohne Ausfallzeiten oder manuelle Sharding -Änderungen. Um Vespa -Knoten zu skalieren, ändern Sie einfach die Zahlen in Bootstrap.sh, führen Sie es aus und führen Sie die Bereitstellung aus. Hier ist ein Screenshot des Dokumentknotens, der beim Hinzufügen von zwei zusätzlichen Knoten ausbaut:

Die Web -API wird auch unabhängig ausgeführt und ist so konzipiert, dass sie auf kleineren Knoten ausgeführt werden.
Beispiel ab -Ausgang:
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)
Die gesamte Anwendung wird in Kubernetes bereitgestellt und der Satz von Anwendungen und die Bereitstellung können reproduziert werden.
┌─────────┐ ┌─────────────┐
│ 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 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Ein Scrapy Crawler. Derzeit Suchanfragen
Der Crawler läuft regelmäßig und füttert den Inhalt direkt in die Suchmaschine, um die Verarbeitung zu verarbeiten. Beim Kriechen füttert es derzeit etwa 16 Artikel pro Sekunde.
Eine einfache Mikronaut -App, die in Kotlin geschrieben wurde. Eine Schnittstelle zwischen Clients und Suchmaschine, da Vespa -Anwendungen nicht so ausgelegt sind, dass sie dem öffentlichen Internet ausgesetzt sind. Es wird die ausgesetzte Abfragesprache abstrahiert und vereinfacht das Frontend. Ermöglicht diese Komponente auch selbst.
Führen Sie Vespa im lokalen Docker -Container aus und stellen Sie die Anwendung dazu ein (erfordert 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'
Führen Sie die Spinnen aus (benötigen Python3, PIP) und füttern Sie nach Vespa
cd crawler
python3 -m venv aunews-spider
source aunews-spider/bin/activate
pip install -r requirements.txt
python spiders.py
Führen Sie die Web -API aus:
cd web-api
MICRONAUT_ENVIRONMENTS=dev ./gradlew clean run
Führen Sie die Website aus (erfordert Angular-Cli installiert):
cd site
ng serve
Beachten Sie, dass Sie lokale Entwicklungen einzelner Komponenten mit Live-K8s-Bereitstellungen, sogar den internen Vespa-Knoten, durch Portwaren mit Kubectl durchführen können.
Stellen Sie sicher, dass Sie einen Kubectl -Kontext korrekt haben. Erstellen Sie Ihren Cluster:
cd search-engine-app
./scripts/create_cluster.sh
Erstellen und Bereitstellen der Suchmaschine:
./scripts/bootstrap.sh && ./scripts/deploy.sh
Erstellen und Bereitstellen der Spinnen:
cd ../crawler
docker build -t aunews-scrapy .
docker push aunews-scrapy
kubectl apply -f deployment/scrapy.yml
Erstellen und Bereitstellen der Web -API:
cd ../web-api
./gradlew jibDockerBuild
docker push ausnews-web-api
kubectl apply -f deployment/web-api.yml -f deployment/service.yml
Erstellen und bereitstellen Sie den Augmenter. Setzen Sie $ Twitter_API_KEY und $ Twitter_API_SECRET mit Ihren 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
Führen Sie die Website lokal aus und setzen Sie den externen Endpunkt in den Service der Web-API (entweder Port-Forward, oder geben Sie den Dienst an, um ihn zu einer externen IP zu machen).
cd ../site
ng serve
Erledigt! Besuchen Sie Localhost: 4200
Für die Prometheus/Grafana -Überwachung (dies umfasst Vespa -Statistiken; Abfrageraten, Dokumentenstatistiken usw.) stellen Sie sicher, dass Sie helm installiert haben und:
cd monitoring
helm install -f prometheus-stack.yml prometheus-grafana prometheus-community/kube-prometheus-stack
kubectl apply -f master-podmonitor.yml