Bing.com jest usługą w chmurze, działającą na tysiącach serwerów w wielu centrach danych na całym świecie. Każdej sekundy Bing przetwarza tysiące zapytań od użytkowników, wyszukując w przeglądarkach, usługach partnerów z API Microsoft Cognitive Services i poprzez cyfrową asystentkę Cortanę. Bing zawsze działał w .NET Framework, a teraz, po dodaniu pewnych API, został przeniesiony do .NET Core 2.1. Ruch ten okazał się strzałem w dziesiątkę, bowiem wyszukiwarka działa teraz szybciej! Wyniki można prześledzić na wykresie poniżej.
Stos front-endowy Bing jest napisany przeważnie według wzorca MVC. Większość logiki biznesowej została napisana jako modele danych w C#, a logika widoku jest napisana w Razorze. Warstwa ta jest odpowiedzialna za przekształcanie danych z wyników wyszukiwania (kodowanych jako Microsoft Bond) do HTML, który jest następnie kompresowany i przesyłany do przeglądarki. Od samego początku Bing działał w .NET Framework, ale od pewnego czasu Microsoft pracował nad przeniesieniem go do .NET Core. Zmiana dyktowana była przede wszystkim wydajnością. Po przesiadce okazało się, że .NET Core 2.1 rzeczywiście zadziałał na jej korzyść. .NET Core 2.1 poczynił duże usprawnienia wydajności w praktycznie wszystkich obszarach runtime'u i bibliotek - chwali się Microsoft.
Nasze dane produkcyjne rezonują ze znaczącymi usprawnieniami wydajności w .NET Core 2.1 (w porównaniu do zarówno .NET Core 2.0, jak i .NET Framework 4.7.2) - pisze dalej Microsoft. Wykres, który widzicie powyżej, ilustruje wewnętrzną latencję serwera na przestrzeni ostatnich kilku miesięcy. Oś Y pokazuje latencję. Ten największy spadek, datowany na 2 czerwca, to wdrożenie .NET Core 2.1. Microsoft wylicza, że dzięki tej implementacji latencja spadła o 34%. Jako odpowiedzialnych za ten rewelacyjny wynik Microsoft wymienia autorów 5 zmian w .NET Core 2.1:
- Vectorization of
string.Equals
(@jkotas),string.IndexOf
/LastIndexOf
(@eerhardt) - Devirtualization Support for
EqualityComparer<T>.Default
(@AndyAyersMS) - Software Write Watch for Concurrent GC (@Maoni0, @kouvel)
- Methods with calli are now inline-able (@AndyAyersMS, @mjsabby)
- Improve performance of string.IndexOfAny for 2 & 3 char searches (@bbowyersmyth)
Za dodanie tego wkładu Microsoft podziękował społeczności .NET, dodając też, że .NET Core 2.1 wprowadził wsparcie Brotli dla ekosystemu .NET Library. Z tej możliwości korzysta Bing, aby dynamicznie kompresować zawartość i dostarczać ją wspieranym przeglądarkom.