e-Commerce w ChmurzeHandel

Chmura hybrydowa



Chociaż aplikacje e-commerce tradycyjnie były postrzegane jako monolityczne, a nakładki (np. HTML, CSS, JavaScript) były nierozerwalnie połączone z backendami (np. Kod zawierający logikę biznesową podłączoną do bazy danych), nie musi tak być. W dzisiejszym świecie wielokanałowym podejście polegające na nierozerwalnym połączeniu tych dwóch elementów nie ma już sensu z technicznego ani strategicznego punktu widzenia. Jeśli podzielisz swój frontend od backendu, większość wyświetleń stron może być wyświetlana z twojego frontendu bez dotykania go. Tylko wtedy, gdy dokonujesz transakcji - dodajesz do koszyka, kasujesz, aktualizujesz profil i tak dalej - w rzeczywistości musisz dotknąć backendu. W tym modelu backend znacznie się kurczy i pozostaje pod twoją silną kontrolą, a frontend może elastycznie wchłaniać większość odsłon w publicznej chmurze. DNS ostatecznie rozwiązuje problem z interfejsem użytkownika, który następnie wywołuje go w razie potrzeby.Dokładnie tak działa większość innych kanałów, z wyjątkiem Internetu. Grube aplikacje klienckie, takie jak te znalezione w kioskach lub smartfonach, już działają w ten sposób z twoim backendem. Czas, aby Internet nadrobił zaległości w stosunku do tego modelu. Oprócz powodów strategicznych istnieją praktyczne powody, dla których należy je rozdzielić. Potrzeby hostingowe dla frontendu różnią się od potrzeb backendu. Twój backend wymaga:

•  Jedna lub więcej wysoce dostępnych iw pełni zabezpieczonych baz danych
•  Terabajty pamięci o wysokiej dostępności i pełnej kopii zapasowej
•  Wysokiej jakości, niezawodny sprzęt
•  Wiele zapór ogniowych
•  Integracja z innymi systemami zaplecza
•  Najwyższa możliwa dostępność
•  Najwyższe możliwe bezpieczeństwo danych w spoczynku
Chociaż chmury mogą to zaoferować, wielu będzie łatwiej i bezpieczniej zachować to w domu. Twój interfejs wymaga:

•  Szybka elastyczność
•  Duża przepustowość
•  Najwyższe możliwe bezpieczeństwo danych w ruchu
•  Być niedrogim

Te atrybuty sprawiają, że chmura naturalnie pasuje do frontendów. Zanim poznasz różne smaki rozdzielania frontendów od backendów, sprawdźmy, w jaki sposób ta architektura jest naturalnym produktem ubocznym architektury omnichannel.

Chmura hybrydowa jako produkt uboczny architektury Omnichannel

Tradycyjnie aplikacje e-commerce zostały napisane i wdrożone w jednym pakiecie zawierającym:

•  HTML / CSS / JavaScript
•  Kod skryptowy po stronie serwera, taki jak JSP i ASP
•  Kod po stronie serwera, taki jak Java lub C #

Ten pakiet był zwykle wdrażany na serwerze aplikacji jako pojedyncze archiwum, takie jak plik WAR lub EAR. Aby dostać się do skompilowanego kodu po stronie serwera, musiałeś najpierw przejść przez kod skryptu po stronie serwera. Programiści pracowali zarówno nad kodem frontendowym, jak i backendowym. Kiedy internet był jedynym kanałem, działało to dobrze. Wielokanałowy osiągnął pełnoletność w połowie 2000 roku, kiedy mobilność zaczęła się rozwijać. Nie wprowadzono żadnych istotnych zmian w architekturze, aby obsługiwać urządzenia mobilne i nowe kanały, które po nim nastąpiły. Oprócz istniejącego stosu zbudowano dodatkowe kanały obsługujące interfejs użytkownika HTML oparty na przeglądarce internetowej, a integracja skleiła wszystko razem. Każdy kanał działał w silosie, nieświadomy tego, co się działo w innym kanale, chyba że między dwoma kanałami była pełna integracja dwukierunkowa. Nawet przy pełnej dwukierunkowej integracji wrażenia klientów były nadal słabe, ponieważ integracja heterogenicznych systemów jest z natury podatna na błędy, a aktualizacje są zawsze asynchroniczne. Jak omawialiśmy w poprzednich rozdziałach, rozwiązaniem tego problemu jest zbudowanie pojedynczej platformy omnichannel, w której podstawowa funkcjonalność (składanie zamówienia, dodawanie do koszyka, rejestracja nowego konta) jest ujawniana jako usługa, z dowolnym interfejsem użytkownika zdolnym do ich wykorzystania usługi .Ta architektura całkowicie eliminuje potrzebę wykonywania jakiejkolwiek integracji, ponieważ różne specyficzne dla kanału interfejsy użytkownika służą teraz jako kanały do tej samej platformy zaplecza. Zarówno sprzedaż detaliczna omnichannel, jak i chmury hybrydowe wymagają oddzielenia frontonu od backendu. Podział jest naturalnym wynikiem architektury opartej na omnichannel. Po zerwaniu nakładki z zaplecza możesz wdrożyć każdą warstwę osobno, a wszystkie interakcje odbywają się za pomocą jasno zdefiniowanego interfejsu API. Ten interfejs API może być ponownie wykorzystywany we wszystkich kanałach i interfejsach, przy czym wszyscy klienci przeprowadzają transakcje z tym samym backendem. Klienci uwielbiają płynną interakcję między kanałami z następujących powodów:

•  Ceny, promocje, zapasy, asortyment produktów i wszystkie inne dane są takie same we wszystkich kanałach.
•  Klienci nie muszą tworzyć profili unikalnych dla każdego kanału.
•  Klienci mogą aktualizować ten sam koszyk na wiele kanałów. Na przykład klient może rozpocząć zamówienie na urządzeniu mobilnym i zakończyć je na komputerze stacjonarnym w pracy.
•  Klienci mogą poprosić agentów Contact Center lub pracowników w sklepie fizycznym o pomoc w realizacji zamówienia rozpoczętego online.

Wielokanałowy z natury prowadzi do fragmentacji, która denerwuje klientów. Z drugiej strony Omnichannel pozwala na bezproblemowe zaangażowanie klientów we wszystkich kanałach. Zanim będziemy mogli omówić różne podejścia do chmury hybrydowej i jej skrzyżowania z sprzedażą omnichannel, musimy omówić, jak najlepiej połączyć backend z frontendem w chmurze.

Łączenie z chmurą

Kiedy twój frontend jest fizycznie oddalony od twojego backendu, musisz połączyć je razem z połączeniem. Każde żądanie HTTP do twojego interfejsu może skutkować od zera do potencjalnie dziesiątek żądań do twojego interfejsu. Żądania są zazwyczaj HTTP, ale mogą nawet być wywołaniami bazy danych. Połączenie omówione w tej części jest niezwykle ważnym łącznikiem między dwiema połówkami platformy, więc musi być przynajmniej wysoce dostępne i zapewniać wystarczającą przepustowość. Poza tym połączenie może opcjonalnie zapewniać bezpieczeństwo i niskie opóźnienia. Mimo że wydaje się to ważnym atrybutem, bezpieczeństwo nie ma aż tak wielkiego znaczenia. Zawartość każdego żądania HTTP lub innego protokołu komunikacyjnego musi być zabezpieczona (np. SSL / TLS w przypadku HTTP), ale komunikacja może odbywać się przez Internet. Na przykład sieci VPN zabezpieczają ładunek, ale działają przez Internet. Najważniejsze jest zabezpieczenie ładunku, ponieważ należy założyć, że połączenie jest zawsze zagrożone. Opóźnienie jest również mniej ważnym atrybutem, choć zależy od architektury. Im więcej połączeń wykonujesz z frontendów do backendów i im więcej tych połączeń jest zsynchronizowanych, tym bardziej potrzebujesz niskich opóźnień. Niektóre aplikacje będą wymagały niemal kolokacji frontendu z backendem ze względu na liczbę wyszukiwań w systemach backendowych. Aby poprawić wydajność, zdecydowanie rozważ użycie akceleratora WAN. Jeśli udostępniasz backend z dwóch lub więcej centrów danych, zdecydowanie rozważ skierowanie frontendów do backendów za pomocą globalnego modułu równoważenia obciążenia z routingiem opartym na opóźnieniu. Zapewni to, że każdy frontend łączy się z dostępnym backendem, który oferuje najniższe możliwe opóźnienia. Przy wyborze dostawcy należy poważnie rozważyć szeroki zakres i głębokość opcji łączności oferowanych przez potencjalnego dostawcę w chmurze. Przeanalizujmy trzy ogólne podejścia do łączenia backendów z frontendami w chmurze.

Publiczny Internet

Pierwsze podejście polega na korzystaniu z publicznego Internetu. Możesz udostępnić swój backend w Internecie za pośrednictwem domeny takiej jak backend.website.com. To właśnie dzieje się dzisiaj dla każdego kanału oprócz Internetu. Dane mogą być następnie przesyłane między frontendem a backendem przez HTTPS, dokładnie tak, jak między klientem a chmurą. Innymi słowy, dane w locie między twoim frontendem a backendem nie są bardziej niezabezpieczone niż między klientem a chmurą. Dzięki takiemu podejściu HTTP GET (np. Https://backend.website.com/AddToCart?order- Id = 12345 & skuId = 67890 i qty = 1) jest niezabezpieczony, ponieważ mimo że treść żądania HTTP jest bezpieczna, adres URL jest widoczny dla świat. Aby uniknąć tego problemu, musisz wysłać HTTP POST danych na https://backend.website.com/AddToCart:

{
"orderId": "12345",
"skuId": "67890",
"qty": 1,

}

Oprócz HTTPS będziesz chciał użyć dodatkowego mechanizmu bezpieczeństwa, aby nikt poza twoim frontendem nie mógł dokonywać transakcji za pomocą backendu. W przeciwnym razie każdy w Internecie byłby w stanie dowolnie wykonywać polecenia przeciwko backendowi. Wzajemne uwierzytelnianie oparte na certyfikatach jest świetnym sposobem na zrobienie tego, chociaż istnieją inne. Wymagane jest, aby tylko uwierzytelnieni klienci mogli wysyłać żądania HTTP do backendu. Możesz skonfigurować moduł równoważenia obciążenia zaplecza, aby akceptował tylko ruch z zakresu adresów IP należących do dostawcy usług w chmurze, ale przy tak elastycznym handlu elektronicznym nigdy nie będziesz mógł skonfigurować modułu równoważenia obciążenia zaplecza, aby dodać do białej listy każdy adres IP. Haker nie potrzebowałby również dużo, aby zapewnić serwerowi chmurę publiczną i wysłać stamtąd żądania HTTP, aby ominąć filtr zasięgu

VPN

Oprócz HTTPS możesz dodać kolejną warstwę zabezpieczeń w komunikacji między frontendem a backendem, korzystając z VPN opartej na protokole IPsec. Ruch odbywa się nadal przez Internet, ale teraz masz dwie warstwy zabezpieczeń: SSL / TLS dla HTTPS i IPsec. Dostawcy usług w chmurze oferują te sieci VPN jako integralną część swojej oferty. Jak zawsze należy unikać używania protokołu HTTP GET do przenoszenia poufnych danych w obie strony.

Połączenia bezpośrednie

Wielu dostawców usług w chmurze oferuje dostawcom colo możliwość prowadzenia dedykowanych linii światłowodowych w swoich centrach danych. Umożliwia to dostawcom colo budowanie centrów danych w tym samym obszarze metra co dostawców chmur i oferowanie w chmurze prywatnych połączeń LAN. Dzięki fizycznie zamkniętym centrom danych uzyskuje się opóźnienie na poziomie milisekund i przepustowość na poziomie wielu gigabitów na sekundę. Połączenia te są dedykowane i nie dotykają Internetu, tym samym dodając kolejną warstwę bezpieczeństwa.

Podejścia do chmury hybrydowej

Buforowanie całych stron

Świetnym pierwszym krokiem w przejściu na przetwarzanie w chmurze jest przeniesienie stron statycznych do chmury w taki sam sposób, jak CDN obsługują strony statyczne i zawartość statyczną . Oczywiście wszystko, co dynamiczne lub jeszcze nie buforowane, musi być podawane bezpośrednio od źródła. Odpowiedzi HTTP, bez względu na to, czy typ odpowiedzi to HTML, XML, JSON, czy inny format, działają w ten sam sposób, z tą różnicą, że treść może się różnić w zależności od kilku czynników:

•  Czy klient jest zalogowany
•  Przeglądarka internetowa / agent użytkownika
•  Fizyczna lokalizacja (często dokładna do zip + 4 w USA lub kod pocztowy poza USA)
•  Szybkość połączenia internetowego
• Ustawienia regionalne
•  System operacyjny

Pod warunkiem, że możesz zidentyfikować zmienne wpływające na odpowiedzi HTTP i odpowiednio różnicować odpowiedzi HTTP, to podejście działa bardzo dobrze w przypadku odciążania większości twoich żądań HTTP. Buforowanie tego rodzaju jest powszechnie stosowane, szczególnie przed dużymi ruchami, na przykład przed wakacjami lub podczas specjalnych wydarzeń, takich jak Superbowl. Użyj tego podejścia, aby zoptymalizować istniejącą witrynę e-commerce, niezależnie od tego, czy jest zgodna z zasadami architektury omnichannel. Jest szybki i łatwy do zrobienia i działa najlepiej na stronach, które nie zmieniają się tak bardzo. Strony główne, kategorie stron docelowych i najlepiej sprawdzają się strony ze szczegółami produktu. Aby to zrobić, potrzebujesz oprogramowania, które wykonuje następujące czynności:

•  Siedzi między klientem a punktem końcowym (zazwyczaj serwerem aplikacji). Serwery proxy i usługi równoważenia obciążenia zwykle spełniają tę potrzebę.
•  Może zbadać każde żądanie HTTP. W stosie OSI odnosi się to do warstwy 7. Na przykład oprogramowanie powinno być w stanie spojrzeć na nagłówek żądania HTTP agenta użytkownika.
•  Może akceptować reguły czarnej listy dotyczące tego, czego nie należy buforować. Na przykład powinieneś być w stanie zdefiniować regułę, która mówi, że wszystko w / checkout powinno być natychmiast przekazywane z powrotem do źródła.
•  Rozumie zmienne wpływające na odpowiedź. Na przykład możesz zmieniać odpowiedź w zależności od tego, czy klient jest zalogowany, czym jest agent użytkownika i fizyczną lokalizację. Każdy z tych atrybutów połączyłby się, tworząc unikalny klucz. Jeśli istnieje buforowana kopia, powiedzmy, XML odpowiadająca temu kluczowi, powinna być zwracane. Jeśli nie, żądanie należy przekazać z powrotem do źródła z odpowiedzią źródło generuje buforowane.
•  Może szybko i skutecznie przechowywać i pobierać gigabajty danych w pamięci podręcznej.
•  Może szybko opróżniać pamięci podręczne po aktualizacjach bazowych danych.

Kluczem jest identyfikacja zmiennych, które powodują, że wyjście każdego adresu URL zmienia swoją odpowiedź. Po ich zidentyfikowaniu możesz zbuforować większość żądań HTTP. Pośrednicy wszelkiego rodzaju są w stanie to zrobić. Równoważniki obciążenia i serwery proxy są typowymi przykładami, ale nawet wiele serwerów WWW jest w stanie to zrobić. Ta funkcja jest wbudowana w sieci CDN, które mogą służyć jako odwrotne serwery proxy, ale można także wdrażać wybrane oprogramowanie w publicznych chmurach IaaS. Generalnie najlepiej jest polegać na sieciach CDN, aby zapewnić tę funkcjonalność, ponieważ mają one tę zaletę, że wypychają strony z pamięci podręcznej do każdego z dziesiątek, a nawet setek centrów danych na całym świecie. Klienci prawdopodobnie nie znajdą się w odległości większej niż kilka milisekund od punktu końcowego, co oznacza, że większość żądań HTTP może być obsługiwana praktycznie bez opóźnień i bez oczekiwania na wygenerowanie odpowiedzi. Oprócz wydajności CDN-y udostępniają tę funkcjonalność jako SaaS, która uwalnia cię do koncentrowania energii na wyższym poziomie łańcucha wartości. Jedynym przypadkiem zrobienia tego w publicznej chmurze Infrastruktura jako usługa jest to, że jest to Twoja pierwsza próba bardziej merytorycznego przetwarzania w chmurze i chcesz to zrobić jako ćwiczenie edukacyjne. Jest to dość łatwe do zrobienia, ale zapewnia znaczne korzyści. Jeśli nie jesteś jeszcze sprzedawany w chmurach publicznych, możesz to zrobić w swoich istniejących centrach danych. Moduł równoważenia obciążenia, którego używasz dzisiaj, prawdopodobnie ma tę funkcję. Chociaż jest to doskonałe podejście dla ułamka ruchu, aby buforować więcej, musisz spojrzeć na następne podejście.

Nakładanie HTML na buforowane strony

Chociaż wiele żądań HTTP może być obsługiwanych bezpośrednio z pamięci podręcznej, niektóre nie. Na przykład klienci przeglądający stronę ze szczegółami produktu często widzą listę produktów zalecanych na podstawie historii przeglądania lub historii zakupów. Są to tak zwane produkty You Might Like Like, w skrócie YMAL. Gdy większość danej strony jest taka sama, ale zmienia się tylko niewielka część, możesz buforować całą stronę w pośredniku zgodnie z poprzednim podejściem, ale następnie dynamicznie nakładać kilka fragmentów treści, które faktycznie zmieniają się po stronie klienta. Możesz łatwo zastosować tę technikę do:

•  Oceny i recenzje
•  Wózki na zakupy
•  Bułka tarta
•  Banery "Cześć, !" W nagłówku

Oto bardzo prosty przykład tego, jak powinien wyglądać kod:

< head >
< script src = "http://www.website.com/app/jquery/jquery.min.js" >
< /script >
< script >
$ .ajax ({url: "http://backend.website.com/app/RetrieveYMALs?
productId = 12345 i customerId = 54321 ",
sukces: funkcja (wynik) {
$ ("# YMALs"). Html (wynik);
}});
< /script >
< /head >
< body >
< ! - Szczegóły produktu … - >
< div id = "YMALs"> < /div >
… reszta strony internetowej
< /body >

Aby to zadziałało, asynchroniczne żądanie HTTP musi zostać zwrócone tak szybko, jak to możliwe. Jeśli będziesz czekać zbyt długo, aby wykonać żądanie asynchroniczne, klient zobaczy stronę w pełni renderowaną, ale bez nakładki. W przykładzie YMAL klient zobaczy odmalowanie ekranu lub, co gorsza, białe znaki, gdzie produkty powinny być wymienione. Aby to zrobić, wykonaj asynchroniczne wywołanie tak wcześnie, jak to możliwe podczas ładowania strony głównej, aby równolegle jak najwięcej załadować. Umieść połączenie u góry nagłówka. Upewnij się również, że czas reakcji usługi dostarczającej treść odpowiada tak szybko, jak to możliwe. Odpowiedź powinna zająć kilka milisekund, aby uniknąć "przeskakiwania" strony podczas malowania różnych części strony. Musisz także zaprojektować interfejs użytkownika na wypadek awarii. Jeśli żądanie asynchroniczne nie działa, klient nigdy nie powinien wiedzieć. Innymi słowy, nie powinno być dziury, w której powinna znajdować się treść ładowana asynchronicznie. Na koniec zaprojektuj interfejs użytkownika, aby zapewnić płynne wycofanie. Jeśli klient nie obsługuje JavaScript, całkowicie pomiń treść dynamiczną lub wróć do źródła, aby wyświetlić dynamiczną wersję strony. Na przykład większość botów wyszukiwarek nie obsługuje JavaScript. Chcesz, aby cała strona była indeksowana. Po pełnym i prawidłowym wdrożeniu technika ta może znacznie zmniejszyć obciążenie, które uderza w backend. Im więcej podajesz z interfejsu w chmurze, tym mniej musisz z niego obsługiwać.

Korzystanie z sieci dostarczania treści do wstawiania HTML

Zamiast nakładać dynamiczne fragmenty po stronie klienta, tak jak w poprzednim podejściu, można nakładać je na CDN lub równoważny pośrednik. Nie robiąc nic po stronie klienta, nie musisz się martwić o wdzięczne cofnięcie się, jeśli klient nie obsługuje JavaScript lub innych problemów, które pojawiają się, gdy próbujesz zbudować stronę przez asynchroniczne ładowanie HTML z gdzieś indziej. Inną zaletą jest to, że nie musisz na siłę oddzielać nakładki od zaplecza, co omówimy w następnym podejściu. Jeśli chcesz zwiększyć liczbę stron, które możesz wyświetlać z pamięci podręcznej i nie chcesz przepisać aplikacji, to jest twoje podejście. Podobnie jak w przypadku nakładki po stronie klienta, technologia jej wdrażania nie ma aż tak wielkiego znaczenia. Liczy się to, że możesz wyraźnie określić, gdzie chcesz wstawić dynamiczną treść i z jakiego źródła. Najpopularniejszym frameworkiem jest Edge Side Includes (ESI). ESI to prosty język znaczników, który ściśle naśladuje możliwości po stronie serwera, o czym omówimy w dalszej części. Oto przykład, jak mógłby wyglądać kod:

< body >
< ! - Szczegóły produktu … - >
< div id = "YMALs" >
< esi: include
src = "http://backend.website.com/app/
Pobierać YMAL? ProductId = 12345 i customerId = 54321 "/ >
< /div >
…reszta strony internetowej
< /body >

Większość głównych sieci CDN obsługuje ESI, podobnie jak niektóre usługi równoważenia obciążenia i odwrotne proxy. Chociaż najlepiej jest stosować tę technikę w sieciach CDN ze względu na ich zdolność do buforowania zawartości i wypychania jej do krawędzi, z pewnością można używać równoważenia obciążenia i odwrotnych serwerów proxy. Tutaj kod jest o wiele łatwiejszy do napisania, ponieważ nie musisz się martwić cokolwiek asynchronicznie lub wynikające z tego problemy. Wystarczy wstawić dynamiczne fragmenty strony i zwrócić klientowi cały dokument HTML, gdy będzie gotowy. Niektóre frameworki umożliwiają nawet asynchroniczne ładowanie każdego z dołączeń, a cała strona nie jest zwracana do klienta, dopóki nie zostanie zwrócone ostatnie dołączenie. Poprawia to wydajność, szczególnie jeśli masz wiele różnych opcji. Ponownie, to podejście jest świetnym pośrednikiem, który pozwoli ci buforować znacznie więcej niż w innym przypadku, ale bez konieczności przepisywania aplikacji.

Nakładanie HTML po stronie serwera

To następne podejście polega na tym, że frontend dla Twojej witryny jest niezależnie obsługiwany z chmury, a dynamiczna treść z twojego backendu jest wpleciona w stronę wygenerowaną przez twoją stronę. Jest to zasadniczo inne podejście niż korzystanie z CDN lub klienta do nakładania fragmentów, ponieważ w tym modelu faktycznie obsługujesz frontend niezależnie od backendu. Dzieląc frontend z backendu, pobierasz tylko małe, dynamiczne fragmenty z backendu. Twoja nakładka może być następnie uruchomiona w dowolnym miejscu, tak jak w chmurze publicznej. Frontend, który obsługuje większość ruchu, może następnie dynamicznie skalować w górę i w dół, w razie potrzeby pobierając dynamiczne fragmenty z backendu. Twój backend może być wtedy znacznie mniejszy i hostowany tradycyjnie. Możliwości wstawiania zawartości dynamicznej do istniejącej strony istniały od pierwszych dni Internetu, poczynając od wersji serwerowych, które są nadal używane. Wszystkie biblioteki znaczników skryptowych również obsługują to poprzez importowanie lub dołączanie znaczników. Oto przykład, jak mógłby wyglądać kod:

< body >
< ! - Szczegóły produktu … - >
< div id = "YMALs" >
< ! - # obejmują
virtual = "http://backend.website.com/app/
Pobierać YMAL? ProductId = 12345 i customerId = 54321 "- > < /div >
… reszta strony internetowej
< /body >

Chociaż technologia jest dość prosta, wdrożenia architektoniczne są ogromne. Zamiast po prostu podawać statyczny dokument HTML, a następnie nakładać dynamiczne fragmenty, tak naprawdę generujesz dynamiczną stronę dla każdego klienta w chmurze i po prostu w tym dynamiczne fragmenty, których potrzebujesz z backendu, jeśli to konieczne. To świetny sposób na przeniesienie dużej części obciążenia do dynamicznej chmury. W tym modelu backend jest wyłącznie odpowiedzialny za dostarczenie niewielkiej ilości treści, a frontend jest odpowiedzialny za dostarczenie dużej części rzeczywistej zawartości. To duża różnica, choć techniczne podstawy istnieją od dziesięcioleci.

W pełni odsprzężone frontendy i backendy

We wszystkich dotychczas udokumentowanych podejściach przyjęto, że treść, która zostanie nałożona, to HTML. Ale jak pamiętacie z wcześniejszej części książki, kanał internetowy, w którym używany jest HTML, jest szybko marginalizowany na korzyść kanałów mobilnych i innych. Tylko przeglądarki internetowe używają HTML. Każdy inny kanał zużywa jakąś formę XML lub JSON pochodzącą z twojego źródła, co powoduje, że wszystkie dotychczasowe podejścia nie mają znaczenia dla kanałów nie-internetowych. Dzięki takiemu podejściu frontend znajduje się w chmurze i w razie potrzeby pobiera małe fragmenty dynamicznej zawartości z backendu. Różnica między tym a poprzednim podejściem polega na tym, że odpowiedzią backendu powinien być XML lub JSON zamiast HTML. Odpowiedzi w HTML są z pewnością łatwiejsze, ponieważ nie musisz tak bardzo zmieniać kodu. Problem polega jednak na tym, że uniemożliwia to ponowne wykorzystanie usług zaplecza w różnych kanałach, ponieważ żaden z pozostałych kanałów nie może używać HTML. W tym modelu konstruujesz strony HTML przy użyciu danych z zaplecza, ale nie z prezentacji. Jest to czysty rozdział między prezentacją a logiką biznesową. Oto przykład, jak mógłby wyglądać kod:

< body >
< ! - Szczegóły produktu … - >
< div id = "YMALs" >
< c: import url = "http://backend.website.com/app/
Odzyskać YMAL? ProductId = 12345 i customerId = 54321 "
var = "ymals" / >
< h2 > < c: out value = "$ {ymals.displayText}" > < /h2 >
< c: forEach items = "$ {ymals.products}" var = "product" >
< jsp: include page = "/ app / productDetailYMAL.jsp" >
< jsp: param name = "product" value = "$ {product}" / >
< / jsp: include >
< / c: forEach >
< /div >
… reszta strony internetowej
< /body >

Ponownie jest to fundamentalne odchylenie od liczby dzisiejszych stron internetowych, a backend zapewnia tylko uporządkowane dane. Najlepsze w tym podejściu jest to, że usługi udostępniane przez backend (np. http://backend.website.com/app/RetrieveYMALs) można ponownie wykorzystać we wszystkich kanałach, ponieważ ujawniasz tylko surowe dane. To jest przyszłość architektury e-commerce, niezależnie od tego, gdzie wdrożysz swoje interfejsy i backendy. Takie podejście wymaga znacznych zmian w kodzie i architekturze, ale długoterminowe korzyści są transformacyjne w stosunku do sposobu prowadzenia działalności.

Wszystko oprócz bazy danych w chmurze

Najbardziej ekstremalną formą przetwarzania hybrydowego jest umieszczanie wszystkiego w chmurze publicznej oprócz bazy danych. Twój frontend jest całkowicie podzielony z backendu, aby przestrzegać zasad architektury omnichannel, ale wdrażasz obie warstwy w chmurze, a komunikacja frontend-backend odbywa się całkowicie w chmurze. Tylko Twoja baza danych znajduje się poza chmurą, Ponieważ opóźnienie jest tak ważne, należy stosować to podejście w połączeniu z bezpośrednim połączeniem z "Łączenia z chmurą", w którym hostujesz bazę danych w systemie colo, który ma bezpośrednie fizyczne połączenie z chmurą, z której korzystasz. Wyciągnięcie jednego produktu z bazy danych może spowodować dziesiątki zapytań SQL, ponieważ dane mogą być rozłożone na dziesiątki tabel. Gdy potencjalnie wykonanych jest kilkadziesiąt szeregowych instrukcji SQL na żądanie HTTP, opóźnienie szybko zabija wydajność. W przypadku bezpośredniego połączenia czas oczekiwania powinien wynosić co najmniej milisekundę, sprawiając, że nie jest to już problemem. Bazy danych można wdrażać w chmurze, ale może być łatwiej wdrożyć je w colo podłączonym do chmury, ponieważ bazy danych mają rygorystyczne wymagania dotyczące oprogramowania, sprzętu, sieci, pamięci i bezpieczeństwa, które mogą nie być w pełni oferowane przez bazę danych w Chmura. Zastosowanie monolityczne z nierozdzielnymi frontendami i backendami również może skorzystać z tego podejścia.