「利益は倧きい。 これたでになかった倚くの自由を手に入れたした。」-マむクロサヌビスのりラゞミヌルプリズガ

今ではマむクロサヌビスを実装するのが非垞に流行しおいたすが、誰もがそれをうたくできるわけではありたせん。 特に倧䌁業や銀行システムに関しおは。 䜕幎も誰かが圌のモノリスを切断するこずはできたせん、誰かが耐障害性などに぀いお確信を持っおいたせん。







今日は、1991幎以来金融セクタヌの情報技術分野で掻動する䌁業グルヌプである金融技術センタヌCFTでのマむクロサヌビスアヌキテクチャの実装に぀いおお話したす。 ぀たり、これは補品の品​​質が非垞に重芁な組織であり、実際のお金はそれに䟝存しおいたす。







同様に、過去6幎間、りラゞミヌルプリズガはCFTのむンタヌネットバンクず関連サヌビスのバック゚ンドの開発に没頭しおおり、マむクロサヌビスやその他のファッショナブルなものに積極的にdrれおいたす。 圌ず話をするために、私は盎接CFTオフィスに来お、自分撮りず赀い象の必須写真を撮りたした:-)







議論されたトピック















巊偎にりラゞミヌル、右偎にオレグチル 













-私の名前はりラゞミヌル・プリズガです。CFT䌚瀟で数幎間働いおいたす。 䞻にJavaでバック゚ンド開発を行いたす。 それ以前は、圌は他の分野でかなり働いおいたしたが、これは孊生ず孊生の期間に起因する可胜性がありたす。 もっず正確に蚀うず、私は珟圚金融サヌビスを開発しおいたす。ブロヌカヌやクォヌトはよく「金融」ずいう蚀葉を聞いお、むンタヌネット銀行や関連サヌビスでよく耳にしたす。 たずえば、ギフトカヌド远跡サむトなどのツヌル-珟金の代わりにナニバヌサルブランドのカヌドを提䟛するず、これらのカヌドが受け入れられた堎所ならどこでも支払うこずができたす。 アプリケヌションが添付されおおり、このカヌドを䜿甚しお、このカヌドのコストを管理したり、履歎を確認したり、アクティブ化したり、他の利益を受け取ったりできたす。







-この蚌明曞カヌドは充電可胜ですか







-補品の倉曎の皮類によっお異なりたす。 それらのほずんどは補充されたせん。 獲埗者自身、それを䞎える者は、圌にずっお快適な量、通垞は300ルヌブルから15,000ルヌブルたでカヌドを補充するず、それを䞎えたす。 補充できる個別の倉曎がありたす。 しかし、これは蚌明曞、すなわち支払いカヌドではなく、本栌的な金融商品です。 しかし、それはむしろ担保であり、私たちにずっおの䞻なものは正確にプリペむドカヌドです。぀たり、人々にずっおは、電子的たたは本物のりォレットぞの䞀皮のカヌドです。 そこでは、任意の䟿利な方法でお金を䜿うこずができ、少なくずもむンタヌネット䞊で、少なくずも店舗で、少なくずも支払いアカりント自䜓通垞、「むンタヌネットバンキング」ではなく「支払いアカりント」ず呌びたすを介しお支払いたす。 「幌皚園の支払い」、「公共料金の支払い」などの基本的な支払いサヌビスに至るたでのニヌズ-合蚈5,000を超えるサヌビスがサポヌトされおいたす-AliExpressなどでのあらゆる皮類の支払いで終わりたす。 原則ずしお、あらゆる電子。







このすべおにおける私の圹割は、珟時点では、バック゚ンドに関するアヌキテクチャ䞊の決定が私の䞭を通過するずいう事実にありたす。 マむクロサヌビスに぀いおは以䞊です。 珟圚、モノリスからマむクロサヌビスぞの移行の道を歩んでおり、埐々にモノを切り離し、ルヌルすでに退屈しおいる人に埓うためにモノリスに新しい機胜を远加するこずはもうありたせん。 たた、コヌドレビュヌなど、基本的に新しい機胜に関連するものを含む倚くのビゞネスタスクが通過したす。 たあ、およびパフォヌマンス、アヌキテクチャの改善に関する関連事項...ある意味では、バック゚ンド開発者の兞型的な仕事。







-あなたは盎接建築家建築家ですか、゚ディタヌでキュヌブを描きたすか







-いいえ、私自身はただいく぀かの発明されたブロックのコヌドを盎接曞いおいるアプリケヌション開発者から成長しおいるので、実際的な目暙ず珟実に基づいお構築するこずは私に近いです。 時には抜象化のレベルを䞊げお、いく぀かの立方䜓ず図にそれをレむアりトしようずする必芁がありたすが、私はこれらの雲に浮かぶのではなく、私が働かなければならない珟実に近づけるようにしたす。 これらがマむクロサヌビスである堎合、特定の抂念ずそれに固有のパラダむムによっお瀺されたす。 特に抜象化しないようにしたす。







-しかし、それでも、UMLダむアグラムを描画したすか







-はい、描画したすが、構文、正確さなどをサポヌトするずいう極端なこずは行いたせん。







-぀たり、それらはコヌド生成の゜ヌスではありたせん。







-いいえ、そうではありたせん。







-私もそのような経隓をしただけであり、膚倧な数のマむクロサヌビスがある堎合に問題が発生し、䜕が起こっおいるのかを完党に把握したいず考えおいたす。 この党䜓像を維持する方法、目の前でそれを修正する方法







-珟時点では、反察から進んでいたす。 写真からマむクロサヌビスを生成するのではなく、マむクロサヌビスから写真をサポヌトしたす。 ある意味、ある皮のUMLであるスキヌムがありたす。 しかし、私たちは䞻にその認識、サポヌトの容易さに重点を眮き、構文ずルヌルのサポヌトを無理しないこずを匷調したす。 珟時点では、私たちはこの方向にはあたり向いおいたせん。それは私たちを満足させる以䞊のものです。 私たちのスキヌムにはドキュメントぞのハむパヌリンクも含たれおおり、それ自䜓にはいく぀かの芏則があり、それが䜕を、どこで、どのように瀺されおいるかに぀いおの䌝説があり、これにより私たちは珟圚、通垞の向きになっおいたす。 問題ありたせん。







-゜ヌスから動的に生成されたすか







-いいえ、Confluenceで圌女をサポヌトしおいたす。 Gliffyプラグむンを䜿甚するず、抜象的な図のレベルで画像を簡単に管理できたす。 1぀のブロックをドラッグアンドドロップしおも、リンクを手動で再描画する必芁はありたせん。 文字通り、これらの基本的なこずはこれたでのずころ私たちを満足させおいたす。 セクションを別々の図に分割するずいう事実により、党䜓像をサポヌトする必芁はありたせん。それは、この圢匏の知芚にも適しおいないためです。 あなたが萜ちお別の孀立した゚リアを芋るこずができるブロックがありたす。これは盎接知芚にも適しおいたす。







-システムは非垞に矎しく、有胜で、正確に蚭蚈されおいるため、これらのブロックは健党な構造を提䟛したすか







-珟時点では、はい。 私は特に自慢したせんが、これは有胜なアヌキテクチャよりもシステムの若者によっおより広範囲に説明されるず思いたす:-)もちろん、私たちはそれをサポヌトしようずしたす。 倚くの問題が発生する可胜性がありたす-私たちはそれらを先隓的に提瀺し、準備し、歊装したすが、このグロヌバルな圢では、ただ䜕癟ものマむクロサヌビスに぀いお話しおいないので、タスクはただ発生しおいたせん。







-さお、マむクロサヌビスはいく぀ありたすか







-数十の単䜍。







-もう悪くない。 倚くのものはありたせん:-)







「しかし、私たちはただ旅の始たりにいたす。」







-この最初の課題は䜕ですか







-技術開発、建築の面でのタスク







-あらゆる面でのタスク。 あなたはここの建築家です







-私は建築家ですが、たず第䞀にビゞネスのニヌズから始めたす。 䌁業は今すぐ䟡倀を獲埗したいず考えおいたす。 私たちはアゞャむルになろうずしおいるので、いく぀かのものは圹に立たないかもしれないず仮定したす。 䜕かに投資すれば、土壌を実隓、テスト、調査しおいるこずがわかりたす。 これに基づいお、開発ずアプリケヌションを構築しお、すべおのリビゞョンができるだけ安くなるようにする必芁がありたす。非垞に安䟡なので、捚おるのは残念ですらありたせん。 もちろん、これは絶察的なこずではありたせんが、それでも、珟圚の方向のおかげで、モノリスに散らばるこずなく、䜕らかの圢でいく぀かのピヌスを埐々にカットするこずができたす。その暪にそのような倧皿を䜜りたす。 再生し、それがどのように動䜜するかを確認し、䟡倀の芳点から゚ンドナヌザヌにどのようなものになるかを確認し、必芁に応じお砎棄したす。 これらの3぀の優先順䜍に基づいお速床、安さ、および他のコンポヌネントからの独立性-コンポヌネントをさらに開発しようずしおいたす。







私たちが倧きな蚀葉から行為に移るなら、これが玔粋に技術的に明らかにされるもので。 モノリスを䜜らないようにしなければなりたせん。 それはすでに私たちにずっお非垞に倧きく、私たちはそれを「コア」ず呌びたす-それに関係するすべおは「栞」、「栞」、他の䜕らかの圢で...䞀般的には、もはやそれに入る方法はありたせん 圓然、このコアずそれに付随するサテラむトの参加なしに、倖郚クラむアントこれはWebずさたざたなモバむルプラットフォヌムの䞡方ですずの通信を構築する必芁がありたす。 ぀たり、すべおの接続を゚ントリポむントを介しお盎接行うため、ルヌトレベルで、ロヌドバランサヌレベルで、い぀でも切断し、このトラフィックを切り替えお、単䞀のスレッドでカヌネルに泚ぐずきよりも柔軟に制埡できたす。







さらに、できる限り安䟡になるように、開発自䜓をビルドしようずしたす。 マむクロサヌビス党䜓がありたす-本栌的で動䜜しおいたすが、䜕もしたせん。 そしお、それはその唯䞀の目的を果たしたす-残りを䜜成するためのテンプレヌトになるこず。 私たちはそれを愚かにコピヌし、すでにすべおを知っおおり、その䞭ですべおが発生し、構成されおおり、CIテストに適応し、戊堎での拡匵に適応しおおり、すでに簡単に反発するこずができたす。 これは具䜓的には、開発者が新しいマむクロサヌビスを開始するための最小限の劎力で、今日プレむした時点たで-ひっくり返しお捚おなければならないようにするために行われたした。







-このテンプレヌトは䜕に基づいおいたすか Spring Cloudのような䞀般的なものか、それずも違うものか







「既補のクラりド゜リュヌションの堎合...おそらく、この方法は採甚したせんが、個別のラむブラリを䜿甚したす。」 これはたず、ナヌレカ、ズヌル-サヌビスのレゞストリ、゚ントリポむントの暙準゜リュヌションです。







-既に䜿甚しおいたすか、それずも開発の方向ですか







-すでに䜿甚しおいたす。 ゚ントリポむントずサヌビスレゞストリはすでに動䜜しおいたす。 この゜リュヌションをテストするために、゚ンドナヌザヌからの戊闘トラフィックではなく、あたりアクティブでロヌドされおいないコヌルセンタヌからの補助トラフィックを誘導したした。 マむクロサヌビス自䜓のベヌスに関しおは、これは原則ずしお他のすべおの人にずっおのSpring Bootです。 「裞」ず芋なせるかどうかわかりたせん。 もちろん、いく぀かの远加フレヌムワヌクでは、ほずんどの堎合、同じSpringのフレヌムワヌクです。 私たちは春の決定に最も焊点を圓おおいたす。







-しかし、あなたは自分でそれをねじ蟌みたしたか、それずも䜕を取りたしたか たずえば、Spring Cloud Netflix。 ぀たり、泚釈、RestTemplateなどです。







-はい。 今、私たちのマむクロサヌビスの経隓は、゚ントリポむント、぀たりサヌビスレゞストリ-アプリケヌションコヌドの芳点から-は非垞に小さいこずです。 ほずんどすべおがアノテヌションを远加したずいう事実に垰着し、残りの魅力はJavaコヌドの倖偎にありたすこれらはビルドスクリプト、開始スクリプト、およびその環境ず珟実、CI / CD、さらに開発者ぞの適応に関するすべおです。 ただし、゚ントリポむントでは、远加のアクセス制埡、セキュリティの問題、およびAPIの䞋䜍互換性を確保するためのフィルタも远加したした。䞀般的に、独自のアドオンがありたす。 しかし、フィルタヌの抂念でさえも、Zuulラむブラリヌ自䜓から取埗した抜象化であり、Spring Cloudに取り蟌たれたす。







-わかった。 サヌキットブレヌカヌなど、あらゆる皮類のものを䜿甚したすか







-はい、行きたす。 しかし、私たちが集たるような状況がありたすが、私たち自身はすでにそれを䜿甚しおいたす。 Spring Cloudの配信でZuulにはすでにHystrixが含たれおおり、既に機胜しおおり、タむムアりトが蚭定されおいるこずを考慮しお、蚭定を凊理するこずを既に䜙儀なくされおいたす。 私たちはそれを䜿甚したすが、可胜な限り意識的にそれを行い、すべおを制埡するずは蚀えたせん。







-䜕かを終えたいずいう欲求はありたしたか たずえば、ナヌレカでは。 たたはズヌルで。







-幞いなこずに、Zuulはそのような欲求が生じないように十分に柔軟であるこずが刀明したした。 いえいえ、嘘を぀いおいたす。 GitHubにリク゚ストプヌルがありたす。 いいえ、申し蚳ありたせんが、珟圚は単なる問題であり、プヌルリク゚ストは開発䞭です。 䞀般に、ZuulはそのたたではカスタムHTTPステヌタスをサポヌトしないこずが刀明したした。 「カスタム」ずは、RFC自䜓によっおHTTPプロトコルに察しお暙準化されおいないものを意味したす。 431-必芁はありたせん。どのようにも蚭定されおいたせん。どこにも茝きたせん。 Zuulでは、゚ントリポむントを介しお倖郚にプロキシされる着信コヌドは、Zuul自䜓の同じ゜ヌスコヌドに瞫い付けられた列挙の芁玠の1぀に必ず察応するずいう事実に基づいお蚭蚈されおいたす。 そしお、マッピングが存圚しないHTTPステヌタスがそこに到着するず、それは萜ちたす。 さらに、それは非垞にひどく萜ち、回避策はありたせん。 私は圌らに手玙を曞いた、圌らは答えた-たあ、はい、おそらくそう、それを修正しおみおください。 私は、これが䞻な故障が発生する堎所であり、玔粋にデバッグの圹割を担っおいるこずに驚きたした。 リク゚ストを適切にデポゞットするためにリク゚ストの䞀郚を噛むこずを意図しおおり、これは「正確に」それがベアHTTPステヌタスではなく、このたさに列挙の芁玠をログに蚘録するこずを意味したす。







-ラッパヌを展開する必芁がありたす。







-そしお、それはオフにするこずができるデバッグのために、しかし、このレベルでそれがただ動䜜するこずが刀明し、アプリケヌション党䜓がクラッシュしたす。 実際、この問題の重倧床は䜎䞋しおいたす。 カスタムHTTPステヌタスをいじるこずに぀いお考えを倉えたした。







「なぜそれらが必芁なのですか」







-1぀のアむデアがありたした。興味深い堎合は、簡単に説明したす。 それらを䜿甚しお、発生する゚ラヌのニュアンス、たたは䞀般に有限のマむクロサヌビスからの応答を䌝えたいず考えたした。 私たちにずっお、すべおのビゞネスシナリオは、結果からのあらゆる皮類のさたざたな逞脱を意味したす。 たた、クラむアントにずっお、ビゞネスシナリオず各ステップがどのように終了したかを知るこずはしばしば重芁です。 再送信はナヌザヌが意識し、クラむアントが自動で再詊行するか、埌で再詊行する必芁がある堎合がありたす。 これは、そこに䜕かを倉曎するための提案を含むダむアログボックスの必芁性を瀺しおいる堎合がありたす。 特定の䟋を挙げるず、プリペむドカヌドに送金するサヌドパヌティの銀行カヌドから远加料金を受け取るこずができたす-このプロセスにはいく぀かのリク゚ストがあり、それらのいく぀かはサブシナリオでさらにアクションを分岐するこずができたす。 このようなこずは、カスタムHTTPステヌタスに課皎したいだけです。 APIレベルで自分自身ず盎接亀枉しAPI党䜓がSwaggerで文曞化されたす、そこに次の圢匏で蚘述されたすステヌタス+クラむアントが行う必芁があるこず。 トピックはいく぀かの理由で入りたせんでした。 さたざたな理由がありたしたが、䞻な理由の1぀です。圓時、既存のモノリスには既存のAPIがあり、゚ラヌの色合いをHTTPステヌタスの圢匏ではなく、応答の本文のフィヌルドの圢匏で䌝えるこずが䞀般的でした。







-たたは、HTTPヘッダヌを配眮する方が良いでしょうか







-ヘッダヌを持぀こずは可胜ですが、いずれにしおも、これにはAPIの倧幅な倉曎が必芁であり、埌方互換性はありたせん。 倒錯しお䞋䜍互換性を持たせるこずもできたしたが、これには十分な数のクラむアントがあるため、無期限に存続する必芁がありたす。 これらすべおを怜蚎した結果、新しいAPIにただクロヌルしおいないクラむアントずの䞋䜍互換性をサポヌトするために、远加のロゞックの巚倧なレむダヌを背埌にドラッグするよりも、叀いAPIをかわしお適応する方が簡単であるこずがわかりたした。 簡単なこずではありたせんでした。クラむアントパヌツの開発者が私たちにもたらした远加の状況がたくさんありたしたが、最終的にこの決定に萜ち着きたした。







「あなたはSwaggerず蚀った。」 それを䜿甚する習慣は䜕ですか どれくらいいいですか 楜しいたたは䞍快な瞬間はありたすか







-十分なそれらおよび他の人。 私たちはすでにそれに取り組んでいるので、もっず楜しいものがいく぀かあるずあえお蚀いたす。 たず、私たちが埗た最も重芁なこずはここではSwaggerのメリットはそれほど倧きくありたせんが、説明の単玔さです。 たたたた、モノリスがPlay Framework䞊に構築されおいたす。 PlayにはSwaggerドキュメントを生成するためのプラグむンがありたすが、い぀ものように、歎史的な理由から、異なる人々が異なる時期にそれらを曞いおおり、これらのプラグむンは䜕にも䞍向きです。 したがっお、ドキュメントは手動で䜜成する必芁がありたした。 たっすぐな仕様で、たっすぐ座っお手で曞きたす。







「䞖界のほずんどが今やっおいるように。」







-しかし、奜むず奜たざるずにかかわらず、あなたは同じコヌドを曞くこずを認めなければなりたせん。







-そしお再びjavadokで。 そしお、4回目のテストです。







-はい なんで 私は本圓にこれでいくらかのお金を節玄したかったので、マむクロサヌビスの道を進んだずき、自転車を発明しなかったので、いく぀かの解決策を分析したした。 珟時点では、SpringFoxは最も䞻流で最も開発された゜リュヌションのようです。 圌に぀いお䜕か知っおいたすか







-いいえ、䜕もありたせん。 今、私は名前を知っおいたす。







-このSwaggerドキュメントゞェネレヌタヌは、Spring自䜓のコントロヌラヌ蚘述に基づいおいたす。 特に、Spring Bootで。 しかし実際には、Bootの䞋ではあたりシャヌプではありたせんが、すべおの泚釈が由来するSpringMVCに焊点を圓おおいたす。 しかし、圌はSpring Bootず友達です。 アむデアは、APIの構造、メ゜ッドのセット、それらのパラメヌタヌが既にメ゜ッドずアノテヌションの圢匏でコントロヌラヌに蚘述されおおり、それらを抜出できるずいうこずです。 これが䜜業の倧郚分であり、ドキュメントの骚組みです。 欠けおいるのは口頭での説明だけです。 しかし、コヌド自䜓に泚釈を远加するのが簡単であるこずは明らかです。 SpringFoxはこのパスに正確に沿っお移動したす-Swaggerアノテヌションより正確には、swagger-annotationサブプロゞェクトから、これはゞェネレヌタヌの䞀郚ですを取埗し、これらのアノテヌションをSpringのコントロヌラヌSpringMVC、この堎合はSpringBootに適甚したす。 その埌、オンザフラむで解釈され、Swagger仕様が生成されたす。 さらにもう1぀の魅力-マむクロサヌビスの䞀郚ずしお、別の゚ンドポむント別のポヌトではなく、別のコンテキストを公開し、Swagger UIこれらの矎しい緑のHTMLフォヌムを開きたす。読むためだけでなく、あなたがそれで遊ぶこずができるように-詊甚ボタンはすぐにボックスから機胜しおマむクロサヌビスにリク゚ストを送信したす。 䞀芋するず、魔法のように芋えたす。仕様を手動で蚘述する必芁はなく、同時に利甚可胜です。 それをリク゚ストしお、SOAP UIたたはPostmanにフィヌドできる別のURLがありたす。 これはすべおすでにありたす。 さらに、各マむクロサヌビスのポヌトにドキュメントが展開されおおり怜玢する必芁はなく、どこかに蚘憶する必芁がありたす、読むのに適しおいたす。 もう1぀の利点は、コヌドの倉曎はドキュメントの倉曎を䌎うこずです。 このような䜕かを曞くこずを詊みるこずは䟝然ずしお必芁であり、同じ堎所であなたがテキストの圢でほが同じこずを曞くこずに気付かない。 もちろん、これはそのような決定の䞍可欠なプラスです。







しかし、正盎に蚀っお、それは䞍完党です。 すべおがスムヌズではありたせん。 SpringFox自䜓は泚釈ずSpringのク゚リ構造に粟通しおいたすが、完党ではありたせん。 特に、コレクションに問題がありたす。 メ゜ッドからコレクションタむプが返されるず、UIに曲がっお衚瀺されたす。 さらに、裞のSwaggerが提䟛するすべおのパラメヌタヌを調敎できるわけではありたせん-考慮すべきりィッシュリストがありたす。 いく぀かの粗さがありたす。 しかし、党䜓ずしおは、非垞に効果的なアプロヌチです。 しかし、真実はあり、このために再線成しなければなりたせんでした。 以前にコントロヌラヌ自䜓にビゞネスロゞックを远加するこずに恥ずかしくない堎合たずえば、アノテヌションレベルで行われなかった堎合の怜蚌、チヌムレベルで考えを倉える必芁がありたした。 私たちにずっおのコントロヌラヌぱントリヌポむントであり、ドキュメントの゜ヌスであるず蚀えたす。 たずえば、適甚された怜蚌のビゞネスロゞックは存圚しないはずです。 そうでなければ、それらは読めなくなり、各メ゜ッドにはたくさんの泚釈がありたす。 単䞀の@RequestMappingメ゜ッド、@ ApiOperation、@ ApiResponseなどではなく、すべおの皮類の異なる泚釈が突然衚瀺されたす。







-コヌドシヌトの半分に泚釈が蚘入されおいたすか







-珟実には、それはさらに起こりたす。 しかし、ビゞネスロゞックを個々のサヌビスに委任するこずに同意したずいう事実により、テスト範囲が改善され、明確な線を匕くこずができたした。 コントロヌラがあり、ドキュメントの゜ヌスず倖郚ずの通信ずいう2぀の問題を解決したす。 そしお、サヌビスのアプリケヌションロゞックで既に残りを実行したす。







-プログラマヌは垞にこのドキュメントを曞いおいたすか、それずもドキュメンタリヌがありたすか







-いいえ、私たちは開発者だけを曞いおいたす。







-そしお、これは通垞、粗さなしで垞に起こりたすか







-ここでは、マむクロサヌビスでは、非垞に簡単です。 すべおの粗さは、開発者が手動でモノリスのドキュメントを保持したずきでした。 圌らは垞に䜕かを忘れ、絶えず分散し、時代遅れになり、モバむル開発者はドキュメンテヌションが叀くなったので呪われたした-それは本圓に錫でした。 そしお今、それが起こったずき、開発者は幞せなだけです。







-どの補品をタヌゲットにしおいたすか







-ロシアぞ。







-そしお、文曞はどの蚀語で曞かれおいたすか







-ロシア語。 私たちには独自のチヌムがあり、リモヌトオフィスを含む倖囜人はいないため、党員ロシア語で行動したす。







-このドキュメントは、瀟内での䜜業甚に生成されたものですか たたは、倖郚の請負業者に枡したすか







-私たちにはそのような経隓がありたしたが、今はそうではなく、ロシア語を話す請負業者がいたす。







-ずおもラッキヌです。







-わかった







-このSpringFoxのコヌドを芋たしたか 本圓にしたい堎合は、パッチを適甚できたすか、それずも地獄のような錫はありたすか







-はい、できたす。 もちろん、重芁な堎所がありたす。 しかし、党䜓的には普通に曞かれおいたす。 すばらしいずは蚀いたせんが、悪くはありたせん。 あらゆる皮類の滑りやすい堎所を修正するために、すでに数回手を挙げおいたしたが、時間が芋぀かりたせんでした。 そしお第二に、かなり掻発な人が圌の埌ろにいお、圌らは圌をかなりよく芋おいたす。 私たちが望むほどアクティブではありたせんが、定期的にいく぀かのアップデヌトを公開しおいたす。 確かに、これたでにりィッシュリストのどれもカバヌされおいたせん。







-HTTPに関しお特定の方法論、たずえばRESTにリク゚ストを課そうずしおいたすか







-はい、私たちは詊みおいたす。 か぀お、マむクロサヌビスぞの移行が始たった圓初、私たちはこれに非垞に頌っおいたした。 議論し、話し合っお、癜熱した議論がありたした。







「しかし、地球䞊でフクロりを匕っ匵るこずは通垞非垞に困難です。」 これはどうですか







-歎史的にこれはい぀も通りです。 芚えおいるなら、以前のAPIずの埌方互換性の匷制サポヌトに぀いおは既に蚀及したしたが、このAPIには膚倧な数の顧客がいたす。 䜕十䞇人もの人々が電話をむンストヌルしおいたす。 そしお、そのAPIずの埌方互換性を維持するこずを䜙儀なくされたずいう事実のために、あらゆる点で安らかであるずいう私たちのすべおの詊みは䞖界䞭からoffいたした。 そしお、APIは、控えめに蚀っおも、完党に安らぐわけではありたせん。 ゚ンティティを削陀するか線集するかに関係なく、POSTずGETのみを䜿甚したす。 REST党䜓が構築される「゚ンティティ」などの抂念-圌らはたた、特にそれを遵守したせんでした。 そこでは、このアプロヌチはJava自䜓に䌌おいたす。䜕らかの方法がありたす。名前をアドレス自䜓に詰め蟌みたしょう。 ここでは、このアドレス自䜓、getBySomethingに存圚したす。 このアプロヌチはひどいものではなく、正垞に機胜しおいたす。 RESTを䜿甚するず、もちろん、より簡朔できれいになりたすが、APIが十分に倧きく、倧人であるにもかかわらず、適甚される倧きな䟡倀は感じたせんでした。 単䞀のパラダむムは存圚しないずいう事実のために、圌はおしゃべりになるリスクを冒したように思えたしたが、原則ずしおそれはひどく刀明したした。 そしお今、私たちは頭の䞭にいく぀かのRESTチップを眮いお䜿甚しようずしおいるずいう事実にもかかわらず、本質が最前線にあるようにメ゜ッドのアドレスを蚭蚈しようずし、次にそれがいく぀かに分割されるスラッシュに続く繊现さは芁求の奥深くにありたすが、䞋䜍互換性のこれらの偎面に限定する必芁がありたす。 ぀たり、このような準RESTがありたす。







-ステヌトレスたたはステヌトフル







-マむクロサヌビスは珟圚すべおステヌトレスです。 1぀には、おそらく疑問がありたす。近い将来の次の段階は、オヌケストレヌションシステムでの展開になるからです。 DockerコンテナでKubernetesにすべお展開する予定です。 運甚に同意した䞻な芁件の1぀は、原則ずしお非垞に自然なもので、ステヌトレスマむクロサヌビスです。 その理由は理解できたす。そのため、い぀でもそれらのいずれかをドロップし、すぐに次のものを䞊げお、リク゚ストを受け取るこずができたす。 そのため、持ち䞊げや損傷ができる限り簡単になりたす。







-たた、重いサヌビスがただある堎合は、どうすればよいですか k8sがヒップで400ギグのサヌビスを萜ずすず......







-このデヌタをどうしたすか







-デヌタをどうするか、サヌビスがそのような移行に耐えられるように適切に蚭蚈する方法は







-いく぀かのアプロヌチがありたす。 私たちが実践しおいるものの1぀はこの堎合圌が良いずは蚀えたせんが分散ストレヌゞを䜿甚するこずです。 ヒップず呌ばれる堎所がヒップだけでなく、マむクロサヌビス間のどこかに保存されるようにしたす。 クラシック゜リュヌション誰にずっおもクラシックなのかわかりたせんが、私たちにずっおは1぀になっおいたすはHazelcastです。 Hazelcastベヌスの分散ストレヌゞ。 これがモノリスの仕組みです。 クラスタヌ化され、共通の分散ストレヌゞがありたす。 デヌタの断片はすべおのノヌドに保存されたす。 1぀のノヌドが萜ちた堎合、誰もこのデヌタを倱うこずはありたせんもちろん、耇補できた堎合。







-耇補の皋床は







「今、私はあなたに確かに䌝えたせん。」







-これがfullsink以䞋であるずだけ蚀っおみたしょう。







-デヌタに䟝存したす。 堎合によっおは、フルを䜿甚したすが、重芁床の䜎い繰り返しやすいデヌタには2/3がありたす。 ぀たり、デヌタは3぀のノヌドのうち2぀に栌玍されたすクラスタヌに3぀のノヌドがある堎合。 しかし、ここで私は䜕かに嘘を぀くこずができたす。 これは1぀のオプションです。







2番目のオプションは、マむクロサヌビスが400GBたで膚れ䞊がった堎合で、これはすべお貎重なデヌタです。マむクロサヌビスですべおが倧䞈倫ですか 圌は本圓にそのように振る舞うべきですか







-圌はもはや「ミクロ」ではなく、「ファットサヌビス」です。







「他のいく぀かのマむクロに倉換する必芁があるようです。」 たたは、その䞋に、そのようなこずから圌を保護する氞続的なパッドが必芁です。 もちろん、アゞャむル性は䜎䞋したすが、デヌタの䟡倀に䟝存したす。 おそらく、それらをどこかに分けおおくのが理にかなっおいたす。 必ずしも本栌的なDBMSであるずは限らず、より軜量な゜リュヌションを䜿甚する䟡倀があるかもしれたせん。 しかし、これたでのずころ、このような問題は発生しおいたせん。十分に小さくしおください。 萜ちお貎重なデヌタの山を䞋に匕っ匵った人はいたせん。







-マむクロサヌビスのチェヌンの途䞭で、近隣でアクティブに䜿甚されおいるものが完党たたは郚分的に萜ちた堎合はどうなりたすか 優雅な劣化や䜕かがありたすか







-ほずんどの堎合、いいえ。ただし、䞀郚の地域ではただ保険をかけおいたす。 しかし、Hystrixでフォヌルバックを䜿甚する堎合、同じSpring Cloud Netflixに組み蟌たれおいるツヌルではありたせん。それらに぀いおは知っおいたすが、詊しおみたしたが、今のずころ必芁はありたせんでした。 代わりに、独自の手段を管理し、そのような状況で䜕ができるかをコヌドで盎接知っおいたす。 別のリク゚ストを満足させるために、リク゚ストが途切れるのを蚱可するどこかで。 たたは、キャッシュからデヌタを取埗し、そこにデヌタがあり、それを行ったデヌタベヌスから最新のデヌタよりも叀いデヌタを取埗しお䞭断するこずもできたす。 それはすべお状況に䟝存したす。 しかし、そのような堎所はあたり倚くありたせん。







-私はさたざたな人々ず話したした。正盎なGD / DRを持っおいない人々のための2぀の䞻な戊略10億人の䞭囜人がいお、マむクロサヌビスグラフの䞀郚が萜ちたら、私たちは嘘を぀いお10億人の䞭囜人を解決しようずさえしないか、「すべおが倱われたした」 「、私たちは恐怖で茪になっお走り始め、管理者を叫んで蹎りたす。 これはどうですか あなたずはどうなりたすか







-最初に近いず思いたす:-)







-回避策がない堎合の2番目のケヌスでは、どうにかしおprodがたったく萜ちないように配眮する必芁がありたす。







「たあ、はい、いいですね。」 しかし実際には、これはどの皋床実珟可胜ですか







「できたすか」 あなたはそれをしたすか







-いいえ、ご芧の通り。 珟時点ではただです。 代わりに、より正確な゜リュヌションで察凊しようずしたす。 たたは、最も重芁な個々のピヌスを保護したす。たずえば、同じモノリスをクラスタヌ化しようずしたした。 圌は10億に耐えるこずはできたせんが、基本的なクラスタリングのために䞉重の負荷を取り陀くこずができたす。 確かに萜ちる可胜性のあるいく぀かの個別のビゞネスケヌスではなく、負荷のためだけでなく、客芳的な理由倖郚システムぞのアクセス䞍胜のために、キャッシュなどの助けを借りおそれらをバむパスしようずしたす。 しかし、私たちはただすべおの堎面で普遍的な解決策を持っおいるわけではありたせん。







「これは、生きおいる人々である搟取によっお察凊されたす。」







-はい。 これがなんらかの盎接的な虐殺、数十億人の䞭囜人である堎合、倚くの監芖システムずあらゆる皮類のカバヌシステムがあるずいう事実にもかかわらず、圌らが同じ䞭囜の州から来た堎合、圌らは䞀床にすべお犁止され、圌らは単にノックするこずができたせん-そのような資金。 しかし、これはすでに人々の参加による半自動モヌドで行われたす。







「悪甚は、私たちにずっお䜕かが悪いこずをどのように理解したすか」 モニタリングをほのめかしたす。







-さたざたなレベルで監芖される監芖。 SQL- Apache . , (, , , ..) — . - . , — . , , , . .







— - - ?







— . , - — , Java — . JAMon, SpringBoot Actuator (, ). , — , , — . , — , , , , . , . - , . , .







— - -, : , ?







— . - , , , . , ( ), , , - . — ( , ), — , , , , 
 . , , , , , . , , .







— , ?







— . , , . , — , , . Machine Learning, .







— , .







— . , , , . , , .







— ?







— , , . Java Melody — , Spring Boot. , - , , . , . , JAMon — , Zabbix. JAMon — - -, , 
 , , .







— , 20 : , , ? , , ?







— 
 , ?







— , . - — . Java - , . , , , , API, , , — .







— , . , . . , . , . . — , . . , — Ops DevOps . , — , , . . , . , Ops' — , , . , - , , , . Ops-, . , , , , , . CI. Jenkins, .







— , API, , — , . , , . . . , , , , - . , . — , , ( , ). , . - , . , , , — , . , . , , .







, . , - -300. -400 «» , -300 , . (102 ), . , , , . , , , , , , . , . , , , — , , , . —— , . , , , . .







— , , ?







— , , — , , . , . . , , , , . , , , , . , , , , , , . , , - : , , API — . .







— , , , , . , , 100 . . ?







— . - - , . . API, , , , -, . . , , , , - ( ). , — — API. , SpringFox Spring Boot . , API . API Swagger UI, : , API, ? , , - . , , . - . , , , Confluence, . , . , , , - , Swagger UI.







— , HTTP, REST .







— , , . , , — , , .







— - , HTTP/REST? , , SOAP.







— , , « ». — , , . , 95% — , . . . SOAP — , , , .







— - ?







— , , , TCP-. , :-) , — - , , .







— , - -. HighLoad, , .







— , , , , HTTP, XML. WSDL, . - , . « req, — ans». . .







— , . ? — , 4 ? どうする







— , - ! , . , . , , , XML. - - — . API, , , , . multipart/form-data, , , — - — , . . — . , CLOB BLOB ( , ) input output-. , . , — . , , , . , — , DOM, .







— , ? , , ? ? ? ?







-最初に頭に浮かぶのは、意芋に基づいたアプロヌチを尊重するこずです。これに基づいお、Spring Bootが構築されたす。 他の人の経隓の集玄ず䞀般化に基づくアプロヌチずツヌルマむクロサヌビスや関連タスクには関係ありたせん。 私たちの経隓が瀺すように、これはサヌドパヌティ補のツヌルからのみ入手できるほずんど最も貎重な远加です。 それらが単に蚭蚈されおいるのではない堎合、「あなたが望むものをカットし、ここでいく぀かの基本的な抜象化を提䟛し、そしお今あなたが望むものをしたす。」 ここに代衚的な䟋がありたす-Antはそのようなものでした。 非垞に匷力で非垞に柔軟なツヌルですが、䜕をするにしおも、すべおをれロから䜜成すれば、垞に自分で蓄積しおいきたす...







-たたはメむクファむル。







-はい、メむクファむル。 私の意芋では、Gradleは非垞に良い解決策です。 圌らはすでにそれ自䜓が蚌明されおいるものをたくさん眮いお、実甚的な解決策ずしお確認したした。 デフォルトず芋なされる基本ディレクトリ構造から始めお、なぜそれを明瀺的に宣蚀し、ホむヌルを再発明するのですか これはたた、人々が十分な経隓を持っおいないずきに動物園に぀ながり、それが䞀般に受け入れられおいるものに察応せず、完党な厩壊が始たるこずがわかりたす。 したがっお、これらのデフォルトの意芋のあるアプロヌチは、初心者のチヌムず継続する人の䞡方にずっお非垞に䟡倀がありたす。すでにこの道を歩き、熊手ず地雷原を集めた他の人々の膚倧な経隓を再利甚するこずができるからです。 したがっお、特定のツヌルやサヌビスに焊点を圓おるこずさえしなくおも、私は意芋のあるアプロヌチの優䜍性をグロヌバルなアむデアず考えおいたす。







「あなたが話しおいるこずを正確に理解できるように、意芋を述べた蚀葉を説明しおください。」







-意芋に基づくアプロヌチ。 たずえば、Spring Bootのメンバヌがどのように曞いたのか、なぜ今のように蚭蚈したのかを思い出しおください。新しいものは発明したせんでしたが、圌らの経隓をたずめたした。 基本的なプロゞェクトである圌らの意芋では、補品はこのように芋えるはずです。 デフォルトで。 これは誰にずっおもこのように芋えるこずを意味するものではなく、同意しない堎合は森に沿っお進みたす。 これは、気にしたくない堎合、このように芋えるこずを意味したす。 これは圌らの意芋です。 そしお、あなたは䜕ずかそれを締め、修正し、修正する機䌚を䞎えられたす-あなたのニヌズに、すでにあなたの意芋に。 豊富な経隓ず柔軟性のこの組み合わせは、このような゜リュヌションの最倧の䟡倀です。







これは垞に良いずは限りたせん。 最初のPlayの䟋2番目のPlayで少し機胜したした-意芋もありたすが、そこでは非垞に具䜓的な意芋がありたした。 どんなヒップスタヌが曞いたのか分かりたせん:-)







-それはただJavaのものですか







-はい。 圌ず仕事をしなかったのですか







-働いたが、それはずっず前、私の人生はすべお過ぎ去った。







-芚えおいるなら、䜕らかの理由でJavaパッケヌゞの暙準構造を受け入れたせん。 圌らは、䜕かを袋に入れたら、それをここ、根元に眮くず信じおいたす。 ここでは、いく぀かのorg.company.app.controllersではなくコントロヌラヌを呌び出したしたが、コントロヌラヌだけです。







-構造がないずきにフラッシュを解決する方法は クラス名で構造を敎理できたす...







-ハ、「玠晎らしい」゜リュヌション そしお、そのようなスズはい぀もそこにありたす。 たたは、䟋えば、圌らはりェブ党䜓が静的であるず考えたす。 したがっお、すべおのコントロヌラヌのすべおのメ゜ッドは静的です。 たあ、圌らの意芋では、これはそうです。 これは単なる䟋です。







「しかし、特定の郚分に集䞭するこずで、開発の耇雑さを軜枛したした。」 そしお、もしあなたがこの幞せな䜜品から出おきたら、あなたはカペトしたす。







-私たちの経隓は、この䜜品を超えるこずは非垞に簡単であるこずを瀺しおいたす。 アプリケヌションがハムスタヌや実隓宀の仕事からもう少し深刻なものに倉わるずすぐに-それだけです。







-そしお、圌らは2番目のPlayを曞き、岩の䞊でそれを曞き盎しさえしたした。 ずころで、私はあなたがモノリスで最初のプレむを䜿甚しおいるこずを正しく理解したしたか それで、あなたはそれを䜿い続けたすか、それずも代わりに䜕かを取りたすか







「代わりに、モノリスの倀がれロになるたで、モノリスからピヌスを埐々に刈り取りたす。」







-ずにかく、顔を芋せるために䜕らかのWebフレヌムワヌクが必芁ですか







-いいえ、必芁ありたせん。 私たちの堎合、モノリスは単なるバック゚ンドカヌネルです。 そしお、前郚は別の衛星アプリケヌションによっお分離されおいたす。 次に、Webパヌツに぀いおは、完党に自分の䞖界に䜏んでいお、React.js䞊の独立したWebアプリケヌションずしおWebパヌツを正確に芋た個々の人に責任がありたす。 私たちは圌らにAPIのみを提䟛したす-テンプレヌトもHTMLもありたせんが、それらはアプリケヌションで䜿甚する裞のAPIです。 もちろん、携垯電話でも同じです。 APIのみが䞀臎する堎合、ここではどのフレヌムワヌクにも瞛られおいたせん。 たた、APIはHTTPです。







-それはおずぎ話のように聞こえたす、倚くはmany望で燃えたす。







-よくわからない...苊しんだ、むンタヌネットバンキングの最初のバヌゞョンは叀いもので、かなり前に曞き盎した、Wicketフレヌムワヌクにあった、これに぀いお聞いた







-はい、これはひどいフレヌムワヌクです。長幎取り組んできたした。心から憎みたす。







-私はあなたを理解するこずができたす、私はほずんど圌を捕たえたした。 コンポヌネントの抂念があり、HTMLに適合し、wicketIdがあり、その堎で生成され、眮き換えられるこずを芚えおいたすか 私たちはそれを持っおいお、そこを去りたした。 どこぞ行くのか、䜕を離れるのか、䜕に疲れおいるのかを理解したした。 原則ずしお、このフレヌムワヌクは絶望的ではありたせん。どこかでもいいのです。すべおがその堎所にありたす。







-私が理解しおいる限り、Wicketの拡匵は非垞に困難です。







-正盎なずころ、䜕もありたせん。







-クラス階局のルヌトにIClusterableむンタヌフェむスがありたす。 理論的には、圌から䜜業しおTerracottaをドラッグできたすが、開発者自身はこれに頌るこずはありたせん。







-私たちはこのポむントに到達するこずさえしたせんでした-私たちはすべおを単に曞き盎しお、普通にクラスタヌ化し始めたした。

䞀郚のアプリケヌションはただWicketで正垞に動䜜したすが。







「私たちは1時間以䞊話しおいたした。」 このすべおからレポヌトを䜜成するアむデアはありたしたか







-ただです。 私にずっお、これはすべお非垞に近いので、これは普通のこずのように思えたす。 みんなが䜕をしおいるのか教えおください。 しかし、䞀方で、他の人が来お、教えおも、䜕もしたせん。







-倧きな違いがありたす他の人にずっおはただうたくいきたせんが、あなたにずっおは刀明したす。







「私がここで話しおいたこずに加えお、他のものが匕き継いでいたす。」 たずえば、JBreakで説明するトピック。 たた、最近のプロゞェクトでは、テスト環境でサヌバヌログを集蚈するツヌルを開発したした。 マむクロサヌビスの開発に関連しお、いく぀かのむンデックス付きのログではなく、ログをすべお1か所で、それらがどのように蚘述されおいるか、今すぐ芋るこずが重芁になりたした。 䞀方では、ELK、Logstash、Kibanaなどの倚くの゜リュヌションがすでに発明されおいたすが、経隓が瀺すように、テストでは倧砲からスズメを撃ちたす。 フォヌマット、むンデクサヌを構成する必芁がありたすが、それらは垞にリアルタむムで機胜するずは限りたせん。 ツリヌ自䜓は3぀のアプリケヌションであり、それぞれを展開する必芁がありたす。 迅速に展開でき、サヌバヌ䞊のログのすべおをすばやく簡単に確認できる、より軜量な゜リュヌションが必芁です。 そしお、明らかに、UIさえも持たないリモヌトサヌバヌ䞊で。 できるこずは、コヌルテヌルだけです。







-それには、SSH経由でアクセスする必芁がありたすか







-SSH経由でのみアクセスできたす。SFTP経由でアクセスできたす。他のオプションはありたせん。 そしお、これはたさに私が長幎盎面しおきたタスクです。その時点でこれらのファむルを単玔に流し蟌み、ブラりザヌで開いおいるWebペヌゞに戻す単玔なナヌティリティを䜜成したした。 そしお圌女はリアルタむムで盎接曞き蟌みたす。 そのような尟、ブラりザのみ。 アプリケヌションをむンストヌルする必芁はありたせん。ただ取埗しお泚ぎたす。 しかし、これはマむクロサヌビスに関しおは十分ではありたせんでした。 それらを集玄するには䜕らかの解決策が必芁でした。 そしお、Spring Bootで、tailを実行し、非同期でリッスンするzapililアプリケヌションです。メッセヌゞが衚瀺されるずすぐにそれらを集玄し、AngularのアプリケヌションをWebペヌゞに送信したす。 私はWeb開発者ではないので、気にしたせんでした。Angularではすべお芋たした。







-ご存知のように、Web開発者は時々Angularで曞くこずもありたす:-)







-はい、Angularが倧䞈倫ではないこずが䞀般的に受け入れられおいるのはごく最近です。もっず新しいものが必芁です。







-2番目たたは1番目







-StackOverflowでは、圌に関するほずんどの質問があったため、最初の質問がありたす。 実際、さたざたな関連タスクがそこで解決されおいたす。 タむムスタンプが䞍均䞀に曞き蟌たれおいるずいう事実にもかかわらず、最終ログのすべおが必然的に順序どおりになるようにタむムスタンプを認識する方法。 亀差しないように、぀たり メッセヌゞにステクトレヌスがある堎合、他のログからの誰かのメッセヌゞが途䞭で忍び寄らないようにしたす。 集蚈、タむムスタンプの認識、およびこれらすべおが順番に配眮されたす。







-さお、すべおが議論されたした。 次のステップは、レポヌトにアクセスするこずです。 答えおくれおありがずう、りラゞミヌル







広告の分。 りラゞミヌルは、 JBreak 2018カンファレンス 今週の 日曜日に開催予定のスピヌカヌです。 圌の講挔「Side Effect Injection、たたはVirtuous Crutches」で、圌はSide Effect Injectionのアプロヌチに぀いお話し、Javaコヌドをコンパむルするためのオプションを賞賛し、JVMでバむトコヌドを倉曎する1぀のケヌスを遞び、正匏なJava文法を分析し、実際の䟋を䜿甚しおこれをすべお確認したすアプリケヌション。 䌚議にはディスカッションゟヌンがありたす。そのため、レポヌトの埌、りラゞミヌルず䌚い、副䜜甚泚入だけでなく、たずえばマむクロサヌビスなど、さたざたな問題に぀いお話し合うこずができたす。 チケットは公匏りェブサむトで賌入できたす 。



All Articles