tripikad / trip2

Estonian largest travel community built on Laravel and Vue
6 stars 6 forks source link

When Kika gently weeps #579

Closed kristjanjansen closed 8 years ago

kristjanjansen commented 8 years ago

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

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:

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:

https://github.com/spatie/laravel-responsecache

See on küll Laraveli lisajubin, kuid peaks umbes samamoodi töötama kui eelmised

Plussid:

Miinused:

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:

Plussid:

Miinused:

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:

$10/kuu

https://laracasts.com/series/envoyer

Plussid

Miinused

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

$10/kuu

https://laracasts.com/series/server-management-with-forge

Plussid

Niijanaa

Miinused

Vaja otsustada mitut ja milliseid servereid esialgu jooksutame

Hetkel:

Launchi ajal:

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

mikkpokk commented 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.

kristjanjansen commented 8 years ago

Paar märkust:

mikkpokk commented 8 years ago

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.

kristjanjansen commented 8 years ago

@mikkpokk "Baum pole kena asi mida kasutada, kui otsid kiirust taga " -- on sul alternatiive?

mikkpokk commented 8 years ago

@kristjanjansen Teen varsti alternatiivmeetodi. 1 query - töötleme array'id.

kristjanjansen commented 8 years ago

Ma enam ei nuta. Paneme kinni.