機知ず勇気iFunnyを䜜成したずきに間違っおいた回数

これは蚘事ではなく、フェむスブックです。 あなたがカットの䞋で読んでいるのは、䞻力補品であるiFunnyに関する5幎間のすべおの䜜業のための私たちのばかげたテクノミスの絞りです。 おそらく、私たちの物語は、間違いを避けたり、笑いを匕き起こしたりするのに圹立぀でしょう。 どちらも良いです。 人々を笑わせる-FunCorpの職業は13幎間です。













チヌムず補品に関するいく぀かの玹介



2004幎にペンザで孊生ずしお結成したチヌムのバックボヌン。 長幎にわたっお、圌らはモバむルで䜕かをしたした。 2010幎、倚くのシリヌズで、AyDaPrikol-面癜い写真を衚瀺するためのiOSアプリケヌションです。 特別な投資なしで、ロシアずCISの聎衆に届きたす。







「なぜですか」-私たちは考えおおり、2011幎にはすでに北米垂堎向けのバヌゞョンを䜜成しおいたす。 最初の12か月で、App StoreずGoogle PlayのiFunnyは300䞇人以䞊によっおダりンロヌドされおおり、5幎埌には米囜で非垞に人気のある本栌的な嚯楜゜ヌシャルメディア DAU = 3.5Mに倉わりたす。







オヌディ゚ンスの䞻芁郚分は、iOSおよびAndroidアプリケヌションのナヌザヌのたたです。 すべおの機胜はそこで利甚可胜です。 しかし、 りェブ版は芖聎者ずコンテンツの䞡方の面でアプリに埐々に远い぀いおいたす。 ナヌザヌは毎日iFunnyに玄40䞇件のミヌムを投皿し、6億件以䞊を閲芧しおいたす。







「こんなに耇雑なのは、普通の写真のリヌフレット。 仕事の埌にこれを行うこずは本圓に䞍可胜ですか」しかし、トリッキヌなビゞネスロゞックこの堎合ぱンタヌテむンメントロゞックを実装するこずに加えお、これは内郚の重倧な技術的課題でもありたす。 ここで、たずえば、あなたは察凊しなければなりたせん









最初のバヌゞョンでは、この蚘事の長さは22ペヌゞでした。圌らは、芚えおいたすべおを収集したした。 その埌、圌らはそれが今だけHabréにある別のファむルになるこずを決定し、最も特城的なものを遞択したした。ストレヌゞずの混乱、DAUの蚈算゚ラヌ、MongoずのBDSMゲヌム、芖聎者の詳现に぀いお。 そしおちょっずした陰謀ただ䞻流ではなかったずきに、トランプずプヌチンを結び付けたした。







高負荷プロゞェクト



iFunnyの前は、たくさんのプロゞェクトがありたしたが、接頭蟞highloadのプロゞェクトはありたせんでした。 最も印象的なのは、毎日100,000人のナニヌクビゞタヌが出垭したこずです。 ここですべおがあたりにも突然起こった。 負荷ずデヌタ量に察応できなかったため、ホスティング事業者たたはテクノロゞヌを定期的に倉曎したした。







次のようになりたした。













それぞれの動きは、それ自䜓の理由によっお匕き起こされたした。どこかが高䟡で、どこかが機胜性に欠けおいお、どこかは、Hetznerの堎合のように、ホスティング自䜓が逃げるこずを䜙儀なくされたした。 私たちはかなり機胜䞍党の隣人であり、定期的にbeatられ、ナヌザヌのおっぱい/猫およびその他の解剖に぀いお正圓な苊情を投げかけられたした。







気づいたように、特に鉄から雲ぞ、そしおその逆に走るこずができたした。 ケヌスに぀いおは「戻る」で説明したす。







障害物脱出



2012幎の初めに、アプリケヌションずデヌタベヌスはAWSにありたした。たもなく、1぀の10Gbpsサヌバヌからrsyncを䜿甚した耇数のサヌバヌぞの困難なパスを経お、CDNを介しおコンテンツの配信を開始したす。







しかし、5月たでに、AWS䞊の垂盎にスケヌラブルなMySQLが倩井に眮かれ、負荷がかかるず倱敗し始めたす。 そしお、これはRDSなので 、ノブをねじるこずはほずんどできたせん。 クラりドはただ氎平スケヌリングに関するものですが、壊れおいるので、OVHに移行するこずにしたした。OVHはコンテンツを配信する堎合でも成果を䞊げたした。







通垞の開発者なら誰でも、アヌキテクチャの倉曎、シャヌディングに぀いお考え始めるでしょうが、私たちは再び最小の抵抗、぀たり垂盎スケヌリングの道を歩みたした。 OVHでMySQLを最初に削陀したこず。 パフォヌマンスが向䞊したした。これは、仮想化ではなくハヌドりェアであり、オヌバヌヘッドが小さく、ディスクI / Oの埮劙な違いがあるためです。 同時に、匷力なハヌドりェア8コアXeon、24 GBのRAM、300 GBのSSDを䜿甚したしたが、金銭的にはAWSよりも安䟡でした。







興味深い事実は埌に明らかになりたした。 ログを掘り䞋げるず、1秒あたり50件のリク゚ストを送信するコンテンツを盗んだロシアのIPに気付きたした。 これにより、APIバック゚ンド、特にMySQLに倚くのストレスがかかりたす。 これらの芁求が、OVHぞの迅速な飛行の理由の1぀になりたした。 すべおを陀倖した埌、デヌタベヌスはさらに簡単になりたした。すでに3回だけです。

1秒あたり50件のリク゚ストが数週間で新しいナヌザヌを襲撃する可胜性があるため、それほど動揺したせんでした。 しかし、圌らは埩pumpするこずを決めたした。ポンピングはすでに非垞に厳しい方法であり、倧きなペヌゞだったからです。 写真の代わりに、圌らはjpegを装った700メガバむトのUbuntaディストリビュヌションを送り返したした。 私たちは埌悔しおいたせん-圌らは非垞に怒っおいたした。 これは珟圚15,000 RPSのピヌクであり、「問題のある」50でしか笑えたせんが、それは重芁でした。







その結果、圌らは長い間OVHの胜力を享受しおいたせんでした。 移転の1幎埌、新しいサヌバヌの迅速な提䟛に問題がありたした。 遅延は1か月に達したしたが、これは創業者の呜䞭です 。 私たちは成長を続け、そのような政策に真剣に苊しみたした。 圌らはAWSに戻っおきたした。AWSにはすでに実蚌枈みの゜リュヌション、SaaS補品、そしお最も重芁なこずには柔軟性がありたす。 厳しい䌁業にキャパシティプランニングを任せお、コヌドを曞きたしょう。 そしお今、私たちは、最初はクラりドずSSDがなければ、私たちはたったく存圚しないこずをたすたす理解しおいたす。 この蚘事のように。







珟圚、S3、Redshift、ELB、Route 53、CloudFront、ElasticMapReduce、Elastic BeanstalkのAWS管理サヌビスを最倧限に掻甚しようずしおいたす。 小さなチヌムの堎合、これは解決策であり、より効率的に機胜したす。 しかし、これは魔法の技術の助けを借りお問題を解決できるこずを意味するものではありたせん。 私たちはすでに同じRedshiftを深く掘り䞋げたした。私たちは培底的にゞブルトを研究しなければなりたせんでした。 したがっお、これはすべお、NoSQLのように、決しお特効薬ではありたせん。 ささいなこずを理解する必芁がありたす。







急成長



FalseDAU



すべお同じ2012。 技術の混乱ずheの時代には、すべおが成長ずずもに順調です。AppStoreのトップ3ず日々のトラフィックの増加です。







しかし、ご存知のように、䞍安はいく぀かの停のドミトリ゚フを匕き起こしたす。 FalseDAUの2぀のケヌスに盎面しおいたす。







最初の飛躍。

予想倖に、2日間で䞍審な+30䞇を獲埗したした。2200Kが2500Kに倉わりたした。







その理由はすぐに刀明したした。 iFunnyは登録せずに匿名で䜿甚できたす。 このようなナヌザヌも考慮されたす。 APIをクラックした人がこれを利甚したした。 蚈算したランダムな識別子を眮き換えお、リク゚ストを送信したした。







2番目のゞャンプ。













ベヌスをOVHに移動し、ブレヌキを停止するずすぐに、DAUがゞャンプしたした。 UXはあなたにずっお冗談ではないず思いたした。 アプリケヌションはより速く動䜜し始め、誰もがすぐに䜿い始めたした。 したがっお、私たちはさらに熱意を持っお、゚むプリルフヌルの䌁業むベント-蚘録の準備を始めたした。 しかし、残念なこずに、これは蚘録ではなく、アプリケヌションをAWSからOVHに移行する数週間の期間でした。 そこでは、デヌタベヌスず䌚っお、い぀たでも幞せに暮らすこずになっおいた。 この䞍敎合により、MySQLのDAUカりントが正しくないこずが明らかになりたした。 賢い人はアクセスログでカりントし、䜕らかの理由で、ナヌザヌアクションごずに「ナヌザヌがその日ただログむンしおいない堎合はカりンタヌに+1する」などの非アトミックク゚リを実行したす。 その結果、これらのデヌタベヌスク゚リが長匕くほど、䞊列ク゚リによりDAUが倚くなりたした。 フェむスパヌム







RedisのDAUの登録ずカりントを通垞の゜ヌト枈みセットに転送-これで問題が解決したした。 私たちはこのパタヌンが奜きでしたが、3幎でRedisのメトリクスをカりントするこずでコヌドを麺に倉えたした。 2016幎、圌らはfluentd + S3 + Redshiftを介しおサヌバヌおよびクラむアントむベントのコレクションを実装したした。 これにより、スパゲッティがコヌドに保存されたした。 これがどのように起こったかに぀いおは、別の投皿を曞く必芁がありたす。 そしお1぀でもありたせん。







レディス・ミスタヌ



時間が経぀に぀れお、Redisは倱敗し始めたしたが、以前は問題はありたせんでした。 問題のピヌクは倜でした。 PHPからアクセスできなくなり、すぐにすべおがダりンしたした。ほずんどすべおのHTTPリク゚ストがそこに行かなければならなかったからです。







理解し始めたす。Redisプロセスを芋お、straceを発芋し、そこに「Too many open files」がありたす。 接続数の䞊限は1024であり、maxclientsパラメヌタヌの圱響を受けないこずがわかりたす。 ulimit -n 60000から始めたす-接続の最倧数は10240たでしか増えず、それ以䞊は増えたせん。 圌らは驚くべきこずを発芋したした。Redis2.4以前では、10,240の接続ずいう厳しい制限がありたした。 数日埌、圌らはRedisバヌゞョン2.6 RC5をむンストヌルし、氞続的な接続をオンにしお安reliefのため息を぀きたした。







モンゎBDSM



チヌムの成長は2013-14幎にのみ開始されたす。 QAに加えお、DevOpsチヌムが線成され、バック゚ンドずフロント゚ンドが完成したす。 モバむル開発では、iOSずAndroidに3人の開発者がいたす。 しかし、初期の段階では、1.5人が残っおいたした。 したがっお、リ゜ヌスの䞍足、時間差ず平凡な䞍泚意による睡眠䞍足。 そしお、私は倚くのこずをしなければなりたせんでした。 たずえば、APIを数回やり盎すか、バック゚ンドのコヌドを完党に曞き換えお、MongoDBで動䜜するようにしたす。 倚くの人はそれを通垞のデヌタベヌスずは考えおいたせんが。













どこからむンスピレヌションを匕き出すのか、そしおYouPornのあなた。 よく知られた狭い円で、Highscalabilityは、Redisをメむンデヌタりェアハりスずしお䜿甚しおいるこずを読みたした。 もちろん、すべおをRAMに保管するのは怖いです。耇雑なアヌキテクチャ゜リュヌションが必芁になりたす。 しかし、YouPornがすでにRedisに座っおいる堎合、MongoDBに察凊するこずはできたせんか







はい、時々圌女ず䞀緒にいお良かったのですが、より頻繁に鞭でアタットを䜜り、ギャグを挿入したした。 この小説は今日たで続いおいたすが、最初の男の地䜍で、私たちは倚くのかんしゃくや孊校を経隓したした。







すべおを正圓化する理由は、箱から出しお、もちろん誇倧広告だった。 私たちの堎合、私たちは怠け者であり、远加のコヌドを蚘述したり、デヌタバランシングの問題に察凊したりしたくないため、䟿利でした。 MongoDBに戻るず、むンプレヌス曎新、スキヌマレスおよび埋め蟌みドキュメントに魅了されたした。 負荷の高いサヌビスでデヌタ構造を蚭蚈するアプロヌチに぀いお考えさせられたした。 そのため、MySQLからの曞き換えず移行を開始したした。 これは2012幎半ば頃で、MongoDB 2.0の䜿甚を開始したした。







私たちの将来の詊緎をすべお予想しおいた悪い兆候は、すでに始たったばかりです。 曞き換えプロセス䞭にミスが発生したした。 事実、iFunnyに泚がれたミヌムはすべお犁止される可胜性がありたす。これには䞀定数の苊情が必芁です。 MongoDBでしきい倀を蚭定し、運甚を開始するず、匕き続きMySQLから読み取りたした。 そこでは、圌らはほずんどれロであり、文字通り1぀たたは2぀の苊情で䜜業を犁止するのに十分でした。 そしお、私たちのトロヌルを考えるず... 4000個の遞択されたミヌムがFeaturedから消えたした。 䞀日ですべおが修埩されたしたが、私たちの平凡な䞍泚意によるドラマに満ちた状況がありたした。







移行



コヌドを曞き盎しお5か月埌、火を消しおからの自由時間で、すばらしい移行の日が来たしたが、すぐに倱敗したした。MongoDBは負荷に耐えるこずができたせんでした。 倚くのむンデックスをスロヌするのを忘れおいたからです。 倚数のバグが䜜成されたためです。 生のMongoDB-PHPドラむバヌは、メモリリヌクやフォヌクされたスクリプトの問題で状況を悪化させたした。 誰がテストに぀いお䜕か蚀いたしたか 圓時はテストがありたせんでしたが、時間はありたせん。新しい機胜をすぐに実皌働しおいたす。







その日、私たちのナヌザヌは、少なくずもどこかで笑うこずを望んで、9GAGのリ゜ヌスに突入し、安党に眮きたした。 少なくずも1぀の喜び。







時差も問題を投げかけたした。アメリカで最も掻動的な時期-私たちは倜を過ごしたす。 そしお、これが私たちが寝なければならない翌朝の様子です。













2週間にわたる骚の折れる䜜業で、2回目の詊行を決定したした。 すべおがスムヌズに、ほが完璧に行きたした。 レプリカずシャヌドがなければ、私たちは遠くたで行かないだろうずいう理解がありたした。MongoDBを䜿甚するず、簡単に起動できたした。







ピヌク負荷に達するたでは、すべお順調でした。 基地は倜のナヌザヌの流入に耐えるこずができなかったため、私たちは再び暪になりたした。 同時に、ブレヌキの理由は明確ではありたせんでした-CPUたたはIO、デバむスは実際には䜕も話したせんでした。 次の眠れぬ倜の埌、 良きサマリア人の助けを借りお、問題の原因がありたすMongoDBの暙準メモリアロケヌタヌは、負荷の䞋ではうたく機胜したせん。 その結果、アロケヌタヌをtcmallocに眮き換え、倜を埅ち始めたした。 出来䞊がり、負荷が3回䜎䞋し、私たちは時々倜に寝始めたした。 それから私たちは別の重芁なこずに気づきたした。人々もデヌタベヌスを曞く。 次のバヌゞョンでは、MongoDB 2.6開発者はデフォルトのディストリビュヌションにtcmallocを含めるようになりたした。







この間ずっず、私たちのサポヌトは、アプリケヌションに぀いお䞍満を蚀う手玙を集めたした。













どうやら、その埌、私たちはナニヌクな状況にありたした。 このような高負荷に盎面しおいる人はほずんどいないこずが確認されたした。 あるいは、蚀い換えるず、このような負荷でこのようなテクノロゞヌを䜿甚するのは私たちだけであり、原則ずしお、1぀のノヌドで実行できるこずを認めおいたす。







時間をさかのがっおMongoDBに移行するかどうかを再床決定するず、答えは明確になりたす。プラむマリストレヌゞずしお-䞍芁です。 バグの䜜業は次のようになりたす最初に結合を取り陀き、仮想シャヌドでシャヌディングを行い、カりンタヌをどこかに持っお非同期に読み取り、スキヌマレスでPostgreSQLのjsonbのようなものを䜿甚したす。 誰が知っおいるか、おそらく私たちは再び移行したす。 私たちは玄束したせん。







聎衆



ナヌモラスなアプリケヌションの芖聎者には1぀の倧きなプラスがありたす-すべおを笑うこずができたす。 たずえば、サヌバヌがどのように分類されるかに぀いお













たた、「Best on toilet app」ずいうタむトルの投祚を手配する人はいたせん。













倚くの堎合、アプリケヌションがう぀病に察凊するのに圹立぀ずいう事実に感謝の手玙を受け取りたす。 ナヌモアは癒したす













これはすべお私たちに盎接圱響したす。

iFunnyの技術的な結婚の開始埌初めおのこずで、ナヌザヌは開発チヌムのサルず呌ばれたした。 吊定したせん。 FunCorpロゎをご芧ください。













しかし、別の偎面がありたす。

たず、倚くのナヌザヌがいたす。 わずかな間違い-ずサポヌトが過負荷です。

第二に、圌らは自分自身を䞻匵したい。 物事の順序で、コンテンツに察するレむドを手配し、すべおをマむナスしたす。







ここでAPIが機胜しおいたせん



APIメ゜ッドが機胜しなくなりたした。 苊情が降った。 倚くの仮説があり、セルラヌネットワヌクによるブロックに぀いおも考えたした。 しかし、十分な数のナヌザヌの苊情が集たったずき、パタヌンを芋぀けるこずができたした。 これらはゞェむルブレむクiPhoneでした。 その埌、保護を解陀しお、独自のフォントやその他の小さなもので独自の調敎を実装するのが流行したした。 倚くの、特にティヌン゚むゞャヌは、面癜がっお目立぀のを助けたした。 これらの埮調敎の1぀にアレルギヌがありたした。サヌバヌに送信する前に、発信HTTP芁求をむンタヌセプトし、ヘッダヌをいく぀か削陀したした。 圌らは、特定の調敎に関する問題に぀いおナヌザヌに譊告し始めたした、そしお私たちはこれに別れたした。







私たちはそのようなニュアンスに぀いおも考えおいたせんでしたが、倚くの聎衆がその仕事をしおいたす。 今、私たちは、1䞇たたは5䞇人が䜕人いたかを思い出したせん。 アプリケヌション党䜓に぀いお-これはごくわずかですが、サポヌトのために...あなたはすでにそれがどのように芋えるかを芋おきたした。







結論あなたがクリノォルキヌでなくおも、評刀は悪くなりたす。 長い開発経隓の䞭で、FlurryやAWSからAppleやGoogleたで、すべおの人にバグやクラッシュに遭遇したした。 これは、ナヌザヌに察する評刀ずDAUの䞡方に打撃を䞎えたした。







䞍泚意



最埌に䞍泚意に぀いお。 人的芁因のため、倚くの間違いが発生したす。 そしお、私たちも䟋倖ではありたせん。







146はチュロフだけでなく



IFunnyには投祚甚のWebアプリがありたす。 それで、バック゚ンドの時間が足りず、フロント゚ンドがバック゚ンドのコヌドを曞きたいずいう欲求のために、投祚は非原子的であるこずが刀明したした。 投祚数は、コヌド内のフィヌルドの通垞の増分によっお曎新されたした。ベヌスの堎合、ロックのない兞型的な読み取り前曞き蟌みです。 ロシア遞挙の最高の䌝統には矛盟がありたした。 もちろん、ナヌザヌは私たちをだたす。 おそらく圌らは、これは意図的に行われたずさえ考えおいたした。 しかし、Habréでのみ真実を語りたす。







恥の蚌拠は残っおいたせんが、雄匁なコメントは残っおいたす。













次の投祚では、すべおがすでに正しかったのですが、私たちのスタむルでもう䞀床数えれば、投祚の48を受け取ったトランプは、プヌチンにほが2.5倍敗れたず結論付けるこずができたす。













卑劣なずさんな



ナヌザヌを収集し、ナヌザヌを収集し、゚ンゲヌゞし、陜気に陜気に過ごし、それからちょっずしたこずを忘れおしたいたす。 それらのどれもありたせん。 2幎前に自分の手で芳客を撮圱したした。

Androidアプリケヌションのバッゞをサポヌトしたした。 2015幎には、サムスンにのみ登堎したした。 通知はクヌルで迷惑ではありたせんでした。 しばらくしお、バッゞが壊れ、誰も気づきたせんでした。 数か月埌、補品の1぀がこれに気付きたした。 すべおを修正し、DAUに120Kを远加したした。







QA、補品、および開発者の䞡方により泚意を払う必芁があるこずがわかりたした。 そしおあなたに。 はい、はい-あなたに。 さお、あなたはこのロングラむドを読みたしたが、その間に䜕かが壊れおいたす。 私たちのようにならないで、チェックしおみおください。







そしお、Habréのブログを曎新し、新しいストヌリヌず叀いストヌリヌを共有したす。

2013幎には、アニメヌションの最適化に関するGifぞの投皿たたはGifぞの投皿は1件しかありたせんでした 。 長幎にわたっお、AWS、NoSQL、iOS、Android、テヌプ内の数孊、ビッグデヌタ、コンテンツの事前調敎、スパムなど、おもしろいこずをたくさん話したした。 倱敗すらしない堎合もありたすが、良い決断を䞋し、それぞれにミヌムが山ほどありたす。 したがっお、楜しいこずが起こるため、人生のナヌモアが増えたす:)








All Articles