Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Яндекс.Директ: как мы деплоим наши Perl-web-при...
Search
Elena Bolshakova
June 13, 2014
Programming
800
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Яндекс.Директ: как мы деплоим наши Perl-web-приложения
http://event.yapcrussia.org/yr2014/talk/273
Elena Bolshakova
June 13, 2014
More Decks by Elena Bolshakova
See All by Elena Bolshakova
Here be dragons: perltrap.com
helena
0
190
Devel::YCallTrace -- noch ein anderes Werkzeug zur Analyse von Perl Programmen
helena
0
590
Other Decks in Programming
See All in Programming
スマート反転とウェブアクセシビリティ
camiha
0
170
Webの地図
yosuke_furukawa
PRO
3
3.1k
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
200
フロントエンドUIフレームワークのこれまでとこれから
ssssota
1
1.1k
AIとGame Jamで、ゲームを完成させた話
takahirosaeki
0
110
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
120
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
Press start. Python's next generation.
willingc
PRO
3
320
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
170
Featured
See All Featured
Fireside Chat
paigeccino
42
4k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
It's Worth the Effort
3n
188
29k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Balancing Empowerment & Direction
lara
6
1.3k
The agentic SEO stack - context over prompts
schlessera
0
910
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Transcript
ßíäåêñ.Äèðåêò: êàê ìû äåïëîèì íàøè Perl-ïðèëîæåíèÿ Åëåíà Áîëüøàêîâà 2014-06-13
Section 1 Êòî ìû
Ýòî ßíäåêñ
Ýòî ðåêëàìà
Ýòî ðàçìåùåíèå ðåêëàìû â ßíäåêñå Äèðåêò
Section 2 Êàêèå ìû
Öèôðû íåïðåðûâíàÿ ðàçðàáîòêà ñ 2003 ãîäà; 300 KSLOC perl-êîäà; ∼1000
èìåíîâàííûõ åäèíèö ôóíêöèîíàëüíîñòè: ñòðàíèöû web-èíòåðôåéñà; ìåòîäû âíåøíåãî API; ìåòîäû âíóòðåííèõ API; êðîíîâûå ñêðèïòû; èåðàðõèÿ ïîëüçîâàòåëåé (>15 ðîëåé); 30 ìëí. âíåøíèõ çàïðîñîâ ê perl-ïðèëîæåíèÿì / ñóòêè (ìíîãî çàïèñåé è òÿæåëûõ ÷òåíèé); mysql: ∼170 ìëðä. çàïèñåé îáùåíèå ñ äåñÿòêàìè ñìåæíûõ ñåðâèñîâ; ñåé÷àñ ∼40 ðàçðàáîò÷èêîâ, â ò.÷. ∼20 perl-ðàçðàáîò÷èêîâ; 10000 êîììèòîâ / 7 ìåñÿöåâ, â ò.÷. 2500 trunk-êîììèòîâ; ïðîäàêøåí: perl-êîä íà ∼40 ñåðâåðàõ; ∼2 ðåëèçà â íåäåëþ.
Òåõíîëîãèè ubuntu perl server-side javascript python, django mysql mongodb map-reduce
(YT) memcached
Òåõíîëîãèè-2 plack apache nginx starman gearman ubic soap (SOAP::Lite) xmlrpc
(XMLRPC::Lite) jsonrpc (JSON::RPC, JSON::RPC::Simple::Client, JSON::RPC2::Client)
Ñðåäû ðàçðàáîò÷åñêèå, ÒÑ, ïðîäàêøåí: ðàçðàáîò÷åñêèå ñ óïðîùåííîé èíôðàñòðóêòóðîé; ÒÑ
ñ ïîëíîöåííîé, êàê íà ïðîäàêøåíå; ðàçðàáîò÷åñêèå è òåñòîâûå ÁÄ: îáåçëè÷åííûé áåêàï ïðîäàêøåíà ðåãóëÿðíî òåñòèðóåòñÿ áåêàï è âîññòàíîâëåíèå; ðàçíîîáðàçíûå äàííûå äëÿ òåñòèðîâàíèÿ; äîñòóïû ðàçäåëåíû (ïðîäàêøåí îáíîâëÿþò òîëüêî àäìèíû).
Section 3 Ïîðà â ïðîäàêøåí
Óïðàâëåíèå ñåðâåðàìè Ñîáñòâåííàÿ Rex-ïîäîáíàÿ óòèëèòà ïîâåðõ ssh; íà óïðàâëÿåìûõ ìàøèíàõ
íèêàêèõ àãåíòîâ.
Ðåëèçû ïåðâè÷íûé èñòî÷íèê èíôîðìàöèè î ðåëèçàõ òðåêåð: ÷òî è
êàê âûêëàäûâàåì; êàêèå ïðîáëåìû íàéäåíû; ñòàòóñû (ïîäòâåðæäåíèÿ QA, çàêàç÷èêà, RM); êàæäûé ðåëèç òåñòèðóåòñÿ íà ÒÑ; ÷òî òåñòèðîâàòü: èçìåíåíèÿ îò ïðîøëîãî ðåëèçà (svn log); ðåãðåññèîííûå òåñòû; â êàæäîì commit-message ññûëêà íà òèêåò â òðåêåðå (ïðîâåðÿåòñÿ svn hook-îì).
Êîä deb-ïàêåòû, apt Óäîáíî: ðàáîòàåò; óíèâåðñàëüíî; ìíîãî ãîòîâûõ èíñòðóìåíòîâ; çàâèñèìîñòè,
â ò.÷. íåïåðëîâûå. Íåóäîáíî: óñòàíàâëèâàòü íå âåðõíþþ âåðñèþ íåïðîñòî; ïîëíîöåííî îòêàòèòü âñå êàê áûëî íåïðîñòî.
Êîä, ìàëåíüêèå õèòðîñòè mainline releasable; ïàêåòèðóåòñÿ ëèáî òðàíê, ëèáî ðåëèçíûé
áðàí÷ (òðàíê + ÷åððè-ïèê); ïî âåðñèè âñåãäà ïîíÿòíî, êàêàÿ òî÷êà â ðåïîçèòîðèè ïàêåòèðîâàëàñü; îòäåëüíûé êîíòðîëèðóåìûé deb-ðåïîçèòîðèé; æóðíàë: ÷òî âûëîæåíî â êàæäûé ìîìåíò íà ñåðâåðàõ, ïèñüìà îá îáíîâëåíèÿõ; çàâèñèìîñòè óêàçûâàòü ñ >=; ïîòåíöèàëüíî îïàñíûå/ñëîæíîîòêàòûâàåìûå îáíîâëåíèÿ îòäåëüíî îò ïðî÷èõ ðåëèçîâ; çàðàíåå ïðîâåðÿòü ïðèãîäíîñòü çàâèñèìîñòåé ê óñòàíîâêå.
Ìèãðàöèè: èçìåíåíèå ñòðóêòóðû ÁÄ (àëüòåðû) Ôàéëû ìèãðàöèé â /deploy ïèøóòñÿ
è êîììèòÿòñÿ âìåñòå ñ êîäîì; ôîðìàò ñòðîãèé, íî ÷åëîâåêî÷èòàåìûé: 20140613_client_comments.migr { type => 'sql', db => 'main', when => 'before', time_estimate => "20 sec", sql => "alter table clients add column `comment` varchar(140) default ''", } ïðèìåíÿþòñÿ ïîëóàâòîìàòè÷åñêè íà ÒÑ, âðó÷íóþ íà ïðîäàêøåíå;
Ìèãðàöèè: êîíâåðòàöèè äàííûõ 20140614_normalize_geo.migr { type => 'script', when =>
'after', time_estimate => "10 ÷àñîâ", comment => "åñëè óïàäåò -- ìîæíî çàïóñêàòü çàíîâî", script => "normalize_geo.pl", }
Ìèãðàöèè: ïðî÷èå äåéñòâèÿ 20131218_upgrade_nginx.migr { type => 'manual', when =>
'any', time_estimate => "10 min", text => "Âûïîëíèòü íà ñåðâåðàõ ãðóïïû PERL: apt-get install nginx-common=1.4.4-5 nginx=1.4.4-5 \ nginx-full=1.4.4-5 è çàòåì nginx-upgrade ", }
Ìèãðàöèè: æäåò ðåøåíèÿ àâòîìàòè÷åñêè ïðîâåðÿòü ïðèìåíåííîñòü; ïðîñòûå ñêðèïòû çàïóñêàòü áåç
ó÷àñòèÿ ÷åëîâåêà.
Ìèãðàöèè: ìàëåíüêèå õèòðîñòè ãëîáàëüíîãî ïîðÿäêà íåò; ÷åëîâåêîïîíÿòíûå èìåíà ñ ïðèìåðíîé
äàòîé; îáÿçàòåëüíûå ðåâüþ è àïïðóâû; óíèâåðñàëüíûé ôîðìàò äëÿ âñåõ äåéñòâèé, ñîïðîâîæäàþùèõ îáíîâëåíèå êîäà; õåëïåð äëÿ ñîçäàíèÿ øàáëîíà ìèãðàöèè; ïàðñèíã: Safe::reval; ñòðîãàÿ âàëèäàöèÿ; ïðîâåðêà ñèíòàêñèñà sql: DBIx::MyParsePP; âðåìÿ ïðèìåíåíèÿ: äî/ïîñëå âûêëàäêè êîäà/êîãäà óãîäíî; òÿæåëûå ìèãðàöèè; òåêñòîâûå îïèñàíèÿ ìèãðàöèé ïèøóòñÿ âìåñòå ñ changelog-îì â ðåëèçíûé òèêåò; åñëè íàäî êîììåíòàðèè, êàê îòêàòûâàòü.
Ìîíèòîðèíã ñõåìû ÁÄ Ôàéëû â /db_schema .schema.sql, .data.sql ñõåìû
è ñëîâàðíûå äàííûå; .text îïèñàíèå òàáëèö; ñêðèïò äëÿ ñðàâíåíèÿ ÁÄ ñ ôàéëàìè; îò÷åòû î ðàñõîæäåíèè ïðîäàêøåí-áàçû è ñîõðàíåííûõ ñõåì. À åùå SchemaSpy: âèçóàëèçàöèÿ ñâÿçåé â ÁÄ. Æäåò ðåøåíèÿ: ïðîâåðÿòü àêòóàëüíîñòü ñîõðàíåííûõ ñõåì ñðàçó ïîñëå êîììèòà.
Ðåãóëÿðíûå çàïóñêè ñêðèïòîâ Ôàéëû â /etc/cron.d Ãåíåðèðóþòñÿ ïðè ñáîðêå ïàêåòîâ
èç pod + íåìíîãî ïîäãîòîâëåííûõ çàðàíåå
Section 4 Áîíóñ-òðåê
Ïðîâåðêè, êîòîðûå äåëàþò æèçíü ñïîêîéíåå ñèíòàêñèñ è ïîäòâåðæäåííîñòü ìèãðàöèé; îòñóòñòâèå
îòëàäî÷íîé ïå÷àòè â ñêðèïòàõ ìèãðàöèé; ñèíòàêñèñ êðîíòàáîâ (íàïðèìåð: ïðè îòñóòñòâèè ïåðåâîäà ñòðîêè â êîíöå ôàéëà cron èãíîðèðóåò ôàéë); ñîîòâåòñòâèå ñóùåñòâóþùèõ ñêðèïòîâ è çàïèñåé â êðîíòàáàõ; ïðàâèëüíûå ôàéëû â /debian: ãëîáàëüíûå ôàéëû + ôàéëû, îòíîñÿùèåñÿ ê ñóùåñòâóþùèì ïàêåòàì; êîìïèëÿöèÿ âñåãî perl-êîäà; êîìïèëÿöèÿ âñåõ TT-øàáëîíîâ; ñîîòâåòñòâèå èñïîëüçóåìûõ è ñóùåñòâóþùèõ øàáëîíîâ; íà âñåõ ñêðèïòàõ åñòü svn:executable + ïðàâèëüíûé shebang;
Ïðîâåðêè, êîòîðûå äåëàþò æèçíü ñïîêîéíåå îòñóòñòâèå ñëåäîâ íåäîðàçðåøåííûõ êîíôëèêòîâ; mergeinfo
òîëüêî íà êîðíå ïðîåêòà; íå÷åëîâåêî÷èòàåìûå ôàéëû èìåþò ïðàâèëüíûé mime-type; âñå èñõîäíèêè â utf8; ìåòêà NO_PRODUCTION.
Ñïàñèáî! Âîïðîñû? Åëåíà Áîëüøàêîâà,
[email protected]