Բաժանորդագրվեք Նավալնիի անվանակարգին։ Անձնագրային տվյալների ճանաչում. Ինչ է արվել համակարգի նոր տարբերակում

Քարոզարշավի մեկնարկից հետո առաջին օրերը շատ բարդ են, շատ զբաղված ընթացիկ խնդիրներով։ Ու թեև մենք միշտ եղել ենք (և կլինենք) մեր աշխատանքում առավելագույն հրապարակայնության կողմնակիցները, սակայն այս պահին գերմանրամասն ռեպորտաժներ պետք չէ սպասել։ Այնուամենայնիվ, մի քանի խոսք պետք է ասել.

Ինչ է կատարվում հիմա.
Ամեն ինչ շատ պարզ է. մեկ տարվա ընթացքում մեզ անհրաժեշտ կլինի 400-500 հազար ստորագրություն հավաքել ողջ հանրապետությունում (դրանցից 300 հազարը ընտրելու համար և պայմանով. առնվազն 7500 հատ 40 մարզում) մի քանի շաբաթվա ընթացքում։ նախաամանորյա իրարանցում. Որպեսզի գոնե տեսականորեն դա անելու հնարավորություն ունենանք, մենք այժմ պետք է վերակառուցենք ամբողջ ենթակառուցվածքը.
- որպեսզի կայքի միջոցով գրանցվեն այս 400-500 հազար մարդիկ, ովքեր նախապես կտան բոլոր տվյալները և կխոստանան գրանցվել D-ի օրը;
- ստեղծել տարածաշրջանային շտաբներ, հավաքագրել և վերապատրաստել մարդկանց, ովքեր կպատրաստեն ստորագրությունների ցուցակները և D-ի օրը կկարողանան գերարագ հավաքել 7500 աջակիցների ստորագրությունները, ովքեր գրանցվել են տվյալների բազայում. - որպեսզի գումար լինի այս ամբողջ տարածաշրջանային ցանցի, տարածքների վարձակալության և աշխատողների վարձատրության, փաստաբանների և նոր աջակիցներ ներգրավելու համար. մոտավոր նախահաշիվը նախատեսում է 150-200 միլիոն ռուբլի տարածաշրջանի բյուջե (բյուջեն շուտով կհրապարակվի):

Սրանք այն խնդիրներն են, որոնք մենք սկսել ենք լուծել նախօրեին։ Մի կողմից, թվում է, թե շատ հաջողակ է: Առաջին երկու օրերին՝ ընդամենը 48 ժամում, մենք գրանցվեցինք քարոզարշավի կայքում ավելի քան 22300 մարդ(սա նվազագույն պահանջվող 300 հազարի 7%-ից ավելին է), և նվիրատվություններ է ներգրավել՝ ավելի քան 5 միլիոն ռուբլի(սա նվազագույն պահանջվող 150 մլն-ի 3%-ից ավելին է)։ Կարծես եթե էքստրապոլյացիա անես, կստացվի, որ մի քանի ամսից բոլոր նպատակները կիրականանան։

Բայց դուք հիանալի հասկանում եք, որ հնարավոր չէ էքստրապոլացիա անել։ Յուրաքանչյուր հաջորդ մարդ և ռուբլի ավելի դժվար կլինի (և դա լիովին նորմալ է); պետք է լավ աշխատանք կատարել. Սա հասկանալով՝ մենք քարոզարշավը մեկնարկեցինք «պաշտոնական» ստորագրահավաքի մեկնարկից ուղիղ մեկ տարի առաջ։

Ի՞նչ է անում հիմա շտաբը։
Ըստ այդմ՝ այժմ շտաբը պատրաստում է մի կառույց, որը կապահովի մեր քարոզարշավի առջեւ ծառացած խնդիրների լուծումը։ Պատրաստում է հազար հարցերի պատասխաններ.
- ինչպես են ստեղծվելու մարզային շտաբները, որտեղ, ինչ կարգով, ով է ղեկավարելու դրանք,
- քարոզչական ի՞նչ նյութեր կստանան կամավորները (և ավելի քան 6100 մարդթեկնածու Նավալնիին ոչ միայն խոստացել են իրենց ստորագրությունը՝ ի պաշտպանություն առաջադրման, այլև խոստացել են իրենց կամավոր ջանքերը ներդնել քարոզարշավում), որպեսզի այդ նյութերի օգնությամբ գրգռեն «չկողմնորոշվածներին»,
- ինչպես ենք ապահովելու շտաբների, կամավորների, հավաքողների, հենց ստորագրությունների անվտանգությունը.
- Ի՞նչ միջոցառումներ ենք անցկացնելու Մոսկվայում և մարզերում ...
Եվ այսպես շարունակ։ Ցուցակը գրեթե անվերջ է։ Այստեղ մենք պարզապես գրեցինք տախտակի վրա գտնվող ոլորտների ցանկը. այս ոլորտներից յուրաքանչյուրի համար կլինեն նպատակներ, պատասխանատու մարդիկ, ռազմավարություն և կոնկրետ միջոցառումների պլան, դա արդեն սարսափելի է: Բայց մենք կհասցնենք, ոչ առաջին անգամ:

Ի՞նչ հարցեր ենք տալիս:
Ամենահաճախակի և սիրված հարցն է «ինչպես օգնել»:
Օգնությունը պարզ է. Տես թիրախների ցանկը վերևում:
- խոստանալ ստորագրել
- գումար ուղարկել
- համոզվելու, որ ավելի շատ ստորագրություններ կան։

Հենց վերջինիս վրա էլ կկենտրոնանանք առաջիկայում։ Ի վերջո, մենք ստորագրություն ենք խնդրում ի պաշտպանություն առաջադրման, ոչ թե ի պաշտպանություն անձամբ թեկնածու Նավալնիի, այլ ի պաշտպանություն նրա ընտրություններին մասնակցելու փաստի. նախագահական ընտրություններն առաջին անգամ մրցակցային դարձնելու համար։ 20 տարի. Ոչ միայն Նավալնիի կողմնակիցներին կարելի է համոզել նման ստորագրություն դնել. Այն գաղափարը, որ ընտրություններում իրական մրցակցություն է պետք, կիսում է ռուսաստանցիների ճնշող մեծամասնությունը (այս մասին հարցում ենք անցկացրել, տվյալները նույնպես կհրապարակենք)։
Հետևաբար, մենք շուտով կամավորներին և համախոհներին կտանք գործիքներ գնալու հարազատների/ընկերների/գործընկերների մոտ, նույնիսկ եթե նրանք թերահավատ են, և համոզելու նրանց, որ նրանք ամեն դեպքում կշահեն Նավալնիի թեկնածության համար իրենց ստորագրությունից (նույնիսկ եթե իրենք գնան): քվեարկել Պուտինի օգտին):

Դե նրանք էլ են շատ հարցեր տալիս ծրագրի ու այլ բաների մասին։ Թեկնածուն ինքը փայլուն է պատասխանում այս բոլոր հարցերին, այստեղ ավելացնելու շատ բան չունեմ։

Պապիկներ, որտեղ մենք գրանցում ենք աջակիցներ հսկայական Ռուսաստանի տարբեր մասերից

Ինչի՞ մասին են մարդիկ գրում մեզ։
Շատ իրեր։ Մենք կարդում ենք բոլոր տառերը. Այն ամենը, ինչ պատասխանի կարիք ունի, անպայման կպատասխանվի:
Նամակների ամենահաճելի և քաղցր տեսակը նամակներն են. «Ես՝ փաստաբան Վասյա Իվանովը, ապրում եմ Իժևսկում, երբ բացվի մեր շտաբը, ինձ տեղյակ պահեք, ես կգամ օգնության»։ Մենք երախտագիտությամբ ընդունում ենք բոլոր նման տառերը և տեղադրում հատուկ թղթապանակներում (տես նկարը): Իսկ երբ Իժևսկում շտաբ բացենք, կգրենք Վասյա Իվանովին և կկանչենք օգնելու։

Եվ նրանք նաև գրում են. «Ես՝ Պետյա Զայցևս, ծրագրավորողս, շաբաթական այնքան ժամ ունեմ քեզ համար»։ Եվ այս տառերը նույնպես տեղադրում ենք հատուկ թղթապանակներում։ Եվ մենք բոլորին կկանչենք օգնելու։ Նամակներ գրեք, մենք կարդում ենք:

Եվ ամենակարևորը՝ մի փոքր համբերություն ունեցեք։ Դուք տեսել եք ուղղությունների ցանկը: Այս փղին պետք է մաս-մաս ուտել։ Մեզ մեկ տարվա աշխատանք է սպասվում. Անհնար է մեկ օրում բացել 50 մարզային շտաբ, ստեղծել քարոզչական նյութերի մի ամբողջ շարք, ծրագրավորողների համար հաքաթոն կազմակերպել և քարոզարշավի զանգերի կենտրոն ստեղծել, թեև, իհարկե, մենք իսկապես ցանկանում ենք այս ամենը անել որքան հնարավոր է շուտ: Մենք քայլ առ քայլ, ամիս առ ամիս շարժվելու ենք ըստ լավ մտածված պլանի, որի շրջանակներում ամեն ինչ տեղի կունենա իր ժամանակին։ Եվ աստիճանաբար յուրաքանչյուր ոք, ով կամավոր է օգնել, իրական հնարավորություն կունենա օգնելու և իր ներդրումն ունենալ

Սա նաև պատմություն է այն մասին, թե ինչպես, օգտագործելով անվճար ծրագրակազմ և էժան բաղադրիչներ, ստեղծվեց փոքր թիմ բարդ համակարգստորագրահավաք ամբողջ երկրում։ Նախագիծը բարդույթ չունի տեխնիկական լուծումներ, բայց շատ են կարևոր մանրուքներինչը հնարավոր չէ կանխատեսել՝ հիմնվելով ՏՏ զարգացման բնորոշ փորձի վրա:

Հարմարության համար նյութը բաժանված է չորս գրառման, որոնք լավագույնս ընթերցվում են հաջորդականությամբ։

Սա տեխնիկական նյութ, սակայն այստեղ քննարկվող շատ հարցեր անհասկանալի են առանց ներկա քաղաքական ենթատեքստի նվազագույն իմացության, ուստի այն նկարագրվում է անհրաժեշտ չափով։ Եթե ​​ինչ-ինչ պատճառներով ձեզ վախեցնում է «Նավալնի» բառը (այն դեռ մի քանի անգամ կհայտնվի) կամ ժողովրդավարական ինստիտուտների հիշատակումը, պարզապես մի կարդացեք այս տեքստը։ Քաղաքական հարցերը մեկնաբանություններում չեն քննարկվի։

Քարոզարշավի նպատակը

Ալեքսեյ Նավալնիի գրանցումը որպես նախագահի թեկնածու.

ՏՏ բաժնին հանձնարարված առաջադրանքներ

(ժամանակագրական կարգով):

Բոլոր նրանց, ովքեր պատրաստ են ստորագրել մեր թեկնածուի առաջադրման համար, նախնական գրանցում.
- Ռուսաստանի ողջ տարածքում շտաբների ցանցի գործունեության ապահովում.
- 315 հազար իդեալական ստորագրությունների հավաքման համակարգի ստեղծում.

Պատմական և քաղաքական համատեքստ

Եթե ​​խորհրդարանական կուսակցություն չունես, ուրեմն ընտրություններին մասնակցելու համար պետք է ստորագրահավաք։ Սա պաշտպանական ընթացակարգ է, որն օգտագործվում է «անհետևողական» թեկնածուներին ընտրություններից դուրս պահելու համար։

Գրանցման մերժման անսահման հնարավորությունները սահմանվում են հավաքագրման կանոնների մակարդակով.

  • Ստորագրահավաքը խիստ սահմանափակ է ժամանակային առումով.
  • Օրենքով ամուսնության համար նախատեսված ստորագրությունների չնչին տոկոսն է հատկացվում, լավ լուսանցքով ստորագրություններ հանձնել հնարավոր չէ;
  • Անհնար է ստուգել ձեր կողմից ստորագրությունները, քանի որ ընտրողների տվյալները պետք է համապատասխանեն FMS տվյալների բազային, որի մուտքը հասանելի է միայն պետական ​​մարմիններին.
  • Գրաֆոլոգը ԿԸՀ-ում ստուգելիս կարող է մերժել ցանկացած ստորագրություն և սխալի դեպքում իրավական պատասխանատվություն չի կրում.
  • Ստուգման սխեման ինքնին ենթադրում է, որ կլինեն կեղծ դրականների զգալի տոկոս (Բայեսի թեորեմի պարադոքսը որպես խոչընդոտ ընտրություններում):

Սրան մենք արդեն հանդիպել ենք Նովոսիբիրսկում, երբ ստորագրություններ էինք հավաքում Օրենսդիր ժողովի ընտրություններին մասնակցելու համար։

Նովոսիբիրսկում ստորագրություններ հավաքելու համար մենք ստեղծեցինք Reaper համակարգը, որը կենտրոնացած էր «դաշտում» և խորանարդի ստորագրություններ հավաքելու վրա, կառավարում էր հավաքողների երթուղիները, հաշվի առավ բոլոր ստորագրությունների ցուցակները և հնարավորություն տվեց դասակարգել ստորագրությունները՝ հիմնվելով ստորագրությունների վրա։ տարբեր ստուգումների արդյունքները.

Նովոսիբիրսկում հավաքագրողները բերեցին ավելի քան 16,000 ստորագրություն, որոնցից մենք ընտրեցինք և հանձնեցինք լավագույնը 11,722-ին: Չնայած ընտրության կոշտ գործընթացին, ընտրական հանձնաժողովի աշխատանքային խումբը գտավ բազմաթիվ «անվավեր ստորագրություններ», և ընտրական հանձնաժողովը հրաժարվեց գրանցել թեկնածուներին: Ավելին կարդացեք ստորագրությունների անվավեր ճանաչման անհեթեթ պատճառների մասին։

Նոր համակարգկառուցվել է՝ հաշվի առնելով ընտրական հանձնաժողովում ստորագրահավաքի և դրանց հետագա պաշտպանության կուտակված փորձը։

Ստորագրահավաքի նոր առանձնահատկությունները

Նախագահի թեկնածու առաջադրելու համար ստորագրահավաքի համար սահմանվում են էլ ավելի խիստ պայմաններ.

Պետք է ներկայացվի ոչ ավելի, քան 315000 ստորագրություն.
- Առնվազն 300 հազար ստորագրություն պետք է վավեր ճանաչվի.
- Մեկ մարզից 7500-ից ոչ ավելի ստորագրություն է հաշվվում.
- Հավաքածուների կարճ ժամանակահատվածի համար (դեկտեմբերի 27-ից հունվարի 31-ը) երկար ամանորյա արձակուրդներ են, երբ շատերը մեկնում են հանգստի։

Հաշվի առնելով նախկին փորձը և նոր պահանջները՝ մենք որդեգրել ենք հետևյալ հիմնական սկզբունքները.

Գլխավոր գրասենյակների համառուսական ցանց

Տարածաշրջանային քվոտաների պատճառով անհնար էր աշխատել, ասենք, խոշորագույն տասը քաղաքներում։ 315 հազար ստորագրություն կարելի էր հավաքել, եթե լուսաբանվեր առնվազն 40 քաղաք։ Ավելի դժվար է ստորագրահավաքը նոսր բնակեցված մարզերում, հետևաբար, գործնականում հաջող հավաքելու համար անհրաժեշտ էր շտաբներ բացել հանրապետության մարզերի մեծ մասում։

Հավաքածուի հաջող ավարտի պահին ստորագրությունների քանակի կանխատեսումը ցույց է տալիս, որ խոշոր քաղաքներում ստորագրելու պատրաստ մարդկանց թիվը զգալիորեն կգերազանցի տարածաշրջանային քվոտաները։ Մոսկվան (127 հազար) և Սանկտ Պետերբուրգը (63 հազար) չեն տեղավորվել էկրանին։

Ստորագրահավաք միայն շտաբում

Տնից տուն հավաքելու համար մենք ստիպված կլինեինք մի քանի հազար հավաքող վարձել: Բոլորը, ովքեր երբևէ աշխատել են վճարովի կոլեկցիոներների հետ (կամ, օրինակ, սոցիոլոգիայի ուսանողները), գիտեն, որ նրանք ոչ բոլորն են հավասարապես հարգում ընթացակարգը, և ոչ բոլորն են հաղթահարում պարզապես մեկ-երկու ստորագրություն «նկարելու» գայթակղությունը: Անզգույշ լցնելը հանգեցնում է ամուսնության մեծ տոկոսի, իսկ ստորագրություններ «նկարելը» այնքան տարածված խնդիր է, որ ԿԸՀ-ն նախատեսում է գրաֆոլոգի կողմից ստուգում։ Նույնիսկ գրաֆոլոգի առկայությունը նահանգում և մի քանի հայտարարությունների օրինակելի կատարումը ոստիկանությունում չեն կարող 100%-ով շտաբը ազատել «գծագրողներից» (ստուգել ենք)։ Բացի այդ, հավաքագրողը կարող է ստորագրություններ ավելացնել ոչ միայն չարամիտ դիտավորությամբ, այլ նաև հակառակը՝ «շտաբին օգնելու համար»։

Գիտեինք, որ «դաշտում» հավաքելիս անպայման կներկայացնենք «թունավոր հավաքողներ», ինչպես Նովոսիբիրսկում էր։ Թունավոր կոլեկցիոներները դիտավորյալ սխալներ են թույլ տալիս ընտրողի տվյալների մեջ (օրինակ՝ փոխարինում են անձնագրի համարի մեկ թվանշանը)։ Նրանց խնդիրն է ավելացնել անվավեր ստորագրությունների թիվը սահմանաչափից ավելի, որից հետո ընտրական հանձնաժողովը հրաժարվում է գրանցվել։ Նովոսիբիրսկը մեծ ջանքեր է ծախսել թունավոր մակագրությունները մաքրելու համար։ Ամբողջ երկրում հավաքելիս դա հնարավոր չէ:

Միայն ստացիոնար շտաբներում էր հնարավոր ապահովել ստորագրությունների բավարար որակը, ստորագրությունների թերթիկների ճշգրիտ լրացման պայմանները և դրանց անվտանգությունը։

Ստորագրության բազմափուլ ստուգում

Կատարյալ ստորագրությունները մաթեմատիկական աբստրակցիա են: Իրական ստորագրահավաքը բարդ ու բարդ գործընթաց է։ Նույնիսկ ազնիվ և լավ պատրաստված կոլեկցիոներները սխալներ են թույլ տալիս, և հաշվի առնելով ժամանակի սղությունը, վարչական ճնշումներն ու սադրանքները, ամուսնություններն էլ ավելի շատ կլինեն:

Մենք ունենք բազմաթիվ տվյալներ, թե ինչպես են հայտնվում սխալները։ Մեր փորձով, միանգամայն ազնիվ կարգով հավաքված ստորագրությունների ցուցակներում լինելու է այն ստորագրությունների մոտ 10 տոկոսը, որոնք ընտրական հանձնաժողովն անվավեր է ճանաչում։

Մենք պետք է հանձնեինք ոչ թե պարզապես լավ ստորագրություններ, այլ ստորագրություններ, որոնք ընտրական հանձնաժողովը կընդուներ։ Դրա համար անհրաժեշտ էր ստուգման մի քանի փուլ և վարկանիշային մեխանիզմ՝ ընտրելու և հանձնելու միայն այն ստորագրությունները, որոնք, ամենայն հավանականությամբ, կանցնեն ընտրական հանձնաժողովի ստուգումները, որքան էլ մենք դրանք անհեթեթ համարեինք։

Յուրաքանչյուր ստորագրության համար անձնագրի սկանավորում

Առանց սկանավորման, ստորագրության որակի ողջ պատասխանատվությունը կրում է հավաքողը: Եթե ​​նա պատահաբար կամ միտումնավոր սխալվել է անձնագրի համարում, մենք երբեք չենք իմանա։

Փորձից մենք պարզել ենք, որ միայն անձնագրի տվյալները ստորագրության թերթիկում պատճենելու սխալները և տվյալների մուտքագրման սխալները հեշտությամբ գերազանցում են թույլատրելի 5% սահմանը, նույնիսկ եթե ստորագրությունները հավաքվում են հարմարավետ պայմաններում և բարեխիղճ հավաքողների կողմից:

Փաստաթղթի սկանավորումից հետո մենք կարող էինք ստորագրության ստուգման մի քանի անկախ փուլեր իրականացնել և ուղղումներ կատարել:

Բացի այդ, մեր փաստաբանները պատրաստվում էին դատարանում պայքարել յուրաքանչյուր ստորագրության համար։ Անցյալ անգամ կար մերժված ստորագրությունների մեծ կատեգորիա, որի մասին մենք հաստատ գիտեինք՝ ստորագրությունը համապատասխանում է անձնագրին, բայց մենք ստուգեցինք այն հնացած և սխալներով լի տվյալների բազայում։ Միասնական տվյալների բազան և սկանավորումների առկայությունը փաստաբաններին թույլ կտան ավտոմատացնել նման դեպքերում բողոքների պատրաստման գործընթացը:

Իհարկե, անձնագրի սկանավորումը հնարավոր էր միայն շտաբում, այլապես անհնար կլիներ ապահովել անձնական տվյալների անվտանգության բավարար մակարդակ։

Համաժամացում էլեկտրոնային տվյալների բազայի հետ

Ստորագրություններով և բաժանորդագրությունների ցուցակներով բոլոր գործողությունները, բոլոր կարգավիճակներն ու տեղաշարժերը պետք է արտացոլվեին էլեկտրոնային տվյալների բազայում: Ստորագրահավաք համակարգը պետք է վերահսկեր հավաքագրման բոլոր փուլերը և հայտնաբերեր սխալները։ Միայն այս կերպ մենք կարգուկանոն կպահեինք (և մտքի խաղաղություն) հարյուր հազարավոր ֆիզիկական օբյեկտների հետ աշխատելիս:

Ինչ է արվել համակարգի նոր տարբերակում

  • Որպեսզի ստորագրահավաքի տեղ ունենանք, տարածքային շտաբների ցանց ենք տեղակայել։ Գլխավոր գրասենյակի ՏՏ ենթակառուցվածքը բաղկացած է մի քանի ֆիզիկական սերվերներից, մի շարք վիրտուալ մեքենաներից, 70 երթուղիչներից, 230 տեսախցիկներից և 189 ամբողջական աշխատանքային կայաններից։ Ավելի քան 250 մարդ միաժամանակ օգտագործում է համակարգը ներսից։
  • Որպեսզի կարճ ժամանակում ժամանակ ունենանք մի քանի հարյուր հազար մարդ բերել շտաբ, մենք նախապես սկսել ենք ընտրողների գրանցումը 20՛8 կայքում, որտեղ նրանք նախապես հաստատել են իրենց տվյալները։
  • Սխալների թիվը նվազեցնելու համար մենք ստեղծել ենք մի համակարգ, որը թույլ է տալիս ինքնուրույն ստուգել ստորագրության թերթիկի լրացման ճիշտությունը: Համակարգը բաղկացած է մի քանի վեբ հավելվածներից և բջջային հավելվածից երկու հարթակների համար։
  • Համակարգում տվյալներ վերբեռնելու համար մենք հավաքեցինք (և մասամբ արտադրեցինք) անձնագրերի սկանավորման սարքավորումների հավաքածու, մտածեցինք անձնական տվյալների անվտանգ փոխանցման սխեման և այն իրականացրեցինք բոլոր շտաբներում:
  • Ապահովելու համար, որ ընտրական հանձնաժողովի տեսանկյունից հասցեի ձևաչափումը ճիշտ է, մենք որոնում ենք սկսել FIAS-ի տվյալների բազայում և իրավաբանների հետ լրջորեն խաթարել ենք այն՝ հաշվի առնելու օրենքի բոլոր պահանջները:
  • Շտաբը (մասամբ) ապահովելու և դատարաններում լրացուցիչ փաստարկներ ունենալու համար ստեղծել ենք տեսահսկման և ձայնագրման 24-ժամյա համակարգ։
  • Ենթակառուցվածքը, մեխանիկա փորձարկելու, տվյալները ճշտելու և հավաքագրման համար շտաբը նախապատրաստելու համար ընտրողների նախնական ստուգման մեծ ընթացակարգ ենք անցկացրել, որով անցել է 81750 մարդ։
  • Մենք զարգացել ենք տեսքըբաժանորդագրության ցուցակ, շտաբում ցուցակային լոգիստիկ համակարգ և կենտրոնական շտաբի ֆիզիկական պահեստավորման և արագ մուտքի համակարգ:

Մեր վեբ հավելվածների հիմնական տեխնոլոգիաները

Հիմնական հիմքի լեզուն.Պիթոն.
Դիմային մաս: JavaScript, jQuery, React, D3.js:
Շրջանակներ: Django (6 հատ), aiohttp (1 հատ):
Տվյալների բազա: PostgreSQL, Redis և այլն:
Ամբողջական տեքստի որոնում.Սֆինքս.
HTTP սերվեր.Նգինքս, Լաք.
Փորձարկում: Jenkins, Browserstack, RobotFramework, Locust:
Մոնիտորինգ: Zabbix, Elasticsearch, Kibana, Sentry.
Տեղակայում. Ansible և այլ գործիքներ:
Սերվերի կազմաձևման կառավարում.խոհարար.

Մաս առաջին՝ Նավալնի 20!8 կայք

Ստիպված էինք շատ սահմանափակ ժամանակահատվածում մի քանի հարյուր հազար մարդ բերել շտաբ։ Դրա համար մենք սկսեցինք աջակիցների գրանցումը հենց քարոզարշավի մեկնարկի օրը։ Համախոհների հավաքագրումն ու գրանցումը Նավալնի 20!8 կայքի հիմնական խնդիրներից մեկն է, ուստի գրեթե յուրաքանչյուր էջում կա գրանցման ձև:

Քանի որ այս ամենը անհրաժեշտ է ոչ միայն գեղեցիկ թվերի համար, մեզ համար կարևոր էր իմանալ, որ գրանցված աջակիցները իրական մարդիկ են, ոչ թե բոտեր, որպեսզի կարողանայինք կապ պահպանել նրանց հետ և հասկանալ, թե որ քաղաքում են նրանք գրանցված ( ըստ տարածաշրջանների քվոտաների կատարումը կանխատեսելու նպատակով): Ուստի կայքում գրանցումը բավականին բարդ էր և պահանջում էր հեռախոսահամարի հաստատում։ Որպեսզի չխաբենք մեզ և ուրիշներին, մենք արձանագրել ենք միայն այն մարդկանց, ովքեր լրացրել են հարցաթերթիկը և հաստատել իրենց հեռախոսահամարը որպես պոտենցիալ ստորագրող։ Հետևաբար, գլխավոր էջում մեկ միլիոն գումարածի փոխարեն (գրանցումների ընդհանուր թիվը) այժմ ունենք ընդամենը 706513 «ապագա ստորագրություն»:

Կայքի կառուցման տեսանկյունից սա բավականին սովորական արտադրանք է: Կայքը պատրաստված է Python + Django + PostgreSQL-ի վրա, օգտագործվում է ստանդարտ ORM և ստանդարտ ադմինիստրատորի վահանակ։ Մեկուկես տարի կայքը մի քանի թարմացումներ է ապրել՝ ավելացվել են բաժիններ, փոխվել է գրանցման ձևի աշխատանքը, փոխվել են էջերի տեքստերն ու պատկերները։ Մենք փորձեցինք չբարդացնել դիզայնը, որպեսզի հնարավոր լինի շարել շինարարական բլոկներ, ինչի շնորհիվ որոշ բաժիններ երեք օրվա ընթացքում մտան գաղափարից գործարկվեցին:

Ցանկացած ժամանակակից կայքի այցելուների մոտ կեսը գալիս է շարժական սարքեր. Մենք փորձեցինք կայքը հարմար դարձնել բոլորի համար, ուստի դասավորությունները գծվեցին և գրվեցին՝ էկրանի ցանկացած լայնության վրա ճիշտ ցուցադրելու համար՝ սկսած 320px-ից:

Գլխավոր գրասենյակի քարտեզ

Միակ բարդ ինտերակտիվ տարրը, որը այցելուները տեսնում են, Ռուսաստանի քարտեզն է, որի վրա նշված է շտաբը: Երբ շտաբների թիվը գերազանցեց 50-ը, դժվարացավ նավարկելը քարտեզի վրա՝ երկրի եվրոպական մասում ցուցիչների մոտ լինելու պատճառով։ Սկզբում քարտեզը մտահղացվել էր որպես զուտ դեկորատիվ տարր, բայց հանկարծ լցվեց ֆունկցիոնալությամբ, ուստի նրանց համար, ովքեր արդեն գնահատել են արշավի դաշնային բնույթը և պարզապես ցանկանում են գտնել իրենց քաղաքը, մենք կազմեցինք ցուցակի ռեժիմ:

Քարտեզը պատրաստվել է գեղեցիկ և բազմակողմանի d3.js գրադարանի միջոցով: Մենք որոշեցինք գրել մեր սեփական սցենարը և չօգտագործել ստանդարտ Google Maps կամ Yandex.Maps քարտեզի նախագծման պատճառով: Երկրի էլիպսոիդը հարթության վրա բացելու բազմաթիվ եղանակներ կան: Մերկատորի պրոյեկցիայում առարկաները մեծապես ձգվում են հյուսիսային լայնություններ, և մեզ ավելի շատ տարածք է պետք այն տարածքներում, որտեղ հիմնական մեծ քաղաքներ. Բացի այդ, Մերկատորի պրոյեկցիայում Ռուսաստանը բավականին տարօրինակ տեսք ունի։ Ընտրեցինք Ալբերս-Սիբիր կոնաձև պրոյեկցիան, որն ավելի ծանոթ է աշխարհագրության դասագրքերից։


Առողջ մարդու Ռուսաստան (Ալբերսի կոնաձև պրոյեկցիա) և ծխողի Ռուսաստան (Մերկատորի պրոյեկցիա)

Բովանդակության կառավարում

Կայքի խմբագրական բաժինը քիչ հետաքրքրություն է ներկայացնում: Օգտագործվում է սովորական Django ադմինիստրատորի վահանակը նվազագույն հարմարեցմամբ: Զարգացման սահմանափակ ռեսուրսների դեպքում ավելի ձեռնտու է ադմինիստրատորի վահանակի մի քանի օգտատերերի սովորեցնել, թե ինչպես օգտագործել ստանդարտ գործիք, քան ժամանակ ծախսել՝ ստեղծելով իսկապես հարմար գործիք:

Որոշ լուծումներ, որոնք հեշտացնում են խմբագրի կյանքը, վերցված են այլ նախագծերից։ Օրինակ՝ հաճախորդի կողմից տեքստերի տպագրության գործիք: Մեր տպագրիչը հարմար է նրանով, որ հեշտությամբ միանում է ցանկացած տեքստի կամ լարային մուտքագրման դաշտին: Ինքնատպագրության վիճակի մասին տեղեկատվությունը (միացված/անջատված) պահվում է որպես չտպվող նիշ տողի վերջում և որևէ կերպ կախված չէ հետին պլանից:

Գրառումների և նորությունների բարդ բովանդակության հետ աշխատելու համար մենք օգտագործում ենք բլոկների խմբագրիչ, որն օգտագործվում է նաև բազմաթիվ այլ նախագծերում.

Բլոկները տարբեր տեսակի են, յուրաքանչյուր նախագիծ ունի իր հավաքածուն: Յուրաքանչյուր բլոկ պարունակում է բովանդակություն և կարող է պարունակել կարգավորումներ: Բլոկի տվյալները պահվում են տվյալների բազայում որպես json, իսկ տեքստային բլոկի ներսում նշագրումը պահվում է markdown ձևաչափով:

Ցուցադրման համար բլոկները փոխակերպվում են ցանկալի ձևաչափին՝ HTML գրառման համար, տեքստ՝ ինդեքսավորման համար, RSS կամ XML՝ Yandex.Zen-ի համար, JSON բջջային հավելվածի համար և այլն։ Այսպիսով, մենք կանխատեսելի արդյունք ենք ստանում բովանդակության բավականին բարդ ձևաչափով ցանկացած սարքի վրա:

Առաջին տարբերակը հիմնված էր Սըր Թրևորի կոդի վրա։ Ավելի ուշ, երբ դժվարացավ պահպանել սըր Թրևորի սպագետտի ծածկագիրը, խմբագրիչը վերաշարադրվեց React-ում։

Վերլուծություն

Տեխնիկական տեսանկյունից ամենահետաքրքիրը տեղի է ունենում կայքի ադմինիստրատորի վահանակում։ Այնտեղից հետևում էինք գրանցումների ընթացքին։

Սկզբում վերլուծությունը բավականին պարզունակ էր՝ գրանցումների քանակի գրաֆիկները տարբեր տեսակիժամանակից. Բայց մենք ուզում էինք տեսնել դինամիկան ըստ տարածաշրջանների և հետևել տարբեր իրադարձությունների ազդեցությանը գրանցումների քանակի վրա: Այսպիսով, հայտնվեց երկար սպասված վերլուծությունը.


Այս էկրանին կա կայքի ողջ կյանքի վերաբերյալ տեղեկատվության ամփոփում, որոշակի ժամանակահատվածի ժամանակացույց և այս ժամանակահատվածի իրադարձությունների ցանկ: Դուք կարող եք գծապատկերում նշել գագաթնակետը և փորձել հասկանալ, թե ինչ իրադարձություն է դա առաջացրել: Ամենից հաճախ սա Նավալնիի YouTube-ի ալիքում հետաքննությունով հերթական տեսանյութի հրապարակումն է։ Ստորագրությունների ամենամեծ աճը տվել են մարզային պաշտոնյաների մեքենայությունների մասին տեսանյութերը։

Գծապատկերը կազմված է d3.js-ում, իսկ իրադարձությունների զտումն ըստ ժամանակի և գլխավոր գրասենյակի իրականացվում է Crossfilter գրադարանի միջոցով։ Այս լուծումը թույլ է տալիս հաճախորդի կողմից, առանց միջերեսային արգելակների, աշխատել գրանցման տվյալների հետ մեկ տարուց ավելի ընդմիջումով 1 ժամ հավելումներով: Վրա այս պահինդա 12 մեգաբայթ տվյալ է (1,3 ՄԲ gzip-ով):

Ծրագրի բոլոր մասնակիցներին ամեն օր ավտոմատ կերպով ուղարկվում էր փոքր տեքստային հաշվետվություն՝ գրանցման բազայի և նախորդ օրվա առաջընթացի հիմնական ցուցանիշներով:

Քաղաք և մարզ

Մենք ունենք նաև հսկայական աղյուսակ, որտեղ Ռուսաստանի յուրաքանչյուր շրջանի համար թվարկված են ստորագրահավաքի նախապատրաստման հիմնական ցուցանիշները.

Այս աղյուսակի թվերը սկզբում չէին ուզում մերձենալ: Գումարն ըստ քաղաքների գրանցումների քանակից զգալիորեն պակաս է եղել։ Պարզվեց, որ կայքում հարցաթերթիկը լրացնելիս մարդիկ անսպասելիորեն հաճախ սխալվում են իրենց քաղաքի անվան մեջ կամ օգտագործում են ոչ ստանդարտ անուններ.

Մոսկվա - 2,5% սխալ և 579 ուղղագրություն;
- Սանկտ Պետերբուրգ - 12,6% սխալ և 767 ուղղագրություն;
- Komsomolsk-on-Amur - ավելի քան 20% սխալներ և հապավումներ, 75 տարբերակ:

Աջակիցների թվի սխալ գնահատումը կարող է հանգեցնել շտաբների ցանցի և քարոզչական միջոցառումների սխալ պլանավորմանը: Ես պետք է մտածեի, թե ինչպես կարելի է քաղաքի անվան մուտքագրումը դարձնել տարածաշրջանի ստանդարտ անվանում: Ես չէի ուզում օգտագործել ավտոմատ լրացման մեխանիզմներ KLADR-ի կամ FIAS-ի համար նման պարզ ձևի համար: Հետևաբար, մենք վերցրեցինք Ռուսաստանի 700 խոշորագույն քաղաքների ցուցակը, ավելացրինք տիպիկ ուղղագրությունների ցանկը («spb», «n-sk») և կատարեցինք ոչ խիստ որոնում՝ ըստ Լևենշտեյնի հեռավորության դասակարգման (սա չափանիշ է։ նիշերի երկու խմբերի միջև եղած տարբերության մասին):

Մենք ցուցակից յուրաքանչյուր քաղաքին հատկացրել ենք երեք կատեգորիաներից մեկին՝ ըստ մոտակա շտաբի հեռավորության՝ շտաբը քաղաքում է, շտաբը մոտ է (քաղաքային ագլոմերացիա), շտաբը՝ հեռու: Ճիշտ ժամանակին ժամանող ու ստորագրող մարդկանց թիվը գնահատելիս հաշվի է առնվել շտաբից հեռավորությունը։ Վերլուծության մեջ մենք առանձին հաշվել ենք բոլոր ստորագրողներին և «հասանելի» (հաստատված փոստ, բնակվում է քաղաքում՝ շտաբով կամ մոտակայքում):


Այս գրաֆիկը ցույց է տալիս, թե ինչպես է քարոզարշավը ժամանակի ընթացքում դարձել ավելի ու ավելի տարածաշրջանային: Մոսկվայից և Սանկտ Պետերբուրգից նոր գրանցումների տեսակարար կշիռը 35%-ից նվազել է մինչև 15%։

SMS և փոստ

Մեկ այլ տեխնիկական դժվարություն SMS և նամակներ ուղարկելն էր։ Դարպասները այնքան էլ լավ չեն կարողանում հաղորդագրություններ հասցնել, հատկապես արտասահմանյան համարներին: Բայց մենք ցանկանում էինք ստանալ աջակիցների ամենամաքուր և հուսալի բազան, ուստի գրանցման ձևի երկրորդ մասը պահանջում էր հեռախոսահամարը SMS-ի միջոցով հաստատել: Հուսալի ուղարկման համար մենք երեք դարպասների պտույտ կատարեցինք. եթե հաղորդագրությունը չհասցվեց, ապա նորից ուղարկումն անցավ մեկ այլ դարպասով: Բացի այդ, առանձին դարպասները կարող են անջատվել, երբ դրանց կողքին խափանումներ են տեղի ունենում: SMS կոդի առաքումը վերահսկվող պարամետրերից մեկն է.

Գրաֆիկը ցույց է տալիս, որ դարպասների շահագործման մեջ եղել են երկու ձախողումներ: Փետրվարի 21-ին և ապրիլի 17-18-ին առաքված SMS-ների մասնաբաժինը կտրուկ անկում է գրանցել՝ հաղորդագրությունների ուղարկման հերթում խափանումների պատճառով։ Իսկ հուլիսի 15-ին մենք փոխել ենք գրանցման թերթիկի դասավորությունը, սա նկատելի է նաև գծապատկերում։

Մենք մեծ թվով էլ-նամակներ ենք ուղարկում ավելի քան 700,000 էլփոստի հասցեների տվյալների բազա: Ինչ-որ մեկը բաժանորդագրվել է նորություններին, ինչ-որ մեկը պետք է ստանա իրադարձության ծանուցում: Բացի այդ, յուրաքանչյուր հասցե պետք է հաստատվի համաձայն 2-opt-in կանոնների (սա այն դեպքում, երբ ստացվում է հղում առաջին տառով, որի վրա պետք է սեղմել՝ հաստատելով տեղեկագրի բաժանորդագրությունը): Արշավի սկզբում մենք օգտվում էինք ActiveCampaign ծառայությունից, սակայն այն թանկ է և աներևակայելի դանդաղ։ Երբ տվյալների բազան գերազանցել է 300 հազար կոնտակտները, անհնար է դարձել աշխատել։ Հետևաբար, մենք գրել ենք մեր սեփական CRM / փոստային ծառայությունը, որը թույլ է տալիս ստեղծել փոստային ցուցակներ և նամակների շղթաներ՝ ըստ անհրաժեշտ նմուշների: Mailgun-ն այժմ օգտագործվում է նամակներ առաքելու համար:

Հետաձգված առաջադրանքների հերթեր

Փոստ կամ SMS ուղարկելը երրորդ կողմի ծառայությունների API-ի միջոցով զգալի ժամանակ պահանջող գործողություն է: Նման գործողությունները պետք է կատարվեն ասինխրոն, որպեսզի չդանդաղեցնեն օգտատիրոջ միջերեսը և չդնեն ամբողջ հավելվածը ծանրաբեռնվածության տակ: Սկզբում բոլոր ասինխրոն առաջադրանքները աշխատում էին Celery-ի միջոցով Ռեդիսի հետ՝ որպես բրոքեր: Յուրաքանչյուր տառ կամ SMS հաղորդագրություն ստեղծում էր առաջադրանք Celery-ի հերթում, որից հետո ազատ աշխատողը մշակում էր այս առաջադրանքը: Բայց պարզվեց, որ այս մոտեցումը անվստահելի է և չափազանց ռեսուրսատար:

Մի անգամ մեկ ժամում 10 հազարից ավելի գրանցում ստացանք (ոչ, հեռուստացույցով չէինք ցուցադրվում, «+1» ակցիա էր)։ Նեխուրի 10 աշխատակիցները չկարողացան դիմանալ դրան, օգտատերերը սկսեցին նկատել SMS-ների և նամակների ստացման զգալի ուշացում:

Այս միջադեպից հետո մենք լքեցինք Celery-ին հօգուտ ամենապարզ PostgreSQL-ի վրա հիմնված հերթի: Հերթից առաջադրանքները դասավորվել են ըստ «դեյմոնների» python-ում՝ մեկական հաղորդագրությունների առաքման յուրաքանչյուր ալիքի համար: 10 վայրկյանը մեկ անգամ դեյմոնը հերթից վերցնում էր մի շարք առաջադրանքներ և տվյալներ ուղարկում փոստային API-ին՝ մեկ փաթեթով: Առաջադրանքների խմբավորումը կտրուկ նվազեցրեց սերվերի բեռը, և հատուկ հերթի օգտագործումը դարձրեց վրիպազերծումը և մոնիտորինգը չափազանց հեշտ:

Նեխուրն էլ ստացվեց բարդ գործիքմեր առաջադրանքի համար։ Այն պահանջում է մանրակրկիտ կազմաձևում և մոնիտորինգ արտաքին կոմունալ ծառայությունների միջոցով, ինչպիսին Flower-ն է, որն ինքնին շատ ռեսուրսներ է սպառում: Այլ նախագծերում մենք փորձում ենք օգտագործել ավելի պարզ լուծում՝ RQ + Redis:


RQ-ի և Celery-ի բարդության համեմատությունը ասինխրոն առաջադրանքների հետ աշխատելու մասին հոդվածից։

Զարգացման գործընթաց

Ինչպե՞ս է ընթանում «Նավալնի 20! 8» կայքի ստեղծման գործընթացը ծրագրավորողների տեսանկյունից։ Մենք հավատարիմ չենք որևէ մեթոդաբանության, այլ օգտագործում ենք մոտեցումներ տարբեր համակարգեր. Օրինակ, մենեջերները առաջադրանքներ են դնում Trello-ում kanban տախտակի նման կառուցվածքով, և մշակողները օգտագործում են ծայրահեղ ծրագրավորման որոշակի պրակտիկա:

Թիմի մոտավորապես կեսը գտնվում է մոսկովյան գրասենյակում, իսկ մնացածն աշխատում է հեռակա կարգով: Մոսկվայի աշխատակիցները կարող են մասնակցել քարոզարշավի հանդիպումներին, որպեսզի ավելի լավ չաշխատեն, որպեսզի հասկանան մեծ պատկերը, սակայն մենք առանձին ենք քննարկում ՏՏ բաժնի խնդիրները։ Կանոնավոր զանգերը թույլ են տալիս բոլորին սինխրոնիզացնել և հասկանալ աշխատանքի հիմնական ուղղությունը ցանկացած պահի:

Ծրագրի մասնակիցների մեծ մասն աշխատում է դրա վրա լրիվ դրույքով, սակայն որոշ առաջադրանքներ կատարել են այլ նախագծերում ժամանակավորապես ներգրավված մշակողները կամ նույնիսկ կամավորները: Օրինակ, կամավոր Իլյան գրեթե ամբողջությամբ կազմել է գլխավոր էջի շտաբի քարտեզը։

Աղբյուրի կոդը պահվում է Bitbucket հարթակի git պահոցում: Յուրաքանչյուր լուրջ նոր առաջադրանքի համար ստեղծվում է առանձին մասնաճյուղ։ Մենք չենք բարձրացնում բեմադրող սերվեր յուրաքանչյուր ճյուղի համար, դրանք բոլորը միաձուլվում են զարգացնելու՝ գործարկելու մեկ թեստային սերվերի վրա: Փորձարկումից հետո առաջադրանքի համար պատասխանատու ծրագրավորողը դիմում է վարպետին: Թիմի ղեկավարը նայում է կոդը և, եթե ամեն ինչ լավ է, սկսում է տեղակայումը: Մեծ առաջադրանքների համար մշակողները անում են մանրամասն նկարագրություններինչը պետք է ստուգվի, և ինչը կարող է սխալ լինել տեղակայման ժամանակ:


Deploy կազմակերպվում է շատ պարզ. Մենք ունենք գործիք, որն արձագանքում է Bitbucket-ի վեբ-կապին (կամ նրա ինտերֆեյսի կոճակին), ծածկագրում է կոդը ցանկալի ճյուղից, պատճենում այն ​​սերվերին և այնտեղ գործարկում թարմացման սցենարը: Սցենարը Makefile-ում է։

«Make update»-ի գործարկումը կթարմացնի կախվածությունները, կփոխանցվի, հետգործընթացի ստատիկ ֆայլերը և, եթե ամեն ինչ լավ ընթանա, կվերագործարկվի uwsgi սերվերը: Փորձում ենք միգրացիաներ անել, որ չկոտրվեն հին ծածկագիր, ուստի տեղակայման սխալների դեպքում ամեն ինչ շարունակում է աշխատել։

Մշակումը սկսվել է 2016 թվականի սեպտեմբերի 18-ին։ Այդ ժամանակվանից ի վեր եղել են 1228 պարտավորություններ, 200 pull հարցումներ, ավելի քան 600 անգամ տեղակայվել են արտադրության մեջ և 67 մասնաճյուղեր պահեստում (դրանց մեծ մասն այժմ փակ է):

Դիզայնի մասին

Ծրագրի թիմում դիզայնի վրա անընդհատ աշխատում էին միայն երկու հոգի (արտադրանքի գործառույթով գեղարվեստական ​​ղեկավար և դիզայներ), մինչդեռ երկուսն էլ ակտիվորեն ներգրավված են արշավի այլ նախագծերում: Հետեւաբար, դիզայնի մոտեցումը չափազանց օգտակար էր:

ՏՏ արտադրանքի նախագծման ժամանակ մենք միշտ առաջնորդվում ենք երկու հիմնական սկզբունքներով.

1) Ամենա «ծույլ» և չներգրավված օգտատիրոջ տեղեկատվությունը պետք է լինի առավել տեսանելի տեղում (այսպես մենք, օրինակ, որոշել ենք կայքի բլոկների և հատվածների սկզբնական տեղերը).

2) քան քիչ մարդկօգտագործի վերջնական արտադրանքը, այնքան քիչ ենք մենք փորձում զարդարել այն (մենք խնայում ենք զարգացման ռեսուրսները) և այնքան ավելի շատ ներդրումային ջանքեր կարող ենք թույլ տալ յուրաքանչյուր օգտագործողի համար (հաճախ ավելի արդյունավետ է մի քանի հոգու ուսուցանելը, քան ժամանակ ծախսել նոր հնարավորությունների ներդրման վրա, որոնք կխնայեն օգտագործողի ջանքերը կամ փրկել նրանց սխալներից):

Հետեւաբար, մեր ցածր օգտագործող ներքին համակարգերձգտեք նմանվել կյանքի կոչված լարային շրջանակի*, և այն ամենը, ինչի հետ հանդիպում է քարոզարշավի աջակիցը, ընդհանուր տեսողական հաղորդակցության մի մասն է, խստորեն ենթարկվում է կորպորատիվ ոճին և ողջախոհությանը:

Ստորագրահավաքի ՏՏ համակարգը շատ բարդ, բազմաբաղադրիչ նախագիծ է՝ սահմանափակ ռեսուրսներով, ուստի դիզայներների աշխատանքի հիմնական մասը եղել է թղթի վրա, հանդիպումներում և Google փաստաթղթերում, և ոչ թե գրաֆիկական խմբագրիչում (մեր դեպքում, Էսքիզ):

Նախագիծը շատ բան ունի բարդ սխեմաներ, որը դուք պարզապես ցանկանում եք նկարել, և շարժման ընթացքում հայտնաբերված գծապատկերներ գծելու բոլոր էլեկտրոնային գործիքները մեզ չէին համապատասխանում: Երբեմն մենք օգտագործում էինք draw.io, բայց ավելի հաճախ նկարում էինք ուղղակիորեն թղթի վրա: Ամենակարևոր գծապատկերները կախված էին նախագծի գրատախտակին: Այնտեղ կցված էին նաև թղթային «տոմսեր»՝ հանդիպումների ժամանակ քննարկելու հարցերով։

Փաստաբանների հետ համաձայնեցվածներից թղթային սխեմաներև սցենարներ, մենք նախատիպեր էինք կառուցում marvelapp.com կայքում՝ կրկնակի ստուգելու տրամաբանությունը և համոզվելու, որ ոչինչ չի մոռացվել: Դրանից հետո միայն դասավորությունները փոխանցվեցին զարգացմանը։

Կախված առաջադրանքից՝ օգտագործել ենք տարբեր մեթոդներհետազոտություն և դիզայն։ Այսպիսով, մինչ երկար սպասված վերլուծությունը կատարելը, մենք մի շարք հարցազրույցներ անցկացրինք համակարգի բոլոր պոտենցիալ օգտատերերի հետ (շտաբի ղեկավարից մինչև փոստային ցուցակ ուղարկող անձ) և, ելնելով նրանց ցանկությունից, կարողացանք հավաքել շատ. պարզ ինտերֆեյս, որը երկար ժամանակովծառայել է որպես քարոզարշավի վահանակ:

Մեկ էջում մենք տեսանք գրանցումների հոսքը, կարողացանք տեսնել դրա վրա ազդող իրադարձությունները և պարզել, թե ինչպես են մեր աջակիցները բաշխված ըստ քաղաքների: Մենք նաև հավաքել ենք քաղաքների վարկանիշները՝ ըստ ստորագրողների թվի (սա մեզ թույլ է տվել վերահսկել շտաբների արդյունավետությունը և ասել, թե արդյոք ճիշտ քաղաքներ ենք ընտրել նոր շտաբներ բացելու համար) և աղյուսակային վերլուծություն:

Ստուգման միջերեսների և հենց ստորագրությունների հավաքման համար բացարձակ առաջնահերթությունը օպերատորի արագությունն էր: Հավաքածուն տեղի է ունենում ժամանակի սուր ճնշման պայմաններում, ուստի մենք փորձել ենք խնայել յուրաքանչյուր վայրկյանը և միևնույն ժամանակ նվազեցնել օգտվողի հնարավոր սխալների քանակը։

Մեր հաշվարկներով՝ շտաբների առկա քանակով և մարդկանց շարունակական հոսքի պայմաններում յուրաքանչյուր ընտրողին պետք է տևեր ոչ ավելի, քան 6 րոպե մեկ անձի համար՝ «բարևից» մինչև հավաքագրման ընթացակարգի ավարտը։

Ստուգումը և ստորագրահավաքը ՏՏ համակարգի միջոցով ամբողջությամբ մեր կողմից հորինված ընթացակարգ է, ուստի մենք ընտրեցինք MVP թեստավորումը համակարգի իրական օգտագործողների վրա՝ որպես մեր լուծումների ստուգման հիմնական մեթոդ: Այսպիսով, մենք փորձարկեցինք հիմնական արձանագրությունը և առաջին ստուգման ինտերֆեյսը Մոսկվայի շտաբի աշխատակիցների վրա, այնուհետև գնացինք երեք տարբեր քաղաքներ (Սանկտ Պետերբուրգ, Չելյաբինսկ և Ուլյանովսկ) դիտարկելու համար: իրական օգտվողներընթացքի մեջ է. Նման նախագծերի համար Լավագույն միջոցըարագ կազմեք իրերի և օգտագործողների դեպքերի ցուցակը, որոնք կարող են մոռացվել կամ չնախատեսվել նախագծման և մշակման փուլում:

Ինտերֆեյսում աննշան փոփոխություններ կատարելուց հետո ստուգումը մեկնարկեց բոլոր նախընտրական շտաբներում: Արդյունքում մեզ հաջողվեց կրճատել մեկ հարցաթերթիկի մշակման ժամանակը մեկ անձի համար մեկուկես-երկու րոպեի:

Փորձարկում

RobotFramework-ը օգտագործվել է ավտոմատացված թեստավորման համար: Ծրագրի ամենակարևոր գործառույթները լուսաբանելու համար գրվել են ընդունման և ֆունկցիոնալ թեստեր, և կազմաձևվել է դրանց ավտոմատ մեկնարկը: Ջենկինսը օգտագործվել է որպես CI համակարգ:

Կայքի ամենակարեւոր գործառույթը օգտատերերի գրանցումն է, որը ենթադրում է հեռախոսի հաստատում SMS կոդի միջոցով: Կոդերով հաղորդագրությունները փորձարկելու համար կազմաձևվել է GSM մոդեմ՝ փորձնական SIM քարտով և աստղանիշով: SMS կոդը ուղարկվել է փոստին, որտեղից այն արդեն հասանելի էր թեստավորման համար։

Գտնված սխալները ավելացվել են Trello-ին՝ որպես ծրագրավորողների առաջադրանքներ:

Սերվերի ենթակառուցվածք

«Նավալնի 20!8» կայքը շարունակում է աշխատել և սահուն դառնում է ընտրողների գործադուլի արշավը, ուստի տեղեկատվական էմբարգոն դեռ չի հանվել, և պատմությունը կարճ կլինի։ Սերվերի մասը բաղկացած է երեք մակարդակից՝ backend, caching proxies և edge servers: Բոլոր կոնֆիգուրացիաները կառավարվում են խոհարարի միջոցով, ուստի ցանկացած դեր ունեցող սերվերը կարող է արագ բարձրացնել նոր վիրտուալ մեքենայի վրա:

Տվյալների բազան և հավելվածների օրինակները աշխատում են հետին պլանում, յուրաքանչյուր հավելված իր վիրտուալ մեքենայի վրա և իր սեփական ip-ով: Բոլոր սերվերները գոյություն ունեն մի քանի օրինակներում, և տվյալների բազան վերարտադրվում է master-slave ռեժիմով մեկ այլ մեքենայի վրա:

Varnish-ը տեղադրված է պրոքսի սերվերի վրա, որը զբաղվում է խնդրանքների քեշավորումով որոշակի հասցեներև url-ից կախված տարբեր սահմանափակումներ: Եթե ​​backend-ը ձախողվի, կայքը կարող է անորոշ ժամանակով աշխատել պրոքսի սերվերից, միայն օգտվողների գրանցման մեխանիզմը կխախտվի:

Edge սերվերները զբաղվում են ստատիկ քեշինգով և ssl դադարեցմամբ (այնուհետև տրաֆիկը անցնում է VPN ցանցով): Այս սերվերների էությունը տրաֆիկի հիմնական մասը բաշխելն է և մնացած ենթակառուցվածքի պաշտպանությունը հարձակումներից: Սրանք թույլ վիրտուալ մեքենաներ են՝ գիգաբիթ ալիքով տարբեր տվյալների կենտրոններում։ Բեռը բաշխվում է DNS հավասարակշռման միջոցով: Edge սերվերները պարունակում են նվազագույն կոնֆիգուրացիա և, անհրաժեշտության դեպքում, կարող են հեշտությամբ բարձրացնել մի քանի րոպեում: Առավելագույն օգտակար տրաֆիկը, որը մենք ունեինք եզրային սերվերների վրա, մի քանի ժամվա ընթացքում 5 Գբ/վ էր:

Նկարները, ոճերը, javascript-ը, json-ի տվյալները պահվում են այնպես, որ ֆայլի անունը ներառում է այս ֆայլի բովանդակության հեշը (օրինակ՝ style.28fa1c7b1761.css), այնպես որ այս բոլոր ֆայլերը կարող են ընդմիշտ պահվել սերվերում և բրաուզերում: Տրաֆիկի հիմնական ծավալը տրվում է եզրային սերվերներից։ Այնուհետև անցնում են միայն բովանդակության էջերի հարցումները, և դա մոտ 25 անգամ ավելի քիչ տվյալ է:

Երբեմն CloudFlare-ը միանում է եզրային սերվերների փոխարեն, բայց մենք փորձում ենք վերադառնալ մեր սերվերներին, քանի որ CloudFlare-ը միշտ չէ, որ լավ հասանելիություն ունի Ռուսաստանից։ Անհատ պրովայդերները, նույնիսկ ամենախոշորները, պարբերաբար սկսում են արգելափակել իրենց ip-ը (Ռոսկոմնադզորի հետքերը):

Եզրակացություն

Ստորագրություններ հավաքել ավանդական ոճ(առանց հատուկ ՏՏ համակարգի, թղթով, գրիչով և աղյուսակներով excel-ով) - դա նման է թռչելու փուչիկդեպի լուսին. այո, եթե շատ գնդակներ ես վերցնում, կարող ես նույնիսկ թռչել և թաքնվել ամպերի մեջ, բայց ֆիզիկապես անհնար է այս կերպ հասնել թիրախին:

Այնպիսի ստորագրություններ հավաքելու համար, որ ընտրական հանձնաժողովը ստիպված լինի ընդունել անգամ անցանկալի թեկնածուից, մենք սկսեցինք ստեղծել այս բարդ ենթակառուցվածքը։ Այս գլխում մենք խոսեցինք հենց մեր առջեւ դրված խնդրի և դրա լուծմանը պատրաստվելու մասին:

Հաջորդ գլխում նկարագրված է շտաբի ցանցային սարքավորումների ընտրությունը և կազմաձևումը, ձեր սեփական փաստաթղթերի սկաների մշակումը և շտաբի տարածքների տեսահսկման կազմակերպումը:

Երրորդ գլխում նկարագրվելու է ստորագրահավաքի դիմումների ստեղծման գործընթացը և այն ամենը, ինչ կապված է ֆիզիկական ստորագրությունների թերթիկների հետ աշխատելու հետ:

Չորրորդ գլխում խոսվում է ծրագրի կառավարման, թիմի, ժամանակացույցի և մի փոքր արդյունքների մասին:

Պիտակներ. Ավելացնել պիտակներ

Այսօր առավոտյան ես ստուգեցի իմ ստորագրությունը նախագահի պաշտոնում Նավալնիի առաջադրման համար։ Ես ուզում եմ ձեզ ասել, թե որքան հեշտ էր դա, թե դժվար, արագ, թե դանդաղ:

Սկզբում ես պարզապես ուզում էի գալ Մոսկվայի շտաբ, բայց հետո ցանցերում տեսա «գրանցվել ստուգման համար» բառերը, ուստի գնացի https://2018.navalny.com/ կայք և իսկապես տեսա համապատասխանը։ բաժինն այնտեղ։ Կայքը մանրամասն նկարագրում է, թե ինչու է անհրաժեշտ նախնական ստուգում, բայց մի խոսքով, կարճ ժամանակում ամենալավ որակի ստորագրությունները հետագայում ներկայացնելու համար:

Կայքում ուղղակի գրված չէ, բայց կասկածում եմ, որ ինչ-որ առումով այս նախնական ստուգման միջոցով շտաբը նույնպես ժամանակ ունի տեսնելու, թե իրականում ով է գալիս ստորագրելու ԿԸՀ կանոնակարգով պահանջվող ժամանակային միջակայքում, իսկ ով կարող է չգա։

Ես դիմել եմ հեռախոսով ստուգման համար: Ձևի դաշտերը առաջարկում են քաղաքի փողոցների անունները (երբ մուտքագրում եք հասցե), ուստի ձևը լրացնելը հեշտ էր:

Ամրագրվել է երեքշաբթի օրը առավոտյան - հինգշաբթի: Կայքում կարող եք նշել հարմար ժամանակ և գրանցվել ստուգման համար:

Առավոտյան շտաբից հոգատար SMS եկավ՝ հիշեցնելով, որ այսօր ես գրանցվել եմ շտաբում։

Ինձ հետ կինս ստուգեց ստորագրությունը, և մեր ընկերներից մի քանիսը նույնպես նախատեսում էին մեզ հետ գնալ ստուգման: Ի դեպ, նաև հետաքրքիր մանրամասն- Հետագայում ընկերներից մեկին ստիպել են տանը մնալ երեխայի հետ, ուստի նա մյուս օրը տեղափոխել է այլ ժամ: Ծառայությունն ավելի լավ է, քան հանրային ծառայությունները.

Առավոտյան ժամը 11-ին մենք այնտեղ էինք։ Փողոցից դեպի շտաբ շրջադարձը ոչ մի կերպ նշված չէ՝ Նավալնիին թույլ չեն տվել որևէ խորհրդանիշ կախել այնտեղ։ Սակայն նույնիսկ փողոցից շտաբի մոտ կարմիր գնդակ էր երևում, ուստի շտաբը անմիջապես հայտնաբերվել էր։

Մեզ դիմավորեց Մոսկվայի շտաբի ղեկավարներից Վիտալի Սերուկանովը։ Այսօր առավոտյան առաջինն էինք։ Շտաբի աշխատանքների մեկնարկին մնացել էր հինգ րոպե։ Վիտալին առաջարկեց նստել աթոռներին և ասաց, որ շտաբի աշխատակիցները կգան և կսկսեն ստուգումը։ Եվ իսկապես, բառացիորեն մի երկու րոպեից սկսեց աշխատել առաջին համակարգիչը, հետո երկրորդը և այլն։

Մինչ ստորագրահավաքի մեկնարկը ժամանակ կար, մենք նկարվեցինք այդ նույն ֆոնի վրա։

Ինչքան հասկացա, եթե նախապես գրանցվես, ստորագրության մշակումը քիչ ժամանակ է պահանջում։ Իմ դեպքում դա տառացիորեն քսանից երեսուն վայրկյան էր: Այսպիսով, շտաբի բացումից հինգ րոպե անց մենք երեքս արդեն ստուգել էինք ստորագրությունները։

Քիչ անց մարդիկ անմիջապես սկսեցին գալ մեզ մոտ՝ երիտասարդից ծեր։ Ե՛վ ծեր, և՛ երիտասարդ:

Ի դեպ, նրանք էլ են անախորժություն գտել՝ տանտերը եկավ ու սկսեց պահանջել Նիկոլայ Լյասկինին։ Ես ինքս դեմ չէի լինի պահանջել, քանի որ. Այնպես ստացվեց, որ մենք վաղուց չէինք տեսել միմյանց, և ես հույս ունեի բռնել նրան։ Բայց դատելով Լյասկինի ցանցային աքաունթից, այսօր նրան ոչ միայն շտաբի տանտերն է պահանջել, այլեւ ոստիկանությունը։ Մոսկվայի շտաբը հերթական անգամ ուզում է վտարվել, տկ. ինչպես գիտենք հսկայական Մոսկվայում, ըստ էության, ցանկացած խելամիտ քաղաքական գործունեությունիսկ տանտերերի վրա ճնշումը միշտ մեծ է:

Ընդհանուր առմամբ, ըստ արդյունքների. Պետք է ստուգել: Դյուրին դարձրեք: Եվ, կարևորը, ստորագրությունները արագ ստուգվում են։

Շնորհակալություն Մոսկվայի շտաբի անձնակազմին՝ արդյունավետության համար։

Սա նաև պատմություն է այն մասին, թե ինչպես, օգտագործելով անվճար ծրագրակազմ և էժան բաղադրիչներ, մի փոքր թիմ ստեղծեց ստորագրահավաքի համալիր համակարգ ամբողջ երկրում: Նախագծում չկան բարդ տեխնիկական լուծումներ, բայց կան շատ կարևոր մանրուքներ, որոնք հնարավոր չէ կանխատեսել՝ հիմնվելով ՏՏ զարգացման բնորոշ փորձի վրա:

Հարմարության համար նյութը բաժանված է չորս գրառման, որոնք լավագույնս ընթերցվում են հաջորդականությամբ։

Սա տեխնիկական նյութ է, բայց այստեղ քննարկվող շատ հարցեր անհասկանալի են առանց ներկա քաղաքական համատեքստի նվազագույն իմացության, ուստի նկարագրված են անհրաժեշտ չափով: Եթե ​​ինչ-ինչ պատճառներով ձեզ վախեցնում է «Նավալնի» բառը (այն դեռ մի քանի անգամ կհայտնվի) կամ ժողովրդավարական ինստիտուտների հիշատակումը, պարզապես մի կարդացեք այս տեքստը։ Քաղաքական հարցերը մեկնաբանություններում չեն քննարկվի։

Քարոզարշավի նպատակը

Ալեքսեյ Նավալնիի գրանցումը որպես նախագահի թեկնածու.

ՏՏ բաժնին հանձնարարված առաջադրանքներ

(ժամանակագրական կարգով):

Բոլոր նրանց, ովքեր պատրաստ են ստորագրել մեր թեկնածուի առաջադրման համար, նախնական գրանցում.
- Ռուսաստանի ողջ տարածքում շտաբների ցանցի գործունեության ապահովում.
- 315 հազար իդեալական ստորագրությունների հավաքման համակարգի ստեղծում.

Պատմական և քաղաքական համատեքստ

Եթե ​​խորհրդարանական կուսակցություն չունես, ուրեմն ընտրություններին մասնակցելու համար պետք է ստորագրահավաք։ Սա պաշտպանական ընթացակարգ է, որն օգտագործվում է «անհետևողական» թեկնածուներին ընտրություններից դուրս պահելու համար։

Գրանցման մերժման անսահման հնարավորությունները սահմանվում են հավաքագրման կանոնների մակարդակով.

  • Ստորագրահավաքը խիստ սահմանափակ է ժամանակային առումով.
  • Օրենքով ամուսնության համար նախատեսված ստորագրությունների չնչին տոկոսն է հատկացվում, լավ լուսանցքով ստորագրություններ հանձնել հնարավոր չէ;
  • Անհնար է ստուգել ձեր կողմից ստորագրությունները, քանի որ ընտրողների տվյալները պետք է համապատասխանեն FMS տվյալների բազային, որի մուտքը հասանելի է միայն պետական ​​մարմիններին.
  • Գրաֆոլոգը ԿԸՀ-ում ստուգելիս կարող է մերժել ցանկացած ստորագրություն և սխալի դեպքում իրավական պատասխանատվություն չի կրում.
  • Ստուգման սխեման ինքնին ենթադրում է, որ կլինեն կեղծ դրականների զգալի տոկոս (Բայեսի թեորեմի պարադոքսը որպես խոչընդոտ ընտրություններում):

Սրան մենք արդեն հանդիպել ենք Նովոսիբիրսկում, երբ ստորագրություններ էինք հավաքում Օրենսդիր ժողովի ընտրություններին մասնակցելու համար։

Նովոսիբիրսկում ստորագրություններ հավաքելու համար մենք ստեղծեցինք Reaper համակարգը, որը կենտրոնացած էր «դաշտում» և խորանարդի ստորագրություններ հավաքելու վրա, կառավարում էր հավաքողների երթուղիները, հաշվի առավ բոլոր ստորագրությունների ցուցակները և հնարավորություն տվեց դասակարգել ստորագրությունները՝ հիմնվելով ստորագրությունների վրա։ տարբեր ստուգումների արդյունքները.

Նովոսիբիրսկում հավաքագրողները բերեցին ավելի քան 16,000 ստորագրություն, որոնցից մենք ընտրեցինք և հանձնեցինք լավագույնը 11,722-ին: Չնայած ընտրության կոշտ գործընթացին, ընտրական հանձնաժողովի աշխատանքային խումբը գտավ բազմաթիվ «անվավեր ստորագրություններ», և ընտրական հանձնաժողովը հրաժարվեց գրանցել թեկնածուներին: Ավելին կարդացեք ստորագրությունների անվավեր ճանաչման անհեթեթ պատճառների մասին։

Նոր համակարգը կառուցվել է՝ հաշվի առնելով ստորագրահավաքի և ընտրական հանձնաժողովում դրանց հետագա պաշտպանության կուտակված փորձը։

Ստորագրահավաքի նոր առանձնահատկությունները

Նախագահի թեկնածու առաջադրելու համար ստորագրահավաքի համար սահմանվում են էլ ավելի խիստ պայմաններ.

Պետք է ներկայացվի ոչ ավելի, քան 315000 ստորագրություն.
- Առնվազն 300 հազար ստորագրություն պետք է վավեր ճանաչվի.
- Մեկ մարզից 7500-ից ոչ ավելի ստորագրություն է հաշվվում.
- Հավաքածուների կարճ ժամանակահատվածի համար (դեկտեմբերի 27-ից հունվարի 31-ը) երկար ամանորյա արձակուրդներ են, երբ շատերը մեկնում են հանգստի։

Հաշվի առնելով նախկին փորձը և նոր պահանջները՝ մենք որդեգրել ենք հետևյալ հիմնական սկզբունքները.

Գլխավոր գրասենյակների համառուսական ցանց

Տարածաշրջանային քվոտաների պատճառով անհնար էր աշխատել, ասենք, խոշորագույն տասը քաղաքներում։ 315 հազար ստորագրություն կարելի էր հավաքել, եթե լուսաբանվեր առնվազն 40 քաղաք։ Ավելի դժվար է ստորագրահավաքը նոսր բնակեցված մարզերում, հետևաբար, գործնականում հաջող հավաքելու համար անհրաժեշտ էր շտաբներ բացել հանրապետության մարզերի մեծ մասում։

Հավաքածուի հաջող ավարտի պահին ստորագրությունների քանակի կանխատեսումը ցույց է տալիս, որ խոշոր քաղաքներում ստորագրելու պատրաստ մարդկանց թիվը զգալիորեն կգերազանցի տարածաշրջանային քվոտաները։ Մոսկվան (127 հազար) և Սանկտ Պետերբուրգը (63 հազար) չեն տեղավորվել էկրանին։

Ստորագրահավաք միայն շտաբում

Տնից տուն հավաքելու համար մենք ստիպված կլինեինք մի քանի հազար հավաքող վարձել: Բոլորը, ովքեր երբևէ աշխատել են վճարովի կոլեկցիոներների հետ (կամ, օրինակ, սոցիոլոգիայի ուսանողները), գիտեն, որ նրանք ոչ բոլորն են հավասարապես հարգում ընթացակարգը, և ոչ բոլորն են հաղթահարում պարզապես մեկ-երկու ստորագրություն «նկարելու» գայթակղությունը: Անզգույշ լցնելը հանգեցնում է ամուսնության մեծ տոկոսի, իսկ ստորագրություններ «նկարելը» այնքան տարածված խնդիր է, որ ԿԸՀ-ն նախատեսում է գրաֆոլոգի կողմից ստուգում։ Նույնիսկ գրաֆոլոգի առկայությունը նահանգում և մի քանի հայտարարությունների օրինակելի կատարումը ոստիկանությունում չեն կարող 100%-ով շտաբը ազատել «գծագրողներից» (ստուգել ենք)։ Բացի այդ, հավաքագրողը կարող է ստորագրություններ ավելացնել ոչ միայն չարամիտ դիտավորությամբ, այլ նաև հակառակը՝ «շտաբին օգնելու համար»։

Գիտեինք, որ «դաշտում» հավաքելիս անպայման կներկայացնենք «թունավոր հավաքողներ», ինչպես Նովոսիբիրսկում էր։ Թունավոր կոլեկցիոներները դիտավորյալ սխալներ են թույլ տալիս ընտրողի տվյալների մեջ (օրինակ՝ փոխարինում են անձնագրի համարի մեկ թվանշանը)։ Նրանց խնդիրն է ավելացնել անվավեր ստորագրությունների թիվը սահմանաչափից ավելի, որից հետո ընտրական հանձնաժողովը հրաժարվում է գրանցվել։ Նովոսիբիրսկը մեծ ջանքեր է ծախսել թունավոր մակագրությունները մաքրելու համար։ Ամբողջ երկրում հավաքելիս դա հնարավոր չէ:

Միայն ստացիոնար շտաբներում էր հնարավոր ապահովել ստորագրությունների բավարար որակը, ստորագրությունների թերթիկների ճշգրիտ լրացման պայմանները և դրանց անվտանգությունը։

Ստորագրության բազմափուլ ստուգում

Կատարյալ ստորագրությունները մաթեմատիկական աբստրակցիա են: Իրական ստորագրահավաքը բարդ ու բարդ գործընթաց է։ Նույնիսկ ազնիվ և լավ պատրաստված կոլեկցիոներները սխալներ են թույլ տալիս, և հաշվի առնելով ժամանակի սղությունը, վարչական ճնշումներն ու սադրանքները, ամուսնություններն էլ ավելի շատ կլինեն:

Մենք ունենք բազմաթիվ տվյալներ, թե ինչպես են հայտնվում սխալները։ Մեր փորձով, միանգամայն ազնիվ կարգով հավաքված ստորագրությունների ցուցակներում լինելու է այն ստորագրությունների մոտ 10 տոկոսը, որոնք ընտրական հանձնաժողովն անվավեր է ճանաչում։

Մենք պետք է հանձնեինք ոչ թե պարզապես լավ ստորագրություններ, այլ ստորագրություններ, որոնք ընտրական հանձնաժողովը կընդուներ։ Դրա համար անհրաժեշտ էր ստուգման մի քանի փուլ և վարկանիշային մեխանիզմ՝ ընտրելու և հանձնելու միայն այն ստորագրությունները, որոնք, ամենայն հավանականությամբ, կանցնեն ընտրական հանձնաժողովի ստուգումները, որքան էլ մենք դրանք անհեթեթ համարեինք։

Յուրաքանչյուր ստորագրության համար անձնագրի սկանավորում

Առանց սկանավորման, ստորագրության որակի ողջ պատասխանատվությունը կրում է հավաքողը: Եթե ​​նա պատահաբար կամ միտումնավոր սխալվել է անձնագրի համարում, մենք երբեք չենք իմանա։

Փորձից մենք պարզել ենք, որ միայն անձնագրի տվյալները ստորագրության թերթիկում պատճենելու սխալները և տվյալների մուտքագրման սխալները հեշտությամբ գերազանցում են թույլատրելի 5% սահմանը, նույնիսկ եթե ստորագրությունները հավաքվում են հարմարավետ պայմաններում և բարեխիղճ հավաքողների կողմից:

Փաստաթղթի սկանավորումից հետո մենք կարող էինք ստորագրության ստուգման մի քանի անկախ փուլեր իրականացնել և ուղղումներ կատարել:

Բացի այդ, մեր փաստաբանները պատրաստվում էին դատարանում պայքարել յուրաքանչյուր ստորագրության համար։ Անցյալ անգամ կար մերժված ստորագրությունների մեծ կատեգորիա, որի մասին մենք հաստատ գիտեինք՝ ստորագրությունը համապատասխանում է անձնագրին, բայց մենք ստուգեցինք այն հնացած և սխալներով լի տվյալների բազայում։ Միասնական տվյալների բազան և սկանավորումների առկայությունը փաստաբաններին թույլ կտան ավտոմատացնել նման դեպքերում բողոքների պատրաստման գործընթացը:

Իհարկե, անձնագրի սկանավորումը հնարավոր էր միայն շտաբում, այլապես անհնար կլիներ ապահովել անձնական տվյալների անվտանգության բավարար մակարդակ։

Համաժամացում էլեկտրոնային տվյալների բազայի հետ

Ստորագրություններով և բաժանորդագրությունների ցուցակներով բոլոր գործողությունները, բոլոր կարգավիճակներն ու տեղաշարժերը պետք է արտացոլվեին էլեկտրոնային տվյալների բազայում: Ստորագրահավաք համակարգը պետք է վերահսկեր հավաքագրման բոլոր փուլերը և հայտնաբերեր սխալները։ Միայն այս կերպ մենք կպահպանենք կարգը (և հոգեկան հավասարակշռությունը) հարյուր հազարավոր ֆիզիկական առարկաների հետ աշխատելիս:

Ինչ է արվել համակարգի նոր տարբերակում

  • Որպեսզի ստորագրահավաքի տեղ ունենանք, տարածքային շտաբների ցանց ենք տեղակայել։ Գլխավոր գրասենյակի ՏՏ ենթակառուցվածքը բաղկացած է մի քանի ֆիզիկական սերվերներից, մի շարք վիրտուալ մեքենաներից, 70 երթուղիչներից, 230 տեսախցիկներից և 189 ամբողջական աշխատանքային կայաններից։ Ավելի քան 250 մարդ միաժամանակ օգտագործում է համակարգը ներսից։
  • Որպեսզի կարճ ժամանակում ժամանակ ունենանք մի քանի հարյուր հազար մարդ բերել շտաբ, մենք նախապես սկսել ենք ընտրողների գրանցումը 20՛8 կայքում, որտեղ նրանք նախապես հաստատել են իրենց տվյալները։
  • Սխալների թիվը նվազեցնելու համար մենք ստեղծել ենք մի համակարգ, որը թույլ է տալիս ինքնուրույն ստուգել ստորագրության թերթիկի լրացման ճիշտությունը: Համակարգը բաղկացած է մի քանի վեբ հավելվածներից և բջջային հավելվածից երկու հարթակների համար։
  • Համակարգում տվյալներ վերբեռնելու համար մենք հավաքեցինք (և մասամբ արտադրեցինք) անձնագրերի սկանավորման սարքավորումների հավաքածու, մտածեցինք անձնական տվյալների անվտանգ փոխանցման սխեման և այն իրականացրեցինք բոլոր շտաբներում:
  • Ապահովելու համար, որ ընտրական հանձնաժողովի տեսանկյունից հասցեի ձևաչափումը ճիշտ է, մենք որոնում ենք սկսել FIAS-ի տվյալների բազայում և իրավաբանների հետ լրջորեն խաթարել ենք այն՝ հաշվի առնելու օրենքի բոլոր պահանջները:
  • Շտաբը (մասամբ) ապահովելու և դատարաններում լրացուցիչ փաստարկներ ունենալու համար ստեղծել ենք տեսահսկման և ձայնագրման 24-ժամյա համակարգ։
  • Ենթակառուցվածքը, մեխանիկա փորձարկելու, տվյալները ճշտելու և հավաքագրման համար շտաբը նախապատրաստելու համար ընտրողների նախնական ստուգման մեծ ընթացակարգ ենք անցկացրել, որով անցել է 81750 մարդ։
  • Մենք մշակել ենք ստորագրության ցուցակի տեսքը, շտաբի ցուցակների նյութատեխնիկական ապահովման համակարգը, ինչպես նաև կենտրոնական շտաբի ֆիզիկական պահպանման և արագ մուտքի համակարգը:

Մեր վեբ հավելվածների հիմնական տեխնոլոգիաները

Հիմնական հիմքի լեզուն.Պիթոն.
Դիմային մաս: JavaScript, jQuery, React, D3.js:
Շրջանակներ: Django (6 հատ), aiohttp (1 հատ):
Տվյալների բազա: PostgreSQL, Redis և այլն:
Ամբողջական տեքստի որոնում.Սֆինքս.
HTTP սերվեր.Նգինքս, Լաք.
Փորձարկում: Jenkins, Browserstack, RobotFramework, Locust:
Մոնիտորինգ: Zabbix, Elasticsearch, Kibana, Sentry.
Տեղակայում. Ansible և այլ գործիքներ:
Սերվերի կազմաձևման կառավարում.խոհարար.

Մաս առաջին՝ Նավալնի 20!8 կայք

Ստիպված էինք շատ սահմանափակ ժամանակահատվածում մի քանի հարյուր հազար մարդ բերել շտաբ։ Դրա համար մենք սկսեցինք աջակիցների գրանցումը հենց քարոզարշավի մեկնարկի օրը։ Համախոհների հավաքագրումն ու գրանցումը Նավալնի 20!8 կայքի հիմնական խնդիրներից մեկն է, ուստի գրեթե յուրաքանչյուր էջում կա գրանցման ձև:

Քանի որ այս ամենը անհրաժեշտ է ոչ միայն գեղեցիկ թվերի համար, մեզ համար կարևոր էր իմանալ, որ գրանցված աջակիցները իրական մարդիկ են, ոչ թե բոտեր, որպեսզի կարողանայինք կապ պահպանել նրանց հետ և հասկանալ, թե որ քաղաքում են նրանք գրանցված ( ըստ տարածաշրջանների քվոտաների կատարումը կանխատեսելու նպատակով): Ուստի կայքում գրանցումը բավականին բարդ էր և պահանջում էր հեռախոսահամարի հաստատում։ Որպեսզի չխաբենք մեզ և ուրիշներին, մենք արձանագրել ենք միայն այն մարդկանց, ովքեր լրացրել են հարցաթերթիկը և հաստատել իրենց հեռախոսահամարը որպես պոտենցիալ ստորագրող։ Հետևաբար, գլխավոր էջում մեկ միլիոն գումարածի փոխարեն (գրանցումների ընդհանուր թիվը) այժմ ունենք ընդամենը 706513 «ապագա ստորագրություն»:

Կայքի կառուցման տեսանկյունից սա բավականին սովորական արտադրանք է: Կայքը պատրաստված է Python + Django + PostgreSQL-ի վրա, օգտագործվում է ստանդարտ ORM և ստանդարտ ադմինիստրատորի վահանակ։ Մեկուկես տարի կայքը մի քանի թարմացումներ է ապրել՝ ավելացվել են բաժիններ, փոխվել է գրանցման ձևի աշխատանքը, փոխվել են էջերի տեքստերն ու պատկերները։ Մենք փորձեցինք չբարդացնել դիզայնը, որպեսզի հնարավոր լինի շարել շինարարական բլոկներ, ինչի շնորհիվ որոշ բաժիններ երեք օրվա ընթացքում մտան գաղափարից գործարկվեցին:

Ցանկացած ժամանակակից կայքի այցելուների մոտավորապես կեսը գալիս է բջջային սարքերից: Մենք փորձեցինք կայքը հարմար դարձնել բոլորի համար, ուստի դասավորությունները գծվեցին և գրվեցին՝ էկրանի ցանկացած լայնության վրա ճիշտ ցուցադրելու համար՝ սկսած 320px-ից:

Գլխավոր գրասենյակի քարտեզ

Միակ բարդ ինտերակտիվ տարրը, որը այցելուները տեսնում են, Ռուսաստանի քարտեզն է, որի վրա նշված է շտաբը: Երբ շտաբների թիվը գերազանցեց 50-ը, դժվարացավ նավարկելը քարտեզի վրա՝ երկրի եվրոպական մասում ցուցիչների մոտ լինելու պատճառով։ Սկզբում քարտեզը ընկալվում էր որպես զուտ դեկորատիվ տարր, բայց հանկարծ լցվեց ֆունկցիոնալությամբ, ուստի նրանց համար, ովքեր արդեն գնահատել են քարոզարշավի դաշնային բնույթը և պարզապես ցանկանում են գտնել իրենց քաղաքը, մենք կազմեցինք ցուցակի ռեժիմ:

Քարտեզը պատրաստվել է գեղեցիկ և բազմակողմանի d3.js գրադարանի միջոցով: Մենք որոշեցինք գրել մեր սեփական սցենարը և չօգտագործել ստանդարտ Google Maps կամ Yandex.Maps քարտեզի նախագծման պատճառով: Երկրի էլիպսոիդը հարթության վրա բացելու բազմաթիվ եղանակներ կան: Մերկատորի պրոյեկցիայում օբյեկտները շատ ձգված են հյուսիսային լայնություններում, և մեզ ավելի շատ տարածք է պետք այն տարածքներում, որտեղ կենտրոնացած են հիմնական խոշոր քաղաքները: Բացի այդ, Մերկատորի պրոյեկցիայում Ռուսաստանը բավականին տարօրինակ տեսք ունի։ Ընտրեցինք Ալբերս-Սիբիր կոնաձև պրոյեկցիան, որն ավելի ծանոթ է աշխարհագրության դասագրքերից։


Առողջ մարդու Ռուսաստան (Ալբերսի կոնաձև պրոյեկցիա) և ծխողի Ռուսաստան (Մերկատորի պրոյեկցիա)

Բովանդակության կառավարում

Կայքի խմբագրական բաժինը քիչ հետաքրքրություն է ներկայացնում: Օգտագործվում է սովորական Django ադմինիստրատորի վահանակը նվազագույն հարմարեցմամբ: Զարգացման սահմանափակ ռեսուրսների դեպքում ավելի ձեռնտու է ադմինիստրատորի վահանակի մի քանի օգտատերերի սովորեցնել, թե ինչպես օգտագործել ստանդարտ գործիք, քան ժամանակ ծախսել՝ ստեղծելով իսկապես հարմար գործիք:

Որոշ լուծումներ, որոնք հեշտացնում են խմբագրի կյանքը, վերցված են այլ նախագծերից։ Օրինակ՝ հաճախորդի կողմից տեքստերի տպագրության գործիք: Մեր տպագրիչը հարմար է նրանով, որ հեշտությամբ միանում է ցանկացած տեքստի կամ լարային մուտքագրման դաշտին: Ինքնատպագրության վիճակի մասին տեղեկատվությունը (միացված/անջատված) պահվում է որպես չտպվող նիշ տողի վերջում և որևէ կերպ կախված չէ հետին պլանից:

Գրառումների և նորությունների բարդ բովանդակության հետ աշխատելու համար մենք օգտագործում ենք բլոկների խմբագրիչ, որն օգտագործվում է նաև բազմաթիվ այլ նախագծերում.

Բլոկները տարբեր տեսակի են, յուրաքանչյուր նախագիծ ունի իր հավաքածուն: Յուրաքանչյուր բլոկ պարունակում է բովանդակություն և կարող է պարունակել կարգավորումներ: Բլոկի տվյալները պահվում են տվյալների բազայում որպես json, իսկ տեքստային բլոկի ներսում նշագրումը պահվում է markdown ձևաչափով:

Ցուցադրման համար բլոկները փոխակերպվում են ցանկալի ձևաչափին՝ HTML գրառման համար, տեքստ՝ ինդեքսավորման համար, RSS կամ XML՝ Yandex.Zen-ի համար, JSON բջջային հավելվածի համար և այլն։ Այսպիսով, մենք կանխատեսելի արդյունք ենք ստանում բովանդակության բավականին բարդ ձևաչափով ցանկացած սարքի վրա:

Առաջին տարբերակը հիմնված էր Սըր Թրևորի կոդի վրա։ Ավելի ուշ, երբ դժվարացավ պահպանել սըր Թրևորի սպագետտի ծածկագիրը, խմբագրիչը վերաշարադրվեց React-ում։

Վերլուծություն

Տեխնիկական տեսանկյունից ամենահետաքրքիրը տեղի է ունենում կայքի ադմինիստրատորի վահանակում։ Այնտեղից հետևում էինք գրանցումների ընթացքին։

Սկզբում վերլուծությունը բավականին պարզունակ էր՝ ժամանակի ընթացքում տարբեր տեսակի գրանցումների քանակի գրաֆիկներ: Բայց մենք ուզում էինք տեսնել դինամիկան ըստ տարածաշրջանների և հետևել տարբեր իրադարձությունների ազդեցությանը գրանցումների քանակի վրա: Այսպիսով, հայտնվեց երկար սպասված վերլուծությունը.


Այս էկրանին կա կայքի ողջ կյանքի վերաբերյալ տեղեկատվության ամփոփում, որոշակի ժամանակահատվածի ժամանակացույց և այս ժամանակահատվածի իրադարձությունների ցանկ: Դուք կարող եք գծապատկերում նշել գագաթնակետը և փորձել հասկանալ, թե ինչ իրադարձություն է դա առաջացրել: Ամենից հաճախ սա Նավալնիի YouTube-ի ալիքում հետաքննությունով հերթական տեսանյութի հրապարակումն է։ Ստորագրությունների ամենամեծ աճը տվել են մարզային պաշտոնյաների մեքենայությունների մասին տեսանյութերը։

Գծապատկերը կազմված է d3.js-ում, իսկ իրադարձությունների զտումն ըստ ժամանակի և գլխավոր գրասենյակի իրականացվում է Crossfilter գրադարանի միջոցով։ Այս լուծումը թույլ է տալիս հաճախորդի կողմից, առանց միջերեսային արգելակների, աշխատել գրանցման տվյալների հետ մեկ տարուց ավելի ընդմիջումով 1 ժամ հավելումներով: Այս պահին սա 12 մեգաբայթ է (1,3 ՄԲ gzip-ով):

Ծրագրի բոլոր մասնակիցներին ամեն օր ավտոմատ կերպով ուղարկվում էր փոքր տեքստային հաշվետվություն՝ գրանցման բազայի և նախորդ օրվա առաջընթացի հիմնական ցուցանիշներով:

Քաղաք և մարզ

Մենք ունենք նաև հսկայական աղյուսակ, որտեղ Ռուսաստանի յուրաքանչյուր շրջանի համար թվարկված են ստորագրահավաքի նախապատրաստման հիմնական ցուցանիշները.

Այս աղյուսակի թվերը սկզբում չէին ուզում մերձենալ: Գումարն ըստ քաղաքների գրանցումների քանակից զգալիորեն պակաս է եղել։ Պարզվեց, որ կայքում հարցաթերթիկը լրացնելիս մարդիկ անսպասելիորեն հաճախ սխալվում են իրենց քաղաքի անվան մեջ կամ օգտագործում են ոչ ստանդարտ անուններ.

Մոսկվա - 2,5% սխալ և 579 ուղղագրություն;
- Սանկտ Պետերբուրգ - 12,6% սխալ և 767 ուղղագրություն;
- Komsomolsk-on-Amur - ավելի քան 20% սխալներ և հապավումներ, 75 տարբերակ:

Աջակիցների թվի սխալ գնահատումը կարող է հանգեցնել շտաբների ցանցի և քարոզչական միջոցառումների սխալ պլանավորմանը: Ես պետք է մտածեի, թե ինչպես կարելի է քաղաքի անվան մուտքագրումը դարձնել տարածաշրջանի ստանդարտ անվանում: Ես չէի ուզում օգտագործել ավտոմատ լրացման մեխանիզմներ KLADR-ի կամ FIAS-ի համար նման պարզ ձևի համար: Հետևաբար, մենք վերցրեցինք Ռուսաստանի 700 խոշորագույն քաղաքների ցուցակը, ավելացրինք տիպիկ ուղղագրությունների ցանկը («spb», «n-sk») և կատարեցինք ոչ խիստ որոնում՝ ըստ Լևենշտեյնի հեռավորության դասակարգման (սա չափանիշ է։ նիշերի երկու խմբերի միջև եղած տարբերության մասին):

Մենք ցուցակից յուրաքանչյուր քաղաքին հատկացրել ենք երեք կատեգորիաներից մեկին՝ ըստ մոտակա շտաբի հեռավորության՝ շտաբը քաղաքում է, շտաբը մոտ է (քաղաքային ագլոմերացիա), շտաբը՝ հեռու: Ճիշտ ժամանակին ժամանող ու ստորագրող մարդկանց թիվը գնահատելիս հաշվի է առնվել շտաբից հեռավորությունը։ Վերլուծության մեջ մենք առանձին հաշվել ենք բոլոր ստորագրողներին և «հասանելի» (հաստատված փոստ, բնակվում է քաղաքում՝ շտաբով կամ մոտակայքում):


Այս գրաֆիկը ցույց է տալիս, թե ինչպես է քարոզարշավը ժամանակի ընթացքում դարձել ավելի ու ավելի տարածաշրջանային: Մոսկվայից և Սանկտ Պետերբուրգից նոր գրանցումների տեսակարար կշիռը 35%-ից նվազել է մինչև 15%։

SMS և փոստ

Մեկ այլ տեխնիկական դժվարություն SMS և նամակներ ուղարկելն էր։ Դարպասները այնքան էլ լավ չեն կարողանում հաղորդագրություններ հասցնել, հատկապես արտասահմանյան համարներին: Բայց մենք ցանկանում էինք ստանալ աջակիցների ամենամաքուր և հուսալի բազան, ուստի գրանցման ձևի երկրորդ մասը պահանջում էր հեռախոսահամարը SMS-ի միջոցով հաստատել: Հուսալի ուղարկման համար մենք երեք դարպասների պտույտ կատարեցինք. եթե հաղորդագրությունը չհասցվեց, ապա նորից ուղարկումն անցավ մեկ այլ դարպասով: Բացի այդ, առանձին դարպասները կարող են անջատվել, երբ դրանց կողքին խափանումներ են տեղի ունենում: SMS կոդի առաքումը վերահսկվող պարամետրերից մեկն է.

Գրաֆիկը ցույց է տալիս, որ դարպասների շահագործման մեջ եղել են երկու ձախողումներ: Փետրվարի 21-ին և ապրիլի 17-18-ին առաքված SMS-ների մասնաբաժինը կտրուկ անկում է գրանցել՝ հաղորդագրությունների ուղարկման հերթում խափանումների պատճառով։ Իսկ հուլիսի 15-ին մենք փոխել ենք գրանցման թերթիկի դասավորությունը, սա նկատելի է նաև գծապատկերում։

Մենք մեծ թվով էլ-նամակներ ենք ուղարկում ավելի քան 700,000 էլփոստի հասցեների տվյալների բազա: Ինչ-որ մեկը բաժանորդագրվել է նորություններին, ինչ-որ մեկը պետք է ստանա իրադարձության ծանուցում: Բացի այդ, յուրաքանչյուր հասցե պետք է հաստատվի համաձայն 2-opt-in կանոնների (սա այն դեպքում, երբ ստացվում է հղում առաջին տառով, որի վրա պետք է սեղմել՝ հաստատելով տեղեկագրի բաժանորդագրությունը): Արշավի սկզբում մենք օգտվում էինք ActiveCampaign ծառայությունից, սակայն այն թանկ է և աներևակայելի դանդաղ։ Երբ տվյալների բազան գերազանցել է 300 հազար կոնտակտները, անհնար է դարձել աշխատել։ Հետևաբար, մենք գրել ենք մեր սեփական CRM / փոստային ծառայությունը, որը թույլ է տալիս ստեղծել փոստային ցուցակներ և նամակների շղթաներ՝ ըստ անհրաժեշտ նմուշների: Mailgun-ն այժմ օգտագործվում է նամակներ առաքելու համար:

Հետաձգված առաջադրանքների հերթեր

Փոստ կամ SMS ուղարկելը երրորդ կողմի ծառայությունների API-ի միջոցով զգալի ժամանակ պահանջող գործողություն է: Նման գործողությունները պետք է կատարվեն ասինխրոն, որպեսզի չդանդաղեցնեն օգտատիրոջ միջերեսը և չդնեն ամբողջ հավելվածը ծանրաբեռնվածության տակ: Սկզբում բոլոր ասինխրոն առաջադրանքները աշխատում էին Celery-ի միջոցով Ռեդիսի հետ՝ որպես բրոքեր: Յուրաքանչյուր տառ կամ SMS հաղորդագրություն ստեղծում էր առաջադրանք Celery-ի հերթում, որից հետո ազատ աշխատողը մշակում էր այս առաջադրանքը: Բայց պարզվեց, որ այս մոտեցումը անվստահելի է և չափազանց ռեսուրսատար:

Մի անգամ մեկ ժամում 10 հազարից ավելի գրանցում ստացանք (ոչ, հեռուստացույցով չէինք ցուցադրվում, «+1» ակցիա էր)։ Նեխուրի 10 աշխատակիցները չկարողացան դիմանալ դրան, օգտատերերը սկսեցին նկատել SMS-ների և նամակների ստացման զգալի ուշացում:

Այս միջադեպից հետո մենք լքեցինք Celery-ին հօգուտ ամենապարզ PostgreSQL-ի վրա հիմնված հերթի: Հերթից առաջադրանքները դասավորվել են ըստ «դեյմոնների» python-ում՝ մեկական հաղորդագրությունների առաքման յուրաքանչյուր ալիքի համար: 10 վայրկյանը մեկ անգամ դեյմոնը հերթից վերցնում էր մի շարք առաջադրանքներ և տվյալներ ուղարկում փոստային API-ին՝ մեկ փաթեթով: Առաջադրանքների խմբավորումը կտրուկ նվազեցրեց սերվերի բեռը, և հատուկ հերթի օգտագործումը դարձրեց վրիպազերծումը և մոնիտորինգը չափազանց հեշտ:

Նեխուրը չափազանց բարդ գործիք էր մեր առաջադրանքի համար։ Այն պահանջում է մանրակրկիտ կազմաձևում և մոնիտորինգ արտաքին կոմունալ ծառայությունների միջոցով, ինչպիսին Flower-ն է, որն ինքնին շատ ռեսուրսներ է սպառում: Այլ նախագծերում մենք փորձում ենք օգտագործել ավելի պարզ լուծում՝ RQ + Redis:


RQ-ի և Celery-ի բարդության համեմատությունը ասինխրոն առաջադրանքների հետ աշխատելու մասին հոդվածից։

Զարգացման գործընթաց

Ինչպե՞ս է ընթանում «Նավալնի 20! 8» կայքի ստեղծման գործընթացը ծրագրավորողների տեսանկյունից։ Մենք հավատարիմ չենք որևէ մեկ մեթոդաբանության, այլ օգտագործում ենք տարբեր համակարգերի մոտեցումներ: Օրինակ, մենեջերները առաջադրանքներ են դնում Trello-ում kanban տախտակի նման կառուցվածքով, և մշակողները օգտագործում են ծայրահեղ ծրագրավորման որոշակի պրակտիկա:

Թիմի մոտավորապես կեսը գտնվում է մոսկովյան գրասենյակում, իսկ մնացածն աշխատում է հեռակա կարգով: Մոսկվայի աշխատակիցները կարող են մասնակցել քարոզարշավի հանդիպումներին, որպեսզի ավելի լավ չաշխատեն, որպեսզի հասկանան մեծ պատկերը, սակայն մենք առանձին ենք քննարկում ՏՏ բաժնի խնդիրները։ Կանոնավոր զանգերը թույլ են տալիս բոլորին սինխրոնիզացնել և հասկանալ աշխատանքի հիմնական ուղղությունը ցանկացած պահի:

Ծրագրի մասնակիցների մեծ մասն աշխատում է դրա վրա լրիվ դրույքով, սակայն որոշ առաջադրանքներ կատարել են այլ նախագծերում ժամանակավորապես ներգրավված մշակողները կամ նույնիսկ կամավորները: Օրինակ, կամավոր Իլյան գրեթե ամբողջությամբ կազմել է գլխավոր էջի շտաբի քարտեզը։

Աղբյուրի կոդը պահվում է Bitbucket հարթակի git պահոցում: Յուրաքանչյուր լուրջ նոր առաջադրանքի համար ստեղծվում է առանձին մասնաճյուղ։ Մենք չենք բարձրացնում բեմադրող սերվեր յուրաքանչյուր ճյուղի համար, դրանք բոլորը միաձուլվում են զարգացնելու՝ գործարկելու մեկ թեստային սերվերի վրա: Փորձարկումից հետո առաջադրանքի համար պատասխանատու ծրագրավորողը դիմում է վարպետին: Թիմի ղեկավարը նայում է կոդը և, եթե ամեն ինչ լավ է, սկսում է տեղակայումը: Խոշոր առաջադրանքների համար մշակողները մանրամասն նկարագրում են, թե ինչն է պետք ստուգել և ինչը կարող է սխալ լինել տեղակայման ժամանակ:


Deploy կազմակերպվում է շատ պարզ. Մենք ունենք գործիք, որն արձագանքում է Bitbucket-ի վեբ-կապին (կամ նրա ինտերֆեյսի կոճակին), ծածկագրում է կոդը ցանկալի ճյուղից, պատճենում այն ​​սերվերին և այնտեղ գործարկում թարմացման սցենարը: Սցենարը Makefile-ում է։

«Make update»-ի գործարկումը կթարմացնի կախվածությունները, կփոխանցվի, հետգործընթացի ստատիկ ֆայլերը և, եթե ամեն ինչ լավ ընթանա, կվերագործարկվի uwsgi սերվերը: Մենք փորձում ենք միգրացիաներ անել, որպեսզի չխախտեն հին ծածկագիրը, այնպես որ տեղակայման սխալների դեպքում ամեն ինչ շարունակում է աշխատել։

Մշակումը սկսվել է 2016 թվականի սեպտեմբերի 18-ին։ Այդ ժամանակվանից ի վեր եղել են 1228 պարտավորություններ, 200 pull հարցումներ, ավելի քան 600 անգամ տեղակայվել են արտադրության մեջ և 67 մասնաճյուղեր պահեստում (դրանց մեծ մասն այժմ փակ է):

Դիզայնի մասին

Ծրագրի թիմում դիզայնի վրա անընդհատ աշխատում էին միայն երկու հոգի (արտադրանքի գործառույթով գեղարվեստական ​​ղեկավար և դիզայներ), մինչդեռ երկուսն էլ ակտիվորեն ներգրավված են արշավի այլ նախագծերում: Հետեւաբար, դիզայնի մոտեցումը չափազանց օգտակար էր:

ՏՏ արտադրանքի նախագծման ժամանակ մենք միշտ առաջնորդվում ենք երկու հիմնական սկզբունքներով.

1) Ամենա «ծույլ» և չներգրավված օգտատիրոջ տեղեկատվությունը պետք է լինի առավել տեսանելի տեղում (այսպես մենք, օրինակ, որոշել ենք կայքի բլոկների և հատվածների սկզբնական տեղերը).

2) Որքան քիչ մարդիկ կօգտագործեն վերջնական արտադրանքը, այնքան քիչ մենք կփորձենք զարդարել այն (խնայել զարգացման ռեսուրսները) և այնքան ավելի շատ ներդրումային ջանքեր կարող ենք թույլ տալ յուրաքանչյուր օգտագործողի համար (հաճախ ավելի արդյունավետ է մի քանի հոգու վերապատրաստելը, քան ժամանակ ծախսելը նորի ներդրման վրա: առանձնահատկություններ, որոնք կխնայեն օգտագործողի ջանքերը կամ կխուսափեն սխալներից):

Հետևաբար, մեր ցածր օգտատերերի ներքին համակարգերը հակված են նմանվել մի լարային շրջանակի*, որը կյանքի է կոչվել, և այն ամենը, ինչի հետ հանդիպում է քարոզարշավի աջակիցը, ընդհանուր տեսողական հաղորդակցության մի մասն է, խստորեն ենթարկվում է կորպորատիվ ոճին և ողջախոհությանը:

Ստորագրահավաքի ՏՏ համակարգը շատ բարդ, բազմաբաղադրիչ նախագիծ է՝ սահմանափակ ռեսուրսներով, ուստի դիզայներների աշխատանքի հիմնական մասը եղել է թղթի վրա, հանդիպումներում և Google փաստաթղթերում, և ոչ թե գրաֆիկական խմբագրիչում (մեր դեպքում, Էսքիզ):

Նախագիծն ունի շատ բարդ սխեմաներ, որոնք դուք պարզապես ցանկանում եք նկարել, և շարժման ընթացքում հայտնաբերված սխեմաներ գծելու բոլոր էլեկտրոնային գործիքները մեզ չէին համապատասխանում: Երբեմն մենք օգտագործում էինք draw.io, բայց ավելի հաճախ նկարում էինք ուղղակիորեն թղթի վրա: Ամենակարևոր գծապատկերները կախված էին նախագծի գրատախտակին: Այնտեղ կցված էին նաև թղթային «տոմսեր»՝ հանդիպումների ժամանակ քննարկելու հարցերով։

Փաստաբանների հետ համաձայնեցված թղթային դիագրամներից և սցենարներից մենք հավաքեցինք նախատիպերը marvelapp.com-ում, որպեսզի ևս մեկ անգամ ստուգենք տրամաբանությունը և համոզվենք, որ ոչինչ չի մոռացվել: Դրանից հետո միայն դասավորությունները փոխանցվեցին զարգացմանը։

Կախված առաջադրանքից, օգտագործվել են հետազոտության և նախագծման տարբեր մեթոդներ: Այսպիսով, նախքան երկար սպասված վերլուծությունը կատարելը, մենք մի շարք հարցազրույցներ անցկացրինք համակարգի բոլոր պոտենցիալ օգտատերերի հետ (շտաբի ղեկավարից մինչև փոստային ցուցակներ ուղարկող անձը) և, ելնելով նրանց ցանկությունից, կարողացանք հավաքել շատ. պարզ ինտերֆեյս, որը երկար ժամանակ ծառայել է որպես քարոզարշավի վահանակ:

Մեկ էջում մենք տեսանք գրանցումների հոսքը, կարողացանք տեսնել դրա վրա ազդող իրադարձությունները և պարզել, թե ինչպես են մեր աջակիցները բաշխված ըստ քաղաքների: Մենք նաև հավաքել ենք քաղաքների վարկանիշները՝ ըստ ստորագրողների թվի (սա մեզ թույլ է տվել վերահսկել շտաբների արդյունավետությունը և ասել, թե արդյոք ճիշտ քաղաքներ ենք ընտրել նոր շտաբներ բացելու համար) և աղյուսակային վերլուծություն:

Ստուգման միջերեսների և հենց ստորագրությունների հավաքման համար բացարձակ առաջնահերթությունը օպերատորի արագությունն էր: Հավաքածուն տեղի է ունենում ժամանակի սուր ճնշման պայմաններում, ուստի մենք փորձել ենք խնայել յուրաքանչյուր վայրկյանը և միևնույն ժամանակ նվազեցնել օգտվողի հնարավոր սխալների քանակը։

Մեր հաշվարկներով՝ շտաբների առկա քանակով և մարդկանց շարունակական հոսքի պայմաններում յուրաքանչյուր ընտրողին պետք է տևեր ոչ ավելի, քան 6 րոպե մեկ անձի համար՝ «բարևից» մինչև հավաքագրման ընթացակարգի ավարտը։

Ստուգումը և ստորագրահավաքը ՏՏ համակարգի միջոցով ամբողջությամբ մեր կողմից հորինված ընթացակարգ է, ուստի մենք ընտրեցինք MVP թեստավորումը համակարգի իրական օգտագործողների վրա՝ որպես մեր լուծումների ստուգման հիմնական մեթոդ: Այսպիսով, մենք փորձարկեցինք հիմնական արձանագրությունը և առաջին ստուգման ինտերֆեյսը մոսկովյան շտաբի աշխատակիցների վրա, այնուհետև գնացինք երեք տարբեր քաղաքներ (Սանկտ Պետերբուրգ, Չելյաբինսկ և Ուլյանովսկ)՝ դիտարկելու իրական օգտատերերին այդ գործընթացում: Նման նախագծերի համար սա լավագույն միջոցն է՝ արագ կազմելու իրերի և օգտատերերի դեպքերի ցանկը, որոնք կարող են մոռացվել կամ չնախատեսված լինել նախագծման և մշակման փուլում:

Ինտերֆեյսում աննշան փոփոխություններ կատարելուց հետո ստուգումը մեկնարկեց բոլոր նախընտրական շտաբներում: Արդյունքում մեզ հաջողվեց կրճատել մեկ հարցաթերթիկի մշակման ժամանակը մեկ անձի համար մեկուկես-երկու րոպեի:

Փորձարկում

RobotFramework-ը օգտագործվել է ավտոմատացված թեստավորման համար: Ծրագրի ամենակարևոր գործառույթները լուսաբանելու համար գրվել են ընդունման և ֆունկցիոնալ թեստեր, և կազմաձևվել է դրանց ավտոմատ մեկնարկը: Ջենկինսը օգտագործվել է որպես CI համակարգ:

Կայքի ամենակարեւոր գործառույթը օգտատերերի գրանցումն է, որը ենթադրում է հեռախոսի հաստատում SMS կոդի միջոցով: Կոդերով հաղորդագրությունները փորձարկելու համար կազմաձևվել է GSM մոդեմ՝ փորձնական SIM քարտով և աստղանիշով: SMS կոդը ուղարկվել է փոստին, որտեղից այն արդեն հասանելի էր թեստավորման համար։

Գտնված սխալները ավելացվել են Trello-ին՝ որպես ծրագրավորողների առաջադրանքներ:

Սերվերի ենթակառուցվածք

«Նավալնի 20!8» կայքը շարունակում է աշխատել և սահուն դառնում է ընտրողների գործադուլի արշավը, ուստի տեղեկատվական էմբարգոն դեռ չի հանվել, և պատմությունը կարճ կլինի։ Սերվերի մասը բաղկացած է երեք մակարդակից՝ backend, caching proxies և edge servers: Բոլոր կոնֆիգուրացիաները կառավարվում են խոհարարի միջոցով, ուստի ցանկացած դեր ունեցող սերվերը կարող է արագ բարձրացնել նոր վիրտուալ մեքենայի վրա:

Տվյալների բազան և հավելվածների օրինակները աշխատում են հետին պլանում, յուրաքանչյուր հավելված իր վիրտուալ մեքենայի վրա և իր սեփական ip-ով: Բոլոր սերվերները գոյություն ունեն մի քանի օրինակներում, և տվյալների բազան վերարտադրվում է master-slave ռեժիմով մեկ այլ մեքենայի վրա:

Պրոքսի սերվերում տեղադրված է Varnish-ը, որը զբաղվում է որոշակի հասցեների քեշավորման հարցումների և url-ից կախված տարբեր սահմանափակումներով: Եթե ​​backend-ը ձախողվի, կայքը կարող է անորոշ ժամանակով աշխատել պրոքսի սերվերից, միայն օգտվողների գրանցման մեխանիզմը կխախտվի:

Edge սերվերները զբաղվում են ստատիկ քեշինգով և ssl դադարեցմամբ (այնուհետև տրաֆիկը անցնում է VPN ցանցով): Այս սերվերների էությունը տրաֆիկի հիմնական մասը բաշխելն է և մնացած ենթակառուցվածքի պաշտպանությունը հարձակումներից: Սրանք թույլ վիրտուալ մեքենաներ են՝ գիգաբիթ ալիքով տարբեր տվյալների կենտրոններում։ Բեռը բաշխվում է DNS հավասարակշռման միջոցով: Edge սերվերները պարունակում են նվազագույն կոնֆիգուրացիա և, անհրաժեշտության դեպքում, կարող են հեշտությամբ բարձրացնել մի քանի րոպեում: Առավելագույն օգտակար տրաֆիկը, որը մենք ունեինք եզրային սերվերների վրա, մի քանի ժամվա ընթացքում 5 Գբ/վ էր:

Նկարները, ոճերը, javascript-ը, json-ի տվյալները պահվում են այնպես, որ ֆայլի անունը ներառում է այս ֆայլի բովանդակության հեշը (օրինակ՝ style.28fa1c7b1761.css), այնպես որ այս բոլոր ֆայլերը կարող են ընդմիշտ պահվել սերվերում և բրաուզերում: Տրաֆիկի հիմնական ծավալը տրվում է եզրային սերվերներից։ Այնուհետև անցնում են միայն բովանդակության էջերի հարցումները, և դա մոտ 25 անգամ ավելի քիչ տվյալ է:

Երբեմն CloudFlare-ը միանում է եզրային սերվերների փոխարեն, բայց մենք փորձում ենք վերադառնալ մեր սերվերներին, քանի որ CloudFlare-ը միշտ չէ, որ լավ հասանելիություն ունի Ռուսաստանից։ Անհատ պրովայդերները, նույնիսկ ամենախոշորները, պարբերաբար սկսում են արգելափակել իրենց ip-ը (Ռոսկոմնադզորի հետքերը):

Եզրակացություն

Ավանդական ոճով ստորագրություններ հավաքելը (առանց հատուկ ՏՏ համակարգի, թղթով, գրիչով և աղյուսակներով excel-ով) նման է օդապարիկով դեպի լուսին թռչելուն. բայց այս կերպ թիրախներին հասնելը ֆիզիկապես անհնար է:

Այնպիսի ստորագրություններ հավաքելու համար, որ ընտրական հանձնաժողովը ստիպված լինի ընդունել անգամ անցանկալի թեկնածուից, մենք սկսեցինք ստեղծել այս բարդ ենթակառուցվածքը։ Այս գլխում մենք խոսեցինք հենց մեր առջեւ դրված խնդրի և դրա լուծմանը պատրաստվելու մասին:

Այն պատմում է շտաբի ցանցային սարքավորումների ընտրության և կազմաձևման, սեփական փաստաթղթերի սկաների մշակման և շտաբի տարածքների տեսահսկման կազմակերպման մասին:

Երրորդ գլխում նկարագրվելու է ստորագրահավաքի դիմումների ստեղծման գործընթացը և այն ամենը, ինչ կապված է ֆիզիկական ստորագրությունների թերթիկների հետ աշխատելու հետ:

Չորրորդ գլխում խոսվում է ծրագրի կառավարման, թիմի, ժամանակացույցի և մի փոքր արդյունքների մասին:

Tags:

  • ջանգո
  • սորուն
  • ինտերֆեյսի դիզայն
  • կայքի մշակում
  • 20!8
Ավելացնել պիտակներ

«Մինչ սա PR պատմություն է».

Ընդդիմադիր Ալեքսեյը, ով 2018 թվականին Ռուսաստանի Դաշնությունում կայանալիք նախագահական ընտրություններում իր թեկնածությունը գրանցելու համար անհրաժեշտ 300 հազար ստորագրություն է հավաքել։ Հիմա նրան թույլ կտա՞ն մասնակցել ընտրություններին։

Համաձայն «Ռուսաստանի Դաշնության Նախագահի ընտրության մասին» օրենքի (թիվ 19 - FZ 10.01.2003 թ.) թեկնածուն ինքնառաջադրված թեկնածուն է (այսինքն՝ թեկնածուն, որը չի առաջադրվել Քաղաքական կուսակցություն) Կենտրոնական ընտրական հանձնաժողովին պետք է տրամադրի ընտրողների առնվազն 300000 ստորագրություն, որոնցից յուրաքանչյուր մարզում պետք է լինի ոչ ավելի, քան 7500-ը: Տեխնոլոգիապես Նավալնին կատարեց առաջադրանքը՝ նա հայտարարեց, որ արդեն հավաքել է 335782 ստորագրություն երկրի ոչ պակաս, քան 40 մարզերում։ Սակայն դրանք իրավական ուժ չունեն։

«Մինչև առաջադրումը և մինչև ընտրական հաշիվ բացելը հավաքված ստորագրությունները վավեր չեն»,- մեզ հետ զրույցում ասաց ընտրական օրենսդրության ոլորտի փորձագետ Անդրեյ Բուզինը։ Մենք բացատրում ենք. Նույն «Նախագահական ընտրությունների մասին» օրենքի համաձայն՝ թեկնածուի առաջադրումը տեղի է ունենում ընտրություններ նշանակելու որոշման պաշտոնական հրապարակման օրվանից ոչ ուշ, քան 20 օր հետո։ Մինչդեռ դրանք նախատեսված են Ղրիմի բռնակցման տարելիցի օրը՝ 2018 թվականի մարտի 18-ին։

Սակայն, Սահմանադրության համաձայն, նախագահական ընտրությունները Դաշնության խորհուրդը պաշտոնապես կնշանակի քվեարկության օրվանից ոչ շուտ, քան 100 օր առաջ և ոչ ուշ, քան 90 օր առաջ, այսինքն՝ այս տարվա դեկտեմբերին։ Ըստ այդմ՝ Ալեքսեյ Նավալնին կարող է պաշտոնապես առաջադրել իր թեկնածությունը նախագահական ընտրություններում եւ ստորագրահավաք սկսել միայն դեկտեմբերին։ Եթե ​​քաղաքական գործիչն առաջադրվելու համար փաստաթղթեր է ներկայացնում այն ​​նույն օրը, երբ Դաշնային խորհուրդն ընտրություններ է նշանակում, ապա ստորագրահավաքի համար 55-ից 45 օր կունենա։ Եթե ​​նա հավաքի այս ժամանակահատվածում ճիշտ գումար, ԿԸՀ-ն կստուգի դրանց իսկությունը և կորոշի որպես թեկնածու գրանցվելու մասին։

Այն, որ այժմ հավաքված ստորագրությունները չեն կարող օգտագործվել ԿԸՀ փաստաթղթեր ներկայացնելիս, գիտակցում է նաև ինքը՝ Նավալնին։ Իր կայքում նա գրել է, որ «X ժամում ճիշտ գումարը արագ և արդյունավետ հավաքելու համար» յուրաքանչյուր ստորագրություն պոտենցիալ ընտրողի էլեկտրոնային փոստ, հեռախոսահամար և կարճ հարցաթերթիկ է։

Սակայն Նավալնիի՝ որպես թեկնածու գրանցվելու մասին խոսելը դեռ վաղ է։ Հարցը, թե արդյոք նա կկարողանա առաջադրել իր թեկնածությունը նախագահական ընտրություններում, դեռ լուծված չէ։ Կիրովլեսի գործով գործընթացի վերաքննության դատավճռից հետո ընդդիմադիրն ընկել է դատական ​​պատառաքաղի մեջ. Մի կողմից? նա դատապարտվել է ազատազրկման, ինչը նշանակում է, որ, ըստ օրենքի, նա իրավունք չունի մասնակցելու ընտրություններին։ Մյուս կողմից, նա դեռ հնարավորություն ունի Սահմանադրական դատարանում վիճարկել օրենքի այս դրույթը։

Տնտեսական և քաղաքական բարեփոխումների կենտրոնի ղեկավար Նիկոլայ Միրոնովը կարծում է, որ Նավալնին ստորագրություններ է հավաքել իր քաղաքական կշիռը ցույց տալու համար, և որ նա ի վիճակի է դա անել ապագայում։

«Սա ճնշման միջոց է»,- ասաց ՄԿ քաղաքագետը։ -Կարծում եմ, որ սա ազդանշան է տարբերին սոցիալական խմբերորպեսզի աջակցեն նրան, և տարբեր հովանավորների։ Բայց մենք ոչինչ չգիտենք այս ստորագրությունների որակի մասին»։ Փորձագետը նշեց, որ պաշտոնի բարձրացված քաղաքական գործիչը կարող է 300 հազար ստորագրություն հավաքել, բայց դա շատ դժվար է։ «Քանի դեռ այս պատմությունը ընտրական գործընթացից դուրս է, PR-ի համար է»,- ասում է քաղաքագետը։ -Երբ իրական ստորագրություններ կհավաքվեն, ամեն ինչ կախված կլինի ընտրական հանձնաժողովներ. Ինչ-որ փուլում նրան կարող են կտրել, բայց, որքան հասկանում եմ, ընտրություններին Նավալնիի մասնակցության պատրաստի սցենար չկա»։



 
Հոդվածներ Ըստթեմա:
Ջրհոսի աստղագուշակը մարտի դ հարաբերությունների համար
Ի՞նչ է ակնկալում 2017 թվականի մարտը Ջրհոս տղամարդու համար: Մարտ ամսին Ջրհոս տղամարդկանց աշխատանքի ժամանակ դժվար կլինի։ Գործընկերների և գործընկերների միջև լարվածությունը կբարդացնի աշխատանքային օրը։ Հարազատները ձեր ֆինանսական օգնության կարիքը կունենան, դուք էլ
Ծաղրական նարնջի տնկում և խնամք բաց դաշտում
Ծաղրական նարինջը գեղեցիկ և բուրավետ բույս ​​է, որը ծաղկման ժամանակ յուրահատուկ հմայք է հաղորդում այգուն: Այգու հասմիկը կարող է աճել մինչև 30 տարի՝ առանց բարդ խնամքի պահանջելու: Ծաղրական նարինջը աճում է բնության մեջ Արևմտյան Եվրոպայում, Հյուսիսային Ամերիկայում, Կովկասում և Հեռավոր Արևելքում:
Ամուսինը ՄԻԱՎ ունի, կինը առողջ է
Բարի օր. Իմ անունը Թիմուր է։ Ես խնդիր ունեմ, ավելի ճիշտ՝ վախ խոստովանել ու կնոջս ասել ճշմարտությունը։ Վախենում եմ, որ նա ինձ չի ների և կթողնի ինձ։ Նույնիսկ ավելի վատ, ես արդեն փչացրել եմ նրա և իմ աղջկա ճակատագիրը: Կնոջս վարակել եմ վարակով, կարծում էի անցել է, քանի որ արտաքին դրսևորումներ չեն եղել
Այս պահին պտղի զարգացման հիմնական փոփոխությունները
Հղիության 21-րդ մանկաբարձական շաբաթից հղիության երկրորդ կեսը սկսում է իր հետհաշվարկը։ Այս շաբաթվա վերջից, ըստ պաշտոնական բժշկության, պտուղը կկարողանա գոյատևել, եթե ստիպված լինի լքել հարմարավետ արգանդը։ Այս պահին երեխայի բոլոր օրգաններն արդեն սֆո են