こんにちは
私たちは、プロジェクトでMicrosoftテクノロジーを使用する開発会社について引き続き話します。 今日の問題では
-2GISの会社。メインオフィスは寒いノボシビルスクにあり、この記事の著者は最も暖かい気持ちを持っています。
2GISは最近、
.NET Core、Kubernetes、および多くのLinuxのコア機能を使用した大規模プロジェクトを完了しました。 実稼働環境で.NET Coreを使用できるかどうか、また、完全にオープンソースの環境で.NET Coreを使用した経験について、よく質問されます。 私は何とどのようにあなたに言うように連中に頼みました。 猫の下でもっと読んで、それは価値があります-これは.NET Coreで構築された最初の公開および大規模プロジェクトの1つであり、周りの完全なオープンソースでさえです。
これは、プロジェクトアーキテクトであるDenis Ivanov(
DenisIvanovハブ上 )、Microsoft MVP for .NET、有名な
CodeFest会議の人間のバックエンドを代表しています。 Inna Savchkova(
InnaSavchkovaハブ )のTech PR Manager 2GISは、会話を美しく理解しやすい言語で、もちろんハイフンではなくダッシュで提供しました。
ahrimanからの質問。
こんにちは 2GISとは何ですか?2GISは、9か国の330以上の都市に関する完全かつ正確な情報を提供する会社です。 街に必要なのはこれだけです:通り、家、さまざまな分野で働く会社、彼らの連絡先とそれらに関する有用な情報(レストランの営業時間や平均請求書、旅行代理店の仕事に関するユーザーレビューなど)、建物の入り口、道順など。 2GISは、ロシアの230万社すべてについて95%の精度ですべてを認識しています。
同社には個別の製品チームがあり、ユーザーが私たちに語ったことを継続的に分析し、新しいアイデアの適用可能性をチェックしています。そのうちのいくつかは後に2GIS製品の新機能の基礎になります。
2GISは、幅広い技術を使用してシステムと製品を構築しています。 ただし、これは主にオープンソースです。 それは簡単です-それはすべてのプラットフォームで動作します
(そして2GISはGithub- https: //github.com/2gisにもたくさんのプロジェクトを持っています 。著者のメモ)同社のRnD部門では、20を超えるチームを雇用して、情報の収集と整理のためのツール、地図作成システムとサービス、販売と広告のためのツール、オンライン、オフライン、モバイルアプリケーションを作成しています。
マイクロソフトは最近、プロジェクトに関する公式のプレスリリースをリリースしました 。 そこで、新しいプロジェクトを.NET Core、Kubernetes&Linuxの小さなチームにすることにしました。 誰がそのような束を使うことに決めましたか? なんで? なんで? どのようなメリットを見ましたか? 潜在的な問題は何ですか?2GISは、2GIS製品のユーザーにより見やすくしたい企業に広告機会を販売することで利益を得ます。
テストする必要があるアイデアの1つは、広告主が動画の投稿に興味を持っているという仮説でした。 それ以前は、テキストまたはイメージ広告のみを2GISに配置できました。
主な目標は、ビデオ広告の販売と配置のためのツールをできるだけ早く市場に投入することでした。 このタスクを、対象分野を熟知しており、社内広告販売ツールの開発で豊富な経験を持つチームの開発者に任せることが決定されました。 内部システムは.NET Frameworkに実装され、Windowsプラットフォームを使用して展開されます。 ただし、ビデオ広告サービスの高可用性、フォールトトレランス、パフォーマンスの要件により、2GISオンライン製品と同じインフラストラクチャとオペレーティングシステムの使用が推奨されました。 幸いなことに、開発の開始時に、クロスプラットフォームの.NET Coreは6か月前にすでに広く使用されており、テストとプロトタイピングの後、.NET Core、Kubernetes&Linuxバンドルを使用してビデオ広告サービスを実装することが決定されました。
これにより、2人のプログラマと1人のアナリストがわずか2か月でタスクを完了することができました。 今回は、要件の詳細な調査から戦闘インフラストラクチャのリリースまで、すべての作業が含まれます。 さらに、WindowsやmacOSなど、便利な開発ツールとオペレーティングシステムを使用できるようになりました。

プロジェクトチーム-左から右のエンジニアとプロジェクトマネージャー
プロジェクトの「中心」はどこですか? このような構造で、グローバルな顧客が同じレベルのサービスを受けるにはどうすればよいですか?Kubernetesクラスターは、2GISで会社のサービスの多くが実行されているプラットフォームとして使用されています。 実際、このようなクラスターは3つあります。2つはロシアに、1つはヨーロッパにあります。 これは、バランス、マルチレベルフォールトトレランス、詳細な監視、アプリケーションからのログとカスタムテレメトリの受信と分析機能など、必要なすべてのプロパティを備えた適切に管理されたインフラストラクチャです。 したがって、バックエンドの動画広告サービスを展開する場所の選択は、実際にはそうではありませんでした。
プロジェクトのアーキテクチャ
ビデオファイルの保存、トランスコーディング、アップロードに関しては、すべてが少し異なります。 これらの問題を解決するために、ビデオコンテンツのみに特化したクラウドパートナーが提供するサービスを使用します。 従来の3層アーキテクチャの観点では、2GISで作成したビデオ広告サービス(ビジネスロジック、ビデオファイル(CDN)の保存、トランスコード、アップロード用のAPI)はデータウェアハウスであり、すべての2GIS製品はフロントエンドです。
このスキームでは、すべてのバックエンドが地理的に分散されているため、すべての顧客がほぼ同じレベルのサービスを利用できます。
プロジェクトの一般的な詳細に戻り、現在のインジケーター(ユーザー、負荷)について教えてください。 プロジェクトはすでに運用されていますか、それともまだテスト中ですか?このサービスは2017年4月から運用されており、現在1日あたり約20,000件のビデオ広告リクエストがあります。 それらの80%以上がキャッシュから応答します。 これにより、かなり高い負荷を維持する機会が与えられますが、ピークの現在の段階では100 RPSしかありません。
プロジェクトで使用されたアーキテクチャソリューションは何ですか?これがグローバルプロジェクトである場合、アーキテクチャはさまざまな場所からの高負荷に適している必要があります。 このようなプロジェクトのマストヘッドのアーキテクチャパターン/アプローチはどのようなものだと思いますか? 何が起こっているかを監視するためにどのツールを使用していますか、あなたは困難を経験しましたか? DDOS?
使用されているアーキテクチャソリューションとアプローチに関しては、ビデオ広告サービスは、多くのユーザーを対象とした中断のない運用を目的に設計された他の分散アプリケーションと大差ありません。 分散アプリケーションを構築するためのベストプラクティスはすべて
揃っています。たとえば、
Jeffrey Richterのコースに注意を払う必要があります。
考慮すべき最初のことは、
サーバーリソースの適切な使用です 。 使用済みのスレッドを長時間ブロックしないでください。これは、非同期コードを記述することで実現できます。 同じデータが頻繁に要求される場合は、キャッシュを使用する必要があります。 そのようなデータがあまりない場合は、メモリ内のキャッシュで十分です。 分散システムでは、短期的な障害(ネットワークの「点滅」、インフラストラクチャサービスの再起動など)が発生する可能性があることに注意する必要があります。 ここでは、タイムアウト、再試行、フォールバック、およびそれらの組み合わせなどの非常に使いやすいパターンが役立ちます。 同様の市販ツールのセットを提供する優れた
Pollyライブラリがあります。
もちろん、困難があります。 インフラストラクチャまたはパートナーサービスのいずれかが予防保守に行くとき、またはプロバイダーのネットワークで中断が発生するときに発生します。 .NET Coreの「若さ」と、このようなソリューションを構築するためにこのプラットフォームを使用する数は比較的少ないにもかかわらず、純粋に前向きな経験があります。 CLRコンポーネント。 この傾向が続くことを本当に願っています。
DDoSまたは同様の攻撃に関するいくつかの言葉。 なぜなら 会社の一般的なインフラストラクチャを使用しているため、これらの問題をすべて解決する必要はありませんでした。 ここでは、インフラエンジニアとその追跡およびセキュリティソリューションの高い資格に完全に依存しています。
あなたの成長計画は?ビデオ広告は、テキスト広告や画像広告とともに、ユーザーの注意を広告主に引き付けるための基本的なツールの1つになりつつあります。 ビデオ広告が使用される広告の位置はすでにいくつかあります。
主に法的リスクを軽減するために、ソースビデオの保存に独自のインフラストラクチャを使用することを検討しています。 また、広告全般、特に動画広告を管理および販売するための内部プロセスとシステムを引き続き改善しています。 これにより、2GIS内で効率が向上します。
成長には、高負荷下でサービスが押収される危険性が伴います。 何がありますか?2GISでは、ガトリングに基づく負荷テストサービスに必要なすべてのインフラストラクチャが構築されます。 これを使用するために必要なのは、Kubernetesを実行する特別な「鉄」サーバーにアプリケーションをデプロイし、Scalaで負荷テストのスクリプトを作成することだけです。 必要なすべてのメトリック、起動間の結果の比較、レポート、グラフは、負荷テスト用のプラットフォームによって提供されます。
よろしくお願いします!
2GISで使用されている技術の詳細については、同社の企業ブログをご覧ください。 上記に列挙されたすべての多くの実際の経験がある技術レポートが
ここにあり
ます 。