เท่าที่เห็นใน https://www.ausnews.org
AusNews Search เป็นประสิทธิภาพสูงการจัดทำดัชนีเครื่องมือค้นหาโอเพ่นซอร์สโอเพ่นซอร์สการจัดทำดัชนีเว็บไซต์ข่าวของออสเตรเลีย ประกอบด้วย 5 องค์ประกอบ:
การค้นหาสนับสนุนการสืบค้นผู้ใช้ที่คุ้นเคยเช่น:
covid -china : ค้นหาบทความที่มีคำว่า "Covid" และไม่ใช่ "จีน"bylines:"Josh Taylor" google : ค้นหาบทความด้วย "Google" เขียนโดย Josh Taylorsource:abc bushfire : บทความจาก abc.net.au ที่มี "bushfire"covid source:guardian firstpubtime:>1612211170 บทความ COVID เกี่ยวกับ The Guardian ที่เผยแพร่หลังจากช่วงเวลาหนึ่งWeb API สร้าง Vespa Queries (YQL) ตามที่ใช้โดยเว็บไซต์เพื่อให้การสืบค้นข้างต้นง่ายขึ้น แต่คุณยังสามารถพิมพ์ได้ตามด้านบนลงในฟิลด์การค้นหา
การจัดอันดับค่อนข้างง่ายและตรงไปตรงมาเริ่มต้นด้วย มันมีความสำเร็จที่ดีมากและความสามารถทางภาษาอื่น ๆ และใช้อัลกอริทึม BM-25 รวมกับบทความ "Frishness" สำหรับการจัดอันดับ สิ่งนี้สามารถปรับปรุงได้เมื่อเวลาผ่านไป แต่เป้าหมายที่นี่คือการจัดอันดับบทความข่าวเกี่ยวกับคุณสมบัติที่ไม่สามารถเป็นเพียงแค่ gamed
การจัดอันดับของ "ข่าวสูงสุด" คำนึงถึงเวลาที่เผยแพร่และกิจกรรมโซเชียลมีเดีย บทความเชื่อมโยงกันด้วยความเกี่ยวข้องเมื่อทำการประมวลผลเอกสารแล้วจัดกลุ่มในผลลัพธ์ข่าวสูงสุด สิ่งนี้คล้ายกับการคลิก "เกี่ยวข้อง" ในเรื่อง - แต่มีความเข้มงวดตรงเวลาและความเกี่ยวข้อง
การจัดอันดับของ "บทความยอดนิยม" ยังคำนึงถึงโซเชียลมีเดีย แต่ต่อบทความ - ไม่ใช่ต่อกลุ่มของบทความที่เกี่ยวข้อง
การค้นหา AusNews สามารถจัดการแบบสอบถาม 1400+/วินาทีในคอนเทนเนอร์ Vespa เพียงสองตัวและโหนดเนื้อหาสามโหนดพร้อมชุดข้อมูลที่ค่อนข้าง จำกัด (บทความ ~ 10,000 บทความ) อัตราการตอบกลับเฉลี่ยจาก Vespa ต่ำกว่า 10ms นี่คือแทบไม่มีการปรับแต่ง - ประสิทธิภาพสามารถปรับปรุงได้อย่างแน่นอน ประสิทธิภาพไม่น่าจะได้รับผลกระทบจากขนาด

Vespa รองรับการปรับขนาดสดและการปรับสมดุลเนื้อหาโดยอัตโนมัติ ซึ่งหมายความว่าคอนเทนเนอร์หรือโหนดเนื้อหาสามารถปรับขนาดขึ้น/ลงตามที่ต้องการโดยไม่ต้องหยุดทำงานหรือเปลี่ยนแปลงการให้คำปรึกษาด้วยตนเอง หากต้องการปรับสเกลโหนด Vespa เพียงแค่เปลี่ยนตัวเลขใน bootstrap.sh ให้เรียกใช้และเรียกใช้ deploy.sh อีกครั้ง นี่คือภาพหน้าจอของการปรับสมดุลโหนดเอกสารเมื่อเพิ่มสองโหนดพิเศษ:

Web API ยังทำงานอย่างอิสระและได้รับการออกแบบให้ทำงานบนโหนดขนาดเล็ก
ตัวอย่าง ab Output:
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 ในคอนเทนเนอร์ Local 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
โปรดทราบว่าคุณสามารถทำ dev ท้องถิ่นของแต่ละองค์ประกอบกับการปรับใช้ 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
สร้างและปรับใช้ Web 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 ของคุณ
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
เสร็จแล้ว! เยี่ยมชม LocalHost: 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