|
ÀÁÐÀÊÀÄÀÁÐÀ (Òîæå ñàìîå íî â ÷èòàåìîì âèäå)
Predstavlau Va6emu vnimaniu obzor visokourovnevoy sistemnoy arxitekturi social'noy seti www.campus.ru,
razrabotki kompanii OOO «Kreativ Media». Na moy vzglad, danniy material
interesen tem, 4to pozvolaet ocenit' primenimost' rassmotrennix
podxodov i texnologiy v razrabotke internet-resursov. Po krayney mere,
kogda na6a kompania na4inala proekt «Kampus», mne o4en' ne xvatalo
podobnoy informacii.
Social'naa set' Campus.ru pomogaet 6kol'nikam i studentam v postroenii
ix budu6ey kar'eri putem provedenia special'nix konkursov ot krupnix
kompaniy-rabotodateley, organizacii proxojdenia proizvodstvennix
praktik i obu4au6ix seminarov, a takje posredstvom neobxodimogo
funkcionala dla ob6enia, obmena informacii i udovletvorenia drugix
u4ebnix nujdi – naprimer, sostavlenia u4ebnogo raspisania. Funkcional
Campus.ru preimu6estvenno peresekaetsa s funkcionalom privi4nix dla nas
social'nix setey: zaregistrirovannie pol'zovateli mogut ob6at'sa,
sobirat'sa v soob6estva, pisat' v blogi, razme6at' fotografii i t.d.
Odnako, poskol'ku dannaa social'naa set' izna4al'no orientirovalas' na
6kol'nikov i studentov, nekotorie ve6i bili realizovani special'no s
u4etom potrebnostey u4a6ixsa, naprimer, «U4ebniy portfel'» – papka dla
xranenia materialov, ili «Planer» – servis dla sostavlenia u4ebnogo
raspisania.
Obzor sistemnoy arxitekturi na4nem s informacii o tom, 4to Campus.ru
realizovan na platforme Java. Suda po ob6ey statistike, vibor platformi
Java v ka4estve instrumenta realizacii mediynogo Web-resursa avlaetsa
dostato4no nestandartnim re6eniem, odnako a vibral imenno etu platformu
isxoda iz sleduu6ix soobrajeniy:
• Moy predidu6iy opit razrabotki visokonagrujennix, otkazoustoy4ivix,
gorizontal'no mas6tabiruemix prilojeniy na Java bil uspe6en.
• Java-soob6estvom nakoplena ogromnaa kodovaa baza ka4estvennix
bibliotek i freymvorkov s otkritim isxodnim kodom, prakti4eski na vse
slu4ai jizni.
• Pri formirovanii proektnoy komandi «s nula» nayti na rinke truda
neskol'kix podxoda6ix Java-razrabot4ikov, obladau6ix neobxodimim
urovnem kvalifikacii, opitom komandnoy raboti i znaniami v oblasti
ponimania arxitekturi programmnogo obespe4enia (OPP, Design Patterns)
pro6e, 4em, naprimer, dla raboti s Ruby (t.k. etot azik, po opitu
kolleg, e6e ne dostato4no 6iroko rasprostranen), ili c PHP (po
sobstvennomu opitu, sli6kom mnogo nizkokvalificirovannix kadrov, na
otsev kotorix uxodat bez preuveli4enia mesaci).
Predpolagaa azvitel'nie kommentarii, kasau6iesa proizvoditel'nosti
Java-prilojeniy, zame4u, 4to, prinimaa re6enie v pol'zu Java, a asno
osoznaval, 4to JVM – ne samiy bistriy i ekonomi4niy interpretator.
Odnako, vo-pervix, JVM 6.0 deystvitel'no dostato4no proizvoditelen dla
nujd Web-prilojenia, a vo-vtorix, trud programmistov sey4as doroje
stoimosti jeleza, poetomu podolgu izobretat' dorogie «velosipedi»,
kotorie pozvolaut viigrat' 5%-10% proizvoditel'nosti, dla startapa bilo
bi nerazumno. A priderjivaus' principa «lu46e bistro rabotat' s
minimumom koda i krasivoy arxitekturoy, 4em sekonomit' 10% jeleza i
uvaznut' v otladke».
Osnovnim freymvorkom proekta stal Tapestry 5. Vibor v pol'zu Tapestry 5 bil sdelan po radu pri4in, osnovnimi iz kotorix avlautsa:
• Tapestry pozvolaet polnost'u razdelit' verstku i prezentacionnuu
logiku. Net neobxodimosti dobavlat' v HTML special'nie tegi, ne
interpretiruemie brauzerom, kak v JSP. Eto osobenno vajno, t.k.
Web-proekt v bol'6instve slu4aev podrazumevaet slojnuu verstku,
kotoraa, kak pravilo, vipolnaetsa i podderjivaetsa otdel'nim
specialistom. Kstati, v plane optimizacii verstki mi staralis'
sobludat' best practice.
• Soderjit rad arxitekturnix re6eniy, nacelennix na visokoproizvoditel'nuu rabotu, naprimer, takix kak Page Pool.
• Adekvatnaa i stroynaa arxitektura freymvorka, pozvolau6aa
sosredoto4it'sa na biznes-logike prilojenia, a ne na ego konfiguracii i
integrirovanii komponentov drug s drugom, blagodara 6irokomu
ispol'zovaniu annotaciy i sogla6eniy o naimenovanii, a takje
vstroennomu IoC.
Poskol'ku ranee opita raboti s Tapestry 5 ni u kogo iz nas ne bilo, v
pervuu o4ered' bil napisan testoviy prototip prilojenia i vipolneno ego
nagruzo4noe testirovanie utilitoy JMeter.
Testirovanie pokazalo bistroe vrema otklika, stabil'nuu utilizaciu
apparatnoy platformi i otsutstvie blokirovok, posle 4ego re6enie ob
ispol'zovanii Tapestry 5 bilo okon4atel'no utverjdeno.
Isxoda iz skazannogo vi6e, vnutrennaa arxitektura Web-prilojenia
Campus.ru prodiktovana pravilami razrabotki prilojeniy pod freymvork
Tapestry 5.
Krome Tapestry, na6e Web-prilojenie ispol'zuet sleduu6ie biblioteki:
• DOJO 1.0 – Javascript framework s AJAX
Vibor DOJO v ka4estve osnovnogo Javascript-freymvorka bil prodiktovan
nali4iem v nem bol'6ogo koli4estva gotovix elementov upravlenia, v tom
4isle vidjetov, a takje tem, 4to DOJO pozvolaet vipolnat' vse stilevoe
preobrazovanie komponentov na storone klienta. Pri etom pri pervom
obra6enii k resursu zagrujaetsa i ke6iruutsa v brauzere vse neobxodimie
CSS- i Java-ckripti, a zatem s servera gruzatsa tol'ko HTML-stranici s
razmetkoy minimal'nogo ob&ema. Eto zna4itel'no sokra6aet trafik i
nagruzku na server.
Krome togo, 4to nemalovajno, u komandi uje bil opit raboti s DOJO ☺ Iz
trudnostey – integracionnuu 4ast' DOJO-Tapestry pri6los' izobretat'
samostoatel'no; v perspektive planiruem oformit' ee v vide open
source-proekta i vilojit' v otkritiy dostup.
• SwfUpload 2 – Javascript komponent dla zagruzki faylov na server.
• Hibernate 3 – ORM Framework. Tapestry 5 prozra4no integriruetsa s Hibernate. Dla mappinga su6nostey pol'zuemsa annotaciami.
• Hibernate Search 3
– dvijok polnotekstovogo poiska na baze Lucene. Pozvolaet indeksirovat'
soderjimoe su6nostey Hibernate, udobno konfiguriruetsa annotaciami v
su6nostax. Mojet rabotat' v klastere.
• Spring Security 2.0
– sistema autentifikacii i avtorizacii, prozra4no integriruetsa s
Tapestry 5, konfiguriruetsa annotaciami. Imeet 6irokie vozmojnosti, no
podxoda6ego nam mexanizma ACL dla nalojenia personal'nix prav dostupa
pol'zovatela k ob&ektam predmetnoy oblasti ne na6los', pri6los'
pridumivat' svoy. Planiruem v perspektive vilojit' v vide open source
proekta.
• Quartz 1.6
– planirov6ik dla vipolnenia fonovix i asinxronnix operaciy. Dlitel'nie
operacii, takie kak rassilka po4ti, obrabotka fayla na servere, i pr.
mi staraemsa realizovat' v vide asinxronno vipolnau6egosa deystvia,
4tobi ne blokirovat' interfeys pol'zovatela na dolgoe vrema.
Pri uda4nom ste4enii obstoatel'stv koli4estvo pol'zovateley (t.e.
koli4estvo zaprosov) social'noy seti i ob&em svazannix s pol'zovatelami
dannix rastet lavinoobrazno. V svazi s etim o4en' vajno bilo obespe4it'
gorizotal'noe mas6tabirovanie sistemi, a takje dostato4niy uroven' ee
otkazoustoy4ivosti. Eti celi bili dostignuti kak za s4et nali4ia
izbito4nix apparatnix serverov dla kriti4eskix uzlov sistemi, tak i za
s4et ispol'zovania special'nogo programmnogo obespe4enia na urovne OS:
haproxy, hartbeat i pr. Tak 4to avariy i bolezney rosta mi po4ti ne
boimsa ☺
Kstati, o programmnom obespe4enii. V svoey infrastrukture Kampus ispol'zuet:
• Nginx 0.6
– balansirov6ik nagruzki (HTTP-zaprosov) i HTTP-server dla otda4i
stati4eskogo kontenta (Javascript, CSS, ikonki i pr.). Balansirovka
HTTP-zaprosov na servera prilojeniy Tomcat nastroena takim obrazom,
4tobi v te4enie odnoy sessii vse zaprosi ot odnogo pol'zovatela
popadali bi na odin ekzemplar servera Tomcat. Takaa nastroyka
balansirovki nagruzki nazivaetsa sticky session. Eto sdelano dla togo
4tobi ne replicirovat' sessii pol'zovateley mejdu serverami Tomcat.
Plus – ekonomia resursov i lineynoe gorizontal'noe mas6tabirovanie.
Minus – v slu4ae otkaza servera, pol'zovatelu pridetsa pereloginit'sa
na resurse.
• JDK 6 – nabor sredstv razrabotki i virtual'naa java-ma6ina (JVM), na baze kotoroy rabotaet server J2EE-prilojeniy.
• Tomcat 6
– server J2EE-prilojeniy (J2EE konteyner dla Web-prilojeniy). Pod ego
upravleniem rabotaet prilojenie Campus.ru. Mi ne ob&edinali servera
Tomcat v klaster iz soobrajeniy soxranenia vozmojnostey lineynogo
gorizontal'nogo mas6tabirovania na etom urovne.
• PostgreSQL 8.3
– versionnaa SUBD. Vibirali mejdu MySQL i PostgreSQL. Ostanovilis' na
Postgres, proanalizirovav razli4nie obzori, blogi specialistov i
nali4ie utilit dla klasterizacii SUBD.
• PgPool-II 3.4
– balansirov6ik nagruzki i replikator dannix, ispol'zuetsa dla
ob&edinenia v klaster dvux serverov PostgreSQL. Zaprosi na izmenenie
dannix odnovremenno napravlautsa na oba servera BD, a zaprosi na 4tenie
– na odin iz serverov po o4eredi. Takim obrazom, nagruzka
raspredelaetsa mejdu dvuma ma6inami.
• PgBouncer 1.3
– legkovesnaa sistema upravlenia pulami soedineniy dla PostgreSQL.
Odnovremennaa obrabotka zaprosov pol'zovateley bol'6im koli4estvom
serverov prilojeniy trebuet podderjki bol'6ogo koli4estva soedineniy s
BD. PgBouncer tratit na podderjanie kajdogo soedinenia okolo 2 Kb
pamati, i su6estvenno snimaet nagruzku s SUBD PostgreSQL. Takim
obrazom, JDBC-puli na serverax Tomcat nastroeni na soedinenie s
PgBouncer, a ne s PgPool. Dopolnitel'nim plusom avlaetsa to, 4to v
slu4ae kratkovremennoy nedostupnosti BD (naprimer, pri bistrom
perezapuske) PgBouncer budet prodoljat' popitki osu6estvit' soedinenie
s BD, i esli eto polu4itsa do nastuplenia ustanovlennogo taym-auta, to
servera prilojeniy daje ne uznaut o tom, 4to BD bila vremenno
nedostupna.
• ActiveMQ 5.2
– JMS-server. Ispol'zuetsa dla asinxronnogo obmena JMS-soob6eniami v
sisteme polnotekstovogo poiska Hibernate Search, skonfigurirovannoy v
rejime JMS Master/Slave configuration (podrobnosti zdes'). Takje ispol'zuetsa dla obmena informaciey s podsistemoy asinxronnogo vipolnenia zada4 na baze freymvorka Quartz.
• Sendmail – vsem izvestniy po4toviy server. Ispol'zuem dla rassilok.
• Zabbix 1.6
– sistema monitoringa sistemnoy infrastrukturi. Osu6estvlaet monitoring
sostoania JVM, Tomcat po protokolu JMX 4erez interfeysi MBeans.
Besplatno monitorit do 30 xostov.
• Smssend
– paket dla FreeBSD, pozvolau6iy otpravlat' SMS. Ispol'zuem dla
otpravki SMS-soob6eniy sistemnomu administratoru o problemax na resurse.
• Chandler Server
– Open source Web-prilojenie, predstavlau6ee soboy kalendarniy server,
ob6au6iysa s vne6nim mirom po otkritomu protokolu CalDav. 4tobi ne
izobretat' velosiped, mi ispol'zuem danniy server v na6em servise
«Planer» dla xranenia raspisaniy sobitiy pol'zovateley i soob6estv.
• Amazone S3
– ispol'zuetsa dla nadejnogo xranenia faylov pol'zovateley. Krome togo,
ispol'zovanie dannogo servisa pomogaet snat' nagruzku s serverov
prilojeniy, t.k. fayli ska4ivautsa pol'zovatelami napramuu s serverov
Amazona. Metadannie faylov pri etom xranatsa v BD «Kampusa».
Dla raboti s Amazonom est' klientskoe Java API. Servis platniy, no dla organizacii ne dorogoy. Esli re6ite organizovivat' 4to-to podobnoe svoimi silami, rekomenduu MogileFS, k ney toje est' Java API.
• Fotki.com – foto-xosting na6ix partnerov, obespe4ivau6iy xranenie i
konvertirovanie fotografiy, zagrujaemix pol'zovatelami v fotoal'bomi.
Zagruzka fotografiy v brauzer opat' je proisxodit napramuu s serverov
fotoxostinga, 4to snimaet nagruzku s serverov prilojeniy Campus.ru.
Esli bi pri6los' konvertirovat' foto samim, a bi, navernoe, smotrel v
storonu ImageMagick, Java API takje prilagaetsa.
Vse vmeste eto rabotaet sleduu6im obrazom:
1) Zapros pol'zovatela popadaet na server balansirov6ika nagruzki.
Nginx proveraet, est' li v zaprose zagolovok, soderja6iy informaciu o
privazke pol'zovatela k odnomu iz serverov Tomcat. Esli net, to takoy
zagolovok dobavlaetsa, i zapros perenapravlaetsa na sootvetstvuu6iy
server Tomcat. Pervi4no server vibiraetsa po principu round-robin. Etot
mexanizm obespe4ivaet sticky session.
2) Na servere Tomcat generiruetsa dinami4eskiy kontent dla
HTML-stranici, po suti – tol'ko dannie, s minimal'noy stilevoy
razmetkoy. Esli dla generacii stranici trebuutsa dannie iz BD,
prilojenie Campus.ru beret soedinenie iz JDBC-pula dannogo servera.
Soedinenia v JDBC-pule osu6estvlautsa s PgBouncer, kotoriy, v svou
o4ered', ustanavlivaet soedinenie s PgPool, a PgPool – s PostgreSQL.
Poskol'ku process ustanovki soedineniy v JDBC-pule proisxodit srazu pri
starte servera Tomcat, to vo vrema raboti prilojenia polu4enie
soedinenia iz pula rabotaet o4en' bistro.
3) Esli zapros pol'zovatela menaet u4astvuu6uu v polnoteksovom poiske
informaciu, to prilojenie otpravlaet JMS-soob6enie poiskovomu serveru
Master Node, otve4au6emu za sinxronizaciu polnotekstovix indeksov na
kajdom iz uzlov klastera.
4) Kontent HTML-stranici vozvra6aetsa v brauzer pol'zovatela. Posle
etogo brauzer pol'zovatela na4inaet zagrujat' stati4eskiy kontent
(Javascript, CSS, izobrajenia) s servera Nginx, esli etot kontent e6e
ne zake6irovan brauzerom, a takje fotografii i avatari s vne6nix
serverov fotoxostinga.
5) Brauzer pol'zovatela primenaet CSS- i Javascript-preobrazovania k
zagrujennomu DOM-derevu i v itoge otrisovivaet pol'zovatelu gotovuu
stranicu.
Dannaa sxema pozvolaet, vo-pervix, snizit' nagruzku na server
prilojeniy i minimizirovat' trafik, a, vo-vtorix, uskorit' ob6uu
zagruzku stranici za s4et preodolenia ograni4enia brauzera,
pozvolau6ego zagrujat' dannie tol'ko po 4etirem potokam odnovremenno s
odnogo resursa. Obratnoy storonoy medali avlaetsa pobo4niy effekt,
nabludaemiy na starix brauzerax tipa IE 6, kotorie ne uspevaut
primenit' vse dinami4eskie stilevie preobrazovania k stranice do
momenta ee otobrajenia, iz-za 4ego pol'zovatel' mojet nabludat', kak
krivaa strani4ka u nego na glazax prevra6aetsa v krasivuu. Krome togo,
pervona4al'naa zagruzka vsex CSS- i Java-skriptov na medlennix kanalax
mojet potrebovat' nekotorogo vremeni.
Kstati, tut vspomnilas' problema s obnovleniem zake6irovannogo
stati4eskogo kontenta (CSS, JS) v brauzere pol'zovatela. Dla ee re6enia
mi dobavlaem v URL stati4eskogo resursa nomer ego versii. Esli v
skripti vnosatsa izmenenia, menaetsa nomer ix versii v URL, i brauzer
vika4ivaet s servera obnovlennie fayli.
4tobi skazannoe vi6e leg4e ulojilos' v golove, na risunke izobrajena
visokourovnevaa diagramma razvertivania Web-prilojenia Campus.ru. 4tobi
ne uslojnat' diagrammu, nekotorie svazi mejdu komponentami ne
izobrajeni.
Figure 1. Diagramma razvertivania Campus.ru
Opit pokazivaet, 4to JVM effektivno rabotaet s ob&emami pamati do 2 Gb,
s u4etom rekomendacii, govora6ey, 4to na kajdiy ekzemplar JVM na
servere doljno prixodit'sa, po men'6ey mere, dva adra processora. Iz
etix soobrajeniy, na kajdom apparatnom servere bili razvernuti po 4
ekzemplara serverov prilojeniy Tomcat. V kajdom konteynere Tomcat bili
razvernuti Web-prilojenia Campus i Chandler. Nagru4noe testirovanie
pokazalo, 4to pri proizvedennix nastroykax GC, dannaa konfiguracia
pozvolaet prakti4eski lineyno utilizirovat' apparatnie resursi pri
roste nagruzki i vidavat' pri etom priemlemiy rezul'tat po vremeni
otklika.
Na vsex apparatnix serverax prilojenia rabotaut pod upravleniem OS
FreeBSD 7.1. Vibor v pol'zu FreeBSD, a ne Linux, bil sdelan potomu, 4to
pri pro4ix ravnix, vse Linuksi imeut svoi osobennosti, i sistemnim
administratoram bilo bi slojnee peredavat' znania drug drugu. U nas v
kompanii vse proekti poka rabotaut na FreeBSD, poetomu on stal ne4to
vrode korporativnogo standarta. Iz minusov FreeBSD v Java-proekte – Sun
ne vipuskaet JDK dla FreeBSD, a porti pod FreeBSD zapazdivaut
otnositel'no obnovleniy Sun. Takje v portax JDK est' ne vse otlado4nie
utiliti.
Otkazoustoy4ivost' na serverax-balansirov6ikax nagruzki realizovana posredstvom utiliti HAProxy.
Apparatnie servera «Kampusa» imeut sleduu6uu konfiguraciu:
1) Servera dla balansirovki nagruzki i otda4i stati4eskogo kontenta:
CPU Intel Xeon Dual Core 2.67GHz RAM DDR 2 8Gb HDD 4xSAS 73gb 15000 rpm
2) Servera dla razvertivania Web-prilojenia:
CPU 2xIntel Xeon Quad Core 2.66GHz RAM DDR 2 16Gb HDD 4xSATA 300gb 15000 rpm
Glavniy princip pri vibore servera dla Web-prilojenia – 4em bol'6e ader/processorov i operativnoy pamati – tem lu46e.
3) Servera dla BD:
CPU 2xIntel Xeon Quad Core 2.66 GHz RAM DDR 2 16Gb HDD 8xSAS 147gb 15000 rpm
Glavniy princip pri vibore servera dla BD s ras4etom na rabotu s
bol'6imi ob&emami dannix – 4em bol'6e diskov i 4em oni bistree, tem
lu46e. Obazatel'no nali4ie apparatnogo RAID. Zatem po prioritetam idet
operativnaa pamat', za nimi – processori.
Servera xostatsa v data-centre krupnogo moskovskogo internet-provaydera za apparatnim fayrvolom ot Cisco.
V zaklu4enie xo4etsa skazat', 4to, nesmora na bol'6ie ob&emi
prodelannoy raboti, nam e6e est' 4to sover6enstvovat'. Naprimer, v
svazi s vixodom IE 8 mi nametili boleznenniy perexod na DOJO 1.3. Takje
mi planiruem sdelat' verstku sayta bolee legkoy (ubrav teni,
poluprozra4nost' i li6nie okruglosti) v svazi s tem, 4to u4a6iesa v
regionax po faktu imeut v 6kolax/vuzax kanal v 128Kbit/sek i IE 6. V
samix blijay6ix planax realizovat' ke6irovanie dannix na baze
proverennogo raspredelennogo ke6a Memcached.
Takje u nas na segodna6niy den' ne re6en vopros 6ardinga dannix, esli
vdrug ob&em dannix na4net ugrojau6e rasti. Poetomu v perspektive mi
namereni issledovat' Hibernate Shards, PLProxy i drugie sredstva. Esli
u kogo-to est' prakti4eskiy opit i jelanie im podelit'sa – budu o4en'
rad.
V sleduu6ey stat'e, esli podderjite, a planiruu rasskazat' ob upravlenii proektom «Kampus» i o na6ey komande ☺
Spasibo za vnimanie!
Texni4eskiy direktor OOO «Kreativ Media»
Sergey Sedov
Opublikovano s razre6enia General'nogo direktora kompanii OOO «Kreativ Media» Ivana Sokolova
|
|