Analitikai szolgáltatás API
Sziasztok!
A következő problémában szeretném a tanácsotokat kérni:
fejlesztek egy analitikai szolgáltatást, amihez tartozik egy API. Ehhez az API-hoz szeretnék egy PHP library-t írni, ami minél egyszerűbben beépíthető más weboldalakba. A lényeg, hogy szerver oldalon ha történik valamilyen esemény (regisztráció, belépés, stb), akkor azt valamilyen módon el tudjam küldeni az analitikai szolgáltatásnak. Például regisztrációnál a kódba egy ilyet illesztünk:
A háttérben CURL-el hívom az API megfelelő metódusát.
A gondom ezzel az, hogy ha nagy a latency, az analitikai szolgáltatás szervere lassan válaszol, netalántál nem válaszol, akkor az eléggé meg tudja fogni az eredeti oldalt. Olyan megoldást próbálok keresni, ami minél egyszerűbb és akár egy shared hosting-os oldalba is beilleszthető, tehát nem igényel semmilyen különleges PHP extension-t, fork-olást, trükközést, stb.
Valaki találkozott már ilyen problémával, esetleg van javaslata a megoldásra?
Előre is köszönök minden segítséget!
■ A következő problémában szeretném a tanácsotokat kérni:
fejlesztek egy analitikai szolgáltatást, amihez tartozik egy API. Ehhez az API-hoz szeretnék egy PHP library-t írni, ami minél egyszerűbben beépíthető más weboldalakba. A lényeg, hogy szerver oldalon ha történik valamilyen esemény (regisztráció, belépés, stb), akkor azt valamilyen módon el tudjam küldeni az analitikai szolgáltatásnak. Például regisztrációnál a kódba egy ilyet illesztünk:
Event::create(
'registration',
'test##kukac##example.com'
);
A gondom ezzel az, hogy ha nagy a latency, az analitikai szolgáltatás szervere lassan válaszol, netalántál nem válaszol, akkor az eléggé meg tudja fogni az eredeti oldalt. Olyan megoldást próbálok keresni, ami minél egyszerűbb és akár egy shared hosting-os oldalba is beilleszthető, tehát nem igényel semmilyen különleges PHP extension-t, fork-olást, trükközést, stb.
Valaki találkozott már ilyen problémával, esetleg van javaslata a megoldásra?
Előre is köszönök minden segítséget!
Szia,
https://segment.io/blog/how-to-make-async-requests-in-php/
Röviden: nincs egyszerű
Hosszabban: Azt meg tudod tenni, hogy nem törődsz a válasszal, tehát elküldöd az eseményt, aztán nem is nagyon érdekel mi történik (nem fogod tudni, sikerült-e egyáltalán: ezzel spórolhatsz a legtöbbet). Ettől még minden hívás blokkolódni fog (fsockopen, fwrite). A stream_set_blocking() nem igazán nyújt semmit, hiszen lényegében csak írni akarsz, ezt pedig ha épp nincs tele a buffer, akkor meg tudod tenni, azaz sebességben nem nyersz semmit. Az igazán szép megoldás valamilyen message broker használata (pl. RabbitMQ), plusz egy háttérfeldolgozó üzembe állítása (ha nagyon ragaszkodsz a PHP-hez, akkor ez lehet valamilyen php-s cronjob is).
Abba érdemes beletörődni, hogy mindenképpen overheadet jelent egy ilyen szolgáltatás.
Amit érdemes még megnézni, hogy tud-e olyat a PHP (én nem tudom, viszonylag régen fogalkoztam PHP-val), hogy a kérés kiszolgálása után még szöszmötöl egy kicsit: ilyenkor esetleg még el tudod kapni a szerver válaszát, a felhasználó ezzel a késleltetéssel már nem fog találkozni.
Igazából a válasz nem fontos,
Felhasználók
Véleményem szerint ez egy igen jó kombináció, ha a project szempontjából nem volna showstopper az, hogy felhasználóidnak külön kell valamilyen daemont futtatni.
Shared hosting környezete válogatja, de ha cronjobok elérhetőek, létre lehet hozatni a library számára valamilyen lokális adatbázist ahol az események gyűlhetnek és telepítési instrukciók részévé tenni egy cronjobot ami majd elküldi őket a távoli gépre (feltéve, hogy nem real-time monitoring a cél).
Ha cron jobban se lehet bízni meg lehet próbálni simán kimenethez hozzácsapni 0x0 -s képet (output buffering, shutdown function) és http get paraméterei, vagy url részeként minden requestel kicsempészni az adatokat (nyilván valami shared-secrettel titkosítva legalább esetleg több lépcsőben, ha nem fér el egy menetben), így a felhasználód-felhasználóira hárítani az adatok célba juttatását (legtöbb ad szerver, vagy google analytics eventek hasonlóan működnek egyébként).
Nyilván ez valamivel bizonytalanabbá teszi adatok megérkezését, cserébe nem elávrás még a curl extension jelenléte sem a hostingon (én többször futottam bele abba, hogy nem volt elérhető, mert nem része default debian "libapache2-mod-php5" csomagnak) és szintén asszinkron működést biztosít.
Én mindenképp megpróbálnám elkerülni, hogy a konkrét felhasználóid-felhasználóinak requestjeibe valamilyen külső szolgáltatáson blokkoló hívásokat kelljen végezni mert ilyet üzemeltetni utána igencsak hálátlan feladat, de minden azon múlik mennyire biztosan kell célba érniük ezeknek az információknak.
Igen, ezeken már én is törtem
Ha a biztonság fontos, azt
Ez gyakorlatilag bármilyen szimmetrikus/asszimetrikus kulcsú titkosítással megoldható.
Ami itt problémás lehet, hogy AJAX kéréseket nem lehet csak úgy indítani bárhova, bármilyen böngészővel, a GET kérésekbe pedig esetleg nem fér bele egy nagyobb adatcsomag.
Nem kell túlbonyolítani, hiszen a kliens feladata (elküldeni az adatokat a szervernek) nagyon egyszerű, pár soros script elintézi az egészet.
Ez gyakorlatilag bármilyen
Húú, erről tudnál írni kicsit bővebben? Illetve, hogy merre érdemes nézelődnöm?
AJAX kérést nem, de JSONP-vel megoldható: http://weblabor.hu/cikkek/jsonp
Egyébként viszonylag kis adatcsomagok lesznek, az egész belefér maximum 100 karakterbe.
Nem nagyon fogalkoztam még
http://www.php.net/manual/en/function.mcrypt-encrypt.php
Minden kliens(szerver) kap egy saját kulcsot, ezzel titkosítja az adatokat, a felhasználó a kapott adatokat továbbítja az (analitikai) szerverre, ott pedig valamilyen azonosító (pl kliens-szerver id) alapján kikeresi a megfelelő kulcsot, amivel dekódolni tudja az adatokat. Kb ennyi.
nodejs
Nem érzem jogosnak :D, a cél
Hát hajrá :D Végülis dupla
Ha minél több platformon kell