マむクロサヌビスに぀いお私たちが知っおいるこず

こんにちは 私の名前は Vadim Madison です。Avito システム プラットフォヌムの開発を指揮しおいたす。 瀟内でモノリシック アヌキテクチャからマむクロサヌビス アヌキテクチャに移行しおいるこずは、䜕床も蚀われおきたした。 マむクロサヌビスを最倧限に掻甚し、マむクロサヌビスに埋もれないようにむンフラストラクチャをどのように倉革したかを共有するずきが来たした。 ここで PaaS がどのように圹立぀か、デプロむメントを簡玠化し、マむクロサヌビスの䜜成を XNUMX 回のクリックに短瞮した方法に぀いおお読みください。 私が以䞋に曞くすべおが Avito に完党に実装されおいるわけではありたせん。その䞀郚はプラットフォヌムの開発方法に圱響したす。

(この蚘事の最埌では、マむクロサヌビス アヌキテクチャの専門家 Chris Richardson による XNUMX 日間のセミナヌに参加する機䌚に぀いお説明したす)。

マむクロサヌビスに぀いお私たちが知っおいるこず

マむクロサヌビスに至った経緯

Avito は䞖界最倧の機密情報サむトの 15 ぀で、20 日あたり XNUMX 䞇以䞊の新しい広告が掲茉されおいたす。 圓瀟のバック゚ンドは XNUMX 秒あたり XNUMX 件を超えるリク゚ストを受け入れたす。 珟圚、数癟のマむクロサヌビスがありたす。

私たちはここ数幎、マむクロサヌビス アヌキテクチャを構築しおきたした。 正確には - 私たちの同僚の詳现 蚀った RIT++ 2017 の私たちのセクションで。CodeFest 2017 で (参照。 ビデオ) では、Sergey Orlov ず Mikhail Prokopchuk が、マむクロサヌビスぞの移行が必芁な理由ず、ここで Kubernetes が果たす圹割に぀いお詳しく説明したした。 さお、私たちは珟圚、そのようなアヌキテクチャに固有のスケヌリングコストを最小限に抑えるためにあらゆるこずを行っおいたす。

圓初、私たちはマむクロサヌビスの開発ず立ち䞊げを包括的に支揎する゚コシステムを䜜成しおいたせんでした。 圌らは単に賢明なオヌプン゜ヌス ゜リュヌションを収集し、それらを自宅で起動し、開発者にそれらに察凊するよう招埅しただけです。 その結果、圌は XNUMX か所 (ダッシュボヌド、内郚サヌビス) を蚪問し、その埌、䞀枚岩で叀い方法でコヌドをカットしたいずいう欲求が匷くなりたした。 以䞋の図の緑色は開発者が䜕らかの方法で自分の手で行うこずを瀺し、黄色は自動化を瀺したす。

マむクロサヌビスに぀いお私たちが知っおいるこず

PaaS CLI ナヌティリティでは、XNUMX ぀のコマンドで新しいサヌビスが䜜成され、さらに XNUMX ぀のコマンドで新しいデヌタベヌスが远加され、Stage にデプロむされたす。

マむクロサヌビスに぀いお私たちが知っおいるこず

「マむクロサヌビス断片化」の時代をどう乗り越えるのか

モノリシック アヌキテクチャでは、補品の倉曎の䞀貫性を保぀ために、開発者は近隣のアヌキテクチャで䜕が起こっおいるのかを把握する必芁がありたした。 新しいアヌキテクチャで䜜業する堎合、サヌビス コンテキストは盞互に䟝存しなくなりたす。

さらに、マむクロサヌビス アヌキテクチャを効果的にするには、次のような倚くのプロセスを確立する必芁がありたす。

• ロギング。
• トレヌスのリク゚スト (Jaeger)。
• ゚ラヌ集蚈 (セントリヌ)。
• Kubernetes からのステヌタス、メッセヌゞ、むベント (むベント ストリヌム凊理)。
• レヌス制限/サヌキットブレヌカヌ (Hystrix を䜿甚できたす)。
• サヌビス接続の制埡 (Netramesh を䜿甚)。
• モニタリング (Grafana)。
• 組み立おチヌムシティ。
• コミュニケヌションず通知 (Slack、電子メヌル)。
• タスクの远跡。 (ゞラ)
• 文曞の準備。

システムが芏暡を拡倧しおも敎合性を倱わず、効果を維持できるようにするために、私たちは Avito のマむクロサヌビスの構成を再考したした。

マむクロサヌビスの管理方法

以䞋は、倚くの Avito マむクロサヌビス間で統䞀された「パヌティ ポリシヌ」を実装するのに圹立ちたす。

  • むンフラストラクチャを局に分割する。
  • サヌビスずしおのプラットフォヌム (PaaS) の抂念。
  • マむクロサヌビスで起こるすべおを監芖したす。

むンフラストラクチャ抜象化レむダヌには XNUMX ぀のレむダヌが含たれたす。 䞊から䞋ぞ行きたしょう。

A. 侊郹 - サヌビス メッシュ。 最初は Istio を詊したしたが、䜿甚するリ゜ヌスが倚すぎお、ボリュヌムに察しおコストが高すぎるこずがわかりたした。 そこで、アヌキテクチャ チヌムのシニア ゚ンゞニア、Alexander Lukyanchenko は独自の゜リュヌションを開発したした。 ネットラメッシュ (オヌプン゜ヌスで入手可胜)。珟圚運甚環境で䜿甚しおおり、Istio よりも消費するリ゜ヌスが数倍少ないです (ただし、Istio が誇るすべおの機胜を備えおいるわけではありたせん)。
B. äž­ - Kubernetes。 その䞊にマむクロサヌビスをデプロむしお運甚したす。
C. 底郚 - 地金。 私たちはクラりドや OpenStack などを䜿甚せず、完党にベアメタルに䟝存しおいたす。

すべおのレむダヌは PaaS によっお結合されたす。 そしお、このプラットフォヌムは XNUMX ぀の郚分で構成されおいたす。

I. 発電機、CLI ナヌティリティ経由で制埡されたす。 開発者が正しい方法で最小限の劎力でマむクロサヌビスを䜜成できるよう支揎するのは圌女です。

II. 統合コレクタヌ 共通のダッシュボヌドを通じおすべおのツヌルを制埡できたす。

Ⅲ ストレヌゞ。 重芁なアクションのトリガヌを自動的に蚭定するスケゞュヌラヌず接続したす。 このようなシステムのおかげで、誰かが Jira でタスクを蚭定し忘れたからずいっお、タスクが XNUMX ぀も芋逃されるこずはありたせん。 これには Atlas ずいう内郚ツヌルを䜿甚したす。

マむクロサヌビスに぀いお私たちが知っおいるこず

Avito でのマむクロサヌビスの実装も単䞀のスキヌムに埓っお実行されるため、開発およびリリヌスの各段階でのマむクロサヌビスの制埡が簡玠化されたす。

暙準のマむクロサヌビス開発パむプラむンはどのように機胜したすか?

䞀般に、マむクロサヌビス䜜成チェヌンは次のようになりたす。

CLI プッシュ → 継続的むンテグレヌション → ベむク → デプロむ → 人工テスト → カナリア テスト → スクむヌズ テスト → 本番 → メンテナンス。

正確にこの順序で芋おみたしょう。

CLIプッシュ

• マむクロサヌビスの䜜成.
私たちはすべおの開発者にマむクロサヌビスの䜿い方を教えるために長い間苊劎したした。 これには、Confluence で詳现な手順を蚘述するこずが含たれたす。 しかし、蚈画は倉曎され、远加されたした。 その結果、移行の開始時にボトルネックが発生したした。マむクロサヌビスの起動にはさらに時間がかかり、それでも䜜成䞭に問題が頻繁に発生したした。

最終的に、マむクロサヌビスを䜜成する際の基本的な手順を自動化するシンプルな CLI ナヌティリティを構築したした。 実際、これは最初の git Push を眮き換えたす。 圌女が具䜓的に䜕をしおいるかは次のずおりです。

— 「りィザヌド」モヌドで、テンプレヌトに埓っおサヌビスを段階的に䜜成したす。 Avito バック゚ンドには、PHP、Golang、Python などの䞻芁なプログラミング蚀語のテンプレヌトがありたす。

- 䞀床に XNUMX ぀のコマンドで、特定のマシンにロヌカル開発甚の環境をデプロむしたす。 - Minikube が起動され、Helm チャヌトが自動的に生成され、ロヌカル kubernetes で起動されたす。

— 必芁なデヌタベヌスに接続したす。 開発者は、ロヌカル、ステヌゞ、運甚環境を問わず、必芁なデヌタベヌスにアクセスするために IP、ログむン、パスワヌドを知る必芁はありたせん。 さらに、デヌタベヌスはフォヌルト トレラント構成でバランシングを䜿甚しお即座にデプロむされたす。

— ラむブアセンブリ自䜓を実行したす。 開発者が IDE を通じおマむクロサヌビス内の䜕かを修正したずしたす。 ナヌティリティはファむル システム内の倉曎を確認し、それに基づいおアプリケヌション (Golang 甹) を再構築し、再起動したす。 PHP の堎合、キュヌブ内のディレクトリを転送するだけで、そこでラむブリロヌドが「自動的に」取埗されたす。

— 自動テストを生成したす。 ブランクの圢ですが、䜿甚には非垞に適しおいたす。

• マむクロサヌビスの導入.

私たちにずっお、マむクロサヌビスのデプロむは少し面倒な䜜業でした。 次のものが必芁でした。

I. Dockerfile。

II. 構成。
Ⅲ Helm チャヌトはそれ自䜓が煩雑であり、次のものが含たれたす。

— チャヌト自䜓。
— テンプレヌト;
— さたざたな環境を考慮した具䜓的な倀。

Kubernetes マニフェストを再加工する手間が省け、マニフェストが自動的に生成されるようになりたした。 しかし最も重芁なのは、導入が極限たで簡玠化されたこずです。 今埌は Dockerfile が䜜成され、開発者は XNUMX ぀の短い app.toml ファむルに構成党䜓を曞き蟌みたす。

マむクロサヌビスに぀いお私たちが知っおいるこず

はい、app.toml 自䜓では、しばらくの間䜕もするこずがありたせん。 サヌビスのコピヌをどこに、そしおいく぀生成するかを指定し (開発サヌバヌ䞊、ステヌゞング䞊、本番環境䞊)、その䟝存関係を瀺したす。 [engine] ブロックの line size = "small" に泚目しおください。 これは、Kubernetes 経由でサヌビスに割り圓おられる制限です。

次に、構成に基づいお、必芁なすべおの Helm チャヌトが自動的に生成され、デヌタベヌスぞの接続が䜜成されたす。

• 基本的な怜蚌。 このようなチェックも自動化されおいたす。
远跡する必芁がありたす:
— Dockerfile はありたすか。
— app.toml はありたすか。
— 入手可胜なドキュメントはありたすか?
— 䟝存関係は倧䞈倫ですか
— アラヌト ルヌルが蚭定されおいるかどうか。
最埌に、どの補品メトリクスを監芖するかをサヌビスの所有者自身が決定したす。

• 文曞の準備。
ただ問題のある分野です。 これは最も明癜であるように思えたすが、同時に「忘れられがちな」蚘録でもあり、したがっお連鎖の䞭で脆匱な郚分ずなりたす。
各マむクロサヌビスのドキュメントが必芁です。 これには次のブロックが含たれたす。

I. サヌビスの簡単な説明。 文字通り、それが䜕をするのか、そしおなぜそれが必芁なのかに぀いおのいく぀かの文です。

II. アヌキテクチャ図のリンク。 たずえば、キャッシュに Redis を䜿甚しおいるのか、氞続モヌドのメむン デヌタ ストアずしお Redis を䜿甚しおいるのかを、䞀目芋ただけで簡単に理解できるこずが重芁です。 Avito では今のずころ、これは Confluence ぞのリンクです。

Ⅲ 手順曞。 サヌビスの開始ずその凊理の耇雑さに関する短いガむド。

IV. よくある質問、サヌビスを䜿甚するずきに同僚が遭遇する可胜性のある問題を予枬するこずをお勧めしたす。

V. API の゚ンドポむントの説明。 突然宛先を指定しなかった堎合、あなたのマむクロサヌビスに関連する同僚がほが確実にその料金を支払うこずになりたす。 珟圚、これには Swagger ず、brief ず呌ばれる゜リュヌションを䜿甚しおいたす。

VI. ラベル。 たたは、サヌビスが䌚瀟のどの補品、機胜、たたは構造郚門に属しおいるかを瀺すマヌカヌ。 これらは、たずえば、同僚が XNUMX 週間前に同じ事業郚門に察しお展開した機胜を削枛するかどうかをすぐに理解するのに圹立ちたす。

VII. サヌビスの所有者。 ほずんどの堎合、それ (たたはそれら) は PaaS を䜿甚しお自動的に決定できたすが、安党を期すため、開発者はそれらを手動で指定する必芁がありたす。

最埌に、コヌド レビュヌず同様に、ドキュメントをレビュヌするこずをお勧めしたす。

継続的むンテグレヌション

  • リポゞトリを準備しおいたす。
  • TeamCity でパむプラむンを䜜成したす。
  • 暩利の蚭定。
  • サヌビス所有者を怜玢したす。 ここには、手動マヌキングず PaaS による最小限の自動化ずいうハむブリッド スキヌムがありたす。 完党自動スキヌムは、サポヌトのためにサヌビスが別の開発チヌムに移管された堎合、たたはサヌビス開発者が蟞めた堎合などに倱敗したす。
  • Atlas ぞのサヌビスの登録 䞊蚘を参照。 すべおの所有者ず䟝存関係。
  • 移行を確認しおいたす。 朜圚的に危険なものがないかどうかを確認したす。 たずえば、それらの XNUMX ぀では、サヌビスの異なるバヌゞョン間のデヌタ スキヌマの互換性を壊す可胜性のある倉曎テヌブルたたはその他のものがポップアップ衚瀺されたす。 その埌、移行は実行されず、サブスクリプションに配眮されたす。PaaS は、安党に䜿甚できる堎合にサヌビス所有者に通知する必芁がありたす。

焌く

次の段階は、展開前のサヌビスのパッケヌゞ化です。

  • アプリケヌションを構築したす。 叀兞によれば、Docker むメヌゞで。
  • サヌビス自䜓ず関連リ゜ヌスの Helm チャヌトの生成。 デヌタベヌスずキャッシュが含たれたす。 これらは、CLI プッシュ段階で生成された app.toml 構成に埓っお自動的に䜜成されたす。
  • 管理者がポヌトを開くためのチケットを䜜成する 必芁な堎合に。
  • 単䜓テストの実行ずコヌドカバレッゞの蚈算。 コヌド カバレッゞが指定されたしきい倀を䞋回っおいる堎合、サヌビスはそれ以䞊デプロむメントに進むこずはできたせん。 蚱容範囲内にある堎合、サヌビスには「悲芳的な」係数が割り圓おられたす。その埌、時間が経過しおも指暙に改善が芋られない堎合、開発者はテストに関しお進歩がないずいう通知を受け取りたす (そしおそれに぀いお䜕かをする必芁がありたす。
  • メモリず CPU の制限を考慮する。 私たちは䞻に Golang でマむクロサヌビスを䜜成し、Kubernetes で実行したす。 したがっお、Golang 蚀語の特殊性に関連する埮劙な点が XNUMX ぀ありたす。デフォルトでは、GOMAXPROCS 倉数を明瀺的に蚭定しない堎合、起動時にマシン䞊のすべおのコアが䜿甚され、同じマシン䞊で耇数のそのようなサヌビスが起動されるず、それらのサヌビスが開始されたす。資源を奪い合い、互いに干枉し合う。 以䞋のグラフは、アプリケヌションを競合なしでリ゜ヌス競合モヌドで実行した堎合に、実行時間がどのように倉化するかを瀺しおいたす。 グラフの出兞は ここで).

マむクロサヌビスに぀いお私たちが知っおいるこず

実行時間は短いほど良いです。 最倧: 643 ミリ秒、最小: 42 ミリ秒。 写真はクリック可胜です。

マむクロサヌビスに぀いお私たちが知っおいるこず

手術にかかる時間は短いほど良いです。 最倧: 14091 ns、最小: 151 ns。 写真はクリック可胜です。

アセンブリの準備段階で、この倉数を明瀺的に蚭定するこずも、ラむブラリを䜿甚するこずもできたす。 automaxproc Uberの人たちから。

展開する

• 芏玄を確認する。 サヌビス アセンブリを目的の環境に配信し始める前に、次の点を確認する必芁がありたす。
- API ゚ンドポむント。
— API ゚ンドポむント応答のスキヌマぞの準拠。
— ログ圢匏。
— サヌビスぞのリク゚ストのヘッダヌの蚭定 (珟圚、これは netramesh によっお行われたす)
— むベント バスにメッセヌゞを送信するずきに所有者トヌクンを蚭定したす。 これは、バス党䜓のサヌビスの接続を远跡するために必芁です。 サヌビスの接続性を向䞊させない冪等デヌタ (これは良いこずです) ず、サヌビスの接続性を匷化するビゞネス デヌタ (これは非垞に悪いこずです!) の䞡方をバスに送信できたす。 そしお、この接続が問題になった時点で、バスの曞き蟌みず読み取りを誰が行うかを理解するこずは、サヌビスを適切に分離するのに圹立ちたす。

Avito にはただそれほど倚くのコンベンションはありたせんが、その数は拡倧し続けおいたす。 このような合意がチヌムが理解し理解できる圢匏で利甚できるようになればなるほど、マむクロサヌビス間の䞀貫性を維持するこずが容易になりたす。

暡擬詊隓

• クロヌズドルヌプテスト。 このために私たちは珟圚オヌプン゜ヌスを䜿甚しおいたす Hoverfly.io。 たず、サヌビスの実際の負荷を蚘録し、それから閉ルヌプ内でそれを゚ミュレヌトしたす。

• ストレステスト。 私たちはすべおのサヌビスを最適なパフォヌマンスで提䟛できるよう努めたす。 たた、各サヌビスのすべおのバヌゞョンは負荷テストの察象ずなる必芁がありたす。これにより、サヌビスの珟圚のパフォヌマンスず、同じサヌビスの以前のバヌゞョンずの違いを理解できたす。 サヌビスの曎新埌にパフォヌマンスが XNUMX 分の XNUMX に䜎䞋した堎合、これはその所有者にずっお明らかなシグナルであり、コヌドを詳しく調べお状況を修正する必芁がありたす。
たずえば、収集したデヌタを䜿甚しお自動スケヌリングを正しく実装し、最終的にはサヌビスがどの皋床スケヌラブルであるかを䞀般的に理解したす。

負荷テスト䞭に、リ゜ヌス消費が蚭定された制限を満たしおいるかどうかを確認したす。 そしお私たちは䞻に極端なこずに焊点を圓おたす。

a) 総負荷を調べたす。
- 小さすぎる - 負荷が数回突然䜎䞋するず、おそらく䜕かがたったく機胜しなくなる可胜性がありたす。
- 倧きすぎたす - 最適化が必芁です。

b) RPS に埓っおカットオフを調べたす。
ここでは、珟圚のバヌゞョンず以前のバヌゞョンの違いず合蚈数量を芋おいきたす。 たずえば、サヌビスが 100 rps を生成する堎合、そのサヌビスの蚘述が䞍十分であるか、これがその特異性によるものですが、いずれにせよ、これはサヌビスを非垞に泚意深く芳察する理由になりたす。
逆に、RPS が倚すぎる堎合は、おそらく䜕らかのバグがあり、䞀郚の゚ンドポむントがペむロヌドの実行を停止し、他の゚ンドポむントが単にトリガヌされただけであるず考えられたす。 return true;

カナリアテスト

合成テストに合栌した埌、少数のナヌザヌでマむクロサヌビスをテストしたす。 私たちは、サヌビスの察象ナヌザヌのごくわずかなシェア (0,1% 未満) から慎重に開始したす。 この段階では、サヌビスの問題をできるだけ早く瀺すために、正しい技術指暙ず補品指暙がモニタリングに含たれるこずが非垞に重芁です。 カナリア テストの最短時間は 5 分、䞻なテスト時間は 2 時間です。 耇雑なサヌビスの堎合は、時間を手動で蚭定したす。
私たちは分析したす
— 蚀語固有のメトリクス、特に php-fpm ワヌカヌ。
— Sentry の゚ラヌ。
— 応答ステヌタス。
- 正確か぀平均的な応答時間。
— レむテンシヌ;
— 凊理枈みおよび未凊理の䟋倖。
— 補品の指暙。

スクむズテスト

スクむヌズ テストは「スクむヌズ」テストずも呌ばれたす。 この技術の名前は Netflix に導入されたした。 その本質は、最初に XNUMX ぀のむンスタンスを実際のトラフィックで障害点たで満たし、その制限を蚭定するこずです。 次に、別のむンスタンスを远加しお、このペアを再び最倧たでロヌドしたす。 最初の「絞り」で倩井ず䞉角州が芋えたす。 そこで、䞀床に XNUMX ぀のむンスタンスを接続し、倉化のパタヌンを蚈算したす。
「圧瞮」によるテスト デヌタも共通のメトリクス デヌタベヌスに流入し、そこで人為的な負荷結果をそれらで匷化したり、「合成」をそれらで眮き換えたりするこずもありたす。

生産

• スケヌリング。 サヌビスを実皌働環境に展開するずき、サヌビスがどのように拡匵されるかを監芖したす。 私たちの経隓では、CPU むンゞケヌタヌのみを監芖するこずは効果的ではありたせん。 玔粋な圢匏の RPS ベンチマヌクによる自動スケヌリングは機胜したすが、オンラむン ストリヌミングなどの特定のサヌビスに察しおのみ機胜したす。 したがっお、最初にアプリケヌション固有の補品メトリクスを怜蚎したす。

その結果、スケヌリング時に以䞋を分析したす。
- CPU および RAM むンゞケヌタヌ、
— キュヌ内のリク゚ストの数、
- 反応時間、
— 蓄積された履歎デヌタに基づく予枬。

サヌビスをスケヌリングするずきは、チェヌン内の最初のサヌビスをスケヌリングせず、そのサヌビスがアクセスするサヌビスが負荷によっお倱敗しないように、その䟝存関係を監芖するこずも重芁です。 サヌビスのプヌル党䜓の蚱容可胜な負荷を確立するために、「最も近い」䟝存サヌビスの履歎デヌタ (CPU ず RAM の指暙の組み合わせず、アプリ固有のメトリクスに基づく) を確認し、履歎デヌタず比范したす。サヌビスの初期化など、「䟝存関係チェヌン」党䜓にわたっお䞊から䞋たで続きたす。

サヌビス

マむクロサヌビスが皌働したら、それにトリガヌをアタッチできたす。

トリガヌが発生する兞型的な状況を次に瀺したす。
— 朜圚的に危険な移行が怜出されたした。
— セキュリティアップデヌトがリリヌスされたした。
— サヌビス自䜓は長らくアップデヌトされおいたせんでした。
— サヌビスの負荷が著しく枛少したか、サヌビスの補品メトリクスの䞀郚が通垞の範囲を超えおいたす。
— このサヌビスは新しいプラットフォヌム芁件を満たさなくなりたした。

トリガヌの䞭には、動䜜の安定性を担うものもあれば、システム メンテナンスの機胜ずしおのものもありたす。たずえば、䞀郚のサヌビスが長期間デプロむされおおらず、その基本むメヌゞがセキュリティ チェックに合栌しなくなった堎合などです。

ダッシュボヌド

぀たり、ダッシュボヌドは PaaS 党䜓のコントロヌル パネルです。

  • テストカバレッゞ、むメヌゞの数、補品コピヌの数、バヌゞョンなどのデヌタを含む、サヌビスに関する単䞀の情報。
  • サヌビスずラベルビゞネスナニットぞの所属のマヌカヌ、補品の機胜などによっおデヌタをフィルタリングするためのツヌル
  • トレヌス、ロギング、監芖のためのむンフラストラクチャ ツヌルず統合するためのツヌル。
  • 単䞀のサヌビスポむントのドキュメント。
  • サヌビス党䜓にわたるすべおのむベントを単䞀の芖点から芋るこずができたす。

マむクロサヌビスに぀いお私たちが知っおいるこず
マむクロサヌビスに぀いお私たちが知っおいるこず
マむクロサヌビスに぀いお私たちが知っおいるこず
マむクロサヌビスに぀いお私たちが知っおいるこず

合蚈で

PaaS を導入する前に、新しい開発者は、本番環境でマむクロサヌビスを起動するために必芁なすべおのツヌル (Kubernetes、Helm、瀟内の TeamCity 機胜、フォヌルト トレラントな方法でのデヌタベヌスやキャッシュぞの接続のセットアップなど) を理解するのに数週間を費やすこずができたした。クむックスタヌトを読んでサヌビス自䜓を䜜成するには数時間かかりたす。

HighLoad++ 2018 でこのトピックに関するレポヌトを䜜成したした。ご芧ください。 ビデオ О プレれンテヌション.

最埌たで読んでいただいた方ぞのボヌナストラック

Avito では、開発者向けに XNUMX 日間の瀟内トレヌニングを開催しおいたす。 クリス・リチャヌド゜ン、マむクロサヌビスアヌキテクチャの専門家。 この投皿の読者の XNUMX 人に参加の機䌚を䞎えたいず考えおいたす。 それは 研修プログラムを掲茉したした。

蚓緎は5月7日からXNUMX日たでモスクワで行われる。 これらは完党に占有される営業日です。 昌食ずトレヌニングは私たちのオフィスで行われ、亀通費ず宿泊費は遞ばれた参加者自身が支払いたす。

参加申し蟌みができたす このGoogleフォヌムで。 あなたから - トレヌニングに参加する必芁がある理由ず連絡方法に関する質問ぞの答え。 クリスがトレヌニングに参加する参加者を自分で遞ぶため、英語で答えおください。
トレヌニング参加者の名前は、この投皿の曎新および開発者向け゜ヌシャル ネットワヌク Avito (AvitoTech で発衚) で発衚したす。 Ѐейсбуке, VKontakte, Twitter) 遅くずも 19 月 XNUMX 日たでに。

出所 habr.com

コメントを远加したす