Como visto em https://www.ausnews.org
A Ausnews Search é um mecanismo de busca de alto desempenho e de código aberto indexando alguns sites de notícias australianos. Consiste em 5 componentes:
A pesquisa suporta consultas familiares de usuário, como:
covid -china : Pesquisa por artigos que contêm a palavra "covid" e não "China"bylines:"Josh Taylor" google : pesquisa artigos com "Google" escrito por Josh Taylor.source:abc bushfire : Artigos de abc.net.au contendo "Bushfire"covid source:guardian firstpubtime:>1612211170 Artigos da CoVID no Guardian publicados após um certo tempo.A API da Web constrói as consultas VESPA (YQL), conforme usado pelo site, para facilitar as consultas acima, mas você ainda pode digitar como acima no campo de pesquisa.
A classificação é bastante simples e direta para começar. Possui recursos extremamente bons e outros recursos linguísticos e usa o algoritmo BM-25 combinado com o artigo "Freshness" para a classificação. Isso pode ser aprimorado ao longo do tempo, mas o objetivo aqui é classificar artigos de notícias sobre propriedades que não podem ser simplesmente giradas.
A classificação das "principais notícias" leva em consideração o horário publicado e a atividade de mídia social. Os artigos estão ligados pela relevância ao fazer o processamento de documentos e, em seguida, agrupados nos principais resultados de notícias. Isso é semelhante ao clicar "relacionado" em uma história - mas é mais rigoroso no tempo e relevância.
A classificação dos "principais artigos" também leva em consideração as mídias sociais, mas por artículos - não por grupo de artigos relevantes.
A pesquisa da AusNews pode lidar com mais de 1400 consultas/segundo em apenas dois contêineres da Vespa e três nós de conteúdo, com um conjunto de dados bastante limitado (~ 10.000 artigos). Taxa de resposta média da VESPA abaixo de 10ms . Isso é quase sem ajuste - o desempenho certamente pode ser melhorado. É improvável que o desempenho seja afetado com a escala.

A Vespa suporta escala ao vivo e reequilíbrio automático de conteúdo. Isso significa que os nós de contêiner ou conteúdo podem ser simplesmente dimensionados para cima/para baixo, conforme necessário, sem tempo de inatividade ou alterações manuais de sharding. Para dimensionar os nós VESPA, basta alterar os números no bootstrap.sh, executá -lo e execute o implantação.sh novamente. Aqui está uma captura de tela do reequilíbrio do nó do documento ao adicionar dois nós extras:

A API da Web também é executada de forma independente e foi projetada para ser executada em nós menores.
Amostra de saída 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)
Todo o aplicativo é implantado no Kubernetes e o conjunto de aplicativos e implantação podem ser reproduzidos.
┌─────────┐ ┌─────────────┐
│ 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 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Um rastreador de scrapy. Atualmente pesquisam
O rastreador é executado periodicamente e alimenta o conteúdo diretamente no mecanismo de pesquisa para processamento. Ao rastejar, atualmente alimenta cerca de 16 artigos por segundo.
Um aplicativo simples de micronauts escrito em Kotlin. Uma interface entre os clientes e o mecanismo de pesquisa, pois os aplicativos da Vespa não foram projetados para serem expostos à Internet pública. Abstrai a linguagem de consulta exposta e simplifica o front -end. Também permite que esse componente seja escalado por conta própria.
Execute a Vespa no contêiner local do Docker e implante o aplicativo (requer 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'
Execute as aranhas (requer python3, pip) e feed para vespa
cd crawler
python3 -m venv aunews-spider
source aunews-spider/bin/activate
pip install -r requirements.txt
python spiders.py
Execute a API da Web:
cd web-api
MICRONAUT_ENVIRONMENTS=dev ./gradlew clean run
Execute o site (requer o angular cli instalado):
cd site
ng serve
Observe que você pode fazer um desenvolvedor local de componentes individuais contra implantações ao vivo do K8S, até os nós da Vespa interna, com o avanço do KUBECTL.
Certifique -se de ter o contexto Kubectl correto. Crie seu cluster:
cd search-engine-app
./scripts/create_cluster.sh
Construa e implante o mecanismo de pesquisa:
./scripts/bootstrap.sh && ./scripts/deploy.sh
Construa e implante as aranhas:
cd ../crawler
docker build -t aunews-scrapy .
docker push aunews-scrapy
kubectl apply -f deployment/scrapy.yml
Construa e implante a API da Web:
cd ../web-api
./gradlew jibDockerBuild
docker push ausnews-web-api
kubectl apply -f deployment/web-api.yml -f deployment/service.yml
Construa e implante o aumentador. Defina $ twitter_api_key e $ twitter_api_secret com seus creds no 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
Execute o site localmente, definindo o terminal externo para o serviço da API da Web (por porta-forward ou anote o serviço para torná-lo um IP externo)
cd ../site
ng serve
Feito! Visite localhost: 4200
Para o monitoramento de Prometheus/Grafana (isso inclui estatísticas da Vespa; taxas de consulta, estatísticas de documentos etc.), verifique se você está helm e::
cd monitoring
helm install -f prometheus-stack.yml prometheus-grafana prometheus-community/kube-prometheus-stack
kubectl apply -f master-podmonitor.yml