Udostępnij za pośrednictwem


Zalecenia dotyczące tworzenia aplikacji gotowych do produkcji

Ważne

Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).

Podczas tworzenia aplikacji dla urządzeń usługi Azure Sphere istnieje kilka kwestii, które należy wziąć pod uwagę, aby upewnić się, że aplikacje są gotowe do produkcji. Ten temat zawiera listę kontrolną najlepszych rozwiązań, które umożliwiają sprawdzenie, czy aplikacje są gotowe do wdrożenia pilotażowego lub produkcyjnego. Potwierdzenie ukończenia tych elementów może zmniejszyć liczbę napotkanych problemów w środowisku produkcyjnym i ułatwić diagnozowanie wszelkich pojawiających się problemów.

Podczas tworzenia aplikacji usługi Azure Sphere zdecyduj, czy zostanie ona uruchomiona na rdzeniu wysokiego poziomu (HL), rdzeniu czasu rzeczywistego (RT) lub hybrydowej obu tych funkcji. Aplikacje wysokiego poziomu działają konteneryzowane w systemie operacyjnym Azure Sphere i aplikacje obsługujące w czasie rzeczywistym (RTApps) działają na komputerze bez systemu operacyjnego lub z systemem operacyjnym czasu rzeczywistego (RTOS) na rdzeniach czasu rzeczywistego.

Przedstawione tutaj zalecenia mają pomóc w zwiększeniu jakości i produktywności w aplikacjach gotowych do produkcji. Poniższa lista kontrolna zawiera zwięzłą listę sugestii projektowych dla obu typów aplikacji, a także zalecane podstawy kodowania i zagadnienia dotyczące projektowania rozwiązań, w tym linki do tematów omawiających poszczególne kwestie bardziej szczegółowo. Te sugestie pochodzą z naszych partnerstw z klientami, w tym analizy pól, przeglądów kodu i interakcji z aplikacjami wdrożonych w środowisku produkcyjnym w rzeczywistych rozwiązaniach i projektach urządzeń.

Podstawy kodowania

  • Typowe problemy

    • Upewnij się, że aplikacje gotowe do produkcji nie używają zestawów narzędzi beta.
    • W przypadku określania wartości docelowych dla zestawu interfejsów API użyj najnowszych narzędzi CMake i Azure Sphere.
    • Aby zapewnić pełną optymalizację i rozmiar kodu, rozważ skompilowanie końcowych pakietów obrazów w trybie wydania przed wdrożeniem aplikacji w środowisku produkcyjnym. Pamiętaj, aby skompilować i przetestować pakiet wydania przed jego wdrożeniem.
    • Użyj zasad zero-warnings podczas wykonywania pełnej kompilacji, aby upewnić się, że ostrzeżenia kompilatora są celowo rozwiązane.
    • Skonfiguruj spójny potok ciągłej integracji/ciągłego wdrażania i użyj odpowiedniej strategii rozgałęziania.
  • Problemy związane z pamięcią

    • Jeśli to możliwe, zdefiniuj wszystkie typowe stałe ciągi jako global const char* zamiast kodowania twardego, aby mogły być używane jako wskaźniki danych.
    • Jeśli globalne struktury danych są dość małe, rozważ zapewnienie stałej długości członkom tablicy zamiast używania wskaźników do dynamicznego przydzielania pamięci.
    • Unikaj dynamicznej alokacji pamięci, jeśli jest to możliwe.
    • W przypadku funkcji, które zwracają wskaźnik do buforu pamięci, rozważ przekonwertowanie na funkcje, które zwracają wskaźnik buforu, do którego odwołuje się odwołanie i powiązany rozmiar z obiektami wywołującym.
  • Kontenery dynamiczne i

    • Rozważ użycie metody alokacji przyrostowej dla kontenerów, takich jak listy i wektory.

Sugestie dotyczące projektowania aplikacji podstawowych wysokiego poziomu

  • Ogólne podstawy

    • Poprawnie zainicjuj i zniszcz wszystkie programy obsługi po zakończeniu lub błędzie.
    • Zawsze używaj kodów zakończenia.
    • Jeśli aplikacja wykryje, że jest w stanie nieodwracalnym i wymaga ponownego uruchomienia, upewnij się, że jest ona zawsze obsługiwana jako "czyste" wyjście aplikacji, a nie ryzykowanie stanu zakleszczenia.
    • Implementowanie obsługi błędów i rejestrowania. Aby uzyskać więcej informacji, zobacz Obsługa błędów i rejestrowanie.
    • Użyj czasomierza systemowego jako obserwatora, aby wykryć, czy aplikacja jest w stanie nieodwracalnym, czy w martwym punkcie (na przykład zakleszczenie, wyczerpana pamięć lub łączność nie jest odzyskiwane, choć zaimplementowana logika) i efektu prawidłowego odzyskiwania. Aby uzyskać więcej informacji, zobacz Używanie czasomierza systemowego jako strażnika.
  • Obsługa współbieżności

    • Zawsze, gdy jest to możliwe, użyj polecenia EventLoop.
    • Poszukaj wydajności zadań współbieżnych.
    • Oceń, kiedy używać wątków i zakresu tylko do określonych zadań. Aby uzyskać więcej informacji na temat tego, kiedy używać wątków, zobacz Obsługa współbieżności.
  • Monitorowanie łączności

    • Zaimplementuj odpowiednie zadanie sprawdzania kondycji łączności na podstawie niezawodnej maszyny stanu, która regularnie sprawdza stan połączenia internetowego.
    • W przypadku rozwiązań wymagających zarządzania energią należy wyłączyć mikroukład usługi Azure Sphere po wysłaniu danych, śledzić łączny czas pracy i ustawiać czasomierz zamknięcia.
    • Program cURL zaktualizował ostatnio zachowanie wywołania zwrotnego i najlepsze praktyki. Podczas gdy usługa Azure Sphere podjęła wysiłki w celu zapewnienia, że starsze wersje zachowania biblioteki cURL nadal działają zgodnie z oczekiwaniami, zaleca się stosowanie najnowszych wskazówek dotyczących zabezpieczeń i niezawodności podczas korzystania z curl_multi, ponieważ użycie cyklicznych wywołań zwrotnych może spowodować nieoczekiwane awarie, awarie łączności i potencjalne luki w zabezpieczeniach. Jeśli timerCallback jest uruchamiany z przekroczeniem limitu czasu 0 ms, traktuj go jako limit czasu 1 ms, aby uniknąć cyklicznych wywołań zwrotnych. Pamiętaj również, aby wywołać curl_multi_socket_action jawnie co najmniej raz po wywołaniach curl_multi_add_handle.
  • Zarządzanie pamięcią i użycie

    • Śledzenie użycia pamięci aplikacji za pomocą interfejsów API systemu operacyjnego usługi Azure Sphere i zapewnienie odpowiedniego reagowania aplikacji na nieoczekiwane użycie pamięci.

Sugestie dotyczące projektowania aplikacji podstawowych w czasie rzeczywistym

  • Włącz czasomierz watchdog MT3620, aby wykryć zakleszczenie i zaimplementować właściwą logikę odzyskiwania.
  • Zaimplementuj komunikację między rdzeniami dla hybrydowych aplikacji HL-core i RT-core.

Zagadnienia dotyczące projektowania rozwiązań

  • Wymagania dotyczące łączności i rozwiązywanie problemów

    • Upewnij się, że zostały spełnione wszystkie wymagania wstępne dotyczące sieci. Aby uzyskać więcej informacji, zobacz Wymagania dotyczące łączności i rozwiązywanie problemów.
    • Rozwiązywanie problemów z łącznością przy użyciu narzędzi OSNetworkRequirementCheck-HLApp i OSNetworkRequirementChecker-PC.

Aby uzyskać dodatkowe elementy, które należy wziąć pod uwagę podczas przenoszenia rozwiązania IoT do środowiska produkcyjnego, zobacz Przenoszenie rozwiązania IoT z testu do środowiska produkcyjnego.