www.romver.ru
/ Ïîëíûé ñïèñîê ñòàòåé / àðõèòåêòóðà ñîöèàëüíîé ñåòè

Êàê çàêàçàòü ñàéò


ÀÁÐÀÊÀÄÀÁÐÀ (Òîæå ñàìîå íî â ÷èòàåìîì âèäå)

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.

Diagramma razvertivania Campus.ru
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
3
Ñîçäàíèå ýêñêëþçèâíûõ ñàéòîâ, þçèáèëèòè àíàëèç è áåñïëàòíûé àíàëèç ïîä çàïðîñû îñíîâíûõ ïîèñêîâûõ ìàøèí
Êîíòàêòíàÿ èíôîðìàöèÿ :
òåë. +7(98I) 7608865

Íàïèñàòü ïèñüìî íà e-mail
icq 415547094  romverðåéòèíã íà mail.ru ñàéòà romverinbox.ru
© 1997 - 2024 romver.ru

Ïîëíàÿ êàðòà ñàéòà Display Pagerank