Oczyszczanie klienta: postępy, regres i odkrycia
Kilka miesięcy temu przedstawiliśmy nasze plany związane z naprawą klienta League of Legends i nazwaliśmy je „kampanią oczyszczania klienta”.
Jako zespół Riot zawsze staramy się rzetelnie informować was o postępach naszych prac, również wówczas, gdy zmagamy się z jakimiś problemami. Mówiąc wprost, mamy jeszcze wiele do zrobienia, zanim będziemy zadowoleni z działania klienta.
W dzisiejszym wpisie opowiemy o tym, co udało się nam uzyskać do tej pory. Przedstawimy też regres, który pojawił się w trakcie naszych prac, oraz kroki, jakie zamierzamy podjąć, aby wyeliminować problemy.
DOTYCHCZASOWE POSTĘPY
W naszym pierwszym wpisie na temat klienta poinformowaliśmy, że w pierwszej kolejności chcemy skupić się na obniżeniu czasu działania bootstrapu do około 15 sekund nawet dla graczy z 90 percentyla. Dla przypomnienia — bootstrap to czas potrzebny na uruchomienie się klienta.
Powiedzieliśmy, że aby osiągnąć nasz cel, będziemy konsolidować i zmniejszać liczbę wtyczek i aplikacji opartych na Ember używanych w kliencie. Jeśli ta terminologia wydaje się wam nowa, to przypominamy, że wtyczki są narzędziami, które pozwalają dzielić kod klienta na łatwiejsze w obsłudze fragmenty, a aplikacje oparte na Ember to narzędzia wykorzystywane przez nasz interfejs użytkownika.
Jak do tej pory prace w tym obszarze przebiegały całkiem dobrze. Na poniższym wykresie przedstawiona jest zmiana całkowitej liczby wtyczek i aplikacji opartych na Ember działających w kliencie na przestrzeni czasu. W każdym patchu udawało się nam zmniejszać ich liczbę. W porównaniu do momentu, w którym rozpoczynaliśmy ten proces, klient podczas bootstrapu wczytuje teraz o około 10% mniej aplikacji opartych na Ember i o 20% mniej wtyczek.
To dobre wieści! Jednak pojawił się również pewien regres, który chcemy wam przedstawić.
PEWIEN REGRES
Po kilku pierwszych patchach wypuszczonych w tym roku obserwowaliśmy istotne skrócenie czasu bootstrapu, będące efektem prac nad wtyczkami.
Jednak począwszy od patcha 10.3, czas bootstrapu zaczął zmieniać się w niepożądanym kierunku, a po wprowadzeniu patcha 10.7 osiągnął najgorsze wartości.
Możecie zobaczyć to na poniższym wykresie. Aby ułatwić jego zrozumienie, przypominamy, że chcemy, aby wygięcie kolejnych krzywych miało tendencję do przesuwania się w lewą stronę wykresu (bo wtedy oznacza krótszy czas bootstrapu).
Jednym z możliwych wyjaśnień tego ostatniego regresu może być przeciążenie serwerów League, które obserwujemy w ostatnich tygodniach. Z dość oczywistych powodów mnóstwo graczy na całym świecie siedząc w domu, ma teraz więcej czasu. Gracie w League of Legends jak najęci, a to stanowi wyzwanie dla naszej infrastruktury serwerowej i powoduje niespójne czasy reakcji oraz wolniejsze czasy bootstrapu klienta.
Gdy zwiększymy przepustowość serwerów w celu rozładowania tego spiętrzenia ruchu, może się okazać, że znów odnotujemy istotną poprawę działania klienta. Będziemy również poszukiwać innych możliwych przyczyn regresu, takich jak zredukowanie zawartości kodu Javascript, który jest wczytywany podczas bootstrapu.
Niezależnie od przyczyn regresu uważamy, że są też powody do nadziei: tak jak zapowiadaliśmy w naszym pierwszym wpisie na blogu deweloperów, w ramach procesu rozwiązywania problemów z czasem bootstrapu i czasem reakcji na zatwierdzenie bohatera (który jest następny na naszej liście) oczyszczamy i przerabiamy pewne podstawowe elementy architektury klienta.
Oznacza to, że naprawiając błędy, dogłębnie analizujemy podstawy architektury klienta, aby znaleźć źródło problemów utrudniających wam życie.
Takim problemem wynikającym z architektury, który udało się nam odkryć, jest funkcja klienta nazywana pokrewieństwem.
PROBLEM Z POKREWIEŃSTWEM
Pokrewieństwo pojawiło się jako element struktury działania klienta kilka lat temu, gdy go „zaktualizowaliśmy”. Generalnie jest to narzędzie pozwalające nam określić, które wtyczki muszą zostać wczytane, zanim bootstrap może zakończyć swoje działanie.
Odkryliśmy dwa problemy związane z pokrewieństwem:
- Więzy pokrewieństwa zostały zerwane. W pewnym momencie w 2018 roku działanie pokrewieństwa zostało nieumyślnie przerwane. A ponieważ pokrewieństwo nie działa prawidłowo, klient podczas bootstrapu i wczytywania podsumowania po grze domyślnie wczytuje każdą wtyczkę.
- Nawet jeśli pokrewieństwo zostanie przywrócone, nie rozwiąże to naszych problemów. Sądzimy, że nawet gdy pokrewieństwo działało zgodne z projektem, nie powodowało efektywnego przypisywania priorytetów podczas wczytywania wtyczek. Upraszczając, klient zawsze miał problem polegający na wczytywaniu zbyt wielu wtyczek podczas bootstrapu.
W SKRÓCIE: musimy całkowicie zastąpić efekt pokrewieństwa lepszym i skuteczniejszym rozwiązaniem.
Te odkrycia są dla nas zaskakujące, ale potwierdzają jedną z podstawowych tez, które postawiliśmy, zaczynając pracę nad klientem: poświęcając czas na pogłębioną analizę działania klienta, będziemy w stanie odkryć podstawowe przyczyny problemów.
KOLEJNE KROKI
Teraz, gdy już wiemy, że pokrewieństwo nie działa tak jak powinno, możemy wdrożyć nowe rozwiązanie, które w prawidłowy sposób przypisuje priorytety wtyczkom. W ten sposób skrócimy działanie bootstrapu na komputerach graczy i będziemy mogli przejść do innych ważnych prac nad klientem.
Opisane problemy nie zmieniają zasadniczo naszych planów związanych z naprawianiem klienta, ale mogą trochę spowolnić tempo prac. Tak, czy inaczej, cieszymy się, że dokonaliśmy tego odkrycia, ponieważ wskazuje ono właściwy kierunek dalszych działań. Jeśli w efekcie będziecie doświadczać mniej zakłóceń, a działanie klienta stanie się bardziej stabilne, to nasze wysiłki nie pójdą na marne.
Gdy już uda się nam skrócić czas bootstrapu do zadowalającego nas poziomu, rozpoczniemy drugą fazę oczyszczania klienta: skrócenie czasu odpowiedzi klienta podczas wyboru bohatera. Wiemy, że prace nad wyborem bohatera są tym etapem kampanii, który dla wielu z was jest najbardziej interesujący, i my również chcemy przejść do niego jak najszybciej.
Będziemy informować was o postępach naszych prac W ciągu kilku najbliższych miesięcy możecie się spodziewać kolejnego podobnego wpisu na blogu. I jak zawsze, dziękujemy za granie.