====== 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