Closed kristjanjansen closed 8 years ago
Ausalt öeldes ma tahaks teada, mis laadimisaeg praegusel tripil on (päringud ja üldine). Arvestades, et praegune trip on vanal drupalil siis ma arvan, et ega see tegelt süsteemi poolest väga kiire ei ole. Meie suurim murekoht hetkel minu silmis ongi frontendi laadimisaeg (pildid, skriptid, olematu apache conf) ja päringute ülesehitus.
See, mis koormab serverit rohkem (laraveli enda out of the box seda ei tee) on mysql päringud / üldine süsteemi ülesehitus. Need tuleb kompaktsemaks ajada, mõni ULME päring korda teha. Vältida ühe vaate ajal päringute kordamist. Võtta ühe päringuga välja võimalikult palju ja töödelda, kus mis kuidas alles koodis. Hakkan selle osaga peagi ise tegelema.
Võin päris kindel olla, et kui need punktid ära teha siis laadimisaeg tuleb sama või isegi parem kui trip.ee-l. Jah, tööd sellega palju.
Tõsi, kui kõik jätta nii nagu on siis serveri boostimisega kõva peavalu :) Aga alustama peaks ikkagi sealt, kus viga tekib.
Märkuseks 1: Baum pole kena asi mida kasutada, kui otsid kiirust taga Märkuseks 2: HTTPS võtab tegelt kiirust maha mitte ei too juurde (küll mitte palju jah), aga aastal 2016 on see ikka must-have :) Kui turvalisus ei mängi rolli siis otsingupositsioon võiks ikka mängida.
Paar märkust:
gulp dev
ja gulp production
siis vastavalt ilma ja koos minificationiga.Minu viga, ei teadnud et nginx server, eeldasin et apache/linux.
Kuniks png, jpeg, jpg formaadid on lubatud piltide lisamiseks tasub png ka teha. Tõsiasi muidugi see, et PNG pilti annab kõvasti väiksemaks optimeerida kui jpeg/jpg. Ehk on üldse teemaks, et jpg/jpeg algselt tehakse pngks ja seejärel pngquantist läbi? Tulemuseks ainult optimeeritud png pildid serveris.
Pngquant annab väga head tulemust PNG piltide puhul, jpegtran võtab mahtu küll maha, aga mitte märkimisväärselt. Olen varasemalt teinud katsetuse, kus 1=1 pildi olen salvestanud jpeg formaati kui ka png formaati. Järgmiseks lasknud jpeg jpegtranist läbi ja png pnquantist. Kaalukalt võitjaks jäänud png nii kvaliteedi kui ka mahu poolest.
@mikkpokk "Baum pole kena asi mida kasutada, kui otsid kiirust taga " -- on sul alternatiive?
@kristjanjansen Teen varsti alternatiivmeetodi. 1 query - töötleme array'id.
Ma enam ei nuta. Paneme kinni.
Koormus ja jõudlus
Meie populaarsus tõuseb päev-päevalt, kui pool aastat tagasi kui sai tehtud hinnangud vajalikule stackile oli meie koorumus 1-2 rps (requests per second), neist ca 80% anonüümsed kasutajad, siis praegu naeme tihedamatel tundidel 5100 rph (requests per hour). Statistiliselt teeb see küll 1.4 rps kuid peak'id v6ivad olla 10 rps ja palju rohkemgi.
Load testing
Web tools:
Command line tools
ab
siege
Vaja kirjutada juhisedCache
HTTP server cache
Vaja otsustada HTTP server cache tyyp ja teha arendus
HTTP server cache on mõeldud anonüümsete, sisselogimata kasutate jaoks (Sisseloginud kasutajate jaoks tuleb midagi juba Laravelis endas teha). Kontrollimata andmetel on enamus meie FB kampaaniate aegsest loadist anonüümsed kasutajad, st HTTP server cache on ilmselt üsna mõistlik.
Siin on mitu varianti:
Varnish cache
Meil on Laravelis Varnishi suppordiks teatud töö juba tehtud :
Plussid:
Miinused:
request--->nginx1=>varnish=>nginx2--->response
Nginx microcache
On olemas Varnishist lihtsam variant, Nginxi cache https://github.com/tripikad/trip2_vagrant/issues/23 mis teeks serverisetupi edaspidi lihtsamaks:
request--->nginx--->response
Plussid:
Miinused:
Response cache
https://github.com/spatie/laravel-responsecache
See on küll Laraveli lisajubin, kuid peaks umbes samamoodi töötama kui eelmised
Plussid:
Miinused:
Laraveli sisemine cache
Vaja otsustada kohad kus kasutada Laraveli sisest cachet
Järgmine cache kiht on Laraveli cache. Praegu me seda peaaegu ei kasuta, välja arvatud keerukate queryte cache siin-seal (ja vist ka Atom feed?) Siin on aga palju võimalusi, saaks cacheda rohkem päringuid, html jupikesi kui ka suuremaid regioone.
Vaja otsustada cache draiver
Oluline on ka cache draiver. Stagingus ja laivis saaks kasutada kas Redise või Memcachedi cachet (filecache puhul ei saa teatuid cache APIsid kasutada ja andmebaasicache on liigne overhead).
Redis
Plussid:
Miinused:
Memcache
Plussid:
Miinused:
Frontend optimizations
Vaja teha minimaalsed frontendi kiirustestid ja siis otsustada palju optimeerida
Praegu me siin palju ei tee https://github.com/tripikad/trip2/issues?q=is%3Aopen+is%3Aissue+label%3Aperformance kuid siin oleks vaga palju kiiruste tõstmise võimalusi.
Turvalisus
Serveri turvaconf
Vaja uuendada serveri conf
Meie serveriskript https://github.com/tripikad/trip2_vagrant/blob/master/provision.sh ei ole piisavalt turvaline, vt https://github.com/tripikad/trip2_vagrant/issues/4
Kasutajate passwordide hashing
Vaja otsustada paroolide hashing
Praergu me kasutame kasutajate paroolide salastamiseks väga nõrka, md5() krüptimist sest me tahame et vana Tripi kasutajad saaks probleemideta sisse logida. Selleks on kirjutatud oma custom hasher https://github.com/tripikad/trip2/blob/master/app/Hashers/Md5Hasher.php
See võib olla turvarisk. Kui tugevama, bcrypt() krüptimise jaoks peavad kõik vanad kasutajad oma paroolid ära muutma ning ilmselt tuleb neile kõigile ka vastav paroolivahetuse e-mail saata ja see nõuab oskuslikku e-maili saatmise lahendust (kasutajaid on kokku 42k, saata tuleks vast 10k-20k'le)
Oluline küsimus on kas teha uuele tripile yleminek koos paroolivahetusega ja tegeleda lisaarenduse + kasutajatyytamisega või lükata see kuskile ebamäärasesse tulevikku (kus korraga on saidis nii ebaturvalised kui turvalised paroolid, brrr).
Vt https://github.com/tripikad/trip2/issues/3
HTTP/2 ja HTTPS üleminek
Vaja otsustada KUNA tegeleda HTTP/2 ja HTTPSiga
Ei ole esmase launchi jaoks kriitilised, kuid poole aasta perspektiivis võiks siiski lauale tõsta. HTTP/2 annab (loodetavasti) kiirust juurde, HTTPS on H/2 eeltingimus ning lisab turvalisust ning seda on nüüd tänu letsencrypt.org'ile lihtne käima ajada. Forge, vt allpool, teeb seda automaatselt.
Niipea kui trippi (taas)tekivad maksvad kommertskasutajad, on HTTPS kohustuslik.
Vt ka
http://motherboard.vice.com/read/google-will-soon-shame-all-websites-that-are-unencrypted-chrome-https https://ma.ttias.be/firefox-nightly-starts-marking-login-forms-in-http-as-insecure/
Meie issued:
https://github.com/tripikad/trip2_vagrant/issues/26 https://github.com/tripikad/trip2_vagrant/issues/25 https://github.com/tripikad/trip2_vagrant/issues/32
Deploy
Vaja otsustada deploy tehniline lahendus
Deploy on automaatne Gihubist värkse koodi võtmine ja test/stagingu ja live serverisse panemine. Meil on mitu varianti:
Isetehtud deploy:
Võtame olemasoleva deployskripti https://github.com/tripikad/trip2_vagrant/blob/master/scripts/update_code.sh ja paneme selle lihtsa NodeJS teenuse abil jooksma iga kord kui keegi Githubis midagi uuendab.
Plussid:
Miinused:
Envoyeri deploy
https://laracasts.com/series/envoyer
Plussid
Miinused
Serveri haldus
Vaja otsustada serveri haldaja
Kaks varianti:
A: Haldame ise
Spinnime serveri üles oma skriptiga https://github.com/tripikad/trip2_vagrant/blob/master/provision.sh mis põhineb Forge skriptil https://github.com/laravel/settler/blob/master/scripts/provision.sh
Plussid
Miinused
Forge
https://laracasts.com/series/server-management-with-forge
Plussid
Niijanaa
Miinused
Muud teemad
Serverid ja hinnad
Vaja otsustada mitut ja milliseid servereid esialgu jooksutame
Hetkel:
$40/kuu
, Trip maksab$20/kuu
, Kika maksabLaunchi ajal:
$40/kuu
, Trip maksab$20/kuu
(või Linode 1GB$10/kuu
või Linode 4GB$40/kuu
), Trip maksab$20/kuu
aga kettamaht on ilmselt probleem, võib olla vajalik Linode 4GB$40/kuu
Ilmselt peame populaarsuse kasvades minema multiserver setupi peale:
Tulevik A:
Tulevik B:
Selleks on vaja välja mõelda, kus me hoiame kasutajasessioone, pilte ja cachet.
Fotod
Vaja liigutada pildid ja asi ara testida
Eelmisega võrreldes mitte nii oluline teema kuid natuke siiski: kui me tahame kasutada Envoyeri automaatset deployd, siis on meil vaja liigutada praegused pildid uude kataloogi https://github.com/tripikad/trip2/issues/269. See annaks ka võimaluse edaspidi pilte mõnest muust serverist / CDNist serveerida ja minna üle multi-server setupile. Probleemiks võib siin saada Windowsi all arendamine (Mikk), ma ei tea kuidas see tema masinas toimiks.
Sessioonid
Vaja otsustada kus hoida sessioone
Samuti multi-server setupi puhul ei saa sessioone hoida veebiserveris failidena, nad peavad olema kas Redises või Memcachedis (andmebaas on liiga suur overhead)
Email
Vaja leida meiliprovaider
Mailiprovideri valimisel tekkis vist arusaamatus. Teemaks ei olnud newsletterite saatmine (Mailchimp) vaid transactional email, mida pakuvad tihti newsletterite saatjad, kuid eraldi nime all, eraldi APIdega ja eraldi hinnaga. Me peame valima Mandrilli (by Mailchimp), Mailguni ja CampaignMonitori vahel https://github.com/tripikad/trip2/issues/98
Reklaam
Vaja leida reklaami tehniline lahendus ja see ara testida
Vaja on kiiremas korras mingit näidisreklaami et saaks hakata reklaamikasutust testima, näiteks Google Doubleclick for Publishers https://www.google.com/dfp