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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Պահանջվում է ոչ ավելի, քան 315 հազար ստորագրություն.
- Առնվազն 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 հազար էլ.փոստի հասցեների բազա: Ինչ-որ մեկը բաժանորդագրված է նորություններին, ինչ-որ մեկը պետք է ծանուցում ստանա իրադարձության մասին: Բացի այդ, յուրաքանչյուր հասցե պետք է հաստատվի՝ համաձայն 2-միանալու կանոնների (սա այն դեպքում, երբ առաջին տառը պարունակում է հղում, որը դուք պետք է սեղմեք՝ ձեր բաժանորդագրությունը տեղեկագրին հաստատելու համար): Արշավի սկզբում մենք օգտվում էինք ActiveCampaign ծառայությունից, սակայն այն թանկ էր և աներևակայելի դանդաղ։ Երբ տվյալների բազան գերազանցել է 300 հազար կոնտակտները, անհնար է դարձել աշխատել։ Հետևաբար, մենք գրեցինք մեր սեփական CRM / փոստային ծառայությունը, որը թույլ է տալիս ստեղծել փոստային ցուցակներ և նամակների շղթաներ՝ հիմնվելով պահանջվող նմուշների վրա: Mailgun-ը ներկայումս օգտագործվում է նամակներ առաքելու համար:

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

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

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

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

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


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

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

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

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

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

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


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

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

Մշակումը սկսվել է 2016 թվականի սեպտեմբերի 18-ին։ Այդ ժամանակվանից ի վեր եղել է 1228 պարտավորություն, 200 ձգման հարցում, տեղակայումը ավելի քան 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: Բոլոր կոնֆիգուրացիաները կառավարվում են խոհարարի միջոցով, այնպես որ ցանկացած դեր ունեցող սերվերը կարող է արագ տեղադրվել նոր վիրտուալ մեքենայի վրա:

Backend-ը գործարկում է տվյալների բազա և հավելվածների օրինակներ՝ յուրաքանչյուր հավելված իր վիրտուալ մեքենայի վրա և իր սեփական 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 հազար ստորագրություն, որոնցից մենք ընտրեցինք և ներկայացրինք լավագույն 11722-ը, չնայած խիստ ընտրությանը, ընտրական հանձնաժողովի աշխատանքային խումբը հայտնաբերեց բազմաթիվ «անվավեր ստորագրություններ», և ընտրական հանձնաժողովը հրաժարվեց գրանցել թեկնածուներին: Ավելին կարդացեք ստորագրությունների անվավեր ճանաչման անհեթեթ պատճառների մասին։

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

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

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

Պահանջվում է ոչ ավելի, քան 315 հազար ստորագրություն.
- Առնվազն 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 հազար էլ.փոստի հասցեների բազա: Ինչ-որ մեկը բաժանորդագրված է նորություններին, ինչ-որ մեկը պետք է ծանուցում ստանա իրադարձության մասին: Բացի այդ, յուրաքանչյուր հասցե պետք է հաստատվի՝ համաձայն 2-միանալու կանոնների (սա այն դեպքում, երբ առաջին տառը պարունակում է հղում, որը դուք պետք է սեղմեք՝ ձեր բաժանորդագրությունը տեղեկագրին հաստատելու համար): Արշավի սկզբում մենք օգտվում էինք ActiveCampaign ծառայությունից, սակայն այն թանկ էր և աներևակայելի դանդաղ։ Երբ տվյալների բազան գերազանցել է 300 հազար կոնտակտները, անհնար է դարձել աշխատել։ Հետևաբար, մենք գրեցինք մեր սեփական CRM / փոստային ծառայությունը, որը թույլ է տալիս ստեղծել փոստային ցուցակներ և նամակների շղթաներ՝ հիմնվելով պահանջվող նմուշների վրա: Mailgun-ը ներկայումս օգտագործվում է նամակներ առաքելու համար:

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

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

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

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

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


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

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

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

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

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

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


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

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

Մշակումը սկսվել է 2016 թվականի սեպտեմբերի 18-ին։ Այդ ժամանակվանից ի վեր եղել է 1228 պարտավորություն, 200 ձգման հարցում, տեղակայումը ավելի քան 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: Բոլոր կոնֆիգուրացիաները կառավարվում են խոհարարի միջոցով, այնպես որ ցանկացած դեր ունեցող սերվերը կարող է արագ տեղադրվել նոր վիրտուալ մեքենայի վրա:

Backend-ը գործարկում է տվյալների բազա և հավելվածների օրինակներ՝ յուրաքանչյուր հավելված իր վիրտուալ մեքենայի վրա և իր սեփական 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 պատմություն է»

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

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

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

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

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

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

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

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



 
Հոդվածներ Ըստթեմա:
Ինչպես և որքան ժամանակ թխել տավարի միս
Ջեռոցում միս թխելը տարածված է տնային տնտեսուհիների շրջանում։ Եթե ​​պահպանվեն բոլոր կանոնները, ապա պատրաստի ուտեստը մատուցվում է տաք և սառը վիճակում, իսկ սենդվիչների համար կտորներ են պատրաստվում։ Տավարի միսը ջեռոցում կդառնա օրվա կերակրատեսակ, եթե ուշադրություն դարձնեք միսը թխելու պատրաստմանը։ Եթե ​​հաշվի չես առնում
Ինչու՞ են ամորձիները քորում և ի՞նչ անել տհաճությունից ազատվելու համար:
Շատ տղամարդկանց հետաքրքրում է, թե ինչու են իրենց գնդիկները սկսում քոր առաջացնել և ինչպես վերացնել այս պատճառը: Ոմանք կարծում են, որ դա պայմանավորված է անհարմար ներքնազգեստով, իսկ ոմանք կարծում են, որ դրա պատճառը ոչ կանոնավոր հիգիենան է։ Այսպես թե այնպես, այս խնդիրը պետք է լուծվի։ Ինչու են ձվերը քորում:
Աղացած միս տավարի և խոզի կոտլետների համար. բաղադրատոմս լուսանկարով
Մինչեւ վերջերս կոտլետներ էի պատրաստում միայն տնական աղացած մսից։ Բայց հենց օրերս փորձեցի դրանք պատրաստել տավարի փափկամիսից, և ճիշտն ասած, ինձ շատ դուր եկան, և իմ ամբողջ ընտանիքը հավանեց: Կոտլետներ ստանալու համար
Երկրի արհեստական ​​արբանյակների ուղեծրեր տիեզերանավերի արձակման սխեմաներ
1 2 3 Ptuf 53 · 10-09-2014 Միությունը, անշուշտ, լավն է: բայց 1 կգ բեռը հանելու արժեքը դեռ ահավոր է։ Նախկինում մենք քննարկել ենք մարդկանց ուղեծիր դուրս բերելու մեթոդները, բայց ես կցանկանայի քննարկել բեռները հրթիռներ հասցնելու այլընտրանքային մեթոդները (համաձայն եմ.