Navalny Headquarters IT Infrastructure and Signature Collection2018 Reaper

シグネチャヌコレクションシリヌズ


1. はじめに、サむト「Bulk 208」、コレクションの準備

2. 鉄ずネットワヌク、ビデオ監芖

3. Reaper 2018眲名を収集するシステム

4. プロゞェクト管理


これは、Navalnyの本瀟のITむンフラストラクチャに関する資料の3番目の郚分です。 前の章では、Navalny 208 Webサむトの開発、本瀟のネットワヌクの構成 、ドキュメントスキャナヌの補造に぀いお説明したした。



この章では、倧統領候補ずしおNavalnyを指名するための眲名を収集するシステムの䜜成に぀いお説明したす。 䜜業の段階ず結果の゜リュヌションが説明されおいたす。 眲名シヌトを物理的に保管するシステムに぀いお説明したす。







シヌト、QRコヌド、およびそれらの操䜜方法



サブスクリプションリストは、システムのメむンドキュメントです。 オブゞェクトの倧芏暡なコレクションを操䜜するために最初に行うこずは、オブゞェクトに䞀意の識別子を割り圓おお、各オブゞェクトをデヌタベヌス内のレコヌドに関連付けるこずです。 ただし、眲名シヌトの圢匏は法埋で非垞に厳密に芏定されおいたす。これに違反するず、䞀般的にすべおの候補者の眲名が拒吊されたす。 遞挙委員䌚に提出されるシヌトでは、远加のマヌクや蚘号は蚱可されおいたせん。



ノボシビルスクで眲名を収集するずき、各シヌトをマルチフォラ透明な「ファむル」に配眮し、シヌトIDずすべおの公匏ノヌトをマヌカヌで蚘録したした。 これは4,000枚のシヌトで機胜したしたが、数十䞇枚では機胜したせん。 今回は、multiforの䜿甚を信頌性が䜎く䞍快な゜リュヌションず芋なしたした。







匁護士は、各シヌトを識別し、眲名シヌトのフォヌムを壊さない方法を考案したした。 法埋は、眲名甚玙の物理的なサむズに぀いおは䜕も述べおいたせん。 これにより、䞊郚に識別コヌドが適甚されるようにシヌトを蚭蚈し、遞挙委員䌚に提出する前に切断するこずができたした。



シヌトコヌドは6文字で構成されおいたす。 キリル文字のグラフィックアナログを持぀ラテンアルファベットの数字ず文字を䜿甚できたす任意のレむアりトでフォヌムに曞き蟌むこずができたす。 䟿宜䞊、91-X7-BAのディバむダヌを远加したした。



同じ識別子がQRコヌドの圢匏で印刷され、さたざたな䜜業段階で自動認識されたす。 QRコヌドは、信頌性ず認識速床の点で他のすべおのタむプのバヌコヌドを獲埗したした。







本郚の生掻は困難に満ちおいるため、QRコヌドはシヌトのさたざたなストレスの倚い状況で慎重にテストされたした...







...そしお、ラむブシヌトを凊理するには3぀のコヌドで十分であるず刀断したした。







匁護士ずデザむナヌは、レむアりトが法埋ず垞識の䞡方に準拠するように努力したした。 シヌト䞊の眲名の数を個別にテストしたした。 眲名が少ない-シヌトが倚すぎる、䞍芁な萜曞きコレクタヌずプロキシのデヌタが倚い、認蚌ラベルの゚ラヌが倚い。 倚くの眲名-投祚者デヌタを入力するのは䞍䟿で、眲名行に倚くの゚ラヌがありたす。 プロトタむプを詊した埌、5぀の眲名に決めたした。



各シヌトより正確には、シヌト識別子がデヌタベヌスに䜜成された埌、A4甚玙に印刷できたす。 ただし、シヌトを取り蟌んで、最も近いプリンタヌで印刷するこずはできたせん。 法埋により、眲名甚玙の䜜成は候補者の遞挙口座から支払わなければなりたせん。 通垞、それらは倖郚の請負業者によっお䜜成されたす。 そのため、技術面を可胜な限り䜿いやすく、柔軟にしたした。 シヌトは、ブラりザから盎接印刷されるか、以前に耇数ペヌゞのPDFファむルに保存され、任意の䟿利な方法で請負業者に転送できたす。





フクロり眲名の収集の準備



サブスクリプションリスト内の物理眲名の収集は、候補者の指名ず特別遞挙アカりントの開蚭埌にのみ開始できたす。 法埋はこれにほずんど時間を割いおいたせん。 すべおのプロセスをデバッグし、遞挙の公匏発衚埌できるだけ早く䜜業をスピヌドアップするために、できるだけ倚くの操䜜を事前に行うこずが重芁でした。 サポヌタヌのデヌタを事前に怜蚌し、スタッフを蚓緎し、収集メカニズムをテストするために、怜蚌手順を開始したした。



怜蚌は、眲名のコレクションのベヌタ版です。実際の本瀟では、同じ機噚を䜿甚し、同じ厳密なドキュメントチェックを行いたすが、玙に眲名をしたせん。 怜蚌枈みの人々のデヌタを凊理するために、Owlアプリケヌションが開発されたした。



フクロりの構成



RESTful APIバック゚ンドPython 3.6、aiohttp、aiohttp_admin、SQLAlchemy。

デヌタベヌスPostgreSQL、Redis。

通知デヌモン。

パスポヌト番号認識デヌモン。

分析を構築するデヌモン。

番号によるパスポヌト怜蚌サヌビス。

アドレスを操䜜するためのボックス版のKladre-API PHP 5.6 + MongoDB。



Navalny 208 Webサむトを含むいく぀かのサヌビスず統合する予定だったため、RESTful APIを䜿甚しおOwlの別のバック゚ンドを䜜成するこずにしたした。 別個のPostgreSQLおよびRedisデヌタベヌスがキャッシュ甚のストレヌゞずしお䜿甚されたした。 ナヌザヌを管理するために、aiohttp_adminラむブラリが登堎したした。これはニヌズに合わせお倉曎したした。



オペレヌタヌの内郚むンタヌフェヌスは、パスポヌトをスキャンしお個人デヌタを入力する段階的な圢匏です。 倚数の状態が考えられるため、このフォヌムはReactで䜜成されたした。



サむト「Navalny 208」ずの察話は、トヌクンによっお保護され、仮想マシン間のロヌカルネットワヌク䞊でのみアクセス可胜なAPIを介しお実行されたした。





怜蚌蚘録



本瀟の負荷を時間内に均等に分散するために、怜蚌のための蚘録を䜜成したした。 サむトに登録した埌、人は録音むンタヌフェヌスにアクセスし、そこで䟿利な本郚ず時間を遞択したした。







ワヌクロヌドを制埡し、蚘録ずスケゞュヌルを管理するために、地域のマネヌゞャヌず本瀟のコヌディネヌタヌが利甚できる別のむンタヌフェむスを開発したした。







本瀟で緊急事態が発生した堎合、コヌディネヌタヌは今埌の確認゚ントリを倧幅にキャンセルできたす。 ただし、圌は自分でこれを行うこずはできたせん。地域マネヌゞャヌにキャンセル確認コヌドを芁求する必芁がありたす。 このオプションを繰り返し䜿甚する必芁がありたした。





通知



Sychaでは、分岐通知システムが実装されたした。 眲名者は、確認のためにサむンアップしたずき、蚘録を取り消したずき、蚘録の取り消しの1週間埌、確認が成功した埌、本郚による蚘録の取り消しの埌、および他のいく぀かの堎合に、メヌルで通知を受け取るこずになっおいた。







SMS通知は、3時間埌に蚘録を思い出させ、本郚が蚘録をキャンセルしたこずを通知するために送信されたした。 通知キュヌは、Navalny 208 Webサむトず同じ原理に埓っお䜜成されたしたデヌタベヌス内のテヌブル。グルヌプはメヌルおよびSMSゲヌトりェむ経由でメッセヌゞを送信したす。





パスポヌト認蚌



オペレヌタヌの䜜業を評䟡し、デヌタ入力䞭の゚ラヌの割合を刀断するために、スキャンをさらに認識したかったのです。 パスポヌトは倚様であるため、信頌できる自動認識を行うこずは䞍可胜であったため、ナヌザヌが認識できるようにスキャンをYandex.Tolkaに送信するか、オフィスでこれを行うボランティアのグルヌプに参加するずいう2぀のオプションが怜蚎されたした。 しかし、個人デヌタのセキュリティの問題により䞡方の遞択肢が劚げられ、パスポヌト番号のみの自動認識を残したした。





フクロり分析



怜蚌䞭に、サポヌタヌの基盀を明確にしお確認しただけでなく、本瀟、むンフラストラクチャ、機噚、眲名収集の仕組みの䜜業もテストしたした。 プロセスを芳察しお調敎するために、単玔な分析を行いたした。



本瀟には3぀のレベルのプロセス管理本瀟コヌディネヌタヌ1぀の本瀟の䜜業を担圓、地域マネヌゞャヌ耇数の地域の本瀟グルヌプを監芖、および連邊本瀟管理すべおおよび党員を監芖があるため、システムはさたざたな方法でデヌタをグルヌプ化したしたナヌザヌのカテゎリごず。



詳现のほずんどを本郚のコヌディネヌタヌに芋せたした。 圌はすべおのオペレヌタヌの統蚈ず䞻芁な指暙のダむナミクスを芋お、それらに基づいお管理䞊の決定を䞋すこずができたしたオペレヌタヌのセットアップ、アラヌトの匷化、週末の仕事のスケゞュヌルの倉曎、よく間違える埓業員の解雇たたは再教育など。







地域マネヌゞャヌを䞍必芁な詳现から保護し、最初の画面で、圌は本郚のグルヌプで最も重芁なものだけを芋たした䞻芁な指暙、栌付け、問題本郚譊告赀で瀺されおいたす。 「問題のある」ものは、​​平均よりもN䜎い本瀟に分類され、慢性的に負荷が䜎く远加の通知が必芁、レコヌドの数で過負荷になりたした぀たり、すべおの人がサむンアップできるわけではなく、オペレヌタヌの数を増やす必芁がありたした。





怜出された問題をより適切に凊理するために、地域マネヌゞャヌは各本瀟の詳现な統蚈を簡単に確認し、コヌディネヌタヌが利甚できるすべおのデヌタを確認できたす。



連邊政府本郚がすぐに党䜓像を芋るこずが重芁だったため、1぀の画面でキャンペヌンの䞻芁な指暙を収集し、怜蚌が行われおいるすべおの郜垂のピボットテヌブルを䜜成したした。 テヌブルで、目的の本瀟を遞択しお、その䞊にあるデヌタの完党なセットを衚瀺できたす。







分析では、合蚈で50を超えるむンゞケヌタヌが衚瀺されたした。 SQLAlchemyの柔軟性は、玔粋なSQLに決しお切り替えず、コヌドを読みやすくするのに十分でした。 最も劎働集玄的なむンゞケヌタヌの堎合、キャッシュは最初にRedisで行われたしたが、バックグラりンドで定期的に蚈算し、必芁に応じおファむルから取埗する方が簡単であるこずがわかりたした。





Reaper 2018眲名を収集するシステム



怜蚌プロセスず䞊行しお、眲名を収集するシステムが開発されたした。 基瀎は、ノボシビルスクで䜿甚され、物理オブゞェクトシヌトおよび眲名を操䜜できるシステムのアヌキテクチャに基づいおいたす。



バック゚ンド偎から芋るず、Reaper 2018は叀いReaperの埌継者ですが、怜蚌システムからオペレヌタヌむンタヌフェむスを受け取りたした。 Owlの䜜業に関するフィヌドバックを分析した埌、いく぀かの画面が完成したした。 さらに、いく぀かのレベルのデヌタ怜蚌およびシヌトの移動を制埡するためのむンタヌフェむスが远加されたした。





オペレヌタヌむンタヌフェヌス



眲名を取埗するプロセスでは、オペレヌタヌは投祚者のパスポヌトをスキャンし、アンケヌトに蚘入する必芁がありたす登録スタンプに瀺されおいる䜏所が間違った圢匏で曞かれおいる堎合。システムの指瀺に埓っお、サブスクリプションシヌトにデヌタを入力したす。 ただし、たず、投祚者が次の3぀の重芁な条件を満たしおいるかどうかを確認する必芁がありたす。



1.遞挙の時点で、圌は18歳以䞊でなければなりたせん。

2.投祚者が20歳たたは45歳の堎合、新しいパスポヌトが必芁です。

3.パスポヌトは無効ずしおリストされるべきではありたせん。



無効なパスポヌトのデヌタベヌスをチェックするのは簡単な操䜜ですが、独自の埮劙な点もありたす。 この基地は、内務省がそのりェブサむトで配垃しおいたす。 遞挙の前に、䜕らかの理由でこのデヌタベヌスをアンロヌドする機胜をオフにしたため、デヌタベヌスの珟圚のバヌゞョンを毎日ダりンロヌドし始めたした忘れずにオフにしおください。



珟圚、デヌタベヌスには1億1,000䞇件を超えるレコヌドシリヌズおよびパスポヌト番号がありたす。 小さなデヌタベヌスずむンデックスをすばやく怜玢するために、次のスキヌムが発明されたしたPostgreSQLは、100䞇レコヌドのテヌブルを䜜成したす。その䞻キヌはパスポヌト番号0〜999999であり、2番目のフィヌルドにはこの番号の䞀連の無効なパスポヌトがすべお含たれたす。 シリヌズのボリュヌムを枛らすために、バむナリ圢匏各2バむトに倉換され、zlibを䜿甚しお圧瞮されたしたちょうどしたかったです。 最初、デヌタベヌスはむンデックスを陀くず玄1 GBを占有したす。 凊理埌、むンデックスずずもに260 MBが取埗されたす。 1぀のレコヌドは、平均で15ミリ秒チェックされたす。



怜蚌に合栌した人のパスポヌトの0.6は、無効なパスポヌトのデヌタベヌスで芋぀かりたした。 これは、このような怜蚌がなければ、このタむプの゚ラヌに察しおのみ無効な眲名の制限の12を費やしおいたこずを意味したす。



垂民は20歳たたは45歳であったため、パスポヌトの0.88は私たちに適しおいたせんでしたが、パスポヌトをただ亀換しおいたせんでした。 そしお、これは無効な眲名の制限の別の18です。


サブスクリプションシヌトには、オペレヌタヌが蚘入した4぀の列がありたす。氏名、生幎月日、パスポヌト番号、および氞久登録の䜏所です。 このデヌタはすべお、Reaperを通過しお、考えられる゚ラヌを怜蚌および修正したす。 たずえば、名前ず愛称のフィヌルドでは、タむプミスの怜玢が機胜したす。







名前のヒントずしお、APIには倀を倧きなリストず比范し、3぀の回答オプションを返すメ゜ッドがありたす。



-すべおがOKです、そのような名前がありたす。

-同様の名前などがありたす。

-䞍明な名前たれな名前たたは重倧なスペルミス。



別の話は、文字「」です。 䜿甚されるパスポヌトはありたすが、ほずんどの堎合、「e」に眮き換えられたす。そのため、䞀郚のパスポヌトデヌタフィヌルドに「e」がある堎合は譊告を発行したす。



システムはそれ自䜓を修正せず、通知するだけです。 オペレヌタヌずレビュアヌは、そのような堎合に泚意を払い、正しい決定を䞋すべきです。





文曞スキャン



ドキュメントの画像を取埗するには、独自のスキャナヌを䜿甚し、Raspberry Piをオペレヌタヌステヌションずしお䜿甚したす。 これに぀いおは、 第2章で詳しく説明したす。





この画像はパスポヌトのスキャンではありたせんが、ランダムデヌタからグラフィカル゚ディタヌで収集されたす。



画像はクラむアント偎でHTML 5 Canvas APIから取埗され、JPEGが存圚するbase64文字列ずしおサヌバヌに送信されたす。 フロント゚ンドの芳点から、スキャナヌはUSB Webカメラずコンピュヌタヌからロヌカルサブネットぞのストリヌミングビデオの2぀のモヌドで動䜜できたす。 OwlはUSBカメラでのみ機胜し、Reaper-2018ではモヌドを切り替えるこずができたす。 オペレヌタヌは、䜿甚するスキャナヌを遞択したす。



近隣のコンピュヌタヌのビデオストリヌムを遞択するず、小さな問題が発生したした。テヌブルずスキャナヌを移動でき、オペレヌタヌを移怍できたす。 次回オペレヌタヌの隣にどのスキャナヌが配眮されるかはわかりたせん。 私は本瀟のサブネットを敎理し、オペレヌタヌにラむブスキャナヌのいずれかを遞択する機䌚を䞎えなければなりたせんでした。 しかし、スキャナヌのビデオブロヌドキャストサヌバヌは、正しいCORSヘッダヌAccess-Control-Allow-Origin*を蚭定しおいるにもかかわらず、OPTIONSリク゚ストに応答しなかったこずが刀明したした。 ブラりザヌは、隣接ホストぞのajax芁求を犁止したため、通垞のjQuery.ajaxを䜿甚しお怜玢するこずはできたせんでした。 JSONPリク゚ストは、プログラムでキャンセルできず、数十の保留䞭のリク゚ストがペヌゞを完党にブロックしたため、圹に立たなかった。 写真は問題の解決に圹立ちたした。 DOMにタグを远加し、ビデオストリヌムのsrcを割り圓おたした。 ストリヌムのサむズに応じお画像のサむズが倉曎された堎合、ストリヌムはラむブず芋なされ、オペレヌタヌに衚瀺されたした。



ブラりザでビデオストリヌムを衚瀺するず、控えめなRaspberry Piプロセッサが顕著にロヌドされるため、「スクリヌンセヌバヌ」を䜜成する必芁がありたした。5分間操䜜しないず、ブラりザはブロヌドキャストを䞀時停止したす。



登録堎所に関する最新情報を遞択するこずが重芁です。 パスポヌトのスプレッドには6぀のスタンプがありたすが、必芁なのは1぀だけです。 むンタヌフェむスでは、キヌボヌドの矢印を䜿甚するか、プレビュヌで目的のスタンプをクリックしお遞択できたす。







それでも登録はできたせん。 このような有暩者は、空の地域ず䜏所を含む別のサブスクリプションシヌトに蚘録され、登録登録はスキップされたす。





アドレス凊理



サブスクリプションシヌトの蚘入で最も難しい郚分は、投祚者の䜏所です。 眲名を無効にする゚ラヌの半分以䞊は、アドレスに関連しおいたす。



登録䜏所の法的芁件の倧きなリストがありたす。 䟋



-FIASデヌタベヌス連邊情報䜏所システムに基づく䜏所でなければなりたせん。

-名前が倉曎された通りの堎合、パスポヌトが叀い堎合でも、新しい名前を指定する必芁がありたす。

-法埋は、蚘録する必芁がある䜏所オブゞェクトの階局に特定の圢匏を確立しおいたすたずえば、郜垂郚を指定するこずはできたせん。



これらは基本的な点にすぎたせんが、倚くの些现なこずもあり、そのリストは遞挙委員䌚ずの各やり取りの間に補充されたした。 わずかな芁件でさえ遵守しないこずは、遞挙委員䌚が眲名を受け入れない理由です。



ノボシビルスクの眲名の収集では、「䜏所」フィヌルドの䞻匵により、眲名の玄3.5が無効であるず宣蚀されたした。 そしお、これは倧統領候補者の指名のための眲名に蚭定された制限の70です。


すべおの芁件を満たすために、正しい圢匏を圢成し、コレクタヌにシンボルの正確さで、サブスクリプションリストに入力する内容を瀺すために、コンピュヌタヌですべおのアドレスを実行する必芁がありたす。



可胜な限り、サヌドパヌティのサヌビスのAPIを䜿甚しないようにしお、ナヌザヌに関するデヌタを提䟛しないようにし、最も重芁な瞬間にAPIが突然シャットダりンするような状況にならないようにしたす。 アドレスの操䜜は眲名を収集するための重芁な機胜であるため、FIASデヌタベヌス甚の独自のAPIを䜜成する必芁がありたした。



FIASデヌタベヌスにはただ家やアパヌトに関する十分な高品質で完党な情報がないため、通りのレベルで停止したした。 この圢匏では、すべおの远加ビルドを含むデヌタベヌスの重量は玄2 GBであり、PostgreSQLの圢匏で非垞に快適に動䜜したす。 むンポヌトには、 fias2pgsqlリポゞトリから倉曎されたスクリプトが䜿甚されたした 。



䜏所を入力する䞇囜共通の圢匏の堎合、䜏所の圢匏や䜏所オブゞェクトの皮類が倚いため、フィヌルドを「郜垂」、「通り」、「家」だけにするこずはできたせん。 珍しい圢匏の有名な䟋はれレノグラヌドで、通りの名前のない家がありたす。 しかし、私を信じお、党囜でこれはかなり些现なケヌスです。



䞀連の実隓の埌、3぀のフィヌルドの圢匏に萜ち着きたした。



-ロシア連邊の䞻題-圌は垞にそこにいたす。これは最も理解しやすい分野です。

-FIASアドレス-FIAS内のこの地域のアドレスで自動補完されるフィヌルド。

-家/建物/アパヌト-デヌタが氞久登録スタンプに埓っお正確にコピヌされる行。







匁護士は䜏所の倉換衚を䜜成し、その助けを借りお、遞挙に関する法埋に準拠した圢匏でFIASの䜏所を提出したした。 ほずんどの堎合、䜏所芁玠の1぀を陀倖する必芁がありたした。 䞀郚の䜏所は完党に陀倖されたしたガレヌゞ協同組合、䞭庭、およびその他の同様のオブゞェクト。 IT郚門はルヌルが蚘茉されたテヌブルを受け取り、法務郚門は44皮類の䜏所のそれぞれに぀いお10の䟋を受け取りたした。







このような繰り返しを数回行った埌、ベヌスの䜜業準備が敎いたした。



タスクの技術的な郚分は、1日あたり100䞇件のク゚リの負荷に耐えるこずができる自動補完機胜を備えた䟿利で迅速な怜玢を敎理するこずでした。 Sphinxは怜玢゚ンゞンずしお䜿甚されたした。 芁求から䞍芁な文字が削陀され、Sphinxに転送され、指定されたルヌルに埓っおランク付けされたオブゞェクトの完党なアドレスが返されたす。



Sphinxは、XML圢匏で蚘述された䜏所フィヌルドにむンデックスを付けたす。 このストレヌゞ圢匏は、Sphinxが怜玢に䜿甚しないXML属性ですべおのメタデヌタを非衚瀺にできるずいう点で䟿利であるこずが刀明したしたが、デヌタベヌスに远加アクセスせずにメモリに保持し、結果を返したす。 フロント゚ンドのどこかで、これらの属性は矎しいアドレスバヌを圢成するために䜿甚されたす。





゜リュヌションは䟿利で迅速でした。 サゞェストAPIぞの1぀のリク゚ストは15〜20ミリ秒で実行され、バック゚ンドはそれほど匷力ではない仮想マシンで300の同時接続を静かに凊理したす。





サブスクリプションシヌトに蚘入する



眲名は、垂民の氞久登録の䜏所が属するロシア連邊の䞻題のシヌトに入力する必芁がありたすたたは、登録がない堎合は地域のない特別なシヌトに入力する必芁がありたす。 刈り取り機は、オペレヌタヌにどの領域のどのシヌトを取るかを䌝え、別の領域のシヌトに眲名するこずを蚱可したせん。



コンピュヌタヌなしでこのような問題を解決し、さたざたな地域から倚くの人々が集たり、地域ごずに䞊べられた空のシヌトのあるファむルキャビネットがないステヌションで眲名を収集するずしたす。 箄3分の1のパスポヌトでは、登録スタンプに地域の名前が含たれおおらず、ランダムな通行人はゲヌムのルヌルを知らず、䜕かを簡単に混乱させる可胜性がありたす。 これは倚数の゚ラヌの発生源のように芋えたすが、法定限床である5では蚱容できたせん。


サブスクリプションシヌトの蚘入は耇雑で責任のある手順です。 シヌトには、眲名の行、コレクタヌの認蚌ラベル、受蚗者の眲名がありたす。 これらのブロックはすべお、厳栌な正匏な芁件に埓っお蚘入する必芁がありたす。 蚘入の各段階で゚ラヌが発生し、シヌト党䜓たたは眲名の䞀郚が無効になる可胜性がありたす。



兞型的な゚ラヌの可胜性を枛らすオペレヌタヌシナリオを開発したした。 「ホヌム」地域のシヌトの認蚌ラベル眲名の玄80は本瀟のある地域からのものですは、萜ち着いた雰囲気の䞭でコレクタヌによっお事前に蚘入されおいたす。 シヌトのすべおのブロックに぀いお、Reaperはそれらがどのくらい正確に蚘入されるべきかを瀺したす。





充填むンタヌフェむスは、実際のサブスクリプションシヌトをシミュレヌトしたす。これは珟圚、オペレヌタヌの前のテヌブルにありたす。 䜿甚䞭の行、蚘入甚の列、シヌト番号、倧-入力甚のデヌタを衚瀺したす。



塗り぀ぶされた行の堎合、オペレヌタヌはそのステヌタスを瀺す必芁がありたす最初に行を正垞に入力できるずは限りたせん。 各修正ず削陀は、シヌト䞊のコレクタヌからのメモず、デヌタベヌス内の察応するステヌタスに察応する必芁がありたす。



シヌト党䜓に蚘入した埌、コレクタヌの日付ず眲名が貌り付けられたす。 シヌトは怜蚌のために送信されたす。





眲名の怜蚌、本瀟でのシヌトの䜿甚



各営業日の終わりに、眲名付きのすべおのシヌトは怜蚌の察象ずなりたす。怜蚌は倜遅くたたは倜に行われたす本瀟は小さく、すべおのプロセスを䞊行しお実行する堎所はありたせん。 審査官候補者の認定代理人は、各シヌトず各眲名を芋お、パスポヌトのスキャンされたペヌゞの断片ず比范し、すべおの重芁な芁玠のチェックリストをチェックしたす。 ゚ラヌが怜出された堎合、これは特別なむンタヌフェヌスに衚瀺されたす。



怜蚌レコヌドは個別にチェックされたす。 認定゚ラヌは、シヌト党䜓に䞀床に圱響するため、特に危険です。 これらの゚ラヌは、すべおの無効な眲名の玄9の原因を説明しおいたす。


䞀郚の゚ラヌは修正できたすが、眲名者が修正できるのはコレクタヌのみであり、倕方/倜間は本郚にいないため、修正に必芁なすべおの情報は電子圢匏で送信されたす。コンテキストを理解するには、前の行で発生したすべおを確認する必芁がありたす。そのため、レビュアヌ、オペレヌタヌ、匁護士の間には「チャット」がありたした。画像内のすべおの名前およびその他のデヌタは架空のものであり、゚ラヌが臎呜的であるか疑わしい堎合、シヌトは匁護士に送られたす。眲名に゚ラヌが含たれおいない堎合、たたはすべおの修正が既に行われおいる堎合、怜査官は受蚗者の眲名を入れ、䞭倮本瀟に送信するシヌトを送信したす。















絵文字ず幞犏の神経生理孊



チェックされた文字列のステヌタスを迅速か぀゚ラヌなしで遞択するために、絵文字の圢のボタンを䜿甚したした。深い神経生理孊的原因がありたす。脳の芖芚系には、特定の画像に反応する叀代の䜎レベルのメカニズムがありたす。芖芚システムは、さたざたな方向の盎線のセグメントに最もすばやく反応したす。これは、線が䞀次芖芚野によっお簡単に怜出されるためです。二次芖芚野では、単玔な幟䜕孊的圢状これを孊習する必芁がありたすず顔のパタヌンが認識されたす。さらに、認識されるのは顔だけではなく、䞻芁な衚情です。぀たり、絵文字。盎線認識のように、それは生来の胜力です。このような䜎レベルのシステムのおかげで、絵文字はテキストよりもはるかに高速か぀正確に認識されたす。





絵文字の圢のアむコンは、審査官が眲名を割り圓おるこずができるステヌタスの意味によく察応しおいたす「良い」、「問題がある」、「悪い」。「匁護士に芋せおください」の絵文字には疑問がありたしたが、私たちはそれに察凊したした。



絵文字はむンタヌフェむスを人間化するため、オペレヌタヌの寿呜がわずかに向䞊するずいう意芋がただありたす。これは重芁です オペレヌタヌは私たちのシステムを長時間䜿甚しなければならず、譊戒心を倱うこずはありたせんでした。





シヌトを送信する



完成したシヌトは、毎日本郚に送られたす。シヌトは倚数、数癟になりたす。どのシヌトが準備ができお本瀟を離れたかを正確に知りたいのですが、手動で登録するのは長くお信頌性がありたせん。送信されたシヌトを蚘録するモバむルアプリケヌションが䜜成されおいたす。







本郚の凊理ステップをすべお通過しおいないずきに誀っおシヌトを送信しようずした堎合、数癟枚のシヌトずレポヌトのコヌドをすばやくスキャンできるモヌドがありたす。1枚のシヌトをスキャンするには1〜2秒かかりたす。



スキャン埌、シヌトはパッケヌゞ化され、モスクワに送られたす。





フォヌムの詳现



すべおのパスポヌトデヌタは、等幅フォントSource Code Pro Regularで入力および衚瀺されたす。その䞭で、れロは文字「O」ず区別しやすく、文字は珟代のパスポヌトで䞀般的に䜿甚される文字ず非垞に䌌おいたす。



すべおのフォヌムは、フィヌルドずメむンボタンの間でタブを切り替えるこずができるように䜜成されおいたす。入力フォヌカスは、ペヌゞをロヌドするずきだけでなく、゚ラヌメッセヌゞを閉じた埌でも目的のフィヌルドにありたす。モヌダルダむアログはフォヌカスをキャプチャするため、コントロヌル間でのみ切り替えが行われたす。







すべおのボタンは、抌されるず、長持ちするもので、倖芳がすべお衚瀺されたす。入力フィヌルドは、デヌタ送信䞭は無効です。゚ラヌの堎合、詳现な説明が衚瀺されたす。





シヌトの物流ず物理的保管



玙片の移動は、人類が信じられないほどの成功を収めた掻動の1぀です。文房具店に行っお、眲名を収集するためのセット「Federal」を賌入し、詳现に぀いおは考えないように思えたす。しかし、問題がありたす。すべおのオフィス゜リュヌションは高䟡すぎたす。数䞇ルヌブルのドキュメントのスキャナヌず、10䞇の吊りフォルダヌを備えたキャビネットを各本瀟に届けるこずができないため、各段階で即興の玠材から䜕かを発明し、䜜成する必芁がありたした。





プロセスの物理孊に関するいく぀かの事実



315千の眲名を枡す必芁がありたす。これを行うには、地域のクォヌタずさたざたな゚ラヌのマヌゞンを考慮しお、玄100䞇の眲名を収集しお凊理する必芁がありたす。各シヌトには最倧5぀の眲名を含めるこずができたすが、実際には玄3〜4になりたす。これにより、およそ30䞇枚のシヌトが埗られたす。



A4甚玙の面積は1/16m²です。

通垞のオフィス甚玙の密床は80 g /m²で、各シヌトの重量は5 gです

。500枚のスタックは、空癜のシヌトで4.5 cm、充填枈みのシヌトで6 cm以䞊です。



収集されたすべおのシヌトの重量は1.5トンで、1぀のパックに折りたたたれるず、高さは玄36メヌトルになりたす。





これをすべお保存する方法は



眲名シヌトが印刷され、眲名が蚘入され、チェック、認蚌され、䞭倮本瀟に毎日送信されたす。 1぀の本瀟が1日に数癟枚のシヌトを送信するため、この段階で問題は発生したせん。



最も興味深いのは、䞭倮本瀟から始たりたす。そこでは、地域の本郚からシヌトを取り出しお、収集の最埌たでそれらを操䜜しやすくするようなストレヌゞシステムを線成する必芁がありたす。収集が完了したら、シヌトを地域ごずにグルヌプ化し、遞挙委員䌚のフォルダヌに瞫い付ける必芁がありたす。



匁護士はい぀でも特定のサンプルに応じおシヌトの䞀郚を削陀したい堎合があるため、シヌトを無限に束ねるこずはできたせん。シヌトをすばやく取埗しお戻すには、各シヌトの正確な䜍眮を知る必芁がありたす。



すばやくアクセスするために、シヌトの物理的なベヌスにむンデックスを付けるシステムが発明されたした。むンデックスは、本郚ボックス、ボックス、フォルダヌのいく぀かのレベルで構成されおいたす。アヌカむブ内のフォルダアドレスは、77-1-15のようになりたす。各フォルダヌ内には25枚のシヌトがありたすランダムな順序。





巊䞊の写真には、玙のフォルダヌにある500枚の眲名シヌトのボックスがありたす。

右偎の写真は、吊りフォルダヌにある2000枚の匕き出しです。






シヌトの取埗ず䞊べ替え



地域から送られおくるすべおのシヌトは、自動䞡面スキャナヌでスキャンされたす圌はすでにオフィスにいたので、レゎずArduinoから自分で収集する必芁はありたせんでした。このデバむスは、SFTPを介しお結果をサヌバヌにアップロヌドできたす。そこで、スキャンはPythonスクリプトを介しお実行され、暙準の堎所でQRコヌドを怜玢し、認識しお、スキャンを共通デヌタベヌスに添付したす。このスクリプトは、しわになったシヌトでも確実に凊理したす。







スキャン埌、シヌトが゜ヌトされたす。各シヌトは、モバむルアプリケヌション゜ヌトモヌドを䜿甚しおスキャンされたす。システム内でシヌトを怜出し、ステヌタスを「䞭倮本瀟に来たした」に倉曎し、シヌトを配眮する必芁があるフォルダヌの座暙を衚瀺したす。オペレヌタヌは、指定されたフォルダヌにシヌトを入れたこずを確認したすトランザクションを閉じたす。







1぀のリヌゞョンのシヌトは、スペヌスが空いおいる間にフォルダヌに順番に配眮されるため、プロセス党䜓が非垞に迅速に行われたす。





バック゚ンド



2018 Reaperは、暙準テンプレヌト゚ンゞンずORMを䜿甚しおDjangoで䜜成されおいたす。デヌタベヌスはPostgreSQLです。システムのサヌビス郚分-FIAS、パスポヌト怜蚌、事前登録デヌタの操䜜-は、独自のデヌタベヌスを備えた別個のモゞュヌルdjangoアプリに配眮されたす。



眲名の物理的な䞖界は、サブスクリプションシヌト、シヌト内の行、眲名ずいうオブゞェクトのいく぀かのクラスの圢匏で衚瀺されたす。これらのクラスのオブゞェクトには、実䞖界のオブゞェクトの状態を反映する属性がありたす。状態管理のために、「有限状態マシン」テンプレヌト状態マシン、有限状態マシンおよびdjango-fsmラむブラリヌが䜿甚されたした。状態間のすべおの遷移はFSMトランザクションの圢匏で登録され、その䞭で必芁なチェックずオブゞェクトの远加アクションが実行されたす。



状態図は次のようになりたす。







空間内のシヌトの䜍眮は、シヌトに含たれる行の状態によっお決たりたす。匁護士が確認すべき行がある堎合、シヌトは「匁護士」のステヌタスを受け取りたす。匁護士がシヌトを受け取り、怜蚌むンタヌフェむスにコヌドを入力するずすぐに、シヌトは「匁護士から」ずいうステヌタスを受け取りたす。したがっお、我々は垞にすべおのシヌトの正確な䜍眮を知っおおり、それらの即時の運呜を理解しおいたす。





テスト䞭



眲名収集システムにはさたざたな状態ず遷移があり、それらを手動で確認するこずはできたせん。チェックを自動化するために、オペレヌタヌず怜蚌者の䜜業に関連するすべおのスクリプトは、django偎のテストでカバヌされたす。



これらの眲名がない堎合、100䞇個の眲名を収集するシステムを調べるこずは無意味です。デヌタベヌスを満たすために、収集プロセス䞭にデヌタベヌスの䞀般的な状態を初期化するスクリプトが䜜成されたため、実際のデヌタに䌌たもので満たされたシステムを芋るこずができたす。



眲名の収集は非垞に限られた時間であり、この時間の倧郚分は正月䌑みになりたす。本瀟ず収集システムの負荷が䞍均䞀になるず予想しおいたした。システムが眲名の珟実的なストリヌムに簡単に察凊できるこずが重芁でした。ピヌク時には、1時間あたり最倧10,000の眲名が予想されおいたした。通垞のWebサむトの堎合、これは深刻に芋えたせんが、この堎合、「蚪問者」のこの順序はサヌバヌに倧きな負荷をかける可胜性がありたす。これは単なる蚪問たたは登録ではありたせん。各眲名の受信には、サヌバヌぞの玄50件の芁求ず、いく぀かの高解像床画像の凊理が含たれたす。



負荷テストはLocustで行われたした。。これは、PyPIから入手できるシンプルなツヌルです。スクリプトは、Djangoの単䜓テストによく䌌たpythonコヌドずしお蚘述されおいたす。







テストは、リク゚ストの速床、クラむアント数、サヌバヌ応答時間のグラフを衚瀺するWebむンタヌフェヌスを介しお実行できたす。







プロゞェクトの展開は、サむト「Bulk 208」ず同じ方法で線成されたす。

Reaper Webアプリケヌションは、本瀟のVPNを介しおのみアクセスできたす。





モニタリング



さたざたなツヌルを䜿甚しお、眲名収集システムに関係するサヌバヌずアプリケヌションを監芖したす。



Zabbixは、プロゞェクト内のすべおの仮想マシンのステヌタスを監芖したす。



Elasticsearchはすべおの仮想マシンからnginxログを収集したす。Kibanaはこれをグラフで瀺したす。Sentryでは、アプリケヌションおよびフロント゚ンドからのすべおの゚ラヌがふら぀きたす。フロント゚ンドは別の「組織」に配眮されるため、バック゚ンド゚ラヌの統蚈情報が損なわれるこずはありたせん。䟿利なこずですが、Sentryを負荷の䞋で動䜜させるこずは非垞に困難でした。













ガチョり



これは機胜的な監芖であり、uptime.comに䌌たもので、自家補です。バック゚ンドはdjangoで構築され、キュヌはセロリで䜜成され、バック゚ンドはredisで䜜成されたす。



プロゞェクトドメむンがGooseに远加されたす。各ドメむンに぀いお、監芖するアドレス、怜蚌の間隔、および怜蚌の皮類が瀺されたす。蚌明曞、コンテンツ、HTTPヘッダヌ、リダむレクト、およびその他の有甚なものを確認できたす。



䜕か問題が発生した堎合、Gusは深倜に手玙やSMSを送信したり、電話をかけたり、人間の声で状況を説明したりできたす通話ず音声合成にTwillioサヌビスを䜿甚。



Webむンタヌフェヌスには、どのドメむンに゚ラヌがあり、チェックのキュヌがどのように機胜するかが垞に衚瀺されたす。毎分、20〜25のチェックが行われたす。







Gusでも、モバむルアプリケヌションからボットネットを介した分散監芖がありたす。アプリケヌションは、監芖するアドレスのリストを受信し、それらをチェックしお応答ステヌタスず指定されたコンテンツの存圚、結果をサヌバヌに送信したす。このような監芖は、Roskomnadzorロックず攻撃を受けおいるサヌバヌの状態を監芖するのに䟿利です。










次の最終章では、IT郚門のプロゞェクト管理に぀いお説明したす。



All Articles