Slide 1

Slide 1 text

ÓÄÈÂÈÒÅËÜÍÛÉ È ÍÅÂÅÐÎßÒÍÛÉ ERLANG À.Ä. ×è÷èãèí June 2011

Slide 2

Slide 2 text

Êðàòêàÿ èñòîðèÿ Erlang • Ïåðâàÿ âåðñèÿ  1986 ãîä, Äæî Àðìñòðîíã • Implemented in Prolog • JAM Virtual Machine  1988-1989 • Distribution  1990 • BEAM development started in 1992 • BEAM replaced JAM in 1997 • Open sourced in 1998 • Earlier in 1998  Ericsson AXD301 switch with nine 9 • HiPE integrated into Erlang/OTP  2001 • SMP support in 2006

Slide 3

Slide 3 text

Success Stories Any suciently complicated concurrent program in another language contains an ad hoc informally-specied bug-ridden slow implementation of half of Erlang.

Slide 4

Slide 4 text

RabbitMQ • POC - a few weeks of hacking in summer 2006 • rst public release, under MPL, in Feb 2007 • complete, conformant and interoperable implementation of the published AMQP spec • good throughput and latency • reliable and scalable • platform-neutral distribution, plus platform-specic packages and bundles • several extensions - HTTP, STOMP, XMPP, ...

Slide 5

Slide 5 text

RabbitMQ

Slide 6

Slide 6 text

RabbitMQ

Slide 7

Slide 7 text

RabbitMQ

Slide 8

Slide 8 text

AOL's Erlang Framework for Real-time Computational Advertising. Pero Subasic Äàííûå î ðåêëàìå ïðîõîäÿò ÷åðåç Flume, ðàñïðåäåëåííóþ ñèñòåìó ñáîðà è àãðåãàöèè äàííûõ. Ïîñëå àãðåãàöèè â Flume ýòè äàííûå ñêèäûâàþòñÿ äëÿ õðàíåíèÿ â Hadoop. Òàêèì îáðàçîì â Hadoop ñêèäûâàåòñÿ äî 16 ÒÁ äàííûõ â äåíü.

Slide 9

Slide 9 text

AOL's Erlang Framework for Real-time Computational Advertising. Pero Subasic Hadoop ïîëåçåí òîëüêî äëÿ õðàíåíèÿ ðåäêî èçìåíÿþùèõñÿ, ñåçîííûõ äàííûõ. Äëÿ åæåäíåâíî, à òî è åæåñåêóíäíî ìåíÿþùèõñÿ äàííûõ, Ïåðî Ñóáàñè÷ ïðèìåíÿåò Erlang. Ïî ñóòè Erlang ÿâëÿåòñÿ ýòàêîé ïðîñëîéêîé ìåæäó Flume è Hadoop, êîòîðàÿ çàõâàòûâàåò è ïðîñ÷èòûâàåò ïåðåñûëàåìûå äàííûå â ðåàëüíîì âðåìåíè.

Slide 10

Slide 10 text

AOL's Erlang Framework for Real-time Computational Advertising. Pero Subasic •  ñèñòåìå 10 óçëîâ, ïî 16 ÿäåð è 128 ÃÁ ïàìÿòè íà óçëå •  öåëîì, ñèñòåìà îáðàáàòûâàåò äî 5 ìèëëèàðäîâ ñîáûòèé â äåíü (íîâàÿ ðåêëàìà, èçìåíåíèÿ â ðåêëàìå, èçìåíåíèÿ â ïðåäïî÷òåíèÿõ ïîëüçîâàòåëåé è ò.ï.) • Ñèñòåìà, ïî ñóòè, ïðåäñòàâëÿåò ñîáîé ôðåéìâîðê, êîòîðûé ïðåäîñòàâëÿåò ñâîèì ïîëüçîâàòåëÿì íåñêîëüêî äåñÿòêîâ òûñÿ÷ ïàðàìåòðîâ • Ïîñëå çàõâàòà äàííûå ïðîõîäÿò ÷åðåç ìîäóëè-ñêàíåðû (80 ðàçíûõ ñêàíåðîâ), ïåðåêèäûâàþùèå îáðàáîòàííóþ èíôîðìàöèþ íà 120-150 àãðåãàòîðîâ, êîòîðûå â èòîãå ãåíåðèðóþò äî 2.5 ìèëëèîíîâ îáíîâëåíèé â ñåêóíäó • Ïðè îêíå äëÿ àïäåéòà â 90 ñåêóíä, ãåíåðàöèÿ íåîáõîäèìûõ äàííûõ çàíèìàåò âñåãî ëèøü 300 ìèëëèñåêóíä

Slide 11

Slide 11 text

AOL's Erlang Framework for Real-time Computational Advertising. Pero Subasic Ïÿòü ìåñÿöåâ, îäèí ÷åëîâåê  ÿ

Slide 12

Slide 12 text

Erlang in Klarna. David Craelius Klarna çàíèìàåòñÿ îáåñïå÷åíèåì è èíòåãðàöèåé îíëàéí-îïëàò è íà äàííûé ìîìåíò ÿâëÿåòñÿ îäíèì èç êðóïíåéøèõ ñêîïëåíèé ïðîãðàììèñòîâ íà Erlang'å  â Klarna ðàáîòàþò 55 ïðîãðàììèñòîâ, ïèøóùèõ íà Erlang.

Slide 13

Slide 13 text

Erlang in Klarna. David Craelius Âñÿ âíóòðåííÿÿ êóõíÿ êîìïàíèè áûëà ïåðåïèñàíà íà Erlang, ÷òî ïîëîæèòåëüíî ñêàçàëîñü íà êîìïàíèè â öåëîì: ñ 2007-ãî êîìïàíèÿ åæåãîäíî óäâàèâàåò ñâîþ ïðèáûëü, ðàñòåò è ðàñïðîñòðàíÿåòñÿ â äðóãèå ñòðàíû, è óæå îáàíêðîòèëà äâóõ ñâîèõ ãëàâíûõ êîíêóðåíòîâ íà øâåäñêîì ðûíêå.

Slide 14

Slide 14 text

Erlang in Klarna. David Craelius Äî Erlang'à ñèñòåìà äîëæíà áûëà ñïðàâëÿòüñÿ ñ 20 000 ñîáûòèé, ðàñïðåäåëåííûìè ìåæäó 50 000 êëèåíòîâ. Java íå ñïðàâëÿëàñü. Îäíà èç ãëàâíûõ ïðè÷èí  Java íå îñâîáîæäàåò ïàìÿòü òàê áûñòðî, êàê õîòåëîñü áû/íàäî. Òàê, ôèíàíñîâûå äàííûå íå ðàïñðåäåëåíû ïî âðåìåíè, à ïðèõîäÿò âîëíàìè. Java íå óñïåâàëà ðåàãèðîâàòü íà ïðîèñõîäÿùåå è âûñâîáîæäàòü ïàìÿòü äëÿ ñîáûòèé.

Slide 15

Slide 15 text

Erlang in Klarna. David Craelius Íà çàìåíó ñóùåñòâóþùåé ñèñòåìû ñ Java íà Erlang ïîíàäîáèëîñü 6 ìåñÿöåâ.  òî âðåìÿ, êàê â Java ïðèõîäèòñÿ áîðîòüñÿ ñ èíôðàñòðóêòóðîé, êîìïîíåíòàìè, jar'àìè è ò.ï., â Erlang'å ýòîãî íåò. Òåõíîëîãèÿ îòíîñèòåëüíî äåøåâàÿ è òðåáóåòñÿ ìåíüøåå êîëè÷åñòâî ëþäåé äëÿ äîñòèæåíèÿ òåõ æå ðåçóëüòàòîâ.

Slide 16

Slide 16 text

Erlang in Klarna. David Craelius Áëàãîäàðÿ Erlang'ó îòñóòñòâóþò ïðîáëåìû ñ óïðàâëåíèåì ðåëèçàìè. Ïðîâîäèòñÿ ãîðÿ÷àÿ çàìåíà êîäà ïðÿìî íà production'å, ñèñòåìà âñåãäà æèâàÿ. Ïîýòîìó îáíîâëåíèÿ ïðîâîäÿòñÿ ìèíèìóì ðàç â äåíü, æåëàòåëüíî ÷àùå.

Slide 17

Slide 17 text

Erlang in Klarna. David Craelius 20 Java-ìàøèí áûëè çàìåíåíû 2-ìÿ ñ Erlang'îì. Çà ïîñëåäíèå òðè ãîäà áûëî 48 ñåêóíä ïðîñòîÿ. Ñèñòåìà íåóáèâàåìà.

Slide 18

Slide 18 text

Large Scale Messaging at IMVU in social entertainment and gaming. Jon Watte IMVU  ýòî ìíîãîïîëüçîâàòåëüñêèé îíëàéí-ìèð/èãðà, â êîòîðîé åæåäíåâíî ïðèñóòñâóåò äî 150 000 ïîñåòèòåëåé. Êàæäûé èç èãðîêîâ ãåíåðèðóåò îãðîìíîå êîëè÷åñòâî ñîáûòèé: ñîîáùåíèÿ ìåæäó èãðîêàìè, èçìåíåíèÿ ñòàòóñîâ èãðîêîâ (çàøåë/âûøåë/idle è ò.ï.), èçìåíåíèÿ â ïðîôèëå èãðîêîâ (íàãðàäû è achievements).

Slide 19

Slide 19 text

Large Scale Messaging at IMVU in social entertainment and gaming. Jon Watte Âñå ýòè èçìåíåíèÿ â ðåàëüíîì âðåìåíè äîíîñÿòñÿ äî âñåõ èãðîêîâ, ñ êîòîðûìè èçìåíåíèÿ òàê èëè èíà÷å ñâÿçàíû. Ñèñòåìà, îáðàáàòûâàþùàÿ ýòè ñîáûòèÿ, íàïèñàíà íà Erlang'å è ðàáîòàåò íà íåñêîëüêèõ äåñÿòêàõ ñåðâåðîâ.

Slide 20

Slide 20 text

Large Scale Messaging at IMVU in social entertainment and gaming. Jon Watte •  äåíü â ÷àòàõ íà ñàéòå ñîçäà¼òñÿ ∼500 000 êîìíàò è ãåíåðèðóåòñÿ ∼20 000 000 ñîáûòèé ïîëüçîâàòåëü çàøåë/ïîëüçîâàòåëü âûøåë • Ñîñòîÿíèå õðàíèòñÿ â ëåãêîâåñíûõ ñòðóêòóðàõ â ïàìÿòè • 1 000 000 ïîëüçîâàòåëåé = 40GB RAM = 3-4 ñåêóíäû íà îáðàáîòêó ñîîáùåíèÿ îò ïîëüçîâàòåëÿ • Áîëüøàÿ ÷àñòü âðåìåíè CPU òðàòèòñÿ íà ìàðøàëèíã äàííûõ (èñïîëüçóåòñÿ Protocol Buers), òàê êàê ñèñòåìà ãåòåðîãåííà è åñòü êîä, íàïèñàííûé íà äðóãèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ.

Slide 21

Slide 21 text

Large Scale Messaging at IMVU in social entertainment and gaming. Jon Watte • â äåíü íà production çàëèâàåòñÿ äî 50 îáíîâëåíèé • âåñü êîä ïðîõîäèò ÷åðåç àâòîìàòè÷åñêîå òåñòèðâîàíèå, êîòîðîå äëèòñÿ 9-12 ìèíóò.  ñëó÷àå îòñóòñòâèÿ òåñòîâ èëè åñëè òåñòû íå ïðîõîäÿòñÿ, êîä íà production íå èä¼ò • âñåãî îêîëî 30 òûñÿ÷ òåñòîâ, ñîäåðæàùèõ áîëåå 2 ìëí. asserts • êîä çàëèâàåòñÿ íà 700 production-ñåðâåðîâ. Ïîñëå îáíîâëåíèÿ ñèñòåìà òåñòèðóåòñÿ íà production'å â òå÷åíèå 2 ìèíóò (òàê êàê ïîëüçîâàòåëåé î÷åíü ìíîãî, òî â ñëó÷àå ïðîáëåì îíè âûëåçóò ñðàçó) • åäèíñòâåííîå, ÷òî îáíîâëÿåòñÿ ïðàêòè÷åñêè âðó÷íóþ  ýòî áàçû äàííûõ. Äëÿ íèõ ïèøóòñÿ update-ñêðèïòû, êîòîðûå ïðîâåðÿþòñÿ ìèíèìóì äâóìÿ ëþäüìè ïåðåä òåì, êàê ïîïàñòü íà production

Slide 22

Slide 22 text

Êðîìå òîãî • Echo  http://www.aboutecho.com/streamserver • ErlyVideo  https://github.com/erlyvideo • Ejabberd  http://www.ejabberd.im/

Slide 23

Slide 23 text

Êàê îíè ýòî äåëàþò?!

Slide 24

Slide 24 text

Ñïàñèáî çà âíèìàíèå! Âîïðîñû?