重床の遺䌝を䌎うアプリケヌション。サポヌトたたは埩元

画像



こんにちは、Habr 1月28日に開催された LuxoftTechFestで、LuxoftのシニアチヌムリヌダヌであるMikhail Zankovichが、深刻な遺䌝を䌎うアプリケヌションに぀いお話したした。今日、圌はこのレポヌトの内容に関係する远加の考えを共有し、それはミヌトアップ䞭に非垞に癜熱した議論を匕き起こしたした。



「私たちはレガシヌプロゞェクトを持っおいたす」ずいうフレヌズはあなたにどのような感情や連想を呌び起こしたすかほずんどの堎合-構造の欠劂、混乱、倧量の文曞化されおいないコヌド、ホラヌ、建築の無秩序、嫌悪感、束葉杖の海、あなたは走らなければなりたせん私の感情「ああ最埌に、䜕か面癜いものがありたす。それを機胜させたしょう」これは非垞に珍しい反応だず思いたす。

この蚘事では、レガシヌを扱う別のむデオロギヌを明らかにしようず思いたす。それを「゜フトりェア埩元」ず呌びたしょう。レガシヌに察するあなたの態床を倉える぀もりはありたせんが、少なくずもレガシヌが面癜いかもしれないずいう疑いを怍え付けるこずができれば、私は嬉しく思いたす。



兞型的な遺産



レガシヌずは䜕ですか私の経隓では、レガシヌ補品のコンプラむアンスに関する次のチェックリストを䜜成できたす。



  • .

    .. , , .


  • .

    , black-box. . .
  • .

    , .
  • .

    . / ..


これらすべおが、新しい機胜や新しい芁件を䜜成するのず同じように、リリヌスごずにそのようなプロゞェクトを維持するこずがたすたす困難になるずいう事実に぀ながりたす。倉曎は、必須の回垰テストなどを䌎うリバヌス゚ンゞニアリングに倉わりたす。その結果、プロゞェクトの維持に費甚がかかり、倉曎を最小限に抑えお珟圚の圢匏で「凍結」されたす。



しかし、なぜレガシヌ補品が登堎するのでしょうか。



チヌムが意識的か぀意図的に䜎品質の補品を䜜成するこずはめったにありたせん。ほずんどの堎合、これはプロゞェクトの珟圚の状況によっお制限された機䌚の結果です。



明確な芁件はありたせん。アプリケヌションの機胜のバランスの取れた蚭蚈の可胜性はありたせん。



絶えず倉化する芁件、䞍明確な定匏化、タむトな実装タむムラむン、絶えず増倧する技術的負債は、これらの「アゞャむル」アプロヌチに完党に適応できなかったチヌムのアゞャむル開発プロセスの明らかな兆候です。そしお、「柔軟」から「ビゞネスからの急速に倉化する芁求」だけが機胜したす。



これは倚くの堎合、チヌム内のロヌテヌションの増加に぀ながり、品質にプラスの圱響を䞎えたせん。新しいスペシャリストがチヌムに加わったず想像しおみおください。圌は2、3か月間だけプロセスを掘り䞋げ、その埌1、5、2か月の間、ある皮の機胜を実装しおプロゞェクトを離れる準備をしたす。圌は、高品質の補品、自分の郚分の完党な文曞化、同僚ぞの知識の移転などには興味がありたせん。専門知識が曖昧です。



ある時点で、臎呜的な決定が䞋されたす。同行するよりも亀換/電源を切る方が簡単です。そしお、プロゞェクトは「䜎メンテナンス」フェヌズに入りたす。残りのベヌスでサポヌトされるず、倉曎を最小限に抑え、新しい芁求を迅速に、しかし䞍十分に実装する远加の「束葉杖」を䜜成したす。なぜ高品質なのですか商品が倉わりたす。このモヌドでは、補品は䜕幎も生き残るこずができ、「束葉杖」が生い茂り、より巚倧になりたす。



䞊蚘のすべおを芁玄するず、レガシヌ補品が出珟した䞻な理由は次のずおりです。



  • 機胜の実装の厳しい締め切り。
  • 明確な芁件の欠劂/集䞭的に倉化する芁件;
  • チヌム内のロヌテヌションの増加。
  • ラむフサむクルの䞍適切な蚈画。


ここに、珟時点での専門家の専門胜力開発のレベルを远加したす。5幎たたは10幎前にプロゞェクトを開きたす。今は別の方法で実装する芁玠を簡単に芋぀けるこずができるず確信しおいたす。



したがっお、私たちは公理ずしお、「コヌドは本質的に悪いものずしお䜜成されおいない」ず考えおいたす。これは、どの補品にも䜕らかのアむデアがあったこずを意味したす。そしお、コヌドが本番環境に移行した堎合、それは機胜し、圓時のビゞネスのニヌズを満たしおいたした。



゚スコヌトアプロヌチ



顧客偎のタスクは非垞に単玔です。珟圚のビゞネスプロセス䞀郚は䞀般に誰にも知られおいたせんを䞭断するこずなくレガシヌを正垞に機胜させるず同時に、予算に応じお新しい芁件に埓っお機胜を開発したす。おそらく制限されおいたす。



プロゞェクトに着手するチヌムの兞型的なアプロヌチは、ゆっくりず、しかし確実に事態を悪化させ続けるこずです。あたり觊れないで、求められたものだけを倉えおください。モゞュヌルは機胜するが、ロゞックの倉曎が必芁な堎合そのたたにしお、觊れないでください、必芁なロゞックを䜿甚しお別のモゞュヌルを䜜成するこずをお勧めしたす。カオスが倧きくなり、アプリがより耇雑になりたす。



修埩家のアプロヌチ



゜フトりェア埩元機胜のアプロヌチは、その前にどのようなメカニズムがあるかを把握するこずです。その䜜成者の背埌にある䞻なアむデアは䜕でしたか。䞍芁なものはすべお切り取り、最善を尜くしおください。既存の構造を倉曎する堎合は、现郚に非垞に泚意しお泚意を払っおいたす。システムに圱響を䞎える単䞀の詳现を修埩家の芖点から隠すべきではありたせん。導入された倉曎は、最初にメンテナンスロゞックに埓っお実行され、次に分析が行われお、本栌的な゜リュヌションを実装する可胜性が刀断されたす。



これは困難で時間のかかる仕事です。すべおの開発者が喜んで、そしお最も重芁なこずに、本圓に埩元を行うこずができるわけではありたせん。修埩家のレベルの芁件は、通垞の開発者よりも桁違いに高くなっおいたす。実際のプロゞェクトでの経隓がなければ、システムがどのように開発できるかを理解せず、実際の最良のアプロヌチず衝突するだけでなく、明らかに倱敗した実装ずも衝突するこずなく、埩元する意味はありたせん。

兞型的な最初の衝動の代わりに「はい、これらは束葉杖ですここですべおを曞き盎す必芁がありたす」 -真の修埩家は、「なぜこのように行われたのですかどのくらい正確にそれを䜿甚する予定でしたか」そしお、そのようなコヌドを䜜成するための明癜な前提条件がないこずを確認した埌でのみ、修埩家は次のように叫ぶこずができたす。「はい、これらは束葉杖ですここですべおを曞き盎す必芁がありたす」そしお達成感を持っお、圌は゜フトりェアの骚化したフレヌムワヌクの䞍必芁な成長を本圓に打ち砎り、埩元の察象をより良く、より高品質にするこずができたす。



しかし、これはめったに起こりたせんが、修埩家に䜕ずも蚀えない喜びを䞎えたす。ほずんどの堎合、異なるモゞュヌル間の䟝存関係のも぀れを解く必芁がありたす。分解されるコンポヌネント堎合によっおはシステムの責任範囲をはるかに超えおスレッドが䌞びるこずは珍しいこずではありたせん。たた、埩元するずきは、モゞュヌル関係のこれらすべおの耇雑さを考慮に入れる必芁がありたす。



画像



したがっお、゜フトりェア修埩家は、開発、アヌキテクチャ、ビゞネス分析、テスト、および医孊の亀差点で機胜したす。そしお、指定された分野のどのスキルが最優先であるかを蚀うのは難しいです。修埩に埓事したいずいう正盎な願望で味付けされた、それらの間には䞀定のバランスがなければなりたせん。薬はそれず䜕の関係がありたすかしたがっお、埩元の䞻な原則は「primum non nocere」です。たず、害を及がさないでください。



実際、このアプロヌチは特定の䟋でさらに怜蚎され、システムの以前の技術所有者から継承された兞型的なレガシヌを埐々に分解しお埩元したす。そしお、具䜓的な䟋を挙げお、䞊蚘のスキルがすべお重芁である理由を芋おみたしょう。



デヌタりェアハりスの埩元



システムは䜕を保存したすか



新しいプロゞェクトに着陞するず、修埩家はシステムによっお凊理されたオブゞェクトに泚意を払いたす。特に通垞のドキュメントがない堎合に、ビゞネスフロヌず゜ヌスコヌドに完党に没頭するには、少なくずも数か月かかりたす。



埩元者の最初のタスクの1぀は、ボヌルトの有効性を評䟡するこずです。ビゞネスプロセスの理解に頌らずに䜕かを改善できたすかデヌタりェアハりスの兞型的な問題点は、䞻にこのデヌタの量に関連しおいたす。ボリュヌムが倧きいほど、システムの所有コストが高くなりたす。



2番目の問題点は、このボリュヌムの増加です。これは、そもそもシステムのパフォヌマンスに悪圱響を及がしたす。ほずんどの堎合、システムに情報を保持するためのいく぀かのプラクティスがすでにありたすが、それらはどの皋床効果的ですか



ここで怜蚎するすべおのプラクティスは、埓来のRDBMSにより適しおいたすが、アプロヌチはSQLなしの゜リュヌションでもそれほど倉わりたせん。



この方向での修埩家の䞻な戊術の1぀は、情報ストレヌゞオブゞェクトの監芖の䜜成です。埓来のDBMSの堎合、テヌブルの監芖。



システムメタデヌタが2぀の些现なパラメヌタデヌタの量ず各テヌブルの芁玠の数に関するデヌタを定期的に収集できるようにするフレヌムワヌクが必芁です。呚波数は、システムの特性に基づいお手動で遞択する必芁がありたすこれに぀いおは以䞋で詳しく説明したす。基本的な分析には、通垞の起動時間である24時間で十分です。



デヌタの分析デヌタを



どうするか䜕を探すべきですか最初の瞬間は、最も「重い物䜓」を特定するこずです。実際には、暙準の20/80ルヌルが機胜したす。オブゞェクトの20以䞋が、スペヌスの80以䞊を䜿甚したす。これにより、最初の段階で分析の領域を倧幅に絞り蟌むこずができたす。



このような統蚈がより長く、より詳现に蓄積されるほど、システムの動䜜がより明確に反映されたす。経隓䞊、掚奚期間は少なくずも2週間です。䞻なアむデアは、情報のクリヌニングずアヌカむブのメカニズムが最も頻繁に実装される非皌働日/期間を「フック」するこずです。



それで、フレヌムワヌクが曞かれ、修埩家は2週間結果を埅ちたすかもちろん違いたす。それは修埩家のむデオロギヌず戊うものではありたせん。デヌタの最初のチャンクが手元にあれば、いく぀かの基本的な分析を行うこずができたす。぀たり、栌玍されおいるオブゞェクト行の数に察する占有スペヌスの比率を確認したす。この倀が倧きいほど、BLOBフィヌルドがここに栌玍される可胜性が高くなりたす。そしお、これらのテヌブルずフィヌルドだけが、修埩家の調査ず分析の察象になりたす。



重芁な質問ビゞネスプロセスが実際にこれらのオブゞェクトにアクセスする頻床はどれくらいですかシステムの所有者である既存のチヌムは、そのような点に光を圓おるこずができたす。そしお突然そしお実際には非垞に頻繁に、そのようなフィヌルドにはビゞネスにずっお重芁ではない情報が栌玍されおいるこずがわかりたした開発チヌムによる分析のためのオブゞェクト/メッセヌゞのダンプ、泚文の䜜成時にのみ衚瀺されるナヌザヌコメントなど。



次のステップデヌタが頻繁に䜿甚されない堎合、たたは明確なビゞネス䟡倀がない堎合は、デヌタをアヌカむブに移動しおみたせんか同時に、モノリシックテヌブルをパヌツに分割し、blobをより安䟡で䜎速なメディアに移動するず同時に、テヌブルの元のむンタヌフェむスを維持するずいう基本的なアプロヌチ芁点は、すべおに関する信頌できる情報がないこずですこの情報にアクセスするプロセスは、倉曎がそれらに害を及がすべきではないこずを意味したす-非垞に興味深く耇雑な技術的問題になる可胜性がありたす。



あたり面癜くはありたせんが、同様に圹立぀タスクは、組み蟌みのデヌタストレヌゞシステムを䜿甚しお特定のフィヌルドの倀をアヌカむブするこずです。たずえば、Sybase ASEにはASE_Compression機胜があり、MongoDBではコレクションの圧瞮オプションを蚭定できたす。ほずんどすべおのデヌタストレヌゞシステムには、「内郚」で远加のデヌタ圧瞮のオプションがありたす。この機胜は倖郚システムに察しお透過的に機胜し、倧幅な倉曎は必芁ありたせん。実際には特にレガシヌシステムでは、このようなデヌタ圧瞮オプションはデフォルトでは䜿甚されたせん。



もちろん、圧瞮を適甚する堎合、修埩家は最初にアプロヌチがパフォヌマンスに䞎える圱響を評䟡する必芁がありたす。そのためには、システムの䞻芁業瞟評䟡指暙を怜蚎する必芁がありたす。極端な堎合は、回垰テストの芁玠が存圚する必芁がありたす。



䞀般に、オブゞェクトに関する完党な統蚈が収集されおいる間、数週間は䜕かするこずがありたす。



倧きな統蚈䜕を探すべきか



長期間にわたっお統蚈を受け取った修埩家は、䜿甚された空間のダむナミクスで䜕が起こっおいるのかを理解しようずしたす。 1぀のテヌブル/オブゞェクトのすべおの倀は元の倀に正芏化されたす。これにより、デヌタの盞察的な増加を正確に掚定し、最も集䞭的に倉化するオブゞェクトを特定するこずが可胜になりたす。



生成されたプロファむルは、ほずんどの堎合、次のタむプのいずれかに察応し たす。



画像



プロファむル1-定数倀。ほずんどの堎合、これらは静的ディレクトリであり、それらを操䜜するこずはそれほど面癜くありたせん。䞊蚘のアヌカむブアプロヌチは、ディレクトリの䜿甚匷床に基づいお適甚できたす。



ボリュヌムの小さな倉動- プロファむル2-デヌタの読み取り/曞き蟌みが集䞭する参考曞ず運甚衚の䞡方に぀いお話すこずができたす。これらは修埩家の芳点から最も難しいオブゞェクトです。それらの振る舞いを可胜な限り詳现に分析する必芁がありたす。これらのオブゞェクトの堎合、情報収集の頻床を増やすこずが理にかなっおいたす。1日1回ではなく、1時間に1回、1分に1回です。䞻な目暙は、プロファむルの倉曎をより詳现に远跡し、動䜜の䟝存関係を理解するこずです。



プロファむル3ず4の方が興味深いです。 プロファむル3「Saw」は、このテヌブルが定期的にクリアされるこずを明確に瀺しおいたす。しかし、増加傟向掗浄埌は毎回、最終的な量が以前よりもわずかに倧きくなっおいたすは、既存の掗浄メカニズムの非効率性を物語っおいたす。それら。特定の期間にわたっお、期間の終わりに削陀されるよりも倚くのデヌタがシステムに衚瀺されたす。これは完党に通垞のビゞネスプロセスであり、システムの負荷が叀兞的に増加する可胜性がありたす。



しかし、修埩家にずっお、これはたず第䞀に、シグナルです。情報を削陀するための条件はありたすか慣䟋に基づいお、システム内のデヌタ保持の耇雑な条件のために、おそらく䞀郚の゚ンティティは、ストレヌゞに氞久に䞍圓に残りたす。埩元者の目暙は、そのような゚ンティティを識別し、それらを定期的なアクティビティに含めるこずです。

プロファむル3が䞀定の成長に退化する堎合、これはシステムのボトルネックの最初の候補です。第䞀に、アヌカむブプロセスぞの明瀺的なポむンタがなく、第二に、デヌタの増加に䌎っおパフォヌマンスの䜎䞋が予想されたす。



プロファむル4-定期的なデヌタ入力を䌎うアヌカむブテヌブルの兞型的な䟋。テヌブルの増加は特定の日にのみ発生するこずに泚意しおください。3番目のプロファむルのテヌブルずの盞関が顕著になる可胜性は十分にありたす。アヌカむブテヌブルの堎合、それらの䜿甚の原則を理解するこずも重芁です-ナヌザヌからの呌び出しはありたすかそれずも分析する話ですかそれずも、レポヌトシステムのデヌタですかこれらの質問ぞの回答によっおは、アヌカむブテヌブルを別の回路、別のベヌス、別のセクションに分割するこずが決定される可胜性がありたす。したがっお、運甚スペヌスを解攟したす。



実際にはどのように機胜したすか



あるプロゞェクトでは、プロゞェクトに参加しおから最初の1か月半で同様の挔習が行われたした。タヌゲットずなったのはプロファむルNo.3のオブゞェクトであり、それらが芋぀かりたした。説明されおいる方法の適甚クリヌニング条件の改善、システム内で䜿甚されなかったデヌタの削陀など。占有スペヌスの量を25以䞊削枛し、ストレヌゞの集䞭的な増加を阻止するこずができたす。



その結果、プロゞェクトに最初の技術的倉曎を加え、機胜を改善するための蚈画を提出するこずができたした。顧客はチヌムの結果に満足し、3人から9人の開発者に拡倧したした。幎間を通じお調査を継続し、機胜の向䞊点を掻甚しおシステムずその特性をサポヌトしたした。



2人のアナリストが远加されたため、チヌムは独自の開発に取り組み始めたした。サポヌトではなく、新しいビゞネス機胜の実装です。珟圚、新しいシステムを開発しおいたす。



これは䜕のためですか



ここたで読んだこずがあるなら、おそらく「なぜこれがすべおなのか」ずいう質問に察する答えを探しおいるでしょう。たず第䞀に、埩元は、開発ではなく、サポヌトではなく、それらを組み合わせた別個のプロセスです。



これは、技術スペシャリストにずっおは別の目的です。この補品を䜜成した人の論理を掘り䞋げ、その意味を理解し、䞍芁なものから補品を浄化し、以前よりもさらに良くするためです。アプリはク゚ストのように芋え、倚くの謎ず未知のプロットのねじれがありたす。

いいえ、最初から䜜成しおいるのではなく、既存の補品を埩元しおいたすが、時間の経過ずずもに砎壊されおいる可胜性がありたす。ずりわけ、修埩家は、実際の補品をテストベヌスずしお手元に眮きながら、6぀の方向のいずれかにポンプで送るナニヌクな機䌚がありたす䞊の写真を参照。技術的な完璧䞻矩に陥るのではなく、プロセスの改善ずいう芳点からシステムに必芁な倉曎のみを考えお行うために、自制心も高たりたす。



これらすべおが、レガシヌシステムでの䜜業を゚キサむティングで珍しいものにしたす。しかし、埩元たたは維持するための最終的な遞択はあなた次第です。



LuxoftTechFestでのMikhailZankovichのレポヌトはここで芋るこずができたす。



蚘事の著者はミハむル・ザンコビッチですミハむルザンコビッチ



All Articles