Changes

Jump to navigation Jump to search
Workload tests
Line 45: Line 45:  
=== Frontend ===
 
=== Frontend ===
 
For its first version, at least (it could change), the whole frontend will be developed in Javascript.
 
For its first version, at least (it could change), the whole frontend will be developed in Javascript.
 +
 +
== Workload test ==
 +
As we said earlier, FastAPI is known to be very fast. But we need to have a few metrics to verify if it will be able to scale.
 +
 +
Folksonomy Engine won't be used for each product of the database. As of today (2021-10), Open Food Facts has a mean of 0.77 requests per second, with pikes up to 100 req/s. The usage of Folksonomy Engine will be mechanically lower than Open Food Facts requests.
 +
 +
=== Tests ===
 +
If not specified, all our tests are made on a Raspberry Pi 4: because of the very low price of it, hardware -- and tests -- are easily reproducible.
 +
 +
Testing 10,000 queries to <code>/ping</code> (includes a database request) give the following results:
 +
$ ab -n 10000 -c 10 <nowiki>http://192.168.0.42:8000/ping</nowiki>
 +
 +
Requests per second:    307.11 [#/sec] (mean)
 +
Time per request:      32.562 [ms] (mean)
 +
Publishing 2,000 new key/value pairs on 2,000 different products give the following result:
 +
$ time ./fe_test.sh
 +
 +
real 0m25,006s
 +
user 0m30,612s
 +
sys 0m21,014ssh
 +
corresponding to 80 requests per second. We obtained similar results for 20,000.
 +
 +
Dealing with the fact that our production servers are at least 10 or 20 times more powerfull than a Raspeberry Pi, we can conclude that Folksonomy Engine is correctly build to scale up.
 +
 +
=== Key/values injection script ===
 +
 +
<pre>
 +
#!/usr/bin/bash
 +
 +
# This script is creating NB number of key/value pairs in Folksonomy Engine API
 +
# DO NOT USE ON PRODUCTION
 +
 +
 +
# Number of products to be created
 +
NB=2000
 +
# Server URL
 +
S='http://192.168.0.42:8000'
 +
# User name
 +
U='charlesnepote'
 +
# Password
 +
read -p "OFF password: " PASS
 +
#PASS=''
 +
 +
 +
TOKEN=`curl -X 'POST' \
 +
  "$S/auth" \
 +
  -H 'accept: application/json' \
 +
  -H 'Content-Type: application/x-www-form-urlencoded' \
 +
  -d "grant_type=&username=$U&password=$PASS&scope=&client_id=&client_secret=" \
 +
  | jq -r '.access_token'`
 +
echo "Token: $TOKEN"
 +
 +
counter=1
 +
while [ $counter -le $NB ]
 +
do
 +
echo $counter
 +
((counter++))
 +
# Create a random key and value
 +
# https://stackoverflow.com/questions/32484504/using-random-to-generate-a-random-string-in-bash
 +
P=`LC_ALL=C tr -dc 0-9 </dev/urandom | head -c 13`
 +
echo "P: "$P
 +
K=`LC_ALL=C tr -dc a-z_ </dev/urandom | head -c 30`
 +
echo "K: "$K
 +
V=`LC_ALL=C tr -dc a-z0-9_ </dev/urandom | head -c 30`
 +
echo "V: "$V
 +
 +
curl -X 'POST' \
 +
  "$S/product" \
 +
  -H 'accept: application/json' \
 +
  -H "Authorization: Bearer $TOKEN" \
 +
  -H 'Content-Type: application/json' \
 +
  -d '{
 +
  "product": "'$P'",
 +
  "k": "'$K'",
 +
  "v": "'$V'",
 +
  "owner": "",
 +
  "version": 1,
 +
  "editor": "'$U'",
 +
  "last_edit": "2021-10-19T07:57:47.518Z",
 +
  "comment": "Test"
 +
}' &
 +
 +
echo ""
 +
done
 +
 +
# wait for the end of all the foreground calls
 +
wait
 +
</pre>
 +
 
[[Category:Folksonomy Engine]]
 
[[Category:Folksonomy Engine]]

Navigation menu