Esse é um projeto que tem o principal objetivo validar as configurações da biblioteca do sqlcommenter-hyperf. Além disso, alguns testes de performance são feitos dentro desse projeto para verificarmos o desempenho dessa ferramenta.
Para configurar o projeto na sua máquina, siga as etapas abaixo:
Execute o comando abaixo para iniciar o container:
make up
Execute o comando abaixo para acessar o container:
make php
Execute os comandos abaixo para instalar as dependências e rodar os testes:
composer install
php bin/hyperf.php migrate
composer test
Siga as instruções abaixo para testar esse projeto dentro da Google Cloud.
Primeiro, defina a variável de ambiente com o ID do seu projeto na Google Cloud:
export DEVSHELL_PROJECT_ID=id-do-projeto
Crie uma instância do Cloud SQL com as seguintes configurações:
gcloud sql instances create sample-sqlcommenter-database \
--project=$DEVSHELL_PROJECT_ID \
--database-version=MYSQL_8_0_31 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--activation-policy=ALWAYS \
--availability-type=ZONAL \
--storage-size=10GB \
--storage-type=SSD \
--storage-auto-increase \
--no-backup \
--maintenance-window-day=SUN \
--maintenance-window-hour=13 \
--maintenance-release-channel=preview \
--network=projects/$DEVSHELL_PROJECT_ID/global/networks/default \
--no-assign-ip \
--insights-config-query-insights-enabled \
--insights-config-record-application-tags \
--insights-config-record-client-address \
--insights-config-query-string-length=1024 \
--no-deletion-protection \
--edition=ENTERPRISE
Copie as configurações da conta de serviço para uma variável de ambiente:
CLOUD_SQL_SA_NAME=$(gcloud sql instances describe sample-sqlcommenter-database --project=$DEVSHELL_PROJECT_ID --format="value(serviceAccountEmailAddress)")
Faça a configuração do IAM para o Cloud SQL no Bucket:
gsutil iam ch serviceAccount:${CLOUD_SQL_SA_NAME}:roles/storage.objectAdmin gs://$DEVSHELL_PROJECT_ID
O banco de dados completo utilizado para a realização dos testes pode ser encontrado no site oficial do MySQL:
Importe o banco de dados para a instância criada:
gcloud sql import sql sample-sqlcommenter-database gs://$DEVSHELL_PROJECT_ID/sample-sqlcommenter-database.sql
Crie um usuário para o banco de dados:
gcloud sql users create demo \
--instance=sample-sqlcommenter-database \
--password=secret
Obtenha o endereço privado da instância do banco de dados e defina as variáveis de ambiente necessárias:
export DB_HOST=$(gcloud sql instances list --filter=name:sample-sqlcommenter-database --format="value(PRIVATE_ADDRESS)")
export DB_DATABASE=employees
export DB_USERNAME=demo
export DB_PASSWORD=secret
Implante sua aplicação no Cloud Run com as seguintes configurações:
gcloud run deploy sample-sqlcommenter-hyperf-poc \
--image=reinanhs/sample-sqlcommenter-hyperf-poc:benchmarking \
--allow-unauthenticated \
--memory=1Gi \
--concurrency=1000 \
--min-instances=1 \
--max-instances=1 \
--set-env-vars=DB_HOST=$DB_HOST \
--set-env-vars=DB_DATABASE=$DB_DATABASE \
--set-env-vars=DB_USERNAME=$DB_USERNAME \
--set-env-vars=DB_PASSWORD=$DB_PASSWORD \
--set-env-vars=SQLCOMMENTER_ENABLE=1 \
--set-env-vars=GCP_PROJECT_ID=$DEVSHELL_PROJECT_ID \
--no-cpu-throttling \
--region=us-central1 \
--network=default \
--subnet=default \
--vpc-egress=private-ranges-only \
--project=$DEVSHELL_PROJECT_ID
Execute o comando abaixo para exportar o endereço do aplicativo de teste:
export APP_URL=$(gcloud run services describe sample-sqlcommenter-hyperf-poc --platform managed --region=us-central1 --format 'value(status.url)')
Para testar a aplicação, execute o comando abaixo e obtenha a URL do serviço:
curl "${APP_URL}/"
curl "${APP_URL}/employees"
curl "${APP_URL}/callable"
k6 run -e APP_HOSTNAME=${APP_URL} .k6/try-script.js
k6 run -e APP_HOSTNAME=${APP_URL} .k6/performance-script.js
Para deletar os serviços e a instância do banco de dados criados, execute os seguintes comandos:
gcloud run services delete sample-sqlcommenter-hyperf-poc --region=us-central1
gcloud sql instances delete sample-sqlcommenter-database
gsutil iam ch -d serviceAccount:${CLOUD_SQL_SA_NAME}:roles/storage.objectAdmin gs://$DEVSHELL_PROJECT_ID