====== Image Cloud ======
=== HOSTS & PORTS ===
new version Corpex:\\
ic00: **image-cloud.picalike.corpex-kunden.de:5000**\\
connection to the database:
psql "postgresql://image_cloud:Q%25c%21rqHLiszD%232PpS6geZ2Y%5Et5@image-cloud.picalike.corpex-kunden.de:5436/image_cloud"
[Password escaped urllib.parse.quote]
All image cloud nodes (deploy also to those hosts):\\
ic00: **image-cloud.picalike.corpex-kunden.de**\\
ic01: **v220220762212195282.goodsrv.de**\\
ic02: **v220220762212195284.supersrv.de**\\
ic03: **v220220762212195283.ultrasrv.de**\\
Old Netcup:\\
**37.221.193.171** v22019086221294614.goodsrv.de (backup node data, ic0x)\\
Unused:\\
**188.68.50.113** v22019086221295244.supersrv.de (given to marcus and wellington for experiments)\\
**46.38.233.37** v22019086221295243.yourvserver.n_e_t (DO NOT USE DNS NAME!!! DNS funktioniert nicht!!!)
Load Balancer: {{/dokuwiki/lib/images/smileys/fixme.gif|FIXME}}: unused\\
**image-cloud.lb.int.picalike.corpex-kunden.de** (hier wird port 80 an port 5000 weitergeleitet)
TCP Ports: **5000**
=== Authentication / Token ===
Since the Image cloud is used from outside corpex from now on, we use a token to ensure some level of security. Compare the projects README.
=== DEPLOYMENT ===
The build_and_deploy.sh script only works with ssh aliases to resolve the actual host name,
build_and_deploy.sh ic00
those ic0{0,1,2,3} must be added to the ssh config to work.
Furthermore, the deployer needs to have SSH access to the netcup machines.
=== ENDPOINTS ===
* /get_image
* /get_thumbnail
* /delete_image (nur cloud01)
* /fire_and_forget
* /alternative_clouds
=== V4 Cloud? ===
inzwischen auf Python V3 migriert
===== Starten =====
nohup /home/picalike/venv_image_cloud/bin/uwsgi --ini /mnt/cloud/image_cloud/image_cloud.ini &> /mnt/storage/var/log/imageCloud.log & # cloud01
===== git =====
$ git clone ssh://picalike@sg01.picalike.corpex-kunden.de/home/picalike/repositories/rakete/image_cloud.git
===== Konfigurationsdatein =====
* ''%%/mnt/storage/var/etc/image_cloud/image_cloud.ini%%''
* ''%%/mnt/storage/var/etc/image_cloud/max_downloads.json%%''
===== Ablageorte der Daten =====
== Cloud01 ==
image_storage: ''%%/mnt/cloud/images/%%'' (siehe image_cloud.ini)
sqlite_db: ''%%/mnt/cloud/icdb.sql%%'' (siehe image_cloud.ini)
log_file: ''%%/mnt/storage/var/log.imageCloud.log (siehe image_cloud.ini)%%''
== Netcup ==
image_storage: ''%%/home/picalike/pg_ic_data%%''
sqlite_db ''%%/home/picalike/data/icdb.db%%''
log_file: ?
===== check clone requests backlog =====
''%%psql -c “select count(*) from clone_requests;” “postgresql:image_cloud:Q%25c%21rqHLiszD%232PpS6geZ2Y%5Et5@image-cloud.picalike.corpex-kunden.de:5436/image_cloud” ; for host in ic01 ic02 ic03 ; do ssh $host 'psql -c “select count(*) from clone_requests;” “postgresql:image_cloud:Q%25c%21rqHLiszD%232PpS6geZ2Y%5Et5@localhost:5436/image_cloud”' ; done ; date%%'' {{/dokuwiki/lib/images/smileys/icon_exclaim.gif|:!:}} i have no idea how to format this properly
===== Experiments / Results / Knowledge Base =====
==== 2020-06-17: Image Cloud Remove Duplicates ====
Cloud01 is close to its memory limit, so maybe checking for duplicate images (with different urls) and deleting them could be helpful.
Maybe Hashing?
Hackathon-Result: the result of the hackathon was, that deduplication by md5 hash will not save a lot of space (<1%)
===== Beschreibung der Komponenten =====
==== ic_frontend ====
Stellt ''%%get_image%%'' und ''%%fire_and_forget%%'' bereit.
=== get_image ===
Nimmt per GET eine Url entgegen und liefert das Bild zurück. Cache wenn möglich, Download wenn nötig.
http://cloud01.picalike.corpex-kunden.de:5000/get_image?url=
Beispiel:
http://cloud01.picalike.corpex-kunden.de:5000/get_image?url=https%3A%2F%2Fs-media-cache-ak0.pinimg.com%2Foriginals%2F91%2Fca%2Ffc%2F91cafceef8204c3ce8375f4fde34a0e5.jpg
Weitere Parameter:
* no_image; default=false, wenn true wird kein Bild zurückgegeben (nur Download wenn nötig)
* keep_aspect_ratio; default=true
* resize_width, resize_height; bei keep_aspect_ratio=true wird bei bedarf einer der Werte angepasst, Bild nicht größer als angegeben
* force_to_size; default=false, Bild wird mittig auf weißer Fläche der Größe resize_ eingesetzt
* format_when_resize; default=jpeg (wenn nicht anders in ini konfiguriert), bei resize wird das Bild neu geschrieben, z.B. als png, jpeg, bmp, … (das was pillow schreiben kann)
* use_alternativ_clouds; default=false, falls konfiguriert in der ini, werden vor dem Download die alternativen Clouds angefragt
* only_send_if_local; default=false, sendet das Bild nur, wenn es lokal vorhanden ist, um Endlosschleifen bei alternativen zu verhindern.
Beispiele:
http://cloud01.picalike.corpex-kunden.de:5000/get_image?url=https%3A%2F%2Fs-media-cache-ak0.pinimg.com%2Foriginals%2F91%2Fca%2Ffc%2F91cafceef8204c3ce8375f4fde34a0e5.jpg&resize_width=100&resize_height=100&force_to_size=true
http://cloud01.picalike.corpex-kunden.de:5000/get_image?url=https%3A%2F%2Fs-media-cache-ak0.pinimg.com%2Foriginals%2F91%2Fca%2Ffc%2F91cafceef8204c3ce8375f4fde34a0e5.jpg&resize_width=100&resize_height=100&keep_aspect_ratio=false
=== fire_and_forget ===
Übergebe via POST eine json-Datei der Form:
{"urls": [, ...]}
Die Urls der Liste werden in den Cache geladen.
Beispiel:
curl --data-binary @.json -H "Content-type: application/json" "http://cloud01.picalike.corpex-kunden.de:5500/fire_and_forget"
==== ic_backend ====
Schreibt meta-Daten zum Bild in eine sqlite_db. Angebunden an ''%%ic_frontend:get_image%%'' via zeroMQ.
==== faf_fan ====
Managed den asyncronen Voratsdownload für ''%%ic_frontend:fire_and_forget%%''. Via ''%%max_downloads.json%%'' kann je Domain ein Maximum für parallele Downloads angegeben werden.
==== faf_worker ====
Ruft ''%%ic_frontend:get_image%%'' auf und verwirft das Bild, damit es für eine zukünfige Anfrage bereits im Cache ist.
==== fw_worker ====
Speichert das Bild auf Platte ab. Es wird eine Multipart-Message per ZeroMQ geschickt: [path, fname, file content]
===== iproxy.php =====
Visualytics/OSA is using iproxy.php to access the image cloud. It used to have its own caching layer
Visualytics iproxy.php kann auf web02 gefunden werden. Images are cached under /mnt/storage/var/www/thumbnails … image file can be found with ''%%echo -n “$size$url” | md5sum%%''. For size we found that the values ''%%200%%'' and ''%%250%%'' were used.
OSA iproxy.php kann auf osa.picalike.corpex-kunden.de gefunden werden.
===== TAGS =====
iproxy iproxy.php image cloud auth token backup balancer netcup