Highload для начинающих, Дмитрий Обухов (Mail.ru)10. Âûñîêàÿ íàãðóçêà ÷òî ýòî?
I 53:328 109 çàïðîñîâ â ñåêóíäó? - ñðåäíèé CPU
I Áîëåå ðåàëèñòè÷íî!
I 1 çàïðîñ â ñåêóíäó?
11. Âûñîêàÿ íàãðóçêà ÷òî ýòî?
I 53:328 109 çàïðîñîâ â ñåêóíäó? - ñðåäíèé CPU
I Áîëåå ðåàëèñòè÷íî!
I 1 çàïðîñ â ñåêóíäó? - ëþáîé âåá ñåðâåð?...
12. Âûñîêàÿ íàãðóçêà ÷òî ýòî?
I 53:328 109 çàïðîñîâ â ñåêóíäó? - ñðåäíèé CPU
I Áîëåå ðåàëèñòè÷íî!
I 1 çàïðîñ â ñåêóíäó? - ëþáîé âåá ñåðâåð?...
ïåðåêîäèðóþùèé âèäåîðîëèêè? :)
18. Êîãäà ýòî áûâàåò?
Äîñòèãíóòû òåõíè÷åñêèå îãðàíè÷åíèÿ
I Ñåòü - çà ðàìêàìè äàííîãî äîêëàäà
19. Êîãäà ýòî áûâàåò?
Äîñòèãíóòû òåõíè÷åñêèå îãðàíè÷åíèÿ
I Ñåòü - çà ðàìêàìè äàííîãî äîêëàäà
I Ïàìÿòü
20. Êîãäà ýòî áûâàåò?
Äîñòèãíóòû òåõíè÷åñêèå îãðàíè÷åíèÿ
I Ñåòü - çà ðàìêàìè äàííîãî äîêëàäà
I Ïàìÿòü
I CPU
21. Êîãäà ýòî áûâàåò?
Äîñòèãíóòû òåõíè÷åñêèå îãðàíè÷åíèÿ
I Ñåòü - çà ðàìêàìè äàííîãî äîêëàäà
I Ïàìÿòü
I CPU
I Õðàíèëèùå äàííûõ
33. Íåäîèñïîëüçîâàíèå æåëåçà
Ðàññìîòðèì òèïè÷íûé âåáñåðâåð. íà Perl, Python, Ruby...
Çàäà÷è îäíîãî öèêëà
I ×òåíèå çàïðîñà èç ñåòè.
I Ïàðñèíã çàïðîñà http.
I Âàëèäàöèÿ çàïðîñà, âûáîð
êîíòðîëëåðà.
34. Íåäîèñïîëüçîâàíèå æåëåçà
Ðàññìîòðèì òèïè÷íûé âåáñåðâåð. íà Perl, Python, Ruby...
Çàäà÷è îäíîãî öèêëà
I ×òåíèå çàïðîñà èç ñåòè.
I Ïàðñèíã çàïðîñà http.
I Âàëèäàöèÿ çàïðîñà, âûáîð
êîíòðîëëåðà.
I Çàïðîñ(û) ê õðàíèëèùó äàííûõ.
35. Íåäîèñïîëüçîâàíèå æåëåçà
Ðàññìîòðèì òèïè÷íûé âåáñåðâåð. íà Perl, Python, Ruby...
Çàäà÷è îäíîãî öèêëà
I ×òåíèå çàïðîñà èç ñåòè.
I Ïàðñèíã çàïðîñà http.
I Âàëèäàöèÿ çàïðîñà, âûáîð
êîíòðîëëåðà.
I Çàïðîñ(û) ê õðàíèëèùó äàííûõ.
I Ôîðìèðîâàíèå îòâåòà (template).
36. Íåäîèñïîëüçîâàíèå æåëåçà
Ðàññìîòðèì òèïè÷íûé âåáñåðâåð. íà Perl, Python, Ruby...
Çàäà÷è îäíîãî öèêëà
I ×òåíèå çàïðîñà èç ñåòè.
I Ïàðñèíã çàïðîñà http.
I Âàëèäàöèÿ çàïðîñà, âûáîð
êîíòðîëëåðà.
I Çàïðîñ(û) ê õðàíèëèùó äàííûõ.
I Ôîðìèðîâàíèå îòâåòà (template).
I Îòïðàâêà îòâåòà êëèåíòó.
37. Íåäîèñïîëüçîâàíèå æåëåçà
Ðàññìîòðèì òèïè÷íûé âåáñåðâåð. íà Perl, Python, Ruby...
Çàäà÷è îäíîãî öèêëà
I ×òåíèå çàïðîñà èç ñåòè.
I Ïàðñèíã çàïðîñà http.
I Âàëèäàöèÿ çàïðîñà, âûáîð
êîíòðîëëåðà.
I Çàïðîñ(û) ê õðàíèëèùó äàííûõ.
I Ôîðìèðîâàíèå îòâåòà (template).
I Îòïðàâêà îòâåòà êëèåíòó.
Òðàäèöèîííàÿ ðåàëèçàöèÿ
38. Íåäîèñïîëüçîâàíèå æåëåçà
Ðàññìîòðèì òèïè÷íûé âåáñåðâåð. íà Perl, Python, Ruby...
Çàäà÷è îäíîãî öèêëà
I ×òåíèå çàïðîñà èç ñåòè.
I Ïàðñèíã çàïðîñà http.
I Âàëèäàöèÿ çàïðîñà, âûáîð
êîíòðîëëåðà.
I Çàïðîñ(û) ê õðàíèëèùó äàííûõ.
I Ôîðìèðîâàíèå îòâåòà (template).
I Îòïðàâêà îòâåòà êëèåíòó.
Òðàäèöèîííàÿ ðåàëèçàöèÿ
I îäèí ïðîöåññ íà îäèí öèêë
39. Íåäîèñïîëüçîâàíèå æåëåçà
Ðàññìîòðèì òèïè÷íûé âåáñåðâåð. íà Perl, Python, Ruby...
Çàäà÷è îäíîãî öèêëà
I ×òåíèå çàïðîñà èç ñåòè.
I Ïàðñèíã çàïðîñà http.
I Âàëèäàöèÿ çàïðîñà, âûáîð
êîíòðîëëåðà.
I Çàïðîñ(û) ê õðàíèëèùó äàííûõ.
I Ôîðìèðîâàíèå îòâåòà (template).
I Îòïðàâêà îòâåòà êëèåíòó.
Òðàäèöèîííàÿ ðåàëèçàöèÿ
I îäèí ïðîöåññ íà îäèí öèêë
I îäèí òðåä íà îäèí öèêë
47. Íåäîèñïîëüçîâàíèå æåëåçà
Âåðíåìñÿ ê ðàññìàòðèâàåìîìó ñåðâåðó
I Ïðîáëåìû íàñòóïèëè ïðè 100 çàïðîñàõ â ñåêóíäó.
I Óâåëè÷èëè ÷èñëî ïðîöåññîâ â ðàáîòå.
Ïîìîãëî.
I Íîâûå ïðîáëåìû ïðè 150 çàïðîñîâ â ñåêóíäó.
48. Íåäîèñïîëüçîâàíèå æåëåçà
Âåðíåìñÿ ê ðàññìàòðèâàåìîìó ñåðâåðó
I Ïðîáëåìû íàñòóïèëè ïðè 100 çàïðîñàõ â ñåêóíäó.
I Óâåëè÷èëè ÷èñëî ïðîöåññîâ â ðàáîòå.
Ïîìîãëî.
I Íîâûå ïðîáëåìû ïðè 150 çàïðîñîâ â ñåêóíäó.
I Äàëüíåéøåå óâåëè÷åíèå ÷èñëà ïðîöåññîâ ïîìîãàåò ñëàáî.
53. Íåäîèñïîëüçîâàíèå æåëåçà
×òî äåëàòü?
I Ìåíÿòü àðõèòåêòóðó?
- Ìû íàä ýòèì 3 ãîäà ðàáîòàëè!
I Äîáàâëÿòü âòîðîé ñåðâåð?
- Ýòî òîæå íå ïðîñòî!
(áèçíåñëîãèêà)
Ñïîêîéíî!
54. Íåäîèñïîëüçîâàíèå æåëåçà
×òî äåëàòü?
I Ìåíÿòü àðõèòåêòóðó?
- Ìû íàä ýòèì 3 ãîäà ðàáîòàëè!
I Äîáàâëÿòü âòîðîé ñåðâåð?
- Ýòî òîæå íå ïðîñòî!
(áèçíåñëîãèêà)
Ñïîêîéíî!
I Ïðîâåñòè àíàëèç àðõèòåêòóðû.
55. Íåäîèñïîëüçîâàíèå æåëåçà
×òî äåëàòü?
I Ìåíÿòü àðõèòåêòóðó?
- Ìû íàä ýòèì 3 ãîäà ðàáîòàëè!
I Äîáàâëÿòü âòîðîé ñåðâåð?
- Ýòî òîæå íå ïðîñòî!
(áèçíåñëîãèêà)
Ñïîêîéíî!
I Ïðîâåñòè àíàëèç àðõèòåêòóðû.
I Ïðîâåñòè èçìåðåíèÿ.
56. Íåäîèñïîëüçîâàíèå æåëåçà
×òî äåëàòü?
I Ìåíÿòü àðõèòåêòóðó?
- Ìû íàä ýòèì 3 ãîäà ðàáîòàëè!
I Äîáàâëÿòü âòîðîé ñåðâåð?
- Ýòî òîæå íå ïðîñòî!
(áèçíåñëîãèêà)
Ñïîêîéíî!
I Ïðîâåñòè àíàëèç àðõèòåêòóðû.
I Ïðîâåñòè èçìåðåíèÿ.
I Íàéòè ñëàáûå ìåñòà.
61. Íåäîèñïîëüçîâàíèå æåëåçà
Èçìåðåíèÿ
×òåíèå çàïðîñà èç ñåòè. 15Ê RPS
Ïàðñèíã çàïðîñà, âàëèäàöèÿ, âûáîð êîíòðîëëåðà. 150Ê RPS/CPU
Çàïðîñû ê õðàíèëèùó. 60Ê RPS
Ôîðìèðîâàíèå îòâåòà (Ñîåäèíåíèå äàííûõ ñ template) 100Ê RPS/CPU
62. Íåäîèñïîëüçîâàíèå æåëåçà
Èçìåðåíèÿ
×òåíèå çàïðîñà èç ñåòè. 15Ê RPS
Ïàðñèíã çàïðîñà, âàëèäàöèÿ, âûáîð êîíòðîëëåðà. 150Ê RPS/CPU
Çàïðîñû ê õðàíèëèùó. 60Ê RPS
Ôîðìèðîâàíèå îòâåòà (Ñîåäèíåíèå äàííûõ ñ template) 100Ê RPS/CPU
Îòïðàâêà îòâåòà êëèåíòó. 15Ê RPS
66. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
1
1
+ 1
+ 1
+ 1
+ 1
15 103150 10360 103100 10315 103
= 6000RPS
Íî, ïîçâîëüòå!
I Ó íàñ ïðîáëåìû íà 150 RPS!
I Òóò ÷òî-òî íå òàê!
69. Íåäîèñïîëüçîâàíèå æåëåçà
Íà÷èíàåì ðàçáèðàòüñÿ
I Õðàíèëèùå âûõîäèò íà ñâîè RPS ïðè äîñòàòî÷íî áîëüøîì ÷èñëå
ñîåäèíåíèé ê íåìó.
I Ëèáî õðàíèëèùå íàäî ðàñïîëàãàòü ëîêàëüíî.
70. Íåäîèñïîëüçîâàíèå æåëåçà
Íà÷èíàåì ðàçáèðàòüñÿ
I Õðàíèëèùå âûõîäèò íà ñâîè RPS ïðè äîñòàòî÷íî áîëüøîì ÷èñëå
ñîåäèíåíèé ê íåìó.
I Ëèáî õðàíèëèùå íàäî ðàñïîëàãàòü ëîêàëüíî.
íåïðèåìëåìî.
71. Íåäîèñïîëüçîâàíèå æåëåçà
Íà÷èíàåì ðàçáèðàòüñÿ
I Õðàíèëèùå âûõîäèò íà ñâîè RPS ïðè äîñòàòî÷íî áîëüøîì ÷èñëå
ñîåäèíåíèé ê íåìó.
I Ëèáî õðàíèëèùå íàäî ðàñïîëàãàòü ëîêàëüíî.
íåïðèåìëåìî.
I Òî æå ñàìîå è ñ âçàèìîäåéñòâèåì ñ êëèåíòîì.
72. Íåäîèñïîëüçîâàíèå æåëåçà
Íà÷èíàåì ðàçáèðàòüñÿ
I Õðàíèëèùå âûõîäèò íà ñâîè RPS ïðè äîñòàòî÷íî áîëüøîì ÷èñëå
ñîåäèíåíèé ê íåìó.
I Ëèáî õðàíèëèùå íàäî ðàñïîëàãàòü ëîêàëüíî.
íåïðèåìëåìî.
I Òî æå ñàìîå è ñ âçàèìîäåéñòâèåì ñ êëèåíòîì.
×òî äåëàòü?
73. Íåäîèñïîëüçîâàíèå æåëåçà
Íà÷èíàåì ðàçáèðàòüñÿ
I Õðàíèëèùå âûõîäèò íà ñâîè RPS ïðè äîñòàòî÷íî áîëüøîì ÷èñëå
ñîåäèíåíèé ê íåìó.
I Ëèáî õðàíèëèùå íàäî ðàñïîëàãàòü ëîêàëüíî.
íåïðèåìëåìî.
I Òî æå ñàìîå è ñ âçàèìîäåéñòâèåì ñ êëèåíòîì.
×òî äåëàòü?
I Ïîïðîáóåì åùå óâåëè÷èòü ÷èñëî ïðîöåññîâ?
74. Íåäîèñïîëüçîâàíèå æåëåçà
Íà÷èíàåì ðàçáèðàòüñÿ
I Õðàíèëèùå âûõîäèò íà ñâîè RPS ïðè äîñòàòî÷íî áîëüøîì ÷èñëå
ñîåäèíåíèé ê íåìó.
I Ëèáî õðàíèëèùå íàäî ðàñïîëàãàòü ëîêàëüíî.
íåïðèåìëåìî.
I Òî æå ñàìîå è ñ âçàèìîäåéñòâèåì ñ êëèåíòîì.
×òî äåëàòü?
I Ïîïðîáóåì åùå óâåëè÷èòü ÷èñëî ïðîöåññîâ?
I Ïðîáëåìû ñòàëè áîëüøå!
75. Íåäîèñïîëüçîâàíèå æåëåçà
Íà÷èíàåì ðàçáèðàòüñÿ
I Õðàíèëèùå âûõîäèò íà ñâîè RPS ïðè äîñòàòî÷íî áîëüøîì ÷èñëå
ñîåäèíåíèé ê íåìó.
I Ëèáî õðàíèëèùå íàäî ðàñïîëàãàòü ëîêàëüíî.
íåïðèåìëåìî.
I Òî æå ñàìîå è ñ âçàèìîäåéñòâèåì ñ êëèåíòîì.
×òî äåëàòü?
I Ïîïðîáóåì åùå óâåëè÷èòü ÷èñëî ïðîöåññîâ?
I Ïðîáëåìû ñòàëè áîëüøå!
I Ïî÷åìó?!
78. Íåäîèñïîëüçîâàíèå æåëåçà
Ðåçþìå ñèòóàöèè, åùå ðàç
I Èìååòñÿ 100500 ñòðîê êîäà, íàä êîòîðûì ðàáîòàëè íåñêîëüêî ëåò.
I Ýòîò êîä AS IS ïî ðåçóëüòàòàì èçìåðåíèé ìîæåò âûäàâàòü ãîðàçäî
áîëüøå RPS ÷åì â ðåàëüíîñòè.
79. Íåäîèñïîëüçîâàíèå æåëåçà
Ðåçþìå ñèòóàöèè, åùå ðàç
I Èìååòñÿ 100500 ñòðîê êîäà, íàä êîòîðûì ðàáîòàëè íåñêîëüêî ëåò.
I Ýòîò êîä AS IS ïî ðåçóëüòàòàì èçìåðåíèé ìîæåò âûäàâàòü ãîðàçäî
áîëüøå RPS ÷åì â ðåàëüíîñòè.
I Ïðîáëåìû íà÷èíàþòñÿ íà óðîâíå RPS íà ïîðÿäîê ìåíüøèõ, íåæåëè
ðàñ÷åòíûå.
83. Íåäîèñïîëüçîâàíèå æåëåçà
Åùå ðàç ðàññìîòðèì öèêë îáðàáîòêè
I Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ.
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
84. Íåäîèñïîëüçîâàíèå æåëåçà
Åùå ðàç ðàññìîòðèì öèêë îáðàáîòêè
I Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ.
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
85. Íåäîèñïîëüçîâàíèå æåëåçà
Åùå ðàç ðàññìîòðèì öèêë îáðàáîòêè
I Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ.
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
I Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì.
86. Íåäîèñïîëüçîâàíèå æåëåçà
Åùå ðàç ðàññìîòðèì öèêë îáðàáîòêè
I Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ.
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
I Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì.
I Îæèäàíèå îòïðàâêè äàííûõ êëèåíòó.
87. Íåäîèñïîëüçîâàíèå æåëåçà
Åùå ðàç ðàññìîòðèì öèêë îáðàáîòêè
I Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ.
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
I Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì.
I Îæèäàíèå îòïðàâêè äàííûõ êëèåíòó.
I Ñëåäóþùèé êëèåíò!
91. Íåäîèñïîëüçîâàíèå æåëåçà
Èçìåðÿåì
Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ. 70 ìêñ
Ïàðñèíã çàïðîñà, âàëèäàöèÿ. 6 ìêñ
Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ. 1 ìêñ
92. Íåäîèñïîëüçîâàíèå æåëåçà
Èçìåðÿåì
Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ. 70 ìêñ
Ïàðñèíã çàïðîñà, âàëèäàöèÿ. 6 ìêñ
Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ. 1 ìêñ
Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ. 16 ìêñ
93. Íåäîèñïîëüçîâàíèå æåëåçà
Èçìåðÿåì
Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ. 70 ìêñ
Ïàðñèíã çàïðîñà, âàëèäàöèÿ. 6 ìêñ
Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ. 1 ìêñ
Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ. 16 ìêñ
Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì. 10 ìêñ
94. Íåäîèñïîëüçîâàíèå æåëåçà
Èçìåðÿåì
Îæèäàíèå çàïðîñà (äàííûõ) îò ïîëüçîâàòåëÿ. 70 ìêñ
Ïàðñèíã çàïðîñà, âàëèäàöèÿ. 6 ìêñ
Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ. 1 ìêñ
Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ. 16 ìêñ
Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì. 10 ìêñ
Îæèäàíèå îòïðàâêè äàííûõ êëèåíòó. 70 ìêñ
99. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä âûïîëíÿëñÿ: 6 + 1 + 10 = 17 ìêñ
I ×åãî-ëèáî îæèäàëè: 70 + 16 + 70 = 156 ìêñ
I Êîä âûïîëíÿåòñÿ òîëüêî 10% âðåìåíè!
100. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä âûïîëíÿëñÿ: 6 + 1 + 10 = 17 ìêñ
I ×åãî-ëèáî îæèäàëè: 70 + 16 + 70 = 156 ìêñ
I Êîä âûïîëíÿåòñÿ òîëüêî 10% âðåìåíè!
I È ïðè ýòîì òîðìîçèò!
105. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä, äåëàþùèé òîëüêî sleep â öèêëå íåïëîõî ãðóçèò CPU
- ïî ìîèì èçìåðåíèÿì - ãäå-òî 15% çàãðóçêè íà CPU
I Çàïóñòèâ äåñÿòîê òàêèõ “âîðêåðîâ”, ïîëó÷àåì ïðèìåðíî òàêóþ æå
íàãðóçêó êàê íà ïðîáëåìíîì ñåðâåðå.
106. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä, äåëàþùèé òîëüêî sleep â öèêëå íåïëîõî ãðóçèò CPU
- ïî ìîèì èçìåðåíèÿì - ãäå-òî 15% çàãðóçêè íà CPU
I Çàïóñòèâ äåñÿòîê òàêèõ “âîðêåðîâ”, ïîëó÷àåì ïðèìåðíî òàêóþ æå
íàãðóçêó êàê íà ïðîáëåìíîì ñåðâåðå.
I Ïîíÿòíî ÷òî ïðèìåð ñèíòåòè÷åñêèé (åñòü âîïðîñû ê ðåàëèçàöèè usleep).
107. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä, äåëàþùèé òîëüêî sleep â öèêëå íåïëîõî ãðóçèò CPU
- ïî ìîèì èçìåðåíèÿì - ãäå-òî 15% çàãðóçêè íà CPU
I Çàïóñòèâ äåñÿòîê òàêèõ “âîðêåðîâ”, ïîëó÷àåì ïðèìåðíî òàêóþ æå
íàãðóçêó êàê íà ïðîáëåìíîì ñåðâåðå.
I Ïîíÿòíî ÷òî ïðèìåð ñèíòåòè÷åñêèé (åñòü âîïðîñû ê ðåàëèçàöèè usleep).
Âåðíåìñÿ ê íàøåìó ñåðâåðó
108. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä, äåëàþùèé òîëüêî sleep â öèêëå íåïëîõî ãðóçèò CPU
- ïî ìîèì èçìåðåíèÿì - ãäå-òî 15% çàãðóçêè íà CPU
I Çàïóñòèâ äåñÿòîê òàêèõ “âîðêåðîâ”, ïîëó÷àåì ïðèìåðíî òàêóþ æå
íàãðóçêó êàê íà ïðîáëåìíîì ñåðâåðå.
I Ïîíÿòíî ÷òî ïðèìåð ñèíòåòè÷åñêèé (åñòü âîïðîñû ê ðåàëèçàöèè usleep).
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Êàæäàÿ îòäåëüíàÿ ÷àñòü èìååò õîðîøóþ ïðîèçâîäèòåëüíîñòü
109. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä, äåëàþùèé òîëüêî sleep â öèêëå íåïëîõî ãðóçèò CPU
- ïî ìîèì èçìåðåíèÿì - ãäå-òî 15% çàãðóçêè íà CPU
I Çàïóñòèâ äåñÿòîê òàêèõ “âîðêåðîâ”, ïîëó÷àåì ïðèìåðíî òàêóþ æå
íàãðóçêó êàê íà ïðîáëåìíîì ñåðâåðå.
I Ïîíÿòíî ÷òî ïðèìåð ñèíòåòè÷åñêèé (åñòü âîïðîñû ê ðåàëèçàöèè usleep).
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Êàæäàÿ îòäåëüíàÿ ÷àñòü èìååò õîðîøóþ ïðîèçâîäèòåëüíîñòü
äîñòàòî÷íóþ äëÿ ðàçâèòèÿ ïðîåêòà åùå íà íåñêîëüêî ëåò âïåðåä.
110. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä, äåëàþùèé òîëüêî sleep â öèêëå íåïëîõî ãðóçèò CPU
- ïî ìîèì èçìåðåíèÿì - ãäå-òî 15% çàãðóçêè íà CPU
I Çàïóñòèâ äåñÿòîê òàêèõ “âîðêåðîâ”, ïîëó÷àåì ïðèìåðíî òàêóþ æå
íàãðóçêó êàê íà ïðîáëåìíîì ñåðâåðå.
I Ïîíÿòíî ÷òî ïðèìåð ñèíòåòè÷åñêèé (åñòü âîïðîñû ê ðåàëèçàöèè usleep).
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Êàæäàÿ îòäåëüíàÿ ÷àñòü èìååò õîðîøóþ ïðîèçâîäèòåëüíîñòü
äîñòàòî÷íóþ äëÿ ðàçâèòèÿ ïðîåêòà åùå íà íåñêîëüêî ëåò âïåðåä.
I Áîëüøóþ ÷àñòü âðåìåíè (90%) íàø êîä ïðîâîäèò â îæèäàíèè.
111. Íåäîèñïîëüçîâàíèå æåëåçà
Èòîãî
I Êîä, äåëàþùèé òîëüêî sleep â öèêëå íåïëîõî ãðóçèò CPU
- ïî ìîèì èçìåðåíèÿì - ãäå-òî 15% çàãðóçêè íà CPU
I Çàïóñòèâ äåñÿòîê òàêèõ “âîðêåðîâ”, ïîëó÷àåì ïðèìåðíî òàêóþ æå
íàãðóçêó êàê íà ïðîáëåìíîì ñåðâåðå.
I Ïîíÿòíî ÷òî ïðèìåð ñèíòåòè÷åñêèé (åñòü âîïðîñû ê ðåàëèçàöèè usleep).
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Êàæäàÿ îòäåëüíàÿ ÷àñòü èìååò õîðîøóþ ïðîèçâîäèòåëüíîñòü
äîñòàòî÷íóþ äëÿ ðàçâèòèÿ ïðîåêòà åùå íà íåñêîëüêî ëåò âïåðåä.
I Áîëüøóþ ÷àñòü âðåìåíè (90%) íàø êîä ïðîâîäèò â îæèäàíèè.
I ×òî äåëàòü?
120. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ìàøèíà ñîáûòèé
I Âñÿ ðàáîòà äåëàåòñÿ â îáðàáîò÷èêå ñîáûòèÿ.
- â îáùåì ñëó÷àå - callback.
I Êîãäà ïðîãðàììå íå÷åãî äåëàòü (íàïðèìåð îíà æäåò ñîáûòèÿ), òî
óïðàâëåíèå âîçâðàùàåòñÿ ìàøèíå ñîáûòèé.
â îáùåì ñëó÷àå - return èç callback.
121. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ìàøèíà ñîáûòèé
I Âñÿ ðàáîòà äåëàåòñÿ â îáðàáîò÷èêå ñîáûòèÿ.
- â îáùåì ñëó÷àå - callback.
I Êîãäà ïðîãðàììå íå÷åãî äåëàòü (íàïðèìåð îíà æäåò ñîáûòèÿ), òî
óïðàâëåíèå âîçâðàùàåòñÿ ìàøèíå ñîáûòèé.
â îáùåì ñëó÷àå - return èç callback.
I Îáðàáîò÷èê ñîáûòèÿ ìîæåò ãåíåðèðîâàòü äðóãèå ñîáûòèÿ è
óñòàíàâëèâàòü äðóãèå îáðàáîò÷èêè.
128. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïåðåñòðîèì íàø ñåðâåð
I Îæèäàíèå çàïðîñà îò ïîëüçîâàòåëÿ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë çàïðîñ îò ïîëüçîâàòåëÿ
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
- íå èçìåíèòñÿ
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
- íå èçìåíèòñÿ
129. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïåðåñòðîèì íàø ñåðâåð
I Îæèäàíèå çàïðîñà îò ïîëüçîâàòåëÿ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë çàïðîñ îò ïîëüçîâàòåëÿ
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
- íå èçìåíèòñÿ
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
- íå èçìåíèòñÿ
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
130. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïåðåñòðîèì íàø ñåðâåð
I Îæèäàíèå çàïðîñà îò ïîëüçîâàòåëÿ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë çàïðîñ îò ïîëüçîâàòåëÿ
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
- íå èçìåíèòñÿ
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
- íå èçìåíèòñÿ
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë îòâåò èç ÁÄ
131. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïåðåñòðîèì íàø ñåðâåð
I Îæèäàíèå çàïðîñà îò ïîëüçîâàòåëÿ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë çàïðîñ îò ïîëüçîâàòåëÿ
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
- íå èçìåíèòñÿ
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
- íå èçìåíèòñÿ
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë îòâåò èç ÁÄ
I Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì.
132. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïåðåñòðîèì íàø ñåðâåð
I Îæèäàíèå çàïðîñà îò ïîëüçîâàòåëÿ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë çàïðîñ îò ïîëüçîâàòåëÿ
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
- íå èçìåíèòñÿ
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
- íå èçìåíèòñÿ
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë îòâåò èç ÁÄ
I Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì.
- íå èçìåíèòñÿ
133. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïåðåñòðîèì íàø ñåðâåð
I Îæèäàíèå çàïðîñà îò ïîëüçîâàòåëÿ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë çàïðîñ îò ïîëüçîâàòåëÿ
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
- íå èçìåíèòñÿ
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
- íå èçìåíèòñÿ
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë îòâåò èç ÁÄ
I Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì.
- íå èçìåíèòñÿ
I Îæèäàíèå îòïðàâêè äàííûõ êëèåíòó.
134. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïåðåñòðîèì íàø ñåðâåð
I Îæèäàíèå çàïðîñà îò ïîëüçîâàòåëÿ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë çàïðîñ îò ïîëüçîâàòåëÿ
I Ïàðñèíã çàïðîñà, âàëèäàöèÿ.
- íå èçìåíèòñÿ
I Ôîðìèðîâàíèå çàïðîñà (çàïðîñîâ) â ÁÄ.
- íå èçìåíèòñÿ
I Îæèäàíèå îòâåòà (îòâåòîâ) èç ÁÄ.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ ïðèøåë îòâåò èç ÁÄ
I Ñîåäèíåíèå äàííûõ èç ÁÄ ñ øàáëîíîì.
- íå èçìåíèòñÿ
I Îæèäàíèå îòïðàâêè äàííûõ êëèåíòó.
- çàìåíèòñÿ îáðàáîò÷èêîì ñîáûòèÿ äàííûå ïîëüçîâàòåëþ îòïðàâëåíû
141. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
×òî çàòðîíóòî èçìåíåíèÿìè
I Èíòåðôåéñ ñ âåáñåðâåðîì (ïîëó÷åíèå ïàðàìåòðîâ çàïðîñà èòï)
- íåêðèòè÷íî.  êðàéíåì ñëó÷àå îáõîäèòñÿ íàïèñàíèåì âðàïïåðîâ. Â
áîëüøèíñòâå ñëó÷àåâ âîîáùå íåçàìåòíî.
142. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
×òî çàòðîíóòî èçìåíåíèÿìè
I Èíòåðôåéñ ñ âåáñåðâåðîì (ïîëó÷åíèå ïàðàìåòðîâ çàïðîñà èòï)
- íåêðèòè÷íî.  êðàéíåì ñëó÷àå îáõîäèòñÿ íàïèñàíèåì âðàïïåðîâ. Â
áîëüøèíñòâå ñëó÷àåâ âîîáùå íåçàìåòíî.
I Èíòåðôåéñ ñ ÁÄ.
143. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
×òî çàòðîíóòî èçìåíåíèÿìè
I Èíòåðôåéñ ñ âåáñåðâåðîì (ïîëó÷åíèå ïàðàìåòðîâ çàïðîñà èòï)
- íåêðèòè÷íî.  êðàéíåì ñëó÷àå îáõîäèòñÿ íàïèñàíèåì âðàïïåðîâ. Â
áîëüøèíñòâå ñëó÷àåâ âîîáùå íåçàìåòíî.
I Èíòåðôåéñ ñ ÁÄ.
- êðèòè÷íî. Ìíîãî êîäà áèçíåñëîãèêè ïîåõàëî â callbacks. Ñëîæíóþ
ëîãèêó ïðàêòè÷åñêè íåâîçìîæíî ðåàëèçîâàòü. Òðåáóåòñÿ ïåðåïèñûâàíèå
90% ïðîåêòà.
149. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïëàíèðîâùèê
Ïîñêîëüêó ïëàíèðîâùèê OS - î÷åíü òÿæåëûé, íåîáõîäèì ïëàíèðîâùèê
userspace.
I Íåâûòåñíÿþùàÿ ìíîãîçàäà÷íîñòü
I Ïðîñòîå ïîðîæäåíèå “ïðîöåññîâ”
I Ïðîñòîå óïðàâëåíèå
Òðè îñíîâíûõ ìåòîäà
I Ñîçäàòü ïðîöåññ (create, async)
150. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïëàíèðîâùèê
Ïîñêîëüêó ïëàíèðîâùèê OS - î÷åíü òÿæåëûé, íåîáõîäèì ïëàíèðîâùèê
userspace.
I Íåâûòåñíÿþùàÿ ìíîãîçàäà÷íîñòü
I Ïðîñòîå ïîðîæäåíèå “ïðîöåññîâ”
I Ïðîñòîå óïðàâëåíèå
Òðè îñíîâíûõ ìåòîäà
I Ñîçäàòü ïðîöåññ (create, async)
I Ïåðåäàòü óïðàâëåíèå ïëàíèðîâùèêó (yield, cede)
151. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Ïëàíèðîâùèê
Ïîñêîëüêó ïëàíèðîâùèê OS - î÷åíü òÿæåëûé, íåîáõîäèì ïëàíèðîâùèê
userspace.
I Íåâûòåñíÿþùàÿ ìíîãîçàäà÷íîñòü
I Ïðîñòîå ïîðîæäåíèå “ïðîöåññîâ”
I Ïðîñòîå óïðàâëåíèå
Òðè îñíîâíûõ ìåòîäà
I Ñîçäàòü ïðîöåññ (create, async)
I Ïåðåäàòü óïðàâëåíèå ïëàíèðîâùèêó (yield, cede)
I Ðàçáóäèòü âûáðàííûé ïðîöåññ (wakeup, ready)
156. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Èíòåãðèðóåì ñ ìàøèíîé ñîáûòèé
Ñòðóêòóðà êîäà òåïåðü âûãëÿäèò òàê:
I Ðåãèñòðàöèÿ ñîáûòèÿ â ìàøèíå ñîáûòèé
I Ïåðåäà÷à óïðàâëåíèÿ ïëàíèðîâùèêó
I Ñîáûòèå áóäèò òåêóùèé ïðîöåññ (ôàéáåð)
I Ïðîãðàììà ïðîäîëæàåò ðàáîòó ñ äàííûìè îò ñîáûòèÿ
157. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Èíòåãðèðóåì ñ ìàøèíîé ñîáûòèé
Ñòðóêòóðà êîäà òåïåðü âûãëÿäèò òàê:
I Ðåãèñòðàöèÿ ñîáûòèÿ â ìàøèíå ñîáûòèé
I Ïåðåäà÷à óïðàâëåíèÿ ïëàíèðîâùèêó
I Ñîáûòèå áóäèò òåêóùèé ïðîöåññ (ôàéáåð)
I Ïðîãðàììà ïðîäîëæàåò ðàáîòó ñ äàííûìè îò ñîáûòèÿ
Èòîãî
Âåðíóëèñü ê (ïî÷òè) òðàäèöèîííîìó âèäó ïðîãðàììû.
164. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Äîáàâëÿåì ìàøèíó ñîáûòèé
I Äîáàâëÿåì áèáëèîòåêó fibers
I Ïåðåïèñûâàåì èíòåðôåéñ ñ âåáñåðâåðîì
- íåêðèòè÷íî, ðåøàåòñÿ âðàïïåðîì.
I Ïåðåïèñûâàåì èíòåðôåéñ ñ ÁÄ
- îòíîñèòåëüíî òðóäîåìêî, íî ðåøàåòñÿ âðàïïåðîì.
165. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Äîáàâëÿåì ìàøèíó ñîáûòèé
I Äîáàâëÿåì áèáëèîòåêó fibers
I Ïåðåïèñûâàåì èíòåðôåéñ ñ âåáñåðâåðîì
- íåêðèòè÷íî, ðåøàåòñÿ âðàïïåðîì.
I Ïåðåïèñûâàåì èíòåðôåéñ ñ ÁÄ
- îòíîñèòåëüíî òðóäîåìêî, íî ðåøàåòñÿ âðàïïåðîì.
I Ïåðåïèñûâàåì äðóãèå ñåòåâûå îáðàùåíèÿ (åñëè åñòü)
166. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Äîáàâëÿåì ìàøèíó ñîáûòèé
I Äîáàâëÿåì áèáëèîòåêó fibers
I Ïåðåïèñûâàåì èíòåðôåéñ ñ âåáñåðâåðîì
- íåêðèòè÷íî, ðåøàåòñÿ âðàïïåðîì.
I Ïåðåïèñûâàåì èíòåðôåéñ ñ ÁÄ
- îòíîñèòåëüíî òðóäîåìêî, íî ðåøàåòñÿ âðàïïåðîì.
I Ïåðåïèñûâàåì äðóãèå ñåòåâûå îáðàùåíèÿ (åñëè åñòü)
- âðàïïåðû
167. Ñîáûòèéíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
Âåðíåìñÿ ê íàøåìó ñåðâåðó
I Äîáàâëÿåì ìàøèíó ñîáûòèé
I Äîáàâëÿåì áèáëèîòåêó fibers
I Ïåðåïèñûâàåì èíòåðôåéñ ñ âåáñåðâåðîì
- íåêðèòè÷íî, ðåøàåòñÿ âðàïïåðîì.
I Ïåðåïèñûâàåì èíòåðôåéñ ñ ÁÄ
- îòíîñèòåëüíî òðóäîåìêî, íî ðåøàåòñÿ âðàïïåðîì.
I Ïåðåïèñûâàåì äðóãèå ñåòåâûå îáðàùåíèÿ (åñëè åñòü)
- âðàïïåðû
I Èòîãî: ïåðåïèñûâàåì îêîëî 5% êîäà.
174. Áèáëèîòåêè è ÿçûêè
I Perl
Coro + AnyEvent
I Python
fibers + twisted
I PHP5
ïîÿâèëñÿ îïåðàòîð yield, fiber
176. ×òî äàëüøå?
I Èñïîëüçóåì fiber’û/event-ìàøèíû â òîì ÿçûêå ê êîòîðîìó ïðèâûêëè
177. ×òî äàëüøå?
I Èñïîëüçóåì fiber’û/event-ìàøèíû â òîì ÿçûêå ê êîòîðîìó ïðèâûêëè
I Ðàññìàòðèâàåì ñóùåñòâóþùèå âàðèàíòû
178. ×òî äàëüøå?
I Èñïîëüçóåì fiber’û/event-ìàøèíû â òîì ÿçûêå ê êîòîðîìó ïðèâûêëè
I Ðàññìàòðèâàåì ñóùåñòâóþùèå âàðèàíòû
I Node.JS
179. ×òî äàëüøå?
I Èñïîëüçóåì fiber’û/event-ìàøèíû â òîì ÿçûêå ê êîòîðîìó ïðèâûêëè
I Ðàññìàòðèâàåì ñóùåñòâóþùèå âàðèàíòû
I Node.JS
- îòêàçàëèñü îò ïàðàäèãìû fibers
180. ×òî äàëüøå?
I Èñïîëüçóåì fiber’û/event-ìàøèíû â òîì ÿçûêå ê êîòîðîìó ïðèâûêëè
I Ðàññìàòðèâàåì ñóùåñòâóþùèå âàðèàíòû
I Node.JS
- îòêàçàëèñü îò ïàðàäèãìû fibers
I Tarantool...
189. Íåäîñòàòêè
I Äëÿ áîëüøèõ ïðîåêòîâ îäíîãî CPU âñå-òàêè ìàëîâàòî
I Ðåàëèçàöèè fiber’îâ äëÿ òðàäèöèîííûõ ßÏ ïëîõî ìàñøòàáèðóþòñÿ ïî
CPU/õîñòàì.
194. Ïåðñïåêòèâà
I Erlang
- õîðîøåå ìàñøòàáèðîâàíèå ïî CPU è õîñòàì
- î÷åíü êà÷åñòâåííîå ðåøåíèå
- âûñîêèé ïîðîã âõîæäåíèÿ
195. Ïåðñïåêòèâà
I Erlang
- õîðîøåå ìàñøòàáèðîâàíèå ïî CPU è õîñòàì
- î÷åíü êà÷åñòâåííîå ðåøåíèå
- âûñîêèé ïîðîã âõîæäåíèÿ
I Go
196. Ïåðñïåêòèâà
I Erlang
- õîðîøåå ìàñøòàáèðîâàíèå ïî CPU è õîñòàì
- î÷åíü êà÷åñòâåííîå ðåøåíèå
- âûñîêèé ïîðîã âõîæäåíèÿ
I Go
- áîëåå íèçêèé ïîðîã âõîæäåíèÿ