デッドコヌド怜玢しお歊装解陀する





私の名前はDanilMukhametzyanovで、Badooでバック゚ンド開発者ずしお7幎間働いおいたす。この間、私はなんずか倧量のコヌドを䜜成しお倉曎するこずができたした。ある日、マネヌゞャヌが私のずころにやっお来お、こう蚀いたした。䜕かを远加するには、䜕かを削陀する必芁がありたす。」



さお、それは単なる冗談です-圌はそれを蚀わなかった。それは残念だ Badooは、䌚瀟の存続期間党䜓にわたっお、空癜行ず閉じ括匧を陀いお、550䞇行を超える論理ビゞネスコヌドを蓄積しおきたした。



量自䜓はそれほど怖いものではありたせん。圌は嘘を぀き、食べ物を求めたせん。しかし、2、3幎前、私はたすたす読んで、実皌働環境では実際には機胜しないコヌドを芋぀けようずしおいるこずに気づき始めたした。぀たり、実際には死んでいたす。



この傟向は私だけでなく気づきたした。Badooは、高絊の゚ンゞニアが垞にデッドコヌドに時間を浪費しおいるこずに気づきたした。







Badoo PHP Meetup4でこの講挔をしたした



デッドコヌドはどこから来たのですか



私たちは問題の原因を探し始めたした。それらを2぀のカテゎリに分けたした。



  • プロセス-開発の結果ずしお生じるもの。
  • 履歎-レガシヌコヌド。


たず、新たな問題の発生を防ぐために、プロセス゜ヌスを分解するこずにしたした。



A / Bテスト



Badooは4幎前にA / Bテストを積極的に䜿甚し始めたした。珟圚、玄200のテストが垞に実行されおおり、すべおの補品機胜がこの手順を実行したす。



その結果、4幎間で玄2000件の完了したテストが蓄積され、この数字は絶えず増加しおいたす。圌女は、各テストがもはや実行されおおらず、たったく必芁ずされおいない死んだコヌドの䞀郚であるこずを私たちに怖がらせたした。



この問題の解決策はすぐに珟れたした。A/ Bテストが完了した埌、コヌドをカットするためのチケットを自動的に䜜成し始めたした。





チケットの䟋



しかし、人的芁因が定期的にトリガヌされたした。䜕床も䜕床も実行され続けるテストコヌドを芋぀けたしたが、誰もそれに぀いお考えずにテストを完了したした。



次に、厳栌なフレヌムワヌクがありたした。各テストには終了日が必芁です。マネヌゞャヌがテスト結果を読むのを忘れた堎合、マネヌゞャヌは自動的に停止しおオフにしたす。そしお、すでに述べたように、機胜のロゞックの元のバヌゞョンを維持しながら、チケットを切り取るためのチケットが自動的に䜜成されたした。



このような単玔なメカニズムの助けを借りお、私たちは䜜業の倧きな局を取り陀きたした。



クラむアントの倚様性



圓瀟ではいく぀かのブランドがサポヌトされおいたすが、サヌバヌは1぀です。各ブランドは、Web、iOS、Androidの3぀のプラットフォヌムで衚されたす。 iOSずAndroidでは、毎週の開発サむクルがありたす。週に1回、曎新ずずもに、各プラットフォヌムでアプリケヌションの新しいバヌゞョンを受け取りたす。



このアプロヌチでは、1か月でサポヌトが必芁な新しいバヌゞョンが玄12個あるこずは容易に掚枬できたす。ナヌザヌトラフィックはそれらの間で䞍均䞀に分散されたす。ナヌザヌはあるバヌゞョンから別のバヌゞョンに埐々に切り替えおいたす。䞀郚の叀いバヌゞョンにはトラフィックがありたすが、非垞に小さいため、保守が困難です。それは難しくお圹に立たない。

そこで、サポヌトしたいバヌゞョンの数を数え始めたした。クラむアントには、゜フト制限ずハヌド制限の2぀の制限がありたす。



゜フト制限に達するず3぀たたは4぀の新しいバヌゞョンがすでにリリヌスされおいお、アプリケヌションがただ曎新されおいない堎合、ナヌザヌにはバヌゞョンが叀くなっおいるこずを譊告する画面が衚瀺されたす。ハヌド制限に達するずアプリケヌションずブランドに応じお、これは玄10〜20の「欠萜した」バヌゞョンです、この画面をスキップするオプションを削陀するだけです。それはブロッキングになりたすそれでアプリケヌションを䜿甚するこずはできたせん。





ハヌド制限の画面



この堎合、クラむアントからの芁求を凊理し続けるこずは無意味です。クラむアントには画面しか衚瀺されたせん。



しかし、ここでは、A / Bテストの堎合ず同様に、ニュアンスが生じたした。クラむアント開発者も人です。圌らは新しいテクノロゞヌ、オペレヌティングシステムのチップを䜿甚したす-そしおしばらくするず、アプリケヌションバヌゞョンはオペレヌティングシステムの次のバヌゞョンでサポヌトされなくなりたす。ただし、サヌバヌはこれらの芁求を凊理し続ける必芁があるため、匕き続き問題が発生したす。



Windows Phoneのサポヌトが終了した堎合の別の解決策を考え出したした。ナヌザヌに次のような画面を甚意したした。あなたはずおもかっこいいですしかし、別のプラットフォヌムを䜿い始めるこずはできたすか新しいクヌルな機胜が利甚できるようになりたすが、ここでは䜕もできたせん。」原則ずしお、代替プラットフォヌムずしお垞に利甚可胜なWebプラットフォヌムを提䟛しおいたす。



このような単玔なメカニズムにより、サヌバヌがサポヌトするクラむアントバヌゞョンの数を制限したした。すべおのブランド、すべおのプラットフォヌムからの玄100の異なるバヌゞョンです。



機胜フラグ



ただし、叀いプラットフォヌムのサポヌトを無効にするこずで、䜿甚しおいるコヌドを完党に削陀できるかどうかを完党に理解できたせんでした。たたは、叀いOSバヌゞョン甚に残っおいるプラ​​ットフォヌムは、匕き続き同じ機胜を䜿甚したすか



問題は、APIがバヌゞョン管理された郚分ではなく、機胜フラグの䜿甚に基づいお構築されおいるこずです。どうやっおこれにたどり着いたのか、このレポヌトから知るこずができたす。



2皮類の機胜フラグがありたした。それらに぀いお䟋を挙げお説明したす。



マむナヌな機胜



クラむアントはサヌバヌにこう蚀いたす。「こんにちは、私です。写真投皿をサポヌトしたす。」サヌバヌはそれを芋お、次のように応答したす。今、私はそれに぀いお知っおいお、あなたに写真メッセヌゞを送りたす。」ここでの重芁な機胜は、サヌバヌがクラむアントに圱響を䞎えるこずはできないずいうこずです。サヌバヌからのメッセヌゞを受け入れるだけで、サヌバヌを匷制的にリッスンしたす。



これらのフラグをマむナヌ機胜ず呌びたす。珟圚、600を超えおいたす

が、これらのフラグを䜿甚するこずのデメリットは䜕ですか定期的に、クラむアント偎だけではカバヌできない重い機胜がありたす。サヌバヌ偎からも制埡する必芁がありたす。このために、他のタむプのフラグを導入したした。



アプリケヌションの機胜



同じクラむアント、同じサヌバヌ。クラむアントは次のように述べおいたす。「サヌバヌ、ビデオストリヌミングをサポヌトするこずを孊びたした。それをオン "サヌバヌは、「ありがずう、それを芚えおおきたす」ず応答したす。そしお圌は次のように付け加えおいたす。私たちの最愛のナヌザヌにこの機胜を芋せたしょう、圌は喜ぶでしょう。」たたは「わかりたした。ただし、ただ含めたせん。」



これらの機胜をアプリケヌション機胜ず呌びたす。それらは重いので、数は少なくなりたすが、それでも十分です。300を超えたす。



したがっお、ナヌザヌはクラむアントのあるバヌゞョンから別のバヌゞョンに移動したす。ある皮のフラグが、すべおのアクティブなバヌゞョンのアプリケヌションでサポヌトされ始めおいたす。たたは、逆に、サポヌトされおいたせん。これを制埡する方法は完党には明確ではありたせん100クラむアントバヌゞョン、900フラグこれに察凊するために、ダッシュボヌドを䜜成したした。



赀い四角は、このプラットフォヌムのすべおのバヌゞョンがこの機胜をサポヌトしおいないこずを意味したす。緑-このプラットフォヌムのすべおのバヌゞョンがこのフラグをサポヌトしおいたす。フラグのオンずオフを切り替えるこずができる堎合は、定期的に点滅したす。どのバヌゞョンで䜕が起こるかを芋るこずができたす。





ダッシュボヌド画面



このむンタヌフェむスで、機胜を切り取るためのタスクの䜜成を開始したした。各行のすべおの赀たたは緑のセルに入力する必芁はないこずに泚意しおください。 1぀のプラットフォヌムでのみ実行されるフラグがありたす。 1぀のブランドに぀いおのみ蚘入されるフラグがありたす。



プロセスの自動化はそれほど䟿利ではありたせんが、原則ずしお必芁ありたせん。タスクを蚭定し、ダッシュボヌドを定期的に確認するだけです。最初の反埩では、200を超えるフラグを切り取るこずができたした。これは、私たちが䜿甚したフラグのほが4分の1です。



ここでプロセス゜ヌスが終了したした。それらは私たちの開発フロヌの結果ずしお珟れ、私たちはそれらずの䜜業をこのプロセスにうたく統合したした。



レガシヌコヌドをどうするか



プロセス゜ヌスでの新しい問題の発生を停止したした。そしお、私たちは難しい質問に盎面したした䜕幎にもわたっお蓄積されたレガシヌコヌドをどうするか゚ンゞニアリングの芳点から゜リュヌションにアプロヌチしたした。぀たり、すべおを自動化するこずにしたした。しかし、䜿甚されおいないコヌドを芋぀ける方法は明確ではありたせんでした。圌は居心地の良い小さな䞖界に隠れたした。圌は決しお呌ばれず、誰にも自分のこずを知らせたせん。



私たちは反察偎から行かなければなりたせんでした私たちが持っおいたすべおのコヌドを取り、どの郚分が正確に実行されたかに぀いおの情報を収集し、次に反転を行いたす。



次に、それをたずめお、最小限のレベルで、぀たりファむルに実装したした。このようにしお、適切なUNIXコマンドを実行するこずにより、リポゞトリからファむルのリストを簡単に取埗できたす。



本番環境で䜿甚されるファむルのリストを収集するこずは残っおいたした。非垞に簡単です。シャットダりン時のリク゚ストごずに、察応するPHP関数を呌び出したす。ここで行った唯䞀の最適化は、すべおのリク゚ストをリク゚ストするのではなく、OPCacheのリク゚ストを開始するこずです。そうしないず、デヌタ量が非垞に倚くなりたす。



その結果、倚くの興味深いアヌティファクトを発芋したした。しかし、より深く分析したずころ、未䜿甚のメ゜ッドが欠萜しおいるこずがわかりたした。それらの数の違いは3〜7倍でした。



1぀の定数たたはメ゜ッドのペアだけのために、ファむルをロヌド、実行、コンパむルできるこずが刀明したした。この底なしの海に暪たわるのに他のすべおは圹に立たないたたでした。



メ゜ッドのリストをたずめる



しかし、メ゜ッドの完党なリストを収集するのに十分な速さで刀明したした。私達はちょうど取ったニキヌタポポフのパヌサを、圌に私たちのリポゞトリを䞎え、我々は、コヌドを持っおいるすべおのものを埗たした。



問題は残っおいたすプロダクションでプレむされおいるものをどのように組み立おるのですかテストは私たちがたったく必芁ずしないものをカバヌできるので、私たちは生産に興味を持っおいたす。二床ず考えずに、XHProfを採甚したした。ク゚リの䞀郚に぀いおはすでに本番環境で実行されおいるため、デヌタベヌスに保存されおいるプロファむルサンプルがありたす。これらのデヌタベヌスにアクセスし、生成されたスナップショットを解析しお、ファむルのリストを取埗するだけで十分でした。



XHProfのデメリット



XHProfが起動しなかったが、非垞に必芁だった別のクラスタヌでこのプロセスを繰り返したした。これは、バックグラりンドスクリプトず非同期凊理を実行するためのクラスタヌであり、高負荷にずっお重芁であり、倚くのロゞックを実行したす。



そしお、XHProfが私たちにずっお䞍䟿であるこずを確認したした。



  • PHPコヌドを倉曎する必芁がありたす。トレヌス開始コヌドを挿入し、トレヌスを終了し、収集したデヌタを取埗しお、ファむルに曞き蟌む必芁がありたす。結局のずころ、これはプロファむラヌですが、プロダクションがありたす。぀たり、リク゚ストがたくさんあるので、サンプリングに぀いおも考慮する必芁がありたす。私たちの堎合、これは、異なる゚ントリポむントを持぀倚数のクラスタヌによっお悪化したした。
  • . . , OPCache. : XHProf, . , core- .
  • . . XHProf . ( XHProf): CPU, , . , , . - XHProf aggregator ( XHProf Live Profiler, open-source) , , , . , : «, , », CPU , , Live Profiler . , , .
  • XHProf. , . . , . : , ( , youROCK、これはlsdでは必芁ありたせんが、単䞀のラッパヌを維持する方が䟿利でした。XHProfにパッチを適甚するこずは、かなり倧きなプロファむラヌであるため、私たちがやりたかったこずではありたせん䞍泚意で䜕かを壊した堎合はどうなりたすか。


別のアむデアがありたした。たずえば、本番環境で実行されるベンダヌ名矩などの特定の名前名をコンポヌザヌから陀倖するのは、圹に立たないためです。ベンダヌパッケヌゞをリファクタリングしたり、䞍芁なコヌドを削陀したりするこずはありたせん。



゜リュヌション芁件



私たちは再び集たり、どのような解決策が存圚するかを調べたした。そしお、圌らは芁件の最終リストを䜜成したした。



たず、最小限のオヌバヌヘッド。私たちにずっお、XHProfはバヌでしたそれが必芁ずする以䞊のものではありたせん。



次に、 PHPコヌドを倉曎したくありたせんでした。



第䞉に、 FPMずCLIの䞡方で゜リュヌションがどこでも機胜するこずを望んでいたした。



第四に、フォヌクを扱いたかった。これらは、CLIのクラりドサヌバヌで積極的に䜿甚されおいたす。 PHP内でそれらの特定のロゞックを䜜成したくありたせんでした。



5番目箱から出しおサンプリングしたす。実際、これはPHPコヌドを倉曎しないずいう芁件に基づいおいたす。以䞋に、サンプリングが必芁な理由を説明したす。



6番目で最埌コヌドから匷制する機胜。すべおが自動的に機胜する堎合は気に入っおいたすが、手動で開始、調敎、確認する方が䟿利な堎合もありたす。蚭定を通じお含たれる確率を蚭定するPHPモゞュヌルのより䞀般的なメカニズムをランダムに決定するのではなく、コヌドから盎接すべおを有効たたは無効にする機胜が必芁でした。



funcmapのしくみ



その結果、funcmapず呌ばれる゜リュヌションが埗られたした。



Funcmapは本質的にPHP拡匵です。 PHPの甚語では、これはPHPモゞュヌルです。それがどのように機胜するかを理解するために、PHPプロセスずPHPモゞュヌルがどのように機胜するかを芋おみたしょう。



したがっお、プロセスを開始したす。 PHPを䜿甚するず、モゞュヌルを構築するずきにフックをサブスクラむブできたす。プロセスが開始され、GINITGlobal Initフックが起動されたす。ここで、グロヌバルパラメヌタヌを初期化できたす。次に、モゞュヌルが初期化されたす。定数はそこで䜜成しお割り圓おるこずができたすが、特定のモゞュヌルに察しおのみであり、芁求に察しおは割り圓おられたせん。そうでない堎合は、足を螏み入れおしたいたす。



次に、ナヌザヌリク゚ストが届き、RINITRequest Initフックが呌び出されたす。芁求が完了するず、そのシャットダりンが発生し、最埌にモゞュヌルのシャットダりンが発生したすMSHUTDOWNおよびGSHUTDOWN。すべおが論理的です。



FPMに぀いお話しおいる堎合、各ナヌザヌ芁求は既存のワヌカヌに送信されたす。基本的に、RINITずRSHUTDOWNは、FPMがワヌカヌが叀くなっおいるず刀断するたで、円を描くように機胜したす。今床は、ワヌカヌを撃っお新しいワヌカヌを䜜成したす。 CLIに぀いお話しおいる堎合、それは単なる線圢プロセスです。すべおが䞀床呌び出されたす。





funcmapのしくみ



このセットのうち、2぀のフックに興味がありたした。 1぀目はRINITです。デヌタ収集フラグの蚭定を開始したした。これは、デヌタをサンプリングするために呌び出された䞀皮のランダムです。それが機胜した堎合は、このリク゚ストを凊理したした。関数の呌び出しずそのメ゜ッドの統蚈を収集したした。それが機胜しなかった堎合、リク゚ストは凊理されたせんでした。



次に、ハッシュテヌブルが存圚しない堎合は䜜成したす。ハッシュテヌブルは、PHP自䜓によっお内郚的に提䟛されたす。ここで䜕かを発明する必芁はありたせん-それを持っお䜿っおください。



次に、タむマヌを初期化したす。以䞋で圌に぀いお話したすが、今のずころ、圌は重芁で必芁であるこずを忘れないでください。



2番目のフックはMSHUTDOWNです..。RSHUTDOWNではなくMSHUTDOWNであるこずに泚意しおください。私たちはリク゚ストごずに䜕かを考えたくありたせんでした-私たちは劎働者党䜓に興味を持っおいたした。MSHUTDOWNで、ハッシュテヌブルを取埗し、それを調べおファむルを曞き蟌みたす叀き良きファむルよりも信頌性が高く、䟿利で、甚途が広いものは䜕でしょうか。



ハッシュテヌブルは、ナヌザヌ定矩関数が呌び出されるたびに呌び出される同じPHPフックzend_execute_exによっお非垞に簡単に入力されたす。レコヌドには、それがどのような皮類の関数であるか、その名前ずクラスを理解するための远加のパラメヌタヌが含たれおいたす。それを受け入れ、名前を読み取り、ハッシュテヌブルに曞き蟌んでから、デフォルトのフックを呌び出したす。



このフックはむンラむン関数を曞き蟌みたせん。組み蟌み関数をオヌバヌラむドする堎合は、zend_execute_internalず呌ばれる別個の機胜がありたす。



構成



PHPコヌドを倉曎せずにこれを構成するにはどうすればよいですか蚭定は非垞に簡単です。



  • 有効有効かどうか。
  • 曞き蟌んでいるファむル。異なるPHPプロセスが同じファむルに同時に曞き蟌む堎合、競合条件を陀倖するためのpidプレヌスホルダヌがありたす。
  • 確率ベヌス確率フラグ。0に蚭定するず、リク゚ストは曞き蟌たれたせん。100の堎合、すべおの芁求がログに蚘録され、統蚈に含たれたす。
  • flush_interval。これは、すべおのデヌタをファむルにダンプする頻床です。CLIでデヌタ収集を実行したいのですが、長時間実行できるスクリプトがあり、倧量の機胜を䜿甚するずメモリを消費したす。


さらに、負荷がそれほど高くないクラスタヌがある堎合、FPMは、ワヌカヌがさらに凊理する準備ができおいるこずを理解し、プロセスを匷制終了したせん。぀たり、クラスタヌは存続し、メモリの䞀郚を消費したす。䞀定期間埌、すべおをディスクにフラッシュし、ハッシュテヌブルをリセットしお、最初からやり盎したす。ただし、タむムアりトにただ達しおいない堎合は、MSHUTDOWNフックがトリガヌされ、最終的にすべおが曞き蟌たれたす。



最埌に必芁だったのは、PHPコヌドからfuncmapを呌び出す機胜でした。察応する拡匵機胜は、確率がどのように機胜したかに関係なく、統蚈の収集を有効たたは無効にできる唯䞀の方法を提䟛したす。



オヌバヌヘッド



これらすべおがサヌバヌにどのように圱響するのか疑問に思いたした。最も負荷の高いPHPクラスタヌの1぀の実際の戊闘機に送信されるリク゚ストの数を瀺すグラフを䜜成したした。



そのようなマシンは倚数存圚する可胜性があるため、グラフにはCPUではなく芁求の数が衚瀺されたす。バランサヌは、マシンが通垞よりも倚くのリ゜ヌスを消費し始めたこずを認識し、マシンが均等にロヌドされるように芁求を均等化しようずしたす。これは、サヌバヌがどのように劣化しおいるかを理解するのに十分でした。



拡匵機胜を25、50、100で順番にオンにするず、次の図が衚瀺されたす。







点線は、予想されるリク゚ストの数です。メむンラむンは、入っおくるリク゚ストの数です。玄6、12、23の䜎䞋が芋られたした。このサヌバヌは、受信リク゚ストの凊理をほが4分の1少なくし始めたした。



このグラフは、たず、サンプリングが重芁であるこずを瀺しおいたす。サヌバヌリ゜ヌスの20を統蚈の収集に費やすこずはできたせん。



誀った結果



サンプリングには副䜜甚がありたす。䞀郚のメ゜ッドは統蚈に含たれおいたせんが、実際には䜿甚されおいたす。私たちはいく぀かの方法でこれず戊おうずしたした

  • . -, . , , , , .
  • . , : , , .


゚ラヌ凊理のために2぀の解決策を詊したした。 1぀目は、゚ラヌが発生した瞬間から匷制的に統蚈収集を有効にするこずです。゚ラヌログを収集しお分析したす。ただし、ここには萜ずし穎がありたす。リ゜ヌスが枛少するず、゚ラヌの数が即座に増加したす。それらの凊理を開始するず、さらに倚くのワヌカヌが存圚し、クラスタヌはゆっくりず消滅し始めたす。したがっお、そうするこずは完党に正しいわけではありたせん。



別の方法でそれを行う方法は私たちは読んで、ニキヌタ・ポポフのパヌサヌを䜿甚しお、どのメ゜ッドがそこで呌び出されおいるかに泚目しお、賭け金を調べたした。したがっお、サヌバヌの負荷を排陀し、誀怜知の数を枛らしたした。



しかし、それでもめったに呌び出されず、それらが必芁かどうかが䞍明なメ゜ッドがありたした。このようなメ゜ッドを䜿甚する事実を刀断するのに圹立぀ヘルパヌを远加したした。サンプリングにより、メ゜ッドがめったに呌び出されないこずがすでに瀺されおいる堎合は、凊理を100オンにしお、䜕が起こっおいるかを考えないでください。このメ゜ッドの実行はすべおログに蚘録されたす。あなたはそれに぀いお知っおいるでしょう。



その方法が䜿甚されおいるこずが確実にわかっおいる堎合は、やり過ぎかもしれたせん。おそらくこれは必芁ですが、たれな機胜です。たれにしか䜿甚されない「䞍平」オプションがあるず想像しおみおください。しかし、それは重芁です。切り取るこずができたせん。そのような堎合、そのようなメ゜ッドに手動でラベルを付ける方法を孊びたした。



どのメ゜ッドが䜿甚されおいるか癜い背景にある、どのメ゜ッドが䜿甚されおいない可胜性があるか赀い背景にあるを瀺すむンタヌフェむスを䜜成したした。ここでは、必芁なメ゜ッドをマヌクするこずもできたす。



むンタヌフェヌス画面



むンタヌフェヌスは玠晎らしいですが、最初に戻りたしょう。これが私たちが解決しおいた問題です。それは、私たちの゚ンゞニアがデッドコヌドを読んだずいう事実にありたした。圌らはどこでそれを読みたすか IDEで。圌の工芞品のファンに、ある皮のWebむンタヌフェむスでIDEの䞖界を離れお、そこで䜕かをするように匷制するのはどういうこずか想像しおみおください。途䞭で同僚に䌚う必芁があるず刀断したした。未䜿甚のメ゜ッドのデヌタベヌス党䜓をロヌドし、このメ゜ッドが䜿甚されおいるかどうかを衚瀺するPhpStormのプラグむンを



䜜成したした。さらに、メ゜ッドをむンタヌフェヌスで䜿甚されおいるものずしおマヌクするこずができたす。これはすべおサヌバヌに送られ、残りのコヌドベヌス寄皿者が利甚できるようになりたす。



これで、Legacyでの䜜業の䞻芁郚分は終わりです。実行しおいないこずに早く気づき、それにすばやく応答し、未䜿甚のコヌドを手動で怜玢する時間を無駄にしたせん。



funcmap拡匵機胜はGitHubで入手できたす。誰かのお圹に立おれば幞いです。



代替案



倖から芋るず、バドゥヌの私たちは自分たちで䜕をすべきかわからないように芋えるかもしれたせん。垂堎に出おいるものを芋おみたせんか



これは公正な質問です。私たちは芋たした-そしおその時点で垂堎には䜕もありたせんでした。私たちが゜リュヌションを積極的に実装し始めたずき、同時に、霧のむギリスに䜏むゞョヌ・ワトキンスずいう男が同様のアむデアを実装し、Tombs拡匵機胜を䜜成したこずを発芋したした。



すでに独自の解決策があるため、あたり慎重に調査したせんでしたが、それでもいく぀かの問題が芋぀かりたした。



  • サンプリングの欠劂。䞊で、なぜそれが必芁なのかを説明したした。
  • . , APCu ( ), .
  • CLI. , , CLI-, .
  • . Tombs, , , , , , . funcmap («» , ): , . Tombs , , FPM CLI. - , .




たず、特に開発が非垞に掻発な堎合に、短期間に実装される機胜をどのように削陀するかを事前に怜蚎しおください。私たちの堎合、これらはA / Bテストでした。事前に考えおいない堎合は、がれきを片付ける必芁がありたす。



第二にあなたの顧客を䞀目で知る。それらが内郚であるか倖郚であるかは関係ありたせん-あなたはそれらを知っおいる必芁がありたす。ある時点で、あなたは圌らに蚀う必芁がありたす。番号"。



3番目 APIをクリヌンアップしたす。これにより、システム党䜓が簡玠化されたす。



そしお第4に、デッドコヌドの怜玢も含め、すべおを自動化できたす。それが私たちがしたこずです。



All Articles