W ofertach pracy ciągle widzę, że kandydat musi mieć doświadczenie w pisaniu „skalowalnych” aplikacji. Co sprawia, że aplikacja jest skalowalna i skąd mam wiedzieć, że mój kod można skalować do milionów użytkowników?
Wydaje mi się, że lepszym sposobem sformułowania tego pytania jest: Jak napisać kod z myślą o skalowalności? Aby kod był skalowalny od samego początku, a nie po namyśle. Czy istnieją pewne metodologie projektowania? A może chodzi tylko o wybranie odpowiednich algorytmów dla zadania?
źródło
Skalowalność mierzy się w kategoriach przepustowości w oparciu o pewną zmienną. Na przykład liczba żądań na sekundę dla użytkowników X. Najprostszym sposobem opisania skalowalności jest:
Pierwszą rzeczą, którą musisz zrozumieć, projektując skalowalność, jest to, jaki pomiar jest najważniejszy dla Twojej aplikacji? Istnieje kilka sposobów pomiaru wydajności, która jest kluczowym elementem skalowalności:
Istnieje więcej pomiarów wydajności, które można zastosować, ale są one powszechne w systemach sieciowych lub systemach przetwarzania wsadowego.
Kolejnym aspektem skalowalności jest pomiar tego, co dzieje się z wydajnością w miarę wzrostu obciążenia. Typowe sposoby zwiększania obciążenia to:
Celem skalowalnej aplikacji jest utrzymanie lub poprawa wydajności, gdy mamy do czynienia z problemem obciążenia. Krótko mówiąc, jeśli czas reakcji trwa zbyt długo, czy możemy dodać kolejny serwer, aby równomiernie rozłożyć obciążenie? Takie podejście zmniejsza nakład pracy jednego serwera i utrzymuje serwery w tym „najlepszym miejscu” pod względem wydajności.
Twoja aplikacja będzie musiała zostać zaprojektowana specjalnie do skalowania. Oznacza to, że musisz uważać na dane sesji, kierując żądania do właściwego serwera, zmniejszając wąskie gardła ograniczające możliwości skalowania aplikacji.
źródło
Zasadniczo chcesz uniknąć wąskich gardeł wydajności, gdy zwiększasz liczbę użytkowników i / lub przetwarzasz większy zestaw danych i / lub oferujesz swój interfejs w większej liczbie języków itp.
Zasadniczo patrzysz na schemat bazy danych, algorytmy i proces tworzenia oprogramowania i próbujesz przewidzieć przyszłe problemy. Chcesz również skonfigurować monitorowanie wydajności, aby identyfikować problemy, gdy zaczną się gromadzić.
Podniosłem te wskazówki, czytając Budowanie skalowalnych stron internetowych (link do Amazon).
Mam nadzieję że to pomoże!
źródło
Jedynym sposobem, w jaki aplikacje mogą być naprawdę skalowalne, jest brak ograniczeń, których nie można przejść (lub tylko bardzo drogo).
Typowym przykładem jest to, co dzieje się, gdy zabraknie dostępnych cykli procesora? Jeśli twój program ma wiele stopni, możesz uruchomić na pudełku z wieloma rdzeniami, ale co się stanie, gdy nie będziesz już mógł kupić większego pudełka? Twoja aplikacja po prostu nie może już rosnąć i dlatego nie jest skalowalna.
Każda prawdziwie skalowalna aplikacja musi być w stanie przenosić się na wiele komputerów w przejrzysty sposób i robić to bez zauważalnych nierówności. To nie jest łatwe i jest to jeden z powodów, dla których Google odnosi tak wielkie sukcesy.
źródło
Istnieją wyjątkowe problemy związane z obsługą aplikacji o dużej skali. Oferty pracy szukają kandydatów, którzy pracowali w tym środowisku i musieli rozwiązać takie problemy.
Aplikacje wysokiego poziomu są skalowalne poprzez ciągłe zadawanie pytania, co by się stało, gdyby żądano, aby ten fragment kodu został uruchomiony tysiące razy w bardzo krótkim czasie. Oznacza to zarządzanie śladami pamięci, korzystanie z buforowania sum i danych, korzystanie ze skalowalnych źródeł danych itp.
źródło
Jeśli budujesz funkcję wyszukiwania, która działa dobrze, gdy ma 100 wierszy w bazie danych do wyszukiwania i 10 użytkowników korzysta z niej jednocześnie. Jak dobrze by to działało, gdy 100 użytkowników korzystało z niego w tym samym czasie i istnieje 100 000 wierszy do wyszukiwania.
Jeśli działa tak samo bez względu na to, co jest bardzo dobre. jeśli działa proporcjonalnie do ilości użytkowników / danych (co oznacza 10 razy więcej danych == 10 razy dłużej do przetworzenia), to dobrze. Jeśli działa znacznie niżej, tym więcej danych ma (dane w trybie 10x == 10x ^ 10 dłużej do przetworzenia), wówczas nie skaluje się dobrze.
Moje przykłady powinny być naprawdę pokazane w notacji Big O, ale obecnie nie znam go wystarczająco dobrze, aby napisać przykłady w Big O.
Możesz symulować więcej danych, zrzucając fikcyjne dane do swojej bazy danych, a istnieją narzędzia do symulacji większej liczby użytkowników, takie jak Apache AB.
źródło