Udostępnij przez


Najlepsze rozwiązania dotyczące usługi Databricks Apps

Na tej stronie wymieniono ważne najlepsze rozwiązania dotyczące tworzenia i uruchamiania aplikacji usługi Databricks. Te wytyczne koncentrują się na wymaganiach dotyczących zabezpieczeń, wydajności i platformy.

Ogólne sprawdzone metody postępowania

  • Korzystanie z funkcji natywnych dla usługi Azure Databricks na potrzeby przetwarzania danych. Obliczenia aplikacji są zoptymalizowane pod kątem renderowania interfejsu użytkownika. Użyj Databricks SQL do zapytań i zestawów danych, Lakeflow Jobs do przetwarzania wsadowego i Obsługiwania Modeli dla obciążeń wnioskowania sztucznej inteligencji. Przenieś intensywne przetwarzanie danych na te usługi, aby uniknąć problemów z wydajnością. Przetestuj aplikację pod oczekiwanym obciążeniem, aby sprawdzić, czy spełnia twoje wymagania.

  • Zaimplementuj bezproblemową obsługę zamykania. Aplikacja musi zostać zamknięta w ciągu 15 sekund po odebraniu sygnału SIGTERM, w przeciwnym razie zostanie wymuszona za pomocą SIGKILL.

  • Unikaj operacji uprzywilejowanych. Aplikacje działają jako użytkownicy niebędący uprzywilejowani i nie mogą wykonywać akcji wymagających podwyższonych uprawnień, takich jak dostęp główny. Nie można zainstalować pakietów na poziomie systemu przy użyciu menedżerów pakietów, takich jak apt-get, yumlub apk. Zamiast tego użyj pakietów języka Python z PyPI lub pakietów Node.js z npm, aby zarządzać zależnościami aplikacji.

  • Omówienie sieci zarządzanej przez platformę. Żądania są przekazywane za pośrednictwem zwrotnego serwera proxy, więc aplikacja nie może zależeć od źródła żądań. Usługa Azure Databricks obsługuje kończenie żądań TLS i wymaga, aby aplikacje obsługiwały protokół HTTP/2 cleartext (H2C). Nie implementuj niestandardowej obsługi protokołu TLS.

  • Połącz się z poprawnym hostem i portem. Aplikacja musi nasłuchiwać 0.0.0.0 i używać portu określonego w zmiennej środowiskowej DATABRICKS_APP_PORT . Aby uzyskać szczegółowe informacje, zobacz zmienne środowiskowe .

  • Zminimalizuj czas uruchamiania kontenera. Zachowaj uproszczoną logikę inicjowania, aby zmniejszyć opóźnienie zimnego startu. Unikaj blokowania operacji, takich jak instalowanie dużych zależności lub zewnętrzne wywołania interfejsu API podczas uruchamiania. Załaduj duże zasoby tylko wtedy, gdy jest to konieczne.

  • Zaloguj się do stdout i stderr. Usługa Azure Databricks przechwytuje dzienniki ze standardowych strumieni danych wyjściowych i błędów. Użyj tych elementów dla wszystkich dzienników, aby upewnić się, że dzienniki są widoczne w interfejsie użytkownika usługi Azure Databricks. Unikaj zapisywania dzienników w plikach lokalnych.

  • Eleganckie radzenie sobie z nieoczekiwanymi błędami. Zaimplementuj globalną obsługę wyjątków, aby zapobiec awariom z nieuchwyconych błędów. Zwracanie prawidłowych odpowiedzi na błędy HTTP bez uwidaczniania śladów stosu lub poufnych danych.

  • Przypinanie wersji zależności. Użyj dokładnych numerów wersji w pliku requirements.txt, aby zapewnić spójne środowiska w kompilacjach. Unikaj używania nieprzypiętych lub najnowszych wersji pakietów.

  • Weryfikowanie i oczyszczanie danych wejściowych użytkownika. Zawsze weryfikuj dane przychodzące i oczyszczaj je, aby zapobiec atakom polegającym na wstrzyknięciu lub nieprawidłowo sformułowanych danych wejściowych, nawet w aplikacjach wewnętrznych.

  • Używanie buforowania w pamięci na potrzeby kosztownych operacji. Buforuj często używane dane, takie jak wyniki zapytań lub odpowiedzi interfejsu API, aby zmniejszyć opóźnienie i uniknąć nadmiarowego przetwarzania. Ostrożnie używaj functools.lru_cache, cachetools lub podobnych bibliotek, i starannie zarządzaj pamięcią podręczną w aplikacjach dla wielu użytkowników.

  • Używaj wzorców żądań asynchronicznych dla długotrwałych operacji. Unikaj synchronicznych żądań, które oczekują na zakończenie operacji, co może spowodować przekroczenie limitu czasu. Zamiast tego, wysyłaj początkowe żądanie, aby rozpocząć operację, a następnie okresowo dokonuj zapytań o stan zasobu lub punktu końcowego, aby sprawdzić status zakończenia.

Najlepsze rozwiązania dotyczące zabezpieczeń

  • Przestrzegaj zasady najniższych uprawnień. Przyznaj tylko uprawnienia niezbędne dla każdego użytkownika lub grupy. Użyj CAN USE zamiast CAN MANAGE , chyba że wymagana jest pełna kontrola. Zobacz Najlepsze rozwiązania dotyczące uprawnień.

  • Starannie wybierz metody uwierzytelniania. Użyj pryncypałów usługi, gdy dostęp do zasobów i danych jest taki sam dla wszystkich użytkowników aplikacji. Zaimplementuj uwierzytelnianie użytkowników tylko w przestrzeniach roboczych z zaufanymi autorami aplikacji i kodem aplikacji poddanym recenzji koleżeńskiej, gdy aplikacja musi respektować uprawnienia użytkownika, który ją wywołuje.

  • Użyj dedykowanych jednostek usługi dla każdej aplikacji. Nie udostępniaj poświadczeń jednostki usługi między aplikacjami ani użytkownikami. Przyznaj tylko minimalne wymagane uprawnienia, takie jak CAN USE lub CAN QUERY. Obracanie poświadczeń jednostki usługi, gdy twórcy aplikacji opuszczają organizację. Zobacz Zarządzanie dostępem aplikacji do zasobów.

  • Izolowanie środowisk aplikacji. Użyj różnych obszarów roboczych, aby oddzielić aplikacje programistyczne, przejściowe i produkcyjne. Zapobiega to przypadkowemu dostępowi do danych produkcyjnych podczas programowania i testowania.

  • Uzyskiwanie dostępu do danych za pośrednictwem odpowiednich zasobów obliczeniowych. Nie należy konfigurować aplikacji w celu uzyskiwania dostępu do danych ani ich przetwarzania bezpośrednio. Użyj magazynów SQL na potrzeby zapytań, serwowania modelu na potrzeby wnioskowania sztucznej inteligencji i Zadań Lakeflow na potrzeby przetwarzania wsadowego.

  • Zarządzanie wpisami tajnymi. Nigdy nie ujawniaj nieprzetworzonych tajnych wartości w zmiennych środowiskowych. Używaj valueFrom w konfiguracji aplikacji i regularnie rotuj tajne dane, zwłaszcza gdy role zespołu się zmieniają. Zobacz Najlepsze rozwiązania.

  • Zminimalizuj zakresy i rejestruj akcje użytkownika. W przypadku korzystania z autoryzacji użytkownika zażądaj tylko zakresów wymaganych przez aplikację i zarejestruj wszystkie akcje użytkownika ze ustrukturyzowanymi rekordami inspekcji. Zobacz Najlepsze rozwiązania dotyczące autoryzacji użytkowników.

  • Ogranicz wychodzący dostęp sieciowy. Zezwalaj tylko na domeny, których potrzebuje Aplikacja, takie jak repozytoria pakietów i zewnętrzne interfejsy API. Użyj trybu suchego uruchomienia i dzienników odmowy, aby zweryfikować konfigurację. Zobacz Najlepsze rozwiązania dotyczące konfigurowania zasad sieciowych.

  • Postępuj zgodnie z bezpiecznymi praktykami kodowania. Parametryzowanie zapytań SQL w celu zapobiegania atakom polegającym na wstrzyknięciu i stosowaniu ogólnych wytycznych dotyczących bezpiecznego programowania, takich jak walidacja danych wejściowych i obsługa błędów. Zobacz Interfejs API wykonywania instrukcji: Uruchamianie SQL w magazynach.

  • Monitorowanie podejrzanych działań. Regularnie przeglądaj dzienniki inspekcji pod kątem nietypowych wzorców dostępu lub nieautoryzowanych akcji. Konfigurowanie alertów dla krytycznych zdarzeń zabezpieczeń.