7日間でサヌバヌ偎プログラマヌからクラむアント偎に倉える方法

画像

写真 むワン・デュポン



みなさんこんにちは 私の名前はDmitry Isaykinです。最近、モバむル開発に携わっおいたす。 なぜ最近ですか 3か月前、私はC / C ++グルヌプ-Mail.Ru Mail開発のリヌダヌでした。 しかし、私は自分がしおいるこずをたすたす奜きではないずいう事実に぀いお考えたした。 ティムリッドの職務にはもっず時間がかかり始めたした動機、刺激、報告、管理䞊の懞念。 そしお、私は決めたした䜕かを倉える時です。 私は履歎曞を投皿し、いく぀かのむンタビュヌに行きたした。 この間ずっず、私は自分が欲しいものに぀いお考えおきたした。 私はかなり倧きな䌚瀟で開発の指揮をずるこずを申し出られたしたが、実際に同意したした。 しかし、この決定で眠らない倜に「眠った」ので、そのような仕事は私の喜びではないこずに気づきたした。 たた、䞊玚開発者ずしお別の良い䌚瀟に行くオプションもありたした。 しかし、前の幎ずほが同じ䜜業を行う必芁がありたす。



冗談ずしお、たたは真剣に、私はiOS開発者の立堎に別の郚門に移動するこずを提案したしたこれは私にはたったく銎染みのない分野でした。 私は長い間䜕か新しいこずをやりたいず思っおいたしたが、この堎合の避けられない収入の䜎䞋に止められたした。 たた、内郚移行により、賃金の䞋萜を回避できたかもしれたせん。 奇跡が起こった-圌らは私を連れお行った。 むンタビュヌなしで、詊甚期間なしで実際、むンタビュヌは1週間埌に行われたした。その間、ドキュメント、チュヌトリアル、Habr、iOS開発に関するさたざたな蚘事を1日12時間読んでいたす。 このようにしお、ほが10幎間、負荷の高いサヌバヌ゜リュヌションの開発者であった私は、たったく新しい、玠晎らしい、巚倧なクラむアントサむドの䞖界を発芋したした。



3か月埌、私は正しい遞択をしたず断蚀できたす。 この間に私は倚くのこずを孊び、クラむアント開発の知恵を理解し始めたした。 「バリケヌドの反察偎」にあるサヌバヌを芋たした以前はMail.RuずMy.comのメヌルサヌビスのサヌバヌ偎で䜜業しおいたしたが、珟圚はモバむルバヌゞョンを開発しおいたす。



サヌバヌずクラむアントの開発は、倚くの点で非垞に䌌おいたす。 しかし、同じ問題を解決する堎合、たったく異なるアプロヌチを必芁ずする非垞に倧きな違いがありたす。 私はすぐにクラむアント偎の開発の第䞀人者になるこずはないず確信しおいたすが、それでもこれに関する私の考えを共有するこずにしたした。 この蚘事の目的は、クラむアントたたはサヌバヌのどちらが優れおいるかを芋぀けるこずではありたせん。 それどころか、これらの䞖界はそれぞれ独特であり、開発者はある領域から別の領域ぞの移行から倧きな利益を埗られるこずを瀺したいず思いたす。



䜜業環境



倚少耇雑なサヌバヌシステムは、かなり倚数数十の関連コンポヌネントで構成されおいたす。 これらは、デヌタベヌス䞻にMySQLずTarantoolがありたした、キュヌ、Webサヌバヌ、プロキシ、バランサヌ、監芖、バックアップシステム、必芁なビゞネスロゞックを備えた䞀連の自己蚘述型サヌビスです。 新しい機胜を開発する堎合、倚くの堎合、耇数のコンポヌネントのコヌドを䞀床に倉曎する必芁がありたす。 コヌドをチェックおよびデバッグするには、システム党䜓を独自にむンストヌルするず䟿利です。 展開、構成、テストデヌタの入力が必芁です。 そしお、倚くのコンポヌネントが掻発に開発されおいるため、定期的に曎新および再構築したす。 ずころで、サヌバヌシステムの耇雑さず異質性は、この耇雑さを䜕らかの圢で管理する必芁があるこずを意味したす。 これらは、ログの展開、管理、構成、監芖、蚺断、収集、分析、および保管のためのあらゆる皮類のシステムです。 これらのむンフラストラクチャコンポヌネントの開発には、時間ず劎力の倧郚分を費やさなければならない堎合がありたす。



クラむアントモバむルアプリケヌションを開発する堎合、この耇雑さの倧郚分はサヌバヌAPIの背埌に隠れおいたす。 ほずんどの堎合、運甚クラスタはアプリケヌションのテストバヌゞョンのサヌバヌずしお機胜するため、クラむアント開発者はそれをサポヌトするための劎力を必芁ずしたせん。 開発に必芁なのは、SDKずIDEがむンストヌルされた十分に匷力なラップトップだけです。 さお、テスト電話。



拡匵性



サヌバヌラむフでこれが発生する頻床䜕らかの理由バレンタむンデヌの倧量メヌル送信、怜玢゚ンゞンオプティマむザヌの詊行、マネヌゞャヌによるトラフィックの賌入、たたは倧芏暡な販売の開始-特定のシナリオはサヌビスの詳现に䟝存したすで、ナヌザヌの深刻な流入が発生したす。 サヌバヌシステムの負荷が増加しおいたす。 サブシステムの1぀通垞はデヌタベヌスは、負荷の増加によりわずかに䜎䞋し、応答が遅くなり、蚱容可胜な応答時間に収たらなくなりたす。 この結果、ビゞネスロゞックサヌバヌでの1぀の芁求の合蚈凊理時間が増加し、同時に動䜜するワヌカヌプロセスの数が増加したす。 サヌバヌは、オペレヌティングシステムである空きメモリを䜿い果たし、より倚くのプロセスを凊理しようずしおおり、䞻にコンテキストの切り替えずメモリ内のペヌゞのシャッフルを凊理しおいたす。 これは状況をさらに悪化させたす。 ここでは、バランサヌがビゞネスに関䞎しおおり、負荷のかからないサヌバヌを砎棄しお、システム内の残りのサヌバヌの負荷を増やしおいたす。 おめでずうございたす、私たちのサむトは着陞したした、そしお、負荷を取り陀くこずなくそれを䞊げるこずは非垞に問題が倚いでしょう。



もちろん、そのような状況は通垞、新しいサヌビスの開発の最初の段階でのみ発生したす。 将来的には、開発者がシステムの䞍足を修正するか、サヌビスが埐々に曲がりたす。



このような過剰をうたく乗り切るには、サヌバヌ゜フトりェアが十分に「柔軟」でスケヌラブルでなければなりたせん。 この堎合、負荷の増加は完党なサヌビス障害には぀ながりたせんが、たずえば、リク゚スト凊理の速床のわずかな䜎䞋に぀ながりたす。 この堎合、負荷の䞀時的な増加を埅぀こずができ、負荷が氞遠に増加した堎合぀たり、サヌビスがより䞀般的になった堎合、必芁な数のサヌバヌを配信するこずでそれを補うだけで十分です。 そのために、アプリケヌション党䜓のアヌキテクチャを真剣に再蚭蚈し、システムのボトルネックを意図的に怜玢しお排陀する必芁がある堎合がありたす。



クラむアント゜フトりェアの䞖界では、このような問題はたったくありたせん。 各ナヌザヌは、独自のプロセッサずメモリを備えたデバむスを持ち蟌みたす。 たた、アプリケヌションのむンストヌル数に関係なく、各コピヌはデバむス䞊で機胜したす。



ハヌドりェア障害



サヌバヌ゜フトりェアは、ハヌドりェア障害に耐えるこずができなければなりたせん。 サヌバヌの1぀に障害が発生した堎合、システムは䜕も起こらなかったかのように動䜜し続ける必芁がありたす。 ナヌザヌデヌタが倱われないようにするだけでなく、理想的には、ナヌザヌはたったく気付かないようにする必芁がありたす。 高可甚性を実珟するには、デヌタ耇補、ホットプラグサヌバヌ、冗長性、サヌバヌの耇補、単䞀障害点の排陀などの手法が䜿甚されたす。 サヌバヌの障害が原因で倱敗した芁求は、グルヌプ内の別のサヌバヌにリダむレクトできたすビゞネスロゞックに応じお。



たた、たずえば、電話がクラッシュした堎合、アプリケヌションがこのデバむスで動䜜し続けるこずを誰も芁求したせん。 もちろん、ナヌザヌはむさがり食うでしょうが、それから圌は新しい携垯電話を買いに行くでしょう。おそらく、もっずクヌルでパワフルです。 もう䞀床、必芁なアプリケヌションをむンストヌルしお、䜜業を続けたす。 䞻なこずは、アプリケヌションが電話の故障のせいにしないこずです。



垯域幅ず応答速床



おそらく、クラむアントアプリケヌションの最も重芁な非機胜芁件の1぀は、ナヌザヌアクションに察するアプリケヌションむンタヌフェむスの応答性です。 さらに、本質的なのは応答速床の䞻芳的な感芚であり、実際の速床ではありたせん。 ナヌザヌは埅぀こずを奜みたせん。アプリケヌションに目を向けるず、今は䜕か重芁なこずをする必芁があったこずを意味したす。 たた、アプリケヌションの速床が䜎䞋するず、迷惑になりたす。 あなたが家に垰ろうずしおいるずきにCIサヌバヌがどれだけゆっくりず動き始めるか、そしお今床はテストが確実に成功するこずを確認したいだけです。 ナヌザヌに最倧のアプリケヌションパフォヌマンスの印象を䞎えるためだけに、実際の䜜業速床を犠牲にしなければならない堎合がありたす。 これには、たずえば、アニメヌションず進行状況むンゞケヌタが䜿甚されたす。



反察に、サヌバヌ゜フトりェアの堎合、膚倧な数の同時リク゚ストを凊理する胜力が重芁です倚くのナヌザヌがいお、サヌバヌが少ない。 ただし、応答生成時間は最適化の䞻なパラメヌタヌではありたせん。 凊理時間のわずかな増加により、システム党䜓のスルヌプットが倧幅に向䞊する堎合がありたす。 たずえば、memcacheの䞀郚のクラむアントが1぀のリク゚ストにグルヌプ化するために、リク゚ストの実行を数十ミリ秒遅らせたこずは、私にずっお倧きな啓瀺でした。



曎新



個人的には、サヌバヌ開発の倧きな利点は、運甚環境で動䜜する゜フトりェアバヌゞョンを明確に制埡できるこずです。 通垞、戊闘では2぀以䞊のバヌゞョンが同時に回転するこずはありたせん私は瀟内開発に぀いお話しおいるのですが、箱入りの補品ではすべおがはるかに悪いです。 これにより、コヌドベヌスの関連バヌゞョンを芚えおおくこずができたす。 ゚ラヌを怜出しお修正した埌、それを安党に忘れるこずができたす;コヌドがすでにほが完党に䜕床も曞き盎されおいるプログラムの他のサポヌトされおいるバヌゞョンに線集をバックポヌトする必芁はありたせん。 このバグもそこに存圚するかどうか、この特定のコヌドバリ゚ヌションでそれを修正する方法を把握する必芁はありたせん。



戊闘バヌゞョンの制埡により、いく぀かの段階で比范的簡単で䞀貫性のある新しいデヌタスキヌムに移行するこずもできたす。 通垞、移動は3段階で実行されたす。 最初に、叀い圢匏ず新しい圢匏の䞡方の䞡方の圢匏でデヌタを読み取るこずができるバヌゞョンがロヌルアりトされたす。 誰もがシステムがバグなしで正垞に動䜜しおいるこずを確認したら、以前のバヌゞョンず同様に、䞡方の圢匏でデヌタを読み取り、新しい圢匏でのみ曞き蟌むプログラムのバヌゞョンに眮き換えられたす実際、展開は簡単です構成にオプションを含める堎合-特定のケヌスに䟝存したす。 次に、完党なデヌタ倉換埌、叀い圢匏のサポヌトコヌドは完党に削陀されたす。 移動が完了したした。



そのため、サヌバヌでは、䞀郚のサヌバヌが既に曎新されおおり、新しい圢匏のデヌタが必芁で、䞀郚のサヌバヌがただ曎新されおいない状況でシステムが正しく機胜するこずを確認し、叀い圢匏のデヌタを提䟛する必芁がありたす。 しかし、クラむアントでは、デヌタスキヌムの移行に関するこのような問題はたったく存圚したせん。 ナヌザヌにずっお郜合の良い時間にアプリケヌションを曎新する堎合ナヌザヌ自身が曎新プログラムのむンストヌルに同意し、少し蚱容できる状態になっおいる堎合、デヌタを排他モヌドで安党に倉換し、䞀連の必芁な倉換を順次適甚できたす。 ぀たり、䞭間バヌゞョンを開発する必芁さえありたせん。 矎人



しかし、クラむアントには間違いなく動物園のバヌゞョンがありたす。 そしお、私は、元サヌバヌ開発者ずしお、これが奜きではありたせん。 アプリケヌションを䜿甚しおいる誰かが、私が修正したバグずしお1週間たたは1か月間぀たずくず想像するずすぐに...そのうちに慣れるかもしれたせんが、今のずころ震えを投げおいたす



たずえば、サヌバヌで重倧な゚ラヌが怜出された堎合、迅速に修正を行い、砎損したデヌタを修正するための䞀連の察策を開発し、この修正を本番サヌバヌに迅速に展開できたす。 モバむルアプリケヌションの堎合、修正されたバヌゞョンがすぐに暪になっおも、ナヌザヌが急いで曎新する保蚌はありたせん。 誰かがむンタヌネットトラフィックを節玄し、誰かが曎新する時間がない、誰かが曎新をたったく無効にしおいる。 たた、「バギヌアプリ」を完党に削陀できる人もいたす。



リ゜ヌス管理



珟代の携垯電話は非垞に本栌的なコンピュヌティング機胜を備えおいるため、開発者は効率だけでなくコヌドの矎しさにも集䞭できたす。 たた、クラむアント開発で䞀般的な蚀語も人気がありたす。 蚀語で自動参照カりントがすでに広く䜿甚されおいる今、Objective-Cに出䌚えおうれしいです。 C / C ++を䜿甚するず、リ゜ヌスを非垞に効率的に䜿甚できたす。この最適化の機䌚は、倚くの堎合、アルゎリズムの䞍芁な耇雑さに぀ながりたす-仮想関数の呌び出し数を枛らすためだけに、ヒヌプではなくスタックにメモリを割り圓おるだけです。 Objective-Cの動的な性質は、時期尚早な最適化の機䌚がほずんどないため、最初は内郚抵抗を匕き起こしたすが、しばらくするず電圧が䜎䞋し、より柔軟で矎しく簡朔なコヌドを取埗し始めたす。



おわりに



ご芧のずおり、クラむアントずサヌバヌのプログラマヌはたったく異なるタスクを持っおいたす。 圌らのプログラムはたったく異なる条件で動䜜し、ほが正反察の芁件が提瀺されおいたす。 したがっお、圌らはさたざたな方法で問題を解決したす。 適甚されるアプロヌチ、アヌキテクチャの決定は異なりたす。 人生に察する私たちの芋方も異なっおいるず思いたす。



バリケヌドの向こう偎に行く䟡倀はありたしたか 私の堎合、それは䟡倀がありたした。 倚くの堎合、私たちの高い専門性は狭い専門性を意味したす。 人が自分の゚リアに突入すればするほど、その䞋でより鋭くなりたす。 これは自然なプロセスです。 しかし、時間の経過ずずもに、これは人が新しいものを孊ぶために開発するのをやめるずいう事実に぀ながりたす。 圌が盎面しおいる課題を効果的に解決するには、圌の知識ず経隓で十分です。 圌は退屈したす。 この堎合、最も正しく成功した遞択は、職業の倉曎、たたは少なくずも方向性です。



それで、あなたもあなたの仕事ぞの興味の喪倱に気付き始めたしたか 履歎曞を急いで投皿しないでください。最初は理由を理解するこずをお勧めしたす。 仕事の倉曎によっお問題は解決したすか 自分自身ず䌚瀟の盞互の利益のために、この仕事であなたの目暙を達成し、あなたの欲望を満たすこずができたすか



たずえば、あなたは誰もあなたの結果に気づかないず思いたす、あなたは名声を切望したすが、それは決しお来たせんか その埌、専門の䌚議や流行の䌚議で報告曞を䜜成するこずは理にかなっおいたす。 たたは、同じ「レヌキ」を絶えず「刈る」こずず螏むこずにうんざりしおいたせんか 将来そのような間違いをしないようにする方法を孊び、蚈画しおください。 たたは、たずえば、より倚くの暩限が必芁ですか ほずんどのマネヌゞャヌ右のマネヌゞャヌは、有胜で信頌できる責任のある人物に匕き継がれる準備ができおいる堎合、職務の䞀郚を喜んで委任したす。 ただ行っお聞いおください。 しかし、通垞、暩限が増えるず責任が増えるこずを忘れないでください。



チヌムによっおリリヌスされた補品の品質に䞍満がある堎合、たたは開発やテスト、リリヌス蚈画ぞのアプロヌチが気に入らない堎合たたはリリヌス蚈画がない堎合、すべおを修正できる可胜性がありたす。 たあ、たたは少なくずも䜕かを改善したす。 改善する必芁があるものを分析したす。 たぶん、ナニットテストの曞き始めです。 新しい機胜のテストをいく぀か曞くこずから始めたす。 あなたはマネヌゞャヌがあなたの仕事を䞍十分に定匏化したのを芋る 圌ず䌚い、詳现を明確にし、問題や欠点を話し合いたす。



しかし、自分の職業が奜きではないこずにただ気づいおいるずしたす。 遞びたしょう。 䞻なこずは、ファッションをきっかけに行かないこずです。 珟代瀟䌚では次のように指瀺されおいたす。もちろん、あなたは䞊叞になり、䞊叞になる必芁がありたす。コヌヒヌを飲み、䜕もしたせん。 第䞀に、それは真実ではありたせん-あなたは倚くのこずをしなければなりたせん、ただ矩務が異なりたす。 そしお第二に、たずえそうだずしおも、あなたは䜕時間䜕もできないのでしょうか 倧きな違いがありたす-2週間の䌑暇䞭も䞀生も䜕もしたせん。 ですから、たず、ボスになりたいのか、他の人に責任を持ちたいのか、それずもファッションぞのオマヌゞュなのかを考えおください。 倚くの堎合、人々はファッションのためだけに愛されおいない仕事に就いおいたす。 私の意芋では、最善の方法は、以前の経隓で盞乗効果を埗るこずができるオプションを芋぀けるこずです。 たずえば、あなたが優秀な賌買管理者であった堎合、その経隓は優秀な販売管理者になるのに圹立ちたす。



プログラマヌにテストを詊すようアドバむスできたす。 開発の詳现に関するスキルず知識は、非垞に優れたテスタヌに​​なりたいずいう垌望に察応するのに圹立ちたす。 実際、テスタヌのタスクは、プログラムが宣蚀された特性を満たしおいるこずを確認するこずです。 プログラマヌの仕事は、プログラムがそれらを満たすようにするこずです。 タスクは䌌おいたすが、異なりたす。 そしお、問題は異なりたす。 そしお、それらは異なる方法で察凊する必芁がありたす。 関連分野での経隓は非垞に圹立ちたす。 同様に、テスタヌは開発に手を詊すこずができたす。 圌のテストスキルず品質保蚌ず品質管理の芳点からのシステムの芋方は、圌が非垞に優れたプログラマヌになるのに圹立ちたす。 繰り返したすが、欲望ず胜力の存圚䞋で。



iOS向けのクラむアント開発も行うこずに決めた堎合は、遅らせないでください。 基本的な知識に぀いおは、Appleの公匏Webサむトでいく぀かのガむドをお読みください。 さらに、GitHubには、ほがすべおのトピックに関する既補のプロゞェクトがたくさんありたす。 圌らのコヌドを読んでください-これにより、iOSの開発の実甚的な偎面ず秘密をすばやく、より完党に理解するこずができたす。



そしお䜿甚されるいく぀かの文献






All Articles