Microsoftの検索エンジンBingは.NET Core 2.1に移行後、内部サーバのレイテンシが34%低下した。MicrosoftのエンジニアであるMukul Sabharwal氏によれば、そのほとんどは.NETコミュニティによる貢献のおかげだ。
氏によれば、.NET Coreに対する多くの改善が、この高速化に影響を与えた。文字列一致のベクタ化、新しいSpan<T>
型を使ったstring.IndexOf/LastIndexOfによるHTML描画と操作の高速化、EqualityComparerのための脱仮想化EqualityComparer
(画像はMicrosoftブログから)
ほとんどの改善は.NETコミュニティによって行われた。ただし、GitHubのプルリクエストの多くはMicrosoftの社員によって作られている。Bingを.NET Core 2.1に移行できたのには2つの要因があった。ひとつはReadyToRunイメージのサポートだ。これによって、デプロイの前にJITコンパイルができる。これがなければ、それぞれの実行マシン上でJITコンパイルをする必要がある。そうなると、Bingを構成するサーバの台数が多いため、重大なサービスキャパシティの低下が起きてしまう。NET Coreのcrossgenツールを使うことで、プリコンパイルしてイメージをデプロイできるようになった。ふたつめの要因は.NET Standard 2.0だ。これは32000を超えるのAPIのコレクションであり、これを使うことで開発者は複数のプラットフォームで.NET Core 2.1への移行が簡単に実現できる。
そして、最後に氏が強調したのは継続的統合のパイプラインからBingアプリケーションの中の.NET Coreランタイムをxcopyを使ってデプロイすることの重要性だ。これによって.Net Core 2.1が公式にリリースされてからわずか2日後にBingを2.1に移行できた。
InfoQが以前報じた通り、.NET Core 2.1の最大のセールスポイントのひとつは速度改善だ。また、自己内蔵デプロイメントというかたちで新しい配置の選択肢を提供する。パフォーマンス面では、.NET Core 2.1は新しいSystem.Span<T>
型をサポートしている。これは、F# 4.5で追加されたものだ。さらに、JITコンパイラには、多くの最適化が行われている。もし、この速度改善について深く知りたいならMicrosoftのエンジニアのStephen Toub氏の記事を読むといいだろう。
Rate this Article
- Editor Review
- Chief Editor Action