Integracja z Magento 2 #1 — stabilność integracji, obsługa awarii, kolejkowanie

24.10.2018 / / Developers

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:

  1. 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ć.
  2. Synchronizacja danych trwała bardzo długo, przez co opóźniła się realizacja zamówień.
  3. Wystąpiła awaria systemu, a po przywróceniu okazało się, że część danych „rozjechała się” między systemami.
  4. 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:

Architektura

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:

  1. Pamiętaj, żeby ograniczyć ilość mechanizmów;
  2. 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);
  3. Pierwszeństwo mają systemy, które mają API (bo wtedy Twoje dane na pewno będą bezpieczne);
  4. 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);
  5. 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.

ELK Stack

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.