Sygnały z floty działającej na ziemi w prawie rzeczywistym czasie są przydatne dla firm na wiele sposobów. Firmy mogą na przykład używać tych funkcji, 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 zagadnienia 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, poznaj punkty integracji i najważniejsze kwestie dotyczące Fleet Engine, które nadal mogą być przydatne.
- Osoby, które chcą ogólnie poznać sposób generowania i wykorzystywania zdarzeń z flot.
Po przeczytaniu tego dokumentu powinieneś mieć podstawową wiedzę o kluczowych elementach i uwzględnianych kwestiach dotyczących systemu strumieniowego oraz o elementach składowych Map Google Platform i Google Cloud, które tworzą 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 podróżami. Z tych zdarzeń możesz korzystać, aby wysyłać powiadomienia, na przykład do zainteresowanych osób, lub uruchamiać inne działania w Twojej flocie.
- Zmiana szacowanego czasu dotarcia
- Zmiana względnego szacowanego czasu dotarcia do zadania
- Czas pozostały do przybycia
- 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 logiczne
Diagram : diagram ten przedstawia ogólne elementy składowe, z których zbudowano referencyjne rozwiązanie Zdarzenia floty.
Rozwiązanie referencyjne zawiera te komponenty:
- Źródło zdarzeń: miejsce pochodzenia oryginalnego strumienia zdarzeń. Zarówno rozwiązanie „Last Mile Fleet Solution”, jak i „On-demand Rides and Deliveries Solution” są zintegrowane z Cloud Logging, co pozwala przekształcać dzienniki wywołań RPC Fleet Engine w strumienie zdarzeń dostępne dla programistów. To główne źródło danych do analizowania.
- Przetwarzanie: w ramach tego bloku nieprzetworzone logi wywołania RPC są konwertowane na zdarzenia zmiany stanu, które są obliczane na podstawie strumienia zdarzeń z dziennika. Aby wykryć taką zmianę, ten komponent wymaga magazynu stanu, który umożliwia porównywanie nowych i poprzednich zdarzeń w celu wykrycia zmiany. Zdarzenia nie zawsze zawierają wszystkich istotnych informacji. W takich przypadkach ten blok może w razie potrzeby wywoływać odpowiednie funkcje w systemie zaplecza.
- 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 dotyczące ostatniej mili floty” lub „Rozwiązanie dotyczące przejazdów i dostaw na żądanie” (które zostanie udostępnione pod koniec trzeciego kwartału 2023 r.), wybór technologii dla „źródła” i „zbiornika” jest prosty. Z drugiej strony, w sekcji „Przetwarzanie” jest wiele opcji. Rozwiązanie referencyjne korzysta z tych usług Google:
Diagram : diagram pokazujący usługę Google Cloud do implementowania rozwiązania referencyjnego.
Układ projektu w Cloud
Zalecamy domyślne wdrożenie wielu projektów. Dzięki temu można wyraźnie oddzielić wykorzystanie Google Maps Platform i Google Cloud oraz powiązać je 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, 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 pamięć stanu
- Bezserwerowy magazyn klucz-wartość
- Cloud Pub/Sub jako punkt integracji z komponentami w górę i w dół
- luźno sprzężona integracja w prawie rzeczywistym czasie,
Funkcji można używać w postaci domyślnej z ustawieniami domyślnymi, ale można je też przekonfigurować. Parametry konfiguracji są ustawiane za pomocą skryptów wdrażania 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 wdrożyć tę usługę 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 konfigurowalnych zmiennych, z których większość ma wartości domyślne, dzięki czemu możesz szybko rozpocząć pracę, a zarazem masz możliwość dostosowania ich do swoich potrzeb i preferencji.
Modułach zawartych w rozwiązaniu referencyjnym:
- Konfiguracja logowania Fleet Engine: automatyzowanie konfiguracji związanych z Cloud Logging 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 lepiej zrozumieć, co Google Cloud oferuje, aby zapewnić Ci większą kontrolę nad bezpieczeństwem, zapoznaj się z tymi artykułami.
Dalsze działania
Możesz teraz otworzyć i użyć narzędzia do analizowania zdarzeń floty. 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 wartościami SLO w podgrupie floty w godzinach szczytowego zapotrzebowania na zasoby, 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 opóźnienie ma być niskie, 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 wybieraj 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 w takim położeniu, aby móc korzystać z wartościowych, ale stosunkowo drogich usług.
- 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 się nie dzieje. Wysoką wydajność z infrastrukturą działającą bez przerwy można rozważyć w późniejszej fazie wdrażania, 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 połączenia usług. Dzięki temu łatwiej będzie Ci później zamienić poszczególne elementy.
- I wreszcie, nie mniej ważne, bezpieczeństwo nie może być zaniedbywane. Usługa działa w środowisku publicznej chmury, więc nie może być żadnych niezabezpieczonych wejść do systemu.
Pojęcia związane ze strumieniowaniem
Jeśli dopiero zaczynasz korzystać z metody opartej na zdarzeniach lub strumieniowego przesyłania danych, warto poznać najważniejsze pojęcia, z których niektóre mogą się znacznie różnić od przetwarzania w partiach.
- Skalowanie : w odróżnieniu od przetwarzania wsadowego, w którym zwykle masz dobrą orientację w ilości danych do przetworzenia, w przypadku przetwarzania strumieniowego nie możesz tego określić. Korki w mieście mogą nagle generować dużą liczbę zdarzeń z określonego obszaru, które trzeba będzie przetworzyć.
- Okna : zamiast przetwarzania zdarzeń pojedynczo często zdarza się, że chcesz grupować zdarzenia na osi czasu w mniejsze „okna” jako jednostki do obliczeń. Do wyboru są różne strategie okna, np. „okno stałe (np. każdy dzień kalendarzowy)”, „okno przesuwające się (ostatnie 5 minut)” czy „okno sesji (podczas tej podróży)”. Im dłuższe okno, tym dłuższy czas oczekiwania na wyniki. Wybierz odpowiedni model i konfigurację, które spełniają Twoje wymagania.
- Reguły : 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 raczej 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% ukończenia 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 w sieciach mobilnych, 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. Ogólnie zdarzenia należy przetwarzać na podstawie „czasu zdarzenia”.
- Dostarczanie wiadomości – co najmniej raz a dokładnie raz: różne platformy obsługują te opcje w różny sposób. W zależności od przypadku użycia musisz rozważyć strategię ponownego próbowania lub deduplikacji.
- Pełnowartość : podobnie jak w przypadku zmiany kolejności wiadomości, istnieje ryzyko ich utraty. Może to być spowodowane wyłączeniem aplikacji i urządzenia z powodu czasu pracy baterii urządzenia, niezamierzonego uszkodzenia telefonu, utraty połączenia w tunelu lub wiadomości, która została odebrana, ale poza dozwolonym oknem. Jak niepełne dane wpłyną na Twoje wyniki?
Ta lista nie jest pełna, ale stanowi wprowadzenie. Oto kilka bardzo polecanych artykułów, które pomogą Ci lepiej zrozumieć poszczególne tematy.
Współtwórcy
Dokument 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 | Software Engineer, Google Maps Platform
- Naoya Moritani | inżynier rozwiązań, Google Maps Platform