EdgarsK Posted November 4, 2014 Report Share Posted November 4, 2014 Sveiki php.lv, šī mēnēsa beigās grasos startēt savu personīgo projektu, esmu strādājis nu jau vairāk kā gadu pie šī projekta un beidzot viss ir gatavs startēšanai. Tagad galvenais ir nenopūdelēt ar serveriem jo mēs startēsim ļoti apmeklētā lapā kā featured un cik partneris varēja no statistikas izvilkt mums ir jābūt gataviem apkalpot pāris tūkstošus dienā. Financiāli nevaru atļauties daudz, tāpēc startēju ar pamatpaku (ap 400 eirām), kur vēlāk būs investīcijas lai varētu upgreidot serverus, bet gribētos dzirdēt komentāris no Jūsu puses vai ar šo starta paku varēšu noturēties un kādi būtu ieteikumi lai attīstītu infrastruktūru ko veidoju. Tātad - projekts ir rakstīts kohanā, saslēgts ar vienu mysql datubāzi un kods ir diezgan lightweight. Atceros kad bija iespēja strādāt ar čaļiem no draugiem.lv daudz ko iemācijos, tāpēc tādas lietas kā lietotāju masīvus esmu nokešojis un katru reizi kad tiek atjaunota informācija datubāzē lietotājs kura dati tiek atjaunoti tiek pārkešots. Tātad kopā ir 4 server manalapa.lv - pamatserveris ir load balanceris ar nginx upstream uz 2 backend serveriem, vēlāk man ir plāns pielikt priekšā HAproxy un laist caur to jo būtu vairāki load balanceri. Ši servers - Ubuntu 14.10 / 13000 Mhz ; 1G Ram ; 8G Hdd ; Nav pieslēgts VLAN ; Ir publiskā IP backend-1.manalapa.lv un backend-2.manalapa.lv - nginx un php fpm; Ubuntu 14.10 ; 2000 Mhz ; 2G Ram ; 20 G hdd ; Ir publiskā IP ; ir pieslēgts VLAN ; loģiski mysql tiek laists caur VLAN. mysql.manalapa.lv - mariadb ; Ubuntu 14.10 ; 2000 Mhz ; 3G Ram ; 200 G Hdd; Ir pieslēgts VLAN ; Nav publiskā IP Abi backendi ir notūnēti ar domu ka būs 4gb ram tikko kā būs iespēja (huh) no file limits root hard nofile 40000 root soft nofile 40000 www-data hard nofile 40000 www-data soft nofile 40000 Sysctl tunning net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 16384 16777216 net.core.somaxconn = 4096 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_syncookies = 1 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_congestion_control = cubic Un visam pa virsu ir vēl UltraNAS 1TB hdd kas tiek pieslēgts abiem backendiem kā media storage priekš web uploads. Kopā man šis pasākums mēnesī izmaksā ap 400 eirām, pagaidām nevaru atļauties neko lielāku. Iemesls kāpēc rakstu - gribu justies droši startējot šo pasākumu. Esmu izgājis cauri desmitiem benchmarks etc un visi rezultāti nāk atpakaļ +- 500 requests / s uz nekešotām lapām un 1500 requests / s uz kešotām. Ah un par kešinu haha - sākumā ideja bija glabāt memcache, bet tā kā strādāju uz mac un negribēju p*sties ar memcache uztaisiju adapteri weblapai lai storo file cache. Tagad kad ir vairāki backendi vajag atsevišķu cache server, nepietiek naudas gan, tāpēc man bija doma pieslēgt redis kā file stream cache caur NAS ko slēgšu priekš uploadiem. Jebkādi ieteikumi / jautājumi būtu appriciated; ar serveriem ņemos tikai pāris gadus un noteikti ir ļot ļoti daudz lietas ko varētu ieteikt. Starpcitu rakstot šo tikko sapratu ka man tak abi backendi iet caur publiskajām IP, vajag pārlikt uz VLAN. Link to comment Share on other sites More sharing options...
spainis Posted November 4, 2014 Report Share Posted November 4, 2014 no kurienes tādas cenas? un kāpēc neizmantot s3 vai arī gcs priekš uploadiem? tūlīt visi gan sāks brēkt par DO, bet nu GCE tas aptuveni izmaksātu : https://cloud.google.com/products/calculator/#id=eba10385-fb99-4abe-8a97-b27c5df9ddae pluss vēl https://www.cloudflare.com/plans kā cdn/ssl Link to comment Share on other sites More sharing options...
EdgarsK Posted November 4, 2014 Author Report Share Posted November 4, 2014 Izmantoju melbourne.co.uk ar viņiem strādāju caur aģentūru jau vairāk kā gadu un visus pazīstu, tāpēc gribu turēties ar viņiem, jo uzticos personālam. Link to comment Share on other sites More sharing options...
foxsk8 Posted November 4, 2014 Report Share Posted November 4, 2014 Saprotu, ka nevēlies stāstīt par projektu kā tādu pirms laika, bet lai konkurēti šeit kaut ko varētu ieteikt, uzlabot, varbūt ne es, pats ar šim lietām nenodarbojos, bet gan citi, tad vajadzētu tomēr šo to vairāk izklāstīt par projektu, vismaz būtību, soc tīkls, aplikācija, web spēle, vai kas līdzīgs, to pašu pamatdomu. Uz šo brīdi nevaru iedomāties, ko tu būtu tādu izstrādājis, ka tev gāstos iekšā X tukstošu masas. Pēdējo reizi kad es šādu frāzi dzirdēju no klienta, projekts nosprāga dabīgā nāvē, jo nebija finanses beigās lai uzturētu būtībā tieši to pašu struktūru, serverus kas tev padomā, projekts nenesa vēlamo profitu attiecībā pret serveru izmaksām, kas sākotnēji varbūt nebija nepieciešamas tik apjomīgas, būtu sākumā pieticis ar vienu virtuālo serveri varbūt izdalītu priekš mysql. Link to comment Share on other sites More sharing options...
EdgarsK Posted November 4, 2014 Author Report Share Posted November 4, 2014 Projekts pamatsaknē ir soc tīkls + community networks. Lapa pieejama tikai reģistrētiem lietotājiem, ir tādi tūļi kā forums ; replika no stackoverflow ; messaging ; gallerijas (foto/youtube/vimeo) ; friendships ; followings ; kaut kas līdzīgs grupām draugos un vēl visādi sīkumi kas ir mazsvarīgi. Varbūt izklausās diezgan sekli, bet koncepts ko representē šī komūna ir unikāls, esam griezušies pie investoriem un viņi grib investēt, bet lai nepakļautu sevi lielam riskam, jo nekad šāda tipa koncepts nav startēts viņi vēlas lai mēs startējam kontrolētā environment un apkopojam rezultātus mēnesi pēc starta, ja publika ir atsaucīga viņi uzreiz investē un mēs varam domāt par labāku setup. Saprotu tavu komentāru foxsk8, mūsu gadijumā partneris kurš apkalpo portālu ar vairāk kā 30k apmeklētājiem dienā ir gatavs izlikt mūsu promo viņu lapā kā featured. Attiecīgi mums jābūt gataviem uzņemt vismaz 25% no viņu apmeklētājiem. Šobrīd es skatos uz šo visu šādi - nGinx ; Kohana ; fpm ; MariaDB ir visi lightweight, kas attiecīgi liek man domāt ka nebūtu jābūt tik sarežģīti uzcept šo servisu, bet tajā pašā laikā es gribu būt maksimāli drošs par visu. Varu nošērot nginx un fpm config ja ir vēlme lai izprastu kā esmu uzstādijis visu. Tikko pabeidzu stress testu, pret load balanceri ar 100k requestiem uz visiem unikālajiem linkiem, kopā 150, tātad kopā 15000 single requestiem tas tika executos aptuveni 40 secundēs kas man liek saprast ka aptuveni 350 vienlaicīgi requesti un serveris darbojas bez problēmām. Ja man ir 2 backend abiem ir 2GB ram ; 2000Ghz / 1cpu ; vai tas spēs izturēt random slodzi kas tiktu mesta tam pretīm, protams priekšā ir load balanceris ar round robin principu kur abiem ir vienāds weight. Link to comment Share on other sites More sharing options...
F3llony Posted November 4, 2014 Report Share Posted November 4, 2014 (edited) Pāris tūkstoši apmeklētāju dienā ir diezgan niecīgs skaitlis. Par HAproxy utml. priekiem jāsāk domāt, kad ir kāds miljons hitu dienā. :) Nevajag tev piecus serverus uzreiz, nepārcenties. Ja tā būda bruks, nezināsi kur ķerties klāt, ja ne, tad būs lieki iztērēta nauda. Tāda izmēra projektam tev nepieciešams horizontāli skeilojams pasākums (sākumam), kas ir diezgan lēti un vienkārši menedžējams. Tālāk, tava pirmā kļūda ir viens MySQL serveris - bad bad bad. Tas, ko tev vajag ir node interchange / multimaster, e.g. vairākas vienādas nodes - uz katras turi MySQL, Apache, PHP failu kopiju, Iesākumā ar divām būs pilnīgi pietiekami. Tālāk nomet tam visam priekšā vēl vienu nodi, kas kalpos kā loadbalansers. Loadbalanserim pamatā nevajadzētu tērēt tonnu resursu, tāpēc daļu no loadbalansera resursiem vari izmantot vai nu sesiju glabāšanai (tu taču neglabā sesijas failos/mysql, vai ne?), vai nu failiem, vai nu paņemt mazāku serverkasti. Failus gan ieteiktu glabāt kādā CDN, vai mazjaudas serverī ar pāris lieliem diskiem, vai vairākiem maziem serveriem un hdfs. Un visbeidzot, www.hetzner.de vai leaseweb.de. Abi ir diezgan gigantiski, labi pazīstami un pārbaudīti provaideri, bet par melbourne es vispār dzirdu pirmo reizi... P.S Varnish or Nginx cache. Nepiemirsti! Also CloudFlare. Edited November 4, 2014 by F3llony Link to comment Share on other sites More sharing options...
Kasspars Posted November 4, 2014 Report Share Posted November 4, 2014 No savas pieredzes. Viss vajākā vieta ir DB. Jo vairāk tajā būs datu, jo ātrāk līdīs ārā neoptimāli queryi Landinpage obligāti jāservē kešotu. Viss labāk servēt statisku html failu. Šis uzņems visu trafiku Link to comment Share on other sites More sharing options...
codez Posted November 4, 2014 Report Share Posted November 4, 2014 Pēdējie 2 projekti, kurus laidu uz PHP: Viens turēja 20k lietotājus dienā uz parastas VPS kastes ar 1CPU core un 2GB ram un db uz tās pašas kastes, bet bija ļoti vienkārš, tikai ap 10% lietotāju to lietoja autorizējoties, pārējie pavadīja ļoti īsu brīdi. Otrs projekts turēja 2,5k lietotāju dienā bez problēmam, bet tur lietotājs vidēji pavadīja diezgan daudz laika (vidēji ap 1h) un tur bija VPS ar 1 CPU core un 1 GB RAM. Abos gadījumos bija rijīgais Apache. Nesaprotu kā pāris K lietotāju dienā var būt problēma, lai vispār izietu no vienas kastes konfigurācijas. Link to comment Share on other sites More sharing options...
EdgarsK Posted November 4, 2014 Author Report Share Posted November 4, 2014 Sveiks F3llony, paldies par ieteikumiem. Kā jau teicu šis ir mans pirmais lielais personīgais projekts ko grasos startēt tāpēc esmu uztraucies par katru sīkumu un varbūt esmu nedaudz uzvilcies haha. Neatbalstu mysql master/slave/multimaster setupus jo ir visādās šāizēs sanācis sēdēt, vienīgais par ko savā pieredzē esmu priecājies kā multi mysql instanci ir galera, bet tam vajag min 3 serverus. Long story short - galera ir sinhronizēts replication, kur katrs requests apceļo visus serverus pirms tiek apstiprināts, nevis tiek atsāts cerībā ka tas tiks replicēts. Perfekts piemērs ir Insert un uzreiz Select pēc ieraksta, galera atgriezīs, bet parasts replication ne. Kasspars - landing page ir pliks html fails tā kā ar to nebūs problēmas. Es tagad sākum domāt par to ko saki. Projekts ir UK based un melbourne ir diezgan liels UK data centrs bāzēts vairākās pilsētās, esmu darbinājis visādus giga projektus pie viņiem caur aģentūrām un viss ir bijis gludi. Codez - es ticu ka mans setup būs ok sākumam lai atspertos un vēlāk lai pāriet uz savu klusteri kur viss ir pārdomāts, bet tā kā ir neziņa par to kas tuvojas cenšos atsist visus bottleneckus. Link to comment Share on other sites More sharing options...
briedis Posted November 4, 2014 Report Share Posted November 4, 2014 Es domāju, ka vajadzētu nedaudz noorganizēt to palaišanu tā, ka nevis blākš un visi veļās iekšā, bet pakāpeniski, kādu pāris h laikā izreklamēt to lapu. Attiecīgi, būtu laiks atrast bremzīgās vietas utt. Noteikti ieteiktu uzlikt kaut kādu monitoringu, piemēram, to pašu newrelic, kas ļautu ātrāk fiksēt, kur sāk rasties problēmas. Protams, iziet cauri kvērijiem, skatīties, vai visiem ir pareizi indeksi. Tas gan gadījumā, ja to datu tur tiešām sarodas daudz, kas visdrīzāk, sākumā nebūs. Link to comment Share on other sites More sharing options...
F3llony Posted November 4, 2014 Report Share Posted November 4, 2014 Nezinu, kas tev par bēdīgu pieredzi, bet man tādas nav. :) MySQL nereplicēt ir grēks. Link to comment Share on other sites More sharing options...
Recommended Posts