Sygnały z floty działającej na lądzie w prawie rzeczywistym czasie są przydatne dla firm na wiele sposobów. Firmy mogą na przykład używać tych danych, aby:
- monitorować wydajność swojej floty i wcześnie wykrywać potencjalne problemy;
- poprawa obsługi klienta dzięki dokładnym informacjom o przewidywanym czasie dostawy i informacjach śledzenia;
- obniżyć koszty przez identyfikowanie i rozwiązywanie problemów z nieefektywnością,
- Zwiększanie bezpieczeństwa dzięki monitorowaniu zachowań kierowców i identyfikowaniu potencjalnych zagrożeń
- Optymalizowanie tras i harmonogramów kierowców w celu zwiększenia efektywności
- Zadbaj o zgodność z przepisami, śledząc lokalizację pojazdu i godziny pracy
Ten dokument pokazuje, jak deweloperzy mogą przekształcać sygnały z platformy Mapy Google dotyczące „usług mobilności” (czyli „rozwiązania Last Mile Fleet” lub „rozwiązania On-demand Rides and Deliveries”), w działające zdarzenia niestandardowe. Omówione są też kluczowe koncepcje i decyzje projektowe dotyczące referencyjnej rozwiązania Zdarzenia floty dostępnego na GitHubie.
Ten dokument dotyczy:
- architekci, którzy znają „usługi mobilności” Google Maps Platform oraz jeden z jej głównych komponentów, czyli „Fleet Engine”. Jeśli dopiero zaczynasz korzystać z „usług mobilności”, zalecamy zapoznanie się z rozwiązaniem ostatniej mili dla floty lub rozwiązaniem dotyczącym przejazdów i dostaw na żądanie, w zależności od potrzeb.
- Architekci znający Google Cloud. Jeśli dopiero zaczynasz korzystać z Google Cloud, przeczytaj artykuł Tworzenie strumieniowych ścieżek danych w Google Cloud.
- Jeśli kierujesz reklamy na inne środowiska lub zestawy oprogramowania, skup się na zrozumieniu punktów integracji i kluczowych kwestii dotyczących Fleet Engine, które powinny być nadal przydatne.
- Osoby, które chcą ogólnie poznać sposób generowania i wykorzystywania zdarzeń z floty.
Po przeczytaniu tego dokumentu powinieneś mieć podstawową wiedzę o kluczowych elementach i uwzględnianych kwestiach dotyczących systemu przesyłania strumieniowego oraz elementy konstrukcyjne Map Google i Google Cloud, które składają się na rozwiązanie referencyjne Zdarzenia floty.
Omówienie rozwiązania referencyjnego Zdarzenia floty
Modułowy system referencyjny zdarzeń floty to rozwiązanie typu open source, które umożliwia klientom i partnerom Mobility generowanie kluczowych zdarzeń na podstawie komponentów Fleet Engine i Google Cloud. Obecnie rozwiązanie referencyjne obsługuje klientów korzystających z rozwiązania ostatniej mili Fleet Engine. W przyszłości zostanie dodane wsparcie dla przejazdów i dostaw na żądanie.
Rozwiązanie automatycznie generuje zdarzenia na podstawie zmian w określonych danych powiązanych z zadaniami lub przejazdami. Z tych zdarzeń możesz korzystać, aby wysyłać powiadomienia, takie jak te, do zainteresowanych osób lub wywoływać inne działania w Twojej flocie.
- Zmiana szacowanego czasu dotarcia
- Zmiana przewidywanego czasu dotarcia do zadania
- Czas pozostały do rozpoczęcia zadania
- Odległość do pokonania do zadania
- Zmiana stanu TaskOutcome
Każdy komponent rozwiązania referencyjnego można dostosować do potrzeb swojej firmy.
Elementy składowe
Diagram : diagram ten przedstawia ogólne elementy składowe, z których składa się rozwiązanie referencyjne Zdarzenia floty
Rozwiązanie referencyjne zawiera te komponenty:
- Źródło zdarzenia: miejsce pochodzenia pierwotnego strumienia zdarzeń. Zarówno rozwiązanie „Last Mile Fleet Solution”, jak i „On-demand Rides and Deliveries Solution” są zintegrowane z Cloud Logging, co ułatwia przekształcanie logów wywołań RPC Fleet Engine w strumienie zdarzeń dostępne dla deweloperów. To główne źródło danych do analizowania.
- Przetwarzanie: w tym bloku nieprzetworzone logi wywołań RPC są konwertowane na zdarzenia zmiany stanu. Blok ten wykonuje obliczenia na podstawie strumienia zdarzeń logowania. Aby wykryć taką zmianę, ten komponent wymaga magazynu stanu, który umożliwia porównanie nowych i poprzednich zdarzeń w celu wykrycia zmiany. Zdarzenia nie zawsze zawierają wszystkich interesujących informacji. W takich przypadkach ten blok może w razie potrzeby wykonywać zapytania do backendów.
- Stan pamięci: niektóre platformy przetwarzania zapewniają dane pośrednie, które są trwałe same w sobie. Jeśli nie, możesz przechowywać stan samodzielnie, ponieważ stan powinien być unikalny dla pojazdu i typu zdarzenia. W takim przypadku odpowiednia będzie usługa trwałego przechowywania danych typu klucz-wartość.
- Sink (Custom Events): wykryty stan powinien być udostępniany każdej aplikacji lub usłudze, która może z niego korzystać. Dlatego naturalnym wyborem jest opublikowanie tego zdarzenia niestandardowego w systemie dostarczania zdarzeń do dalszego przetwarzania.
- Usługa w dół łańcucha: kod, który wykorzystuje wygenerowane zdarzenia i podejmuje działania odpowiednie do Twojego przypadku użycia.
Wybór usługi
Jeśli chodzi o wdrażanie rozwiązania referencyjnego „Rozwiązanie dla floty ostatniej mili” lub „Rozwiązanie dla przejazdów i dostaw na żądanie” (które będzie dostępne pod koniec trzeciego kwartału 2023 r.), wybór technologii dla „źródła” i „zbiornika” jest prosty. Z drugiej strony, opcja „Przetwarzanie” oferuje szeroki zakres opcji. Rozwiązanie referencyjne korzysta z tych usług Google:
Diagram : diagram przedstawiający usługę Google Cloud do implementowania rozwiązania referencyjnego.
Układ projektu w Google Cloud
Zalecamy domyślne wdrożenie wielu projektów. Dzięki temu zużycie w Google Maps Platform i Google Cloud można wyraźnie rozdzielić oraz powiązać z wybranym przez Ciebie sposobem rozliczeń.
Źródło zdarzeń
Rozwiązanie dotyczące ostatniej mili i rozwiązanie dotyczące przejazdów i dostaw na żądanie zapisują żądania interfejsu API i ładunki odpowiedzi w dzienniku Cloud. Cloud Logging dostarcza logi do co najmniej 1 usługi. Przekierowywanie do Cloud Pub/Sub to idealny wybór w tym przypadku, ponieważ pozwala przekształcać logi w strumień zdarzeń bez konieczności kodowania.
- Logowanie | Fleet Wydajność (dla użytkowników LMFS)
- Rejestrowanie | Przebieg podróży i zamówienia (dla użytkowników ODRD)
- Wyświetlanie logów kierowanych do Pub/Sub : Logowanie → Omówienie integracji Pub/Sub
Ujście
W Google Cloud usługa Cloud Pub/Sub jest preferowanym systemem do przesyłania wiadomości w czasie zbliżonym do rzeczywistego. Podobnie jak zdarzenia ze źródła były dostarczane do Pub/Sub, zdarzenia niestandardowe są również publikowane w Pub/Sub do dalszego przetwarzania.
Przetwarzam
W przetwarzaniu zdarzeń biorą udział te komponenty: Podobnie jak inne elementy składowe, komponenty przetwarzania są całkowicie bezserwerowe i można je skalować w górę i w dół.
- Cloud Functions jako platforma obliczeniowa w przypadku wersji początkowej (*)
- bezserwerowe, skalowane w górę i w dół za pomocą ustawień skalowania, co pozwala zarządzać kosztami;
- Java jako język programowania ze względu na dostępność bibliotek klienta dla interfejsów API związanych z Fleet Engine, które ułatwiają implementację.
- Cloud Firestore jako stanowa pamięć masowa
- Bezserwerowy magazyn klucz-wartość
- Cloud Pub/Sub jako punkt integracji z komponentami w górę i w dół
- luźno sprzężoną integrację w czasie zbliżonym do rzeczywistego.
Funkcji można używać w postaci domyślnej z ustawieniami domyślnymi, ale można je też ponownie skonfigurować. Parametry konfiguracji są ustawiane za pomocą skryptów wdrożeniowych i są szczegółowo opisane w README odpowiednich modułów Terraform.
*Uwaga: w ramach tego rozwiązania referencyjnego planujemy udostępnić alternatywne implementacje, które mogą pomóc w spełnianiu różnych wymagań.
Wdrożenie
Aby proces wdrażania rozwiązania referencyjnego był powtarzalny, dostosowywalny, bezpieczny i umożliwiał kontrolę kodu źródłowego, jako narzędzie automatyzacji wybrano Terraform. Terraform to powszechnie stosowane narzędzie IaC (infrastruktura jako kod) z bogatym wsparciem dla Google Cloud.
- Usługodawca Google Cloud Platform: dokumentacja zasobu obsługiwanego przez „usługodawcę Google Cloud Platform”.
- sprawdzonych metod korzystania z Terraform: obszerne wskazówki dotyczące tego, jak najlepiej stosować go w Google Cloud;
- Terraform Registry: dodatkowe moduły obsługiwane przez Google i społeczność.
Moduły Terraform
Zamiast tworzyć jeden duży, monolityczny moduł wdrażania rozwiązania referencyjnego, można zaimplementować powtarzalne bloki automatyzacji jako moduły Terraform, które można stosować niezależnie. Moduł zawiera wiele zmiennych, które można konfigurować. Większość z nich ma wartości domyślne, dzięki czemu możesz szybko rozpocząć pracę, ale jednocześnie masz możliwość dostosowania ich do swoich potrzeb i preferencji.
Modułach zawartych w rozwiązaniu referencyjnym:
- Konfiguracja logowania Fleet Engine: automatyzuj konfiguracje związane z logowaniem w chmurze na potrzeby korzystania z Fleet Engine. W rozwiązaniu referencyjnym służy do kierowania logów związanych z Fleet Engine do określonego tematu Pub/Sub.
- Wdrażanie funkcji w chmurze Fleet Events: zawiera przykładowe wdrożenie kodu funkcji, a także automatyzuje ustawienia uprawnień wymagane do bezpiecznej integracji między projektami.
- Wdrożenie całego rozwiązania referencyjnego: wywołuje 2 poprzednie moduły i obejmuje całe rozwiązanie.
Bezpieczeństwo
System zarządzania dostępem jest stosowany do stosowania zasady jak najmniejszych uprawnień wraz ze sprawdzonymi metodami zapewniania bezpieczeństwa Google Cloud, takimi jak podszywanie się pod konto usługi. Aby dowiedzieć się więcej o tym, co Google Cloud oferuje, aby zapewnić Ci większą kontrolę nad bezpieczeństwem, zapoznaj się z poniższymi artykułami.
Dalsze kroki
Możesz teraz uzyskać dostęp do narzędzia do analizowania zdarzeń floty i sprawdzić jego działanie. Aby rozpocząć, otwórz stronę GitHub.
Dodatek
Gromadzenie wymagań
Zalecamy zebranie wymagań na wcześniejszym etapie procesu.
Najpierw podaj szczegóły dotyczące tego, dlaczego chcesz używać zdarzeń w zbliżonym czasie rzeczywistym lub dlaczego Ci to odpowiada. Oto kilka pytań, które pomogą Ci sprecyzować Twoje potrzeby.
- Jakie informacje są wymagane, aby strumień zdarzeń był przydatny?
- Czy wynik może być uzyskany wyłącznie na podstawie danych zebranych lub wygenerowanych w usługach Google? Czy wzbogacanie danych z integrowanych systemów zewnętrznych jest wymagane? Jeśli tak, jakie to systemy i jakie interfejsy integracji oferują?
- Jakie dane chcesz mierzyć w swojej firmie? Jak są one zdefiniowane?
- Jeśli musisz obliczać dane na podstawie zdarzeń, jakiego rodzaju agregacji będzie to wymagać? Spróbuj ułożyć sekwencję działań. (np. Porównaj ETA/ATA z SLO w podgrupie floty w godzinach szczytowego zapotrzebowania, aby obliczyć wydajność przy ograniczonych zasobach.
- Dlaczego interesuje Cię model oparty na zdarzeniach, a nie na partiach? Czy chodzi o krótszy czas reakcji (czas do wykonania akcji) czy luźno połączoną integrację (zwinność)?
- Jeśli chcesz ustawić niskie opóźnienie, określ je jako „low”. Minuty? Sekundy? Mniej niż sekunda? I jaki jest czas oczekiwania?
- Czy Twój zespół zainwestował już w technologię i powiązane z nią umiejętności? Jeśli tak, jakie są to rozwiązania i jakie zapewniają punkty integracji?
- Czy istnieją jakieś wymagania, których nie spełniają Twoje obecne systemy lub z którymi mogą mieć problemy podczas przetwarzania zdarzeń pochodzących z Twojej floty?
Zasady projektowania
Zawsze warto znać proces myślenia. Pomaga to w podejmowaniu spójnych decyzji projektowych, zwłaszcza gdy masz do wyboru wiele opcji.
- Domyślnie wybierane są prostsze opcje.
- Domyślnie krótszy czas do wartości. Mniej kodu, krótsza krzywa uczenia.
- W przypadku opóźnień i wydajności staraj się osiągnąć ustawiony próg, a nie maksymalną optymalizację. Unikaj też nadmiernej optymalizacji, ponieważ często prowadzi ona do zwiększenia złożoności.
- To samo dotyczy kosztów. Utrzymaj koszty na rozsądnym poziomie. Być może nie jesteś jeszcze gotowy na korzystanie z usług o wysokiej wartości, ale stosunkowo drogich.
- W fazie eksperymentalnej zmniejszanie skali może być równie ważne jak zwiększanie. Rozważ platformę, która daje elastyczność skalowania w górę z limitem i skalowania w dół (najlepiej do zera), aby nie wydawać pieniędzy, gdy nic nie robisz. Wysoką wydajność przy użyciu infrastruktury zawsze aktywnej można wziąć pod uwagę w późniejszej fazie, gdy będziesz mieć pewność, że spełnia ona Twoje potrzeby.
- Obserwuj i mierz, aby później móc określić, nad czym należy jeszcze popracować.
- Utrzymywanie luźnego powiązania usług. Ułatwia to późniejszą wymianę poszczególnych elementów.
- Ważną kwestią jest też bezpieczeństwo. Usługa działa w środowisku chmury publicznej, więc nie może być żadnych niezabezpieczonych drzwi do systemu.
Pojęcia związane ze strumieniowaniem
Jeśli dopiero zaczynasz korzystać z przetwarzania opartego na zdarzeniach lub strumieniowego, warto poznać najważniejsze pojęcia, z których niektóre mogą się znacznie różnić od przetwarzania w partiach.
- Skala : w odróżnieniu od przetwarzania wsadowego, w którym zwykle masz dobrą orientację w ilości danych do przetworzenia, w przypadku przetwarzania strumieniowego nie masz takiej możliwości. Korki w mieście mogą nagle generować dużo zdarzeń z określonego obszaru, które musisz przetworzyć.
- Okna : zamiast przetwarzania zdarzeń pojedynczo często zdarza się, że chcesz grupować zdarzenia na osi czasu w mniejsze „okna” jako jednostki obliczeniowe. Do wyboru są różne strategie stosowania okien, takie jak „okna stałe (np. każdy dzień kalendarzowy)”, „okna przesuwne (ostatnie 5 minut)” czy „okna sesji (podczas tej podróży)”. Im dłuższe okno, tym dłuższy czas oczekiwania na wyniki. Wybierz model i konfigurację, które spełniają Twoje wymagania.
- Wyzwalanie : w niektórych przypadkach nie masz innego wyjścia, jak tylko stosować stosunkowo dłuższe okna. Nie chcesz jednak czekać do końca tego okna, aby generować zdarzenia, ale zamiast tego emitować wyniki pośrednie w międzyczasie. Tę koncepcję można zastosować w przypadkach, gdy warto najpierw zwrócić szybkie wyniki, a potem je skorygować. Wyobraź sobie, że wysyłasz stan pośredni na poziomie 25%, 50% i 75% realizacji dostawy.
- Kolejność : zdarzenia niekoniecznie docierają do systemu w kolejności, w jakiej zostały wygenerowane. Szczególnie w przypadku przypadków użycia, w których wykorzystywana jest komunikacja przez sieci komórkowe, co powoduje opóźnienia i skomplikowane ścieżki routingu. Musisz zdawać sobie sprawę z różnicy między „czasem zdarzenia” (kiedy zdarzenie rzeczywiście miało miejsce) a „czasem przetwarzania” (kiedy zdarzenie dotarło do systemu) i odpowiednio obsługiwać zdarzenia. Zwykle zdarzenia są przetwarzane na podstawie „czasu zdarzenia”.
- Dostarczanie wiadomości – zasada „przynajmniej raz” a zasada „dokładnie raz”: różne platformy obsługują te zasady w różny sposób. W zależności od przypadku użycia musisz rozważyć strategie ponownego próby lub usuwania duplikatów.
- Pełnowartość : podobnie jak w przypadku zmiany kolejności wiadomości, istnieje ryzyko ich utraty. Może to być spowodowane wyłączeniem aplikacji lub urządzenia z powodu wyczerpania baterii, przypadkowego uszkodzenia telefonu, utraty połączenia w tunelu lub otrzymania wiadomości poza dozwolonym oknem. Jak niepełne dane wpłyną na Twoje wyniki?
To nie jest pełna lista, ale wprowadzenie. Oto kilka bardzo polecanych materiałów, które pomogą Ci lepiej zrozumieć te tematy.
Współtwórcy
Dokument ten jest utrzymywany przez Google. Pierwotnie napisali go autorzy wymienieni poniżej.
Główni autorzy:
- Mary Pishny | Product Manager, Google Maps Platform
- Ethel Bao| inżynier oprogramowania, Google Maps Platform
- Mohanad Almiski | Inżynier oprogramowania, Google Maps Platform
- Naoya Moritani | inżynier rozwiązań, Google Maps Platform