
Integracja z Magento 2 #1 — stabilność integracji, obsługa awarii, kolejkowanie
Każde zaawansowane wdrożenie e-Commerce wiąże się z integracją. W końcu Twoja firma funkcjonuje w dużo większym kontekście biznesowym. Sprzedaż to nie wszystko! Ważne są też zarządzanie dostawami, zamówieniami, klientami, produktami i tak dalej. Jeśli używacie więcej niż jednego systemu, prawdopodobnie temat integrowania masz już za sobą. Co więcej, z dużym prawdopodobieństwem niekoniecznie wspominasz go z przyjemnością.
Co mogło pójść nie tak? Kilka przykładów:
- Ktoś źle opracował zakres integracji, przez co kluczowe dane nie przenosiły się przez jakiś czas między systemami. Później trzeba było to odkręcać.
- Synchronizacja danych trwała bardzo długo, przez co opóźniła się realizacja zamówień.
- Wystąpiła awaria systemu, a po przywróceniu okazało się, że część danych „rozjechała się” między systemami.
- Pracownicy ciągle widzą braki między systemami, więc sprawdzają i tu, i tu.
Mógłbym tak cały dzień. Kiedyś przejmowaliśmy sklep klienta „na wczoraj”, bo ktoś zaprojektował integrację tak, że zamówienia poszły nie tam, gdzie trzeba, a przy okazji procesy się zapętliły i wysiadł sklep. To nie jest informacja, którą chciałbyś usłyszeć, przychodząc do pracy. Dokładnie te same kwestie trzeba poruszyć przy integrowaniu Magento 2 z systemami Twojej firmy. Dokładnie tych problemów trzeba unikać. Dlatego dzisiejszym artykułem rozpoczynamy serię, dzięki której dowiesz się:
- jak zaplanować integrowanie systemów,
- które dane i w jakim zakresie będziemy synchronizować,
- jak zapewnić stabilność integracji,
- co zrobić, żeby synchronizacja systemów nie trwała w nieskończoność,
- na co zwrócić uwagę przy wyborze agencji,
- jak ustrzec się błędów wdrożenia.
Z czym i jak integruje się Magento?
Zaczniemy od podstaw, czyli odpowiedzenia sobie na pytanie, z czym właściwie możesz integrować Magento. Wachlarz integracji, jakie możemy wykonać w ramach wdrożenia e-Commerce, jest ogromny, a same sposoby integracji — zróżnicowane.
W jaki sposób przyjdzie Ci integrować:
- kawałek kodu zamieszczony w witrynie — w taki sposób integrujemy na przykład Google Analytics. To chyba najprostsze rozwiązanie, bo zazwyczaj nie wymaga wielkiej wiedzy programistycznej (choć nie zawsze), a większość usług ma już nawet wtyczki do Magento;
- pliki — synchronizacja danych polega na eksporcie danych w odpowiednim formacie (na przykład pliki CSV) i określonej strukturze, a później zaimportowanie ich w drugim systemie. Obie czynności mogą być wykonane automatycznie. W taki sposób integruje się często systemy, które nie dają innych możliwości;
- integracja z bazą danych — synchronizacja polega na zapisywaniu danych bezpośrednio do bazy obcego systemu. Taka operacja zazwyczaj jest szybka, ale niesie ze sobą większe ryzyko utraty spójności danych;
- middleware — synchronizacja odbywa się przez system „trzeci”, który łączy ze sobą dwa punkty (na przykład pobiera z jednego przez API i wysyła na API drugiego);
- integracja przez API — często systemy udostępniają mechanizmy komunikacji, za pomocą których można wysłać/pobrać odpowiednie dane. Magento też ma swoje API, za pomocą którego można się z nim połączyć i pobrać na przykład dane dotyczące zamówień. Taki sposób jest najbardziej bezpieczny, bo wykorzystujemy pewien standard, który został opracowany przez programistów i teoretycznie powinien obsługiwać wszelkiego rodzaju błędy.
Drugą ważną sprawą są systemy, które integrujemy. Tutaj znowu wszystko zależy od Twojego biznesu, ale najczęściej w temacie integracji przewijają się:
- WMS (Warehouse Management System) — najczęściej synchronizowane są stany magazynowe na potrzeby pokazywania dostępności produktów. Często też może wystąpić automatyzacja rezerwacji towaru, czy wystawiania dokumentów magazynowych (ale to zazwyczaj robi już inny system);
- POS (Point of Sale) — jeśli wdrażasz omnichannel, musisz pamiętać o synchronizacji danych z systemem POS. Mimo że zazwyczaj POS jest częścią ERP, znam przypadki, gdzie zbieranie zamówień ze sklepów stacjonarnych przebiegało przez Magento;
- CMS (Content Management System) — najczęściej Magento wystarczy do budowania treści, ale czasami są sytuacje, gdzie integruje się na przykład bloga na WordPressie;
- ERP (Enterprise Resource Planning) — zdecydowanie najczęściej integrowany system, przede wszystkim dlatego, że rzadko przedsiębiorstwo nie ma wdrożonego ERP-a. Niezależnie, czy używasz rozwiązania Comarch, InsERT, SAP, rozwiązań dedykowanych czy SaaS, na 99% Twoje Magento powinno być z nimi zintegrowane;
- CRM (Customer Relationship Management) — często ERP nie wystarcza do zarządzania klientami (szczególnie w zakresie wizyt, notatek osobistych, historii aktywności, etc.). W takim wypadku będziesz potrzebował synchronizacji takich danych;
- PIM (Product Management System) — dojrzałe firmy z rozbudowanym działem produktu najprawdopodobniej będą potrzebowały integracji z PIM. Pisaliśmy o tym na blogu wielokrotnie przy okazji opisywania Akeneo, PIM to rozwiązanie, które coraz częściej staje się standardową technologią dla zaawansowanego biznesu;
- systemy afiliacyjne — jeśli Twoja firma prowadzi programy lojalnościowe lub afiliacyjne, informacje o saldzie konta i historii aktywności na pewno przydadzą się one w Magento;
- systemy kurierów (DPD, DHL, PocztaPolska, Paczkomaty itp.) — tu znowu dużą część może przyjąć na siebie ERP. Jeśli jednak nie jest zintegrowany, warto przemyśleć automatyczne zamawianie kuriera, drukowanie listów przewozowych czy obliczanie kosztów przesyłki;
- zewnętrzne systemy obsługi wyszukiwań (np. FactFinder) — zła wiadomość: Magento nie ma najlepszej wyszukiwarki (i w Magento 2 wcale się to nie poprawiło). Dobra wiadomość, a w zasadzie dwie: w wersji 2.3 przewidziany jest Elasticsearch, są także serwisy, które pomogą użytkownikom w znalezieniu najlepszego produktu;
- systemy rekomendacji (np. QuarticON) — tak jak wyżej, Magento nie automatyzuje rekomendacji produktowych (choć są do tego moduły), ale są zewnętrzne usługi, które zrobią to za nas;
- zewnętrzne systemy sprzedażowe (np. eBay, Amazon itp.) — jeśli sprzedajesz w zewnętrznych kanałach, na pewno warto zintegrować się z nimi w zakresie oferty produktowej i wymiany zamówień;
- marketing automation (np. SALESmanago, Mautic) — automatyzacja marketingu to bardzo gorący temat i prawdopodobnie powinieneś wykorzystać takie podejście w swoim sklepie. Wówczas integracja będzie polegała na wymianie historii użytkownika, aby lepiej dopasować marketing do jego potrzeb.
Jak widzisz — jest się czego bać :). Często na potrzeby oferty analizujemy środowiska naszych klientów i najczęściej architektura wygląda mniej więcej tak:
Wybór odpowiedniego software house jest kluczowy — to chyba już oczywiste.
W którą stronę integrować?
Z obrazka wyżej widać, że punktów na mapie rozwiązań może być bardzo dużo. Jedną sprawą jest, co z czym połączyć (o tym w osobnej części), ale równie ważne jest — w którą stronę?
Tu znowu nie ma łatwej odpowiedzi. Jeśli system nie umożliwia żadnych modyfikacji, rozwiązanie jest zupełnie proste — wszystko musi wydarzyć się po stronie Magento. W innych przypadkach:
- Pamiętaj, żeby ograniczyć ilość mechanizmów;
- Generalnie najlepiej, jeśli da się wysyłać z systemu informację o zmianie danego obiektu (na przykład, jeśli potrzebujemy odzwierciedlać statusy zamówienia z ERP, to albo co chwilę odpytujemy ERP o zmiany w zamówieniu, albo ERP rozgłosi informację o zmianie w momencie jej wystąpienia);
- Pierwszeństwo mają systemy, które mają API (bo wtedy Twoje dane na pewno będą bezpieczne);
- Przewagę ma zawsze silniejszy (czyli jeśli masz na stole integrację z hurtownią produktów, na 99% to Ty będziesz musiał się integrować z nią, nie odwrotnie);
- Integruj się tak, żebyś mógł zapanować nad procesem. Zdecydowanie łatwiej zrobić w Magento cały panel odpowiedzialny za status procesów, niż monitorować demona, który pracuje sobie na serwerze w tle.
Magento REST API
Mam dla Ciebie dobrą informację — Magento ma wbudowane REST API, dzięki któremu już na starcie możesz zintegrować dowolny system zewnętrzny ze swoim e-Commerce w niemal nieograniczonym zakresie. Szczegółowe informacje o API znajdziesz pod tym adresem: https://devdocs.magento.com/guides/v2.2/rest/bk-rest.html
W skrócie, dzięki domyślnemu API, możemy zarządzać kluczowymi obiektami w systemie:
- produktami,
- klientami,
- zamówieniami,
- koszykami klientów,
- etc.
w zakresie odczytu, dodawania, modyfikacji i edycji. Trudności pojawiają się w momencie przeniesienia sesji użytkownika do API, ale z tym też można sobie poradzić (realizowaliśmy taką potrzebę w aplikacji mTIM).
Middleware
Więcej uwagi zasługuje na pewno rozwiązanie typu middleware, głównie dlatego, że to bardzo „higieniczne” podejście do integracji.
Główne argumenty za wykorzystaniem tego sposobu:
- odciążasz systemy z obsługi integracji,
- możesz dołączyć kolejne systemy,
- możesz wykonać w międzyczasie translację danych z jednego formatu do innego,
- możesz obsłużyć różne wersje i formaty danych.
Minus to oczywiście kolejny klocek, którym trzeba zarządzać i rozwijać. Możesz pomyśleć, że oprogramowanie, które integruje dane (np. szyna danych), jest dla systemu tym samym, co PIM dla ERP i sklepu. Wszystko zależy tak naprawdę od potrzeb Twojej firmy.
Monitorowanie działania integracji
W przypadku integracji najgorsze jest wtedy, kiedy nic nie działa i nikt nie wie dlaczego.
Jak wspomniałem wcześniej, historii ze źle działającą integracją znam dziesiątki. Nie będziemy przytaczać więcej i gnębić firm, które za nimi stoją. Dlaczego? Bo błędy się zdarzają. Nam też.
Dlatego tak ważne jest monitorowanie procesów.
Problemy w działaniu integracji mogą pojawiać się na wielu płaszczyznach — sprzętowej, programowej czy logicznej (np. brak produktu lub błędny identyfikator produktu w systemie docelowym, który uniemożliwia poprawne przesłanie danych zamówienia).
Jak temu zapobiec? Przede wszystkim loguj wszystko, co się da. Dzięki temu będziesz miał historię (a także dowód w rozmowie z firmą) procesów razem z informacją, który się powiódł, a który nie. W celu monitorowania aktywności/zdarzeń między poszczególnymi systemami w obrębie integracji możemy użyć narzędzia do zbierania i przeglądania logów, np. ELK Stack. Dzięki temu będziemy mogli w łatwy sposób znaleźć źródło ewentualnych problemów lub nawet ustawić powiadomienia/alerty o akcjach zakończonych niepowodzeniem.
Oprócz używania scentralizowanych logów możemy także wykorzystać zewnętrzne narzędzia do monitorowania cyklicznych wywołań, np. Healtchecks.io. Narzędzie to pozwala na zdefiniowanie cyklicznej akcji i określenie jej cykliczności. Musimy tylko dodać na końcu odpowiednie wywołanie URL. Jeżeli powiadomienie nie zostanie wywołane z poziomu naszej akcji w określonej ramie czasowej, otrzymamy powiadomienie od systemu Healtchecks.io, że jest jakiś problem i powinniśmy sprawdzić poprawność wykonania danej akcji cyklicznej.
Używanie kolejek (np. RabbitMQ)
Ostatnia rzecz na dzisiaj — kolejki.
Pamiętam, jak kiedyś przypadkiem nasz klient usunął sobie znaczną część produktów ze sklepu. Odtworzenie z backupu? Będzie problem z dziurą w zamówieniach. Odtwarzanie selektywne? Trochę potrwa. Ponowna synchronizacja? No właśnie, ponowna synchronizacja — większość firm powie, że szybciej będzie odwtorzyć backup. Chyba, że korzystasz z wielowątkowych kolejek. Co jeszcze zyskujemy, wdrażając mechanizmy kolejkowe?
- Rozdzielenie procesu na małe zadania (po co wysyłać 100 zamówień na raz, skoro można każde wysłać osobno),
- lepsza kontrola nad danymi,
- łatwiejsze wyłapywanie błędów,
- łatwe wznowienie integracji po awarii,
- odciążenie bazy danych,
- priorytetyzacja zadań (pamiętasz, jak czekałeś aż wyśle Ci się zamówienie do ERP, bo najpierw importowało się 1000 produktów?),
- kolejki są zoptymalizowane pod duże ilości operacji (porównanie Rabbitmq 2.3 i 2.4 można znaleźć tutaj: http://www.rabbitmq.com/blog/2011/03/28/very-fast-and-scalable-topic-routing-part-2/).
Podsumowanie
Sama integracja Magento 2 z innymi systemami nie jest wybitnie skomplikowana dla osób z dużym doświadczeniem. To, co stanowi jednak o powodzeniu, to przede wszystkim plan i jego dobra realizacja. Mam nadzieję, że niniejszym artykułem również odrobinę ułatwiłem podejście do tego zagadnienia.
W kolejnym artykule z tej serii dowiesz się, jakie są newralgiczne momenty podczas integracji od strony zarządzania produktami.