Seperti yang terlihat di https://www.ausnews.org
Pencarian AUSNews adalah mesin pencari sumber-open-source yang berkinerja tinggi yang mengindeks beberapa situs berita Australia. Ini terdiri dari 5 komponen:
Pencarian mendukung pertanyaan pengguna yang akrab seperti:
covid -china : Mencari artikel yang berisi kata "covid" dan bukan "Cina"bylines:"Josh Taylor" google : Mencari artikel dengan "Google" yang ditulis oleh Josh Taylor.source:abc bushfire : Artikel dari ABC.NET.AU yang berisi "Bushfire"covid source:guardian firstpubtime:>1612211170 Artikel Covid di The Guardian yang diterbitkan setelah waktu tertentu.API Web membangun kueri Vespa (YQL) seperti yang digunakan oleh situs, untuk membuat kueri di atas lebih mudah, tetapi Anda masih dapat mengetik seperti di atas ke bidang pencarian.
Peringkat cukup sederhana dan mudah untuk memulai. Ini memiliki stemming yang sangat baik dan kemampuan linguistik lainnya, dan menggunakan algoritma BM-25 yang dikombinasikan dengan artikel "kesegaran" untuk peringkat. Ini dapat ditingkatkan dari waktu ke waktu, tetapi tujuannya di sini adalah untuk memberi peringkat artikel berita tentang properti yang tidak bisa begitu saja.
Peringkat "berita teratas" memperhitungkan waktu yang diterbitkan, dan aktivitas media sosial. Artikel ditautkan oleh relevansi saat melakukan pemrosesan dokumen, dan kemudian dikelompokkan dalam hasil berita teratas. Ini mirip dengan mengklik "terkait" pada sebuah cerita - tetapi lebih ketat tepat waktu dan relevansi.
Peringkat "artikel teratas" juga memperhitungkan media sosial, tetapi per -artikel - bukan per kelompok artikel yang relevan.
Pencarian AusNews dapat menangani 1400+ kueri/kedua hanya pada dua wadah Vespa dan tiga node konten, dengan dataset yang cukup terbatas (~ 10.000 artikel). Tingkat respons rata -rata dari Vespa di bawah 10 ms . Ini dengan hampir tidak ada tuning - kinerja tentu dapat ditingkatkan. Kinerja tidak mungkin terpengaruh dengan skala.

Vespa mendukung penskalaan langsung dan penyeimbangan kembali konten otomatis. Ini berarti bahwa node kontainer atau konten dapat dengan mudah ditingkatkan/bawah sesuai kebutuhan, tanpa downtime atau perubahan cekot manual. Untuk mengukur node Vespa, cukup ubah angka di bootstrap.sh, jalankan dan jalankan deploy.sh lagi. Berikut tangkapan layar penyeimbangan ulang simpul dokumen saat menambahkan dua node tambahan:

API Web juga berjalan secara mandiri dan dirancang untuk berjalan pada node yang lebih kecil.
Contoh output 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)
Seluruh aplikasi digunakan ke Kubernetes dan serangkaian aplikasi dan penyebaran dapat direproduksi.
┌─────────┐ ┌─────────────┐
│ 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 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Perayap gesek. Saat ini pencarian
Perayap berjalan secara berkala dan memberi makan konten langsung ke mesin pencari untuk diproses. Saat merangkak, saat ini memberi makan sekitar 16 artikel per detik.
Aplikasi Micronaut sederhana yang ditulis di Kotlin. Antarmuka antara klien dan mesin pencari, karena aplikasi VESPA tidak dirancang untuk terpapar ke internet publik. Itu mengabstraksi bahasa kueri yang diekspos dan menyederhanakan frontend. Juga memungkinkan komponen ini untuk ditingkatkan sendiri.
Jalankan Vespa di wadah Docker lokal dan sebarkan aplikasi ke sana (membutuhkan 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'
Jalankan laba -laba (membutuhkan python3, pip) dan feed ke vespa
cd crawler
python3 -m venv aunews-spider
source aunews-spider/bin/activate
pip install -r requirements.txt
python spiders.py
Jalankan API Web:
cd web-api
MICRONAUT_ENVIRONMENTS=dev ./gradlew clean run
Jalankan Situs Web (Perlu diinstal Angular-CLI):
cd site
ng serve
Perhatikan bahwa Anda dapat melakukan pengembang lokal komponen individu terhadap penyebaran Live K8S, bahkan node vespa internal, dengan penyerang port dengan Kubectl.
Pastikan Anda memiliki konteks Kubectl yang benar. Buat cluster Anda:
cd search-engine-app
./scripts/create_cluster.sh
Bangun & gunakan mesin pencari:
./scripts/bootstrap.sh && ./scripts/deploy.sh
Bangun & gunakan laba -laba:
cd ../crawler
docker build -t aunews-scrapy .
docker push aunews-scrapy
kubectl apply -f deployment/scrapy.yml
Membangun & Menyebarkan API Web:
cd ../web-api
./gradlew jibDockerBuild
docker push ausnews-web-api
kubectl apply -f deployment/web-api.yml -f deployment/service.yml
Bangun & gunakan augmenter. Setel $ twitter_api_key dan $ twitter_api_secret dengan kredo Twitter Anda.
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
Jalankan situs secara lokal, mengatur titik akhir eksternal ke layanan Web API (baik port-forward, atau memberi anotasi layanan untuk menjadikannya IP eksternal)
cd ../site
ng serve
Selesai! Kunjungi LocalHost: 4200
Untuk pemantauan Prometheus/Grafana (ini termasuk statistik VESPA; tarif kueri, statistik dokumen dll), pastikan Anda memiliki helm terpasang dan:
cd monitoring
helm install -f prometheus-stack.yml prometheus-grafana prometheus-community/kube-prometheus-stack
kubectl apply -f master-podmonitor.yml