Jump to content
php.lv forumi

Recommended Posts

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 post
Share on other sites

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 post
Share on other sites

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 post
Share on other sites

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 by F3llony
Link to post
Share on other sites

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 post
Share on other sites

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 post
Share on other sites

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 post
Share on other sites

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 post
Share on other sites
Guest
This topic is now closed to further replies.
×
×
  • Create New...