كما رأينا على https://www.ausnews.org
يعد Ausnews Search بمثابة محرك بحث عالي الأداء ومصدر يفهرس بعض مواقع الأخبار الأسترالية. يتكون من 5 مكونات:
يدعم البحث استفسارات المستخدم المألوفة مثل:
covid -china : يبحث عن مقالات تحتوي على كلمة "covid" وليس "الصين"bylines:"Josh Taylor" google : يبحث عن مقالات مع "Google" كتبها Josh Taylor.source:abc bushfire : مقالات من Abc.net.au تحتوي على "حرائق بوش"covid source:guardian firstpubtime:>1612211170 مقالات Covid على الجارديان المنشورة بعد وقت معين.تقوم واجهة برمجة تطبيقات الويب بإنشاء استعلامات VESPA (YQL) كما هو مستخدم في الموقع ، لجعل الاستعلامات أعلاه أسهل ، ولكن لا يزال بإمكانك الكتابة على النحو الوارد أعلاه في حقل البحث.
الترتيب بسيط إلى حد ما ومباشرة لتبدأ. إنه ذو قدرات جيدة للغاية وقدرات لغوية أخرى ، وتستخدم خوارزمية BM-25 جنبًا إلى جنب مع مقالة "نضارة" للترتيب. يمكن تحسين ذلك مع مرور الوقت ، ولكن الهدف هنا هو تصنيف المقالات الإخبارية حول العقارات التي لا يمكن أن تكون ببساطة التمسك.
يأخذ تصنيف "Top News" في الاعتبار الوقت المنشور ، ونشاط وسائل التواصل الاجتماعي. يتم ربط المقالات حسب الأهمية عند إجراء معالجة المستندات ، ثم تم تجميعها في نتائج الأخبار العليا. هذا مشابه للنقر على "ذات صلة" على قصة - ولكنه أكثر صرامة في الوقت المحدد والأهمية.
يأخذ تصنيف "أفضل المقالات" في الاعتبار وسائل التواصل الاجتماعي ، ولكن لكل مجموعة - ليس لكل مجموعة من المقالات ذات الصلة.
يمكن لـ AusNews Search التعامل مع 1400+ استعلامات/ثانية على حاوية VESPA فقط وثلاثة عقد محتوى ، مع مجموعة بيانات محدودة إلى حد ما (حوالي 10،000 مقالة). متوسط معدل الاستجابة من VESPA تحت 10 مللي ثانية . هذا مع عدم وجود ضبط تقريبًا - يمكن تحسين الأداء بالتأكيد. من غير المرجح أن يتأثر الأداء بالمقياس.

يدعم VESPA التحجيم المباشر وإعادة التوازن التلقائي للمحتوى. هذا يعني أنه يمكن ببساطة تحجيم/انخفاض العقد الحاوية أو المحتوى كما هو مطلوب ، دون التوقف عن العمل أو التغييرات اليدوية. لتوسيع نطاق عقد Vespa ، ما عليك سوى تغيير الأرقام في bootstrap.sh ، وقم بتشغيله وقم بتشغيل Deploy.sh مرة أخرى. فيما يلي لقطة شاشة من إعادة التوازن في عقدة المستند عند إضافة عقدين إضافيين:

تعمل واجهة برمجة تطبيقات الويب أيضًا بشكل مستقل وهي مصممة لتشغيلها على العقد الأصغر.
عينة 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 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
زاحف SCRAPY. عمليات البحث حاليا
يعمل الزاحف بشكل دوري ويغذي المحتوى مباشرة في محرك البحث للمعالجة. عند الزحف ، يغذي حاليًا حوالي 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
قم بتشغيل واجهة برمجة تطبيقات الويب:
cd web-api
MICRONAUT_ENVIRONMENTS=dev ./gradlew clean run
قم بتشغيل موقع الويب (يتطلب تثبيت Angular-Cli):
cd site
ng serve
لاحظ أنه يمكنك القيام بـ DEV المحلي للمكونات الفردية مقابل عمليات نشر K8S LIVE ، وحتى عقد 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
بناء ونشر واجهة برمجة تطبيقات الويب:
cd ../web-api
./gradlew jibDockerBuild
docker push ausnews-web-api
kubectl apply -f deployment/web-api.yml -f deployment/service.yml
بناء ونشر المعزز. اضبط $ 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
قم بتشغيل الموقع محليًا ، وقم بتعيين نقطة النهاية الخارجية لخدمة واجهة برمجة تطبيقات الويب (إما المنفذ إلى الأمام ، أو توضيح الخدمة لجعلها عنوان 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