Înapoi la blog

Arhitectură software

Sezamo nu este doar un magazin online: anatomia unei platforme distribuite de e-grocery

Un produs comandat trebuie să ajungă și în vehiculul corect. Analizăm platforma distribuită din spatele Sezamo, sincronizarea cu lumea fizică și apariția unui nou tip de client: agentul AI.

La ora 01:00 vrei să adaugi o sticlă de kefir într-o comandă pentru dimineață. Presupunem, pentru acest exemplu, că modificarea mai este permisă. Pentru tine înseamnă o atingere a ecranului. Pentru platformă, schimbarea trebuie să rămână compatibilă cu stocul, pregătirea comenzii și plecarea vehiculului.

Nu este suficient ca o bază de date să conțină încă un rând. Sticla trebuie să existe, să fie disponibilă pentru vânzare, să ajungă în punga potrivită și apoi în duba care deservește adresa ta.

Acesta este punctul de plecare al arhitecturii e-grocery: sincronizarea dintre informație și realitate fizică. O promisiune din interfață trebuie să rămână realizabilă chiar și atunci când stocul, capacitatea depozitului și condițiile de livrare se schimbă între două apeluri API. Continuă direct cu analiza tehnică.

ROHLIK / SEZAMO · EXPLORATOR TEHNIC

Ce se întâmplă în spatele unui simplu „Plasează comanda”?

O hartă conceptuală a legăturilor dintre aplicația clientului, backend, date, AI, infrastructură, depozit și livrare.

342repository-uri active
89tehnologii
≈58deploymenturi în producție / zi
5piețe

Valori declarate de Rohlik, consultate la 28 august 2026. Scanare GitLab: 9 iunie 2026; 342 repository-uri active din 625 analizate. Media ≈58/zi provine din 1.738 deploymenturi în producție în 30 de zile, raportate prin Datadog DORA. Nu sunt măsurători FiraCode în timp real.

Harta sistemului

Mașinăria văzută de sus

Selectează o componentă pentru explicație. Săgețile arată relații conceptuale, nu apeluri API confirmate.

Software-ul coordonează și acțiuni în lumea fizică

Pe ecrane înguste poți derula harta orizontal; cu tastatura, focalizează harta și folosește săgețile.

Infrastructură și livrarea software-ului
  1. GitLab CI/CD
  2. Imagini Docker
  3. ArgoCD / GitOps
  4. Kubernetes / GKE pe Google Cloud

Model de livrare simplificat: construirea imaginilor și reconcilierea configurației sunt responsabilități distincte. Terraform gestionează infrastructura; Datadog, OpenTelemetry, Grafana și Sentry oferă observabilitate. Nu reprezintă un traseu de requesturi.

Componenta selectată

Frontend — React, Next.js, Swift, Kotlin

Pe înțelesul tuturor

Este tejgheaua magazinului. Aici vezi produsele, imaginile, prețurile, butoanele și coșul.

Ce înseamnă tehnic

Frontendul afișează interfața, gestionează interacțiunea locală și comunică prin API-uri cu sistemele backend.

Exemplu: Web: React / Next.js. Android: Kotlin / Jetpack Compose. iOS: Swift / SwiftUI.

Parcurs interactiv

Călătoria unei comenzi

O succesiune ilustrativă, nu ordinea internă confirmată a procesării unei comenzi.

1 / 10

Clientul apasă „Plasează comanda”

Telefonul spune magazinului: „vreau produsele acestea”.

Frontendul trimite una sau mai multe cereri către sistemele backend.

Componenta selectată: Frontend — React, Next.js, Swift, Kotlin. Pasul 1 din 10: Clientul apasă „Plasează comanda”.

Model mental

Regula simplă de memorare

Frontendinterfața și tejgheaua magazinului
Backendregulile și coordonarea operațiunilor
Date și mesajememoria și sistemul poștal
Cloud și Kubernetesinfrastructura și orchestrarea aplicațiilor
AI / MLprognoză și sprijin pentru decizii
WMS și AutoStorecoordonarea depozitului și automatizarea
Optimizarea rutelorrezolvarea puzzle-ului livrărilor
Observabilitatecamera de control
Imaginea de ansamblu

Dintr-o singură privire

  1. Client
  2. Frontend
  3. Backend
  4. Date
  5. Depozit
  6. Trasee
  7. Curier
  8. Client
AI · ML · cercetare operaționalăprognoză · optimizare · agenți · MCP · sprijin pentru decizii
InfrastructurăGoogle Cloud · Docker · Kubernetes/GKE · ArgoCD · Terraform · GitLab CI/CD

Observabilitate: Datadog · OpenTelemetry · Grafana · Sentry

Versiunea textuală completă: componente și pași

Clientul

Tu spui magazinului ce vrei: „vreau kefirul acesta”. De aici pornește întreaga mașinărie.

Interacțiunea începe din aplicația web, Android sau iOS și produce cereri către sistemele backend.

Exemplu: cauți „kefir”, alegi cantitatea și apeși „Adaugă în coș”.

Frontend — React, Next.js, Swift, Kotlin

Este tejgheaua magazinului. Aici vezi produsele, imaginile, prețurile, butoanele și coșul.

Frontendul afișează interfața, gestionează interacțiunea locală și comunică prin API-uri cu sistemele backend.

Web: React / Next.js. Android: Kotlin / Jetpack Compose. iOS: Swift / SwiftUI.

Backend — Java / Spring + Python / FastAPI

Este ansamblul serviciilor care aplică regulile magazinului. Când întrebi „pot cumpăra asta?”, ele verifică ce este permis.

Serviciile backend implementează regulile pentru comenzi, prețuri, stocuri, plăți, capacitatea de livrare și alte domenii.

Rohlik descrie Java drept centrul nucleului tranzacțional, iar Python este folosit extensiv pentru servicii, data, ML și agenți.

Date — MySQL, PostgreSQL, Redis, RabbitMQ, Snowflake

MySQL și Postgres sunt caietele mari. Redis este bilețelul foarte rapid de pe birou. RabbitMQ este poșta. Snowflake este biblioteca pentru analiză.

Bazele OLTP păstrează date tranzacționale, Redis deservește acces rapid, RabbitMQ transportă mesaje între sisteme, iar Snowflake este platformă pentru analytics/data warehouse.

Într-un exemplu conceptual, un eveniment precum ORDER_CREATED poate permite depozitului, notificărilor și analizei să reacționeze separat. Numele evenimentului este ilustrativ.

AI / ML / Operations Research

Este colegul care încearcă să ghicească ce se va întâmpla mâine și să rezolve puzzle-uri cu milioane de posibilități.

Include prognoza cererii, machine learning, optimizare matematică, LLM-uri, agenți AI și MCP. Nu toate aceste funcții sunt etape ale fiecărei comenzi.

Rohlik descrie estimarea cererii, planificarea personalului, alegerea produselor pentru automatizare și predicția duratelor de manipulare. MCP este declarat ca suprafață API peste 15+ servicii.

WMS + AutoStore

Într-un depozit automatizat, sistemele coordonează aducerea cutiei la operator: produsul vine la om.

WMS coordonează operațiunile depozitului. Serviciile interne fac legătura cu automatizarea; AutoStore folosește roboți și containere pentru pregătirea de tip goods-to-person.

Flux ilustrativ: introducerea produselor în sistem → colectare → transport pe benzi → expediere. Configurația concretă diferă între centre.

Optimizarea rutelor

Este un puzzle uriaș: cum duci mii de comenzi la mii de oameni, cu zeci sau sute de mașini, fără să întârzii?

Motoarele de optimizare pot aloca livrări și capacități sub constrângeri de timp, distanță și resurse.

Rohlik declară planificarea internă a rutelor, urmărirea flotei în timp real și optimizarea capacității curierilor.

Curierul — lumea fizică finală

După toate calculele, un om real urcă produsele într-o dubă și vine la ușa ta.

Sistemele pentru ultima etapă a livrării leagă expedierea din depozit de urmărirea flotei, trasee, capacitate și execuția efectivă.

Aici software-ul se întâlnește definitiv cu lumea reală: adresă, trafic, timp, produse și client.

Călătoria unei comenzi

  1. Clientul apasă „Plasează comanda”

    Telefonul spune magazinului: „vreau produsele acestea”.

    Frontendul trimite una sau mai multe cereri către sistemele backend.

  2. Sistemul identifică utilizatorul și piața

    Magazinul verifică: „cine ești și din ce țară cumperi?”

    Rohlik descrie cod comun și izolare a datelor per piață. Sursa nu precizează dacă izolarea este logică sau fizică.

  3. Backendul verifică regulile

    Creierul magazinului verifică dacă tot ce ai cerut are sens.

    Pot exista validări pentru produse, cantități, prețuri, promoții, adresă, intervalul de livrare și alte reguli comerciale.

  4. Sistemele de date intră în joc

    Creierul deschide caietele și bilețelele rapide ale magazinului.

    MySQL/PostgreSQL, Redis și alte sisteme oferă diferite tipuri de stocare și acces la date.

  5. Plata este procesată

    Magazinul verifică dacă plata poate fi făcută.

    Rohlik declară Adyen, PayPal, transferuri bancare și evaluarea riscului de fraudă în timp real. Momentul exact al autorizării sau capturării plății nu este publicat aici.

  6. Comanda poate produce evenimente

    Poșta internă poate striga: „Avem o comandă nouă!”

    RabbitMQ este message broker-ul standard declarat în stack și permite decuplarea sistemelor prin mesaje.

  7. Depozitul începe pregătirea comenzii

    Oamenii și, acolo unde există automatizare, roboții încep să pregătească produsele.

    Rohlik descrie servicii interne între WMS și automatizare: AutoStore, colectare, benzi transportoare și expediere. Nu deducem echiparea depozitului românesc.

  8. Sistemul rezolvă puzzle-ul livrării

    Calculatorul decide cine duce comenzile și cum trebuie organizate traseele.

    Rohlik declară motoare proprii de optimizare a rutelor și a capacității curierilor; aceasta este o reprezentare simplificată a planificării.

  9. Curierul pleacă

    O dubă reală pleacă din depozit către client.

    Urmărirea flotei și sistemele pentru ultima etapă a livrării susțin execuția operațională.

  10. Comanda ajunge la client

    Comanda care a început ca niște biți pe telefon devine o pungă reală la ușa ta.

    Stările rezultate pot alimenta analiza datelor, suportul și alte procese; traseul exact al acestor actualizări este ilustrativ.

Notă editorială: tehnologiile și statisticile provin din informațiile publicate de Rohlik Group. Harta și cei zece pași sunt reprezentări educaționale și conceptuale; nu reproduc topologia internă, fluxurile API sau infrastructura privată Rohlik. Automatizarea diferă între centre; nu presupunem că orice comandă Sezamo trece prin AutoStore.

Sursă: Rohlik Group Engineering — Tech Stack

Sursă consultată la .

1. Un supermarket online nu este doar un website

Modelul frontend → API → bază de date explică o cerere web, dar ascunde aproape toate deciziile operaționale.

Rohlik descrie software propriu pentru magazin, prognoză, fulfillment, plăți și comunicare cu clientul. Sezamo este brandul grupului din România.

Diagrama 1 — domeniile unei platforme de e-grocery

Model conceptual, nu arhitectura internă publicată de Rohlik. Săgețile indică dependențe, nu ordinea obligatorie a apelurilor sincrone.

Diagrama 1 — domeniile unei platforme de e-groceryModel conceptual, nu arhitectura internă publicată de Rohlik. Săgețile indică dependențe, nu ordinea obligatorie a apelurilor sincrone.Web / iOS / Android → API / edgeAPI / edge → Client și identitateAPI / edge → Catalog, căutare, prețuri, promoțiiCatalog, căutare, prețuri, promoții → Coș și checkoutCoș și checkout → Stoc, plată, sloturi și capacitateCoș și checkout → Comandă acceptatăComandă acceptată → Fulfillment / WMS / pickingFulfillment / WMS / picking → Produse, automatizare, benziProduse, automatizare, benzi → Expediere și încărcareExpediere și încărcare → Rute, curieri și vehiculeRute, curieri și vehicule → ClientconstrângeriWeb / iOS / AndroidAPI / edgeClient și identitateCatalog, căutare, prețuri,promoțiiCoș și checkoutStoc, plată, sloturi șicapacitateComandă acceptatăFulfillment / WMS / pickingProduse, automatizare,benziExpediere și încărcareRute, curieri și vehiculeClient

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Descrierea textuală a conexiunilor
  • Web / iOS / AndroidAPI / edge
  • API / edgeClient și identitate
  • API / edgeCatalog, căutare, prețuri, promoții
  • Catalog, căutare, prețuri, promoțiiCoș și checkout
  • Coș și checkoutStoc, plată, sloturi și capacitate
  • Coș și checkoutComandă acceptată
  • Comandă acceptatăFulfillment / WMS / picking
  • Fulfillment / WMS / pickingProduse, automatizare, benzi
  • Produse, automatizare, benziExpediere și încărcare
  • Expediere și încărcareRute, curieri și vehicule
  • Rute, curieri și vehiculeClient
  • Rute, curieri și vehiculeStoc, plată, sloturi și capacitate — constrângeri (conexiune punctată)

Un bounded context delimitează un model de business și regulile sale. „Disponibil” poate însemna produs afișabil în catalog, cantitate rezervabilă sau articol deja pregătit. Confundarea acestor sensuri produce probleme chiar dacă fiecare API funcționează separat.

2. Ce măsoară, de fapt, dimensiunea platformei

Inventar consultat la 28.08.2026: Rohlik.

Indicatori declarați de Rohlik
IndicatorValoare
Repository-uri active/analizate342/625
Contributori221
Deploymenturi producție1.738/30 zile; ≈58/zi
Commituri8.350/30 zile
Tehnologii/domenii89/7

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Surse declarate: GitLab — 9 iunie 2026; Mesmer; Datadog DORA. Data consultării nu este data colectării. Nu am măsurat independent activitatea operațională.

Cele cinci piețe principale sunt Cehia, Germania, Austria, Ungaria și România. Participația minoritară în eBag, Bulgaria, este prezentată separat. Countries.

Un repository poate conține o bibliotecă, un frontend, infrastructură declarativă, pipeline-uri ML sau mai multe servicii. Nu rezultă „342 de microservicii”. Nici contributorii nu reprezintă automat numărul angajaților.

La această scară, întrebarea utilă este cum gestionezi contractele, versiunile și responsabilitatea operațională. Numărul repository-urilor nu măsoară singur calitatea arhitecturii.

Eticheta paved road marchează standardele interne recomandate. Growing, Steady, New și Sunsetting descriu adopția, nu un clasament al calității. Legenda Rohlik. O tehnologie în retragere poate încă susține funcții importante; eticheta nu stabilește singură un termen de migrare.

Pentru a înțelege inventarul, îl putem organiza după responsabilități. Tabelul este un model explicativ, nu o mapare confirmată a serviciilor interne.

Responsabilități și tehnologii — model explicativ
ResponsabilitateÎntrebarea principalăRepere din inventar
InterfațăCum exprimă utilizatorul o cerere?React, Next.js
Tranzacții și stareCe schimbare acceptăm și ce persistăm?Java/Spring Boot, MySQL/PostgreSQL
Date și optimizareCe arată istoricul, ce cerere anticipăm și cum alocăm resursele?Python, Snowflake, programare matematică
Execuție fizicăCe produse au fost colectate și încărcate?WMS, automatizare, logistică
Operarea software-uluiCe versiune rulează și cum investigăm erorile?GitLab CI, GKE, Argo CD, OpenTelemetry

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Aceste responsabilități se influențează reciproc. O prognoză poate schimba planificarea personalului, dar nu confirmă că o anumită comandă este deja pregătită. Un deployment reușit nu confirmă că produsul a ajuns în vehicul.

3. Nucleul tranzacțional: reguli care trebuie să rămână adevărate

În inventarul tehnologic Rohlik, Java este descris ca centrul nucleului tranzacțional, iar Spring Boot apare ca framework backend standard.

Un nucleu tranzacțional trebuie să protejeze invarianți precum „aceeași rezervare nu consumă stocul de două ori”. Spring oferă abstracții pentru tranzacții și integrarea cu accesul la date. Asta îl face potrivit pentru asemenea probleme, fără să demonstreze că fiecare componentă Rohlik de checkout, inventar sau plăți este scrisă în Java. Spring: tranzacții.

Să presupunem că plata este autorizată, dar răspunsul se pierde. O reîncercare fără identitate stabilă poate repeta efectul comercial. Idempotency, sau idempotența, înseamnă ca reluarea aceleiași operații logice să nu producă încă o debitare sau încă o comandă.

Protecția cere mai mult decât un identificator: asocierea lui cu utilizatorul și cererea, salvarea rezultatului și reguli pentru cereri concurente. O tranzacție locală nu include automat procesatorul de plăți, brokerul și depozitul. Framework-ul nu poate transforma aceste sisteme independente într-o singură operație atomică.

Inventarul Rohlik include și Testcontainers. Potrivit documentației bibliotecii, aceasta poate porni baze de date și alte dependențe în containere temporare pentru teste de integrare. Pentru rezervări, un scenariu util este concurența dintre două cereri pentru ultima unitate: testul cu motorul real poate surprinde comportamente pe care un substitut simplificat le ascunde. Nu reproduce automat încărcarea, configurația și toate modurile de defectare din producție.

4. Prognoza nu produce doar grafice

Rohlik enumeră Python pentru servicii, ML, date și agenți, alături de FastAPI. Veloq este platforma tehnologică proprie Rohlik, disponibilă și altor comercianți online. Documentația Veloq WMS descrie legătura dintre cererea anticipată și alocarea personalului.

Conceptual, dependența este:

cerere → prognoză → aprovizionare → programarea recepțiilor de la furnizori → necesar de personal → capacitate de pregătire.

Pentru produse perisabile, supraestimarea poate însemna expirare și risipă, nu doar bani blocați în stoc. Subestimarea poate duce la pierderea vânzării și poate lăsa coșul incomplet. Electronicele au și ele costuri de stocare și depreciere, dar nu aceeași presiune zilnică a prospețimii.

Un model bun statistic nu este suficient. Dacă prezice corect cererea, dar marfa sosește după vârful de picking, rezultatul operațional rămâne slab. Predicția trebuie convertită în decizii realizabile, ținând cont de termenele de aprovizionare și de limitele de spațiu și personal.

Aceasta explică de ce data engineering, ML și optimizarea operațională trebuie evaluate împreună, nu doar prin scorul unui model.

5. Unde software-ul întâlnește depozitul

În prezentarea automatizării și optimizării operaționale, Rohlik descrie integrarea WMS cu automatizarea, MIP pentru alocarea SKU-urilor în grilă, ML pentru aprovizionare și programare liniară pentru planificarea turelor.

Un WMS — Warehouse Management System — gestionează operațiunile depozitului. Un WES — Warehouse Execution System — coordonează, în terminologia Veloq, execuția între WMS și automatizare. Picking înseamnă colectarea articolelor; fulfillment cuprinde pregătirea comenzii pentru livrare. Veloq WMS, Veloq WES.

AutoStore nu este o metaforă pentru cloud: sunt containere stivuite într-o grilă, accesate de roboți și aduse către posturile de lucru. Rohlik a anunțat pornirea unei asemenea instalații la München în septembrie 2022, inclusiv legături prin benzi transportoare. Acesta este un exemplu localizat și datat. Sursele consultate nu confirmă aceeași configurație în depozitul Sezamo România. Comunicatul Rohlik.

Programarea liniară optimizează un obiectiv în condițiile unor relații liniare. MIP, mixed-integer programming, permite și variabile întregi pentru decizii discrete: alegi sau nu un articol pentru o anumită zonă. SKU este codul prin care identifici un tip de articol în stoc. Nu presupunem că Rohlik folosește solverele din documentația citată pentru explicarea conceptului. OR-Tools: optimizare.

Exemplu conceptual: grila poate avea suficient stoc, dar porturile de picking pot fi saturate. Accelerarea unui robot nu ajută dacă următoarea bandă este blocată. Optimizarea locală trebuie judecată prin efectul asupra fluxului complet.

Integrarea cu roboții nu dezvăluie unde rulează fiecare controler. Nu putem deduce că GKE comandă direct motoarele. Într-un model de integrare, o cerere acceptată, o operație în curs și rezultatul fizic confirmat sunt stări diferite. Un răspuns HTTP reușit poate confirma doar prima etapă.

Nici rutarea nu începe obligatoriu după ambalare. Veloq Router descrie estimarea timpilor de pregătire și încărcare împreună cu ruta, apoi transmiterea priorităților către WMS. Veloq Router.

Rohlik declară solvere proprii pentru rute, urmărirea flotei în timp real și optimizarea capacității curierilor. Acestea sunt capabilități declarate, nu o configurație demonstrată pentru România.

6. De ce există stoc, dar nu neapărat o promisiune livrabilă

Pentru exemplul nostru, condițiile ar putea fi:

produs eligibil → cantitate disponibilă → rezervare → capacitate în depozit → pregătire la timp → vehicul și slot → autorizarea plății → livrare fezabilă.

Este o listă conceptuală de constrângeri, nu ordinea publicată a checkoutului Sezamo.

Doi clienți pot vedea simultan ultima sticlă. Dacă ambii încearcă să o rezerve pornind de la aceeași stare, fără controlul concurenței, poate apărea o race condition: rezultatul depinde de ordinea operațiilor. Un cache poate afișa o stare veche, iar simpla citire a cantității nu garantează rezervarea ei.

Rezervarea trebuie să aibă o regulă de concurență și, când este temporară, o expirare. Dacă plata eșuează, capacitatea și stocul trebuie eliberate. Dacă plata reușește, dar confirmarea întârzie, sistemul trebuie să poată reconcilia rezultatul.

O opțiune arhitecturală este o succesiune de tranzacții locale cu acțiuni compensatorii, cunoscută drept saga. Compensarea nu înseamnă că timpul poate fi dat înapoi: eliberarea unei rezervări nu readuce în depozit o pungă deja expediată. AWS: saga orchestration.

La reluarea unui flux, întrebarea corectă este „ce s-a executat deja?”, nu doar „ce request a eșuat?”. Aici se întâlnesc consistența, reîncercările și recuperarea după erori.

7. RabbitMQ și stările care nu se actualizează simultan

RabbitMQ apare în 50 de repository-uri, conform inventarului Rohlik. Este plauzibil să existe fluxuri asincrone între domenii; inventarul nu dezvăluie topologia lor.

Diagrama 2 — evenimente și consumatori independenți

Exemplu event-driven compatibil cu stack-ul public Rohlik, nu o topologie internă confirmată. OrderConfirmed este un nume ilustrativ.

Diagrama 2 — evenimente și consumatori independențiExemplu event-driven compatibil cu stack-ul public Rohlik, nu o topologie internă confirmată. OrderConfirmed este un nume ilustrativ.OrderConfirmed: exempluBroker / exchange → Coadă + consumer: fulfillmentBroker / exchange → Coadă + consumer: analyticsBroker / exchange → Coadă + consumer: fidelizareBroker / exchange → Coadă + consumer: notificăriBroker / exchange → Coadă + consumer: proiecție clientDomeniul comenzilorBroker / exchangeCoadă + consumer:fulfillmentCoadă + consumer: analyticsCoadă + consumer:fidelizareCoadă + consumer:notificăriCoadă + consumer: proiecțieclient

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Descrierea textuală a conexiunilor
  • Domeniul comenzilorBroker / exchange — OrderConfirmed: exemplu
  • Broker / exchangeCoadă + consumer: fulfillment
  • Broker / exchangeCoadă + consumer: analytics
  • Broker / exchangeCoadă + consumer: fidelizare
  • Broker / exchangeCoadă + consumer: notificări
  • Broker / exchangeCoadă + consumer: proiecție client

Evenimente precum OrderCreated, OrderModified, OrderCancelled, PickingStarted, OrderDispatched sau OrderDelivered sunt nume ilustrative, nu contracte Rohlik confirmate. Un consumer este componenta care prelucrează mesajele primite.

Sursa autoritativă, sau source of truth, este evidența de referință pentru o anumită stare. Un read model este un model de date organizat pentru citire. Poate fi implementat ca proiecție materializată: o reprezentare derivată a datelor, stocată și actualizată pe baza modificărilor din sursă.

În exemplul de mai sus, comanda poate fi anulată în evidența autoritativă, în timp ce analytics încă numără versiunea anterioară, iar fidelizarea nu a ajustat punctele. Propagarea evenimentelor poate explica diferența. Nu înseamnă că orice divergență este acceptabilă sau că am identificat mecanismul intern Sezamo.

Diferențele pot proveni și din filtre sau reguli comerciale distincte. Fără loguri, tracing și codul backend nu putem stabili cauza unei situații reale. În modelul eventual consistency, dacă actualizările încetează și sunt procesate corect, reprezentările ajung să reflecte starea relevantă pentru fiecare model.

Un sistem bazat pe eventual consistency are nevoie de criterii operaționale clare: ce întârziere accepți, cum detectezi consumatori blocați și cum repari proiecțiile? „Se sincronizează cândva” nu este un criteriu suficient.

RabbitMQ documentează posibilitatea relivrării mesajelor; consumatorii trebuie să gestioneze duplicatele. Confirmarea primirii mesajului de către broker nu certifică finalizarea tuturor efectelor comerciale. RabbitMQ: reliability, acknowledgements și confirms.

Pentru a evita salvarea comenzii fără publicarea evenimentului, un pattern posibil este transactional outbox: starea și evenimentul se persistă în aceeași tranzacție locală, apoi evenimentul este transmis separat. Este o recomandare conceptuală, nu o implementare atribuită Rohlik. AWS: transactional outbox.

8. Mai multe piețe înseamnă mai mult decât un tenant_id

Pentru operarea în mai multe piețe, Rohlik descrie cod comun, date izolate, identitate regională, comutatoare de funcționalitate și rutare tenant-aware. Rohlik.

Arhitectural, comutatoarele de funcționalitate permit aceleiași baze de cod să expună comportamente diferite. Rutarea tenant-aware păstrează contextul pieței. Nu aflăm însă dacă izolarea folosește baze separate, scheme distincte sau alte mecanisme.

Exemple posibile de variație: metode de plată, promoții, fiscalitate, sortiment, integrări și modele logistice. Nu atribuim României o configurație concretă fără documentație.

Într-o platformă cu operațiuni fizice, izolarea trebuie păstrată și în cache-uri, mesaje, joburi și contextul de autorizare. Un tenant selectat corect în interfață nu protejează un consumer care pierde acel context.

Față de un SaaS simplu, reutilizarea codului trebuie să țină cont și de constrângeri fizice care nu se schimbă printr-o simplă configurare: personal, condiții de temperatură, vehicule și geografie. „Shared codebase” nu înseamnă „aceleași constrângeri peste tot”.

9. Infrastructura care permite schimbarea continuă

Infrastructura enumerată de Rohlik include Google Cloud/GKE, Docker, GitLab CI/CD, Argo CD și Terraform, alături de Datadog, OpenTelemetry, Grafana, Sentry și lansări canary.

Un flux conceptual compatibil este dezvoltator → GitLab CI → imagine Docker în registry → configurație versionată → Argo CD → Kubernetes/GKE. Terraform gestionează aici infrastructura declarativă. Nu fiecare modificare trebuie să parcurgă identic această succesiune.

Imaginea împachetează aplicația și dependențele necesare; containerul este o instanță de execuție. În Kubernetes, Podul grupează unul sau mai multe containere care împart rețeaua și pot folosi volume comune. Podurile rulează pe nodurile clusterului. GKE este serviciul Kubernetes administrat de Google, nu un strat suplimentar pe care îl traversează fiecare cerere. Aceste concepte explică unde și cum rulează aplicațiile; nu descriu regulile comenzilor. Docker: imagini, Kubernetes: Pods, GKE.

În fluxul ilustrat, CI execută verificările configurate și produce artefactul. Livrarea continuă îl pregătește pentru lansare; deploymentul continuu automatizează și promovarea în producție. Un commit sau un merge nu dovedește singur că versiunea a ajuns la clienți. Etapele și condițiile de lansare trebuie definite în pipeline. GitLab: CI, delivery și deployment.

În GitOps, Git exprimă starea dorită, iar Argo CD o compară cu starea efectivă a sistemului. Aplicarea automată și corectarea abaterilor depind de politica de sincronizare. Argo CD: automated sync.

O lansare canary limitează inițial expunerea versiunii noi și folosește criterii de evaluare înainte de extindere. Controlul traficului și analiza sunt distincte de sincronizarea configurației; Argo Rollouts este un proiect separat care poate coordona asemenea strategii. Nu deducem din inventarul Rohlik ce controller, praguri ori mecanism de revenire sunt configurate. Argo Rollouts.

Frecvența publicată agregă deploymenturi de producție; nu înseamnă tot atâtea schimbări zilnice ale storefrontului. Fără rata incidentelor și timpul de recuperare, nu putem deduce fiabilitatea.

Un container se poate reporni în același Pod, conform politicii configurate; un controller poate crea un Pod înlocuitor când este necesar. Sunt mecanisme diferite. Kubernetes: lifecycle. Dacă procesul dispare după autorizarea plății, o instanță nouă trebuie să afle rezultatul deja produs. Refacerea execuției nu este echivalentă cu recuperarea tranzacției.

Observability înseamnă să poți explica starea sistemului din semnalele sale. Tracingul corelează operații distribuite; metricile arată tendințe, iar logurile oferă detalii. OpenTelemetry oferă instrumente pentru generarea, colectarea și exportul semnalelor; stocarea și vizualizarea revin altor sisteme. Rolul OpenTelemetry.

În exemplul cu kefirul, ai vrea să urmărești rezervarea, întârzierea mesajului și acceptarea în picking. Un rollback de aplicație nu retrage automat o acțiune fizică și poate necesita compatibilitate cu datele deja scrise.

Inventarul nu permite stabilirea topologiei clusterelor, a mecanismului exact de izolare a datelor sau a procedurilor de recuperare. Acestea cer documentație de arhitectură și dovezi operaționale, nu doar numele produselor folosite.

Până aici am privit platforma prin interfețele web și mobile. Dar comenzile, rezervările și regulile comerciale nu sunt definite de ecranele prin care ajungem la ele. Ce se schimbă când utilizatorul formulează o intenție în limbaj natural, iar o aplicație AI propune operațiile necesare?

Platforma primește un nou tip de client: agentul AI.

10. MCP, explicat unui dezvoltator care cunoaște REST

MCP adaugă o interfață către infrastructura discutată până aici. Nu înlocuiește serviciile care decid dacă un produs poate fi rezervat sau o comandă modificată.

Analogia „MCP este aproximativ un USB-C pentru aplicațiile AI” ajută la prima întâlnire: există o modalitate comună de conectare. Limita analogiei este că un conector comun nu garantează semantica, permisiunile sau calitatea sistemului conectat.

Model Context Protocol nu este un model AI. Este un protocol prin care o aplicație poate descoperi și utiliza capabilități externe.

Roluri și primitive MCP
ComponentăResponsabilitate
MCP hostAplicația care coordonează interacțiunea cu modelul și politicile de acces.
MCP clientComponenta hostului care comunică cu un anumit server.
MCP serverExpune capabilități prin protocol.
ToolsFuncții apelabile pentru citire sau acțiuni.
ResourcesDate și conținut oferite drept context.
PromptsȘabloane reutilizabile pentru interacțiuni.

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Aceste roluri și primitive sunt definite în documentația MCP; nu trebuie să presupunem că orice server le expune pe toate. Arhitectură, primitivele serverului.

Mesajele folosesc JSON-RPC. Transporturile standard includ stdio, pentru un proces local, și Streamable HTTP, pentru comunicare HTTP. Autorizarea HTTP este tratată separat, printr-un cadru bazat pe OAuth. Conectarea nu acordă automat dreptul la orice acțiune comercială. Transporturi, autorizare.

Pentru un dezvoltator REST, diferența utilă este contractul destinat clientului AI: instrumente descoperibile, descrieri, scheme de intrare și rezultate. API-urile existente pot rămâne în spate; modelul nu trebuie să cunoască structura bazei de date.

Referințele MCP din articol folosesc ediția 2026-07-28 a specificației. Nu atribuim automat această versiune serverului Sezamo.

11. Ce expune un Grocery MCP Server

Sezamo documentează conectarea prin HTTP și OAuth, cu acces la funcții de cumpărături și asistență. Documentația introductivă nu publică însă un catalog nominal complet de instrumente. Sezamo MCP, prezentarea în română.

În metadatele conectorului Sezamo consultate la 28 august 2026 apar următoarele denumiri. Acesta este un contract observat, nu dovada executării operațiilor:

Instrumente observate în metadatele Sezamo
OperațieRol declarat
batch_search_productsCăutarea produselor.
get_cartConsultarea coșului.
add_items_to_cartAdăugarea produselor în coș.
get_checkoutConsultarea checkoutului și a validărilor.
fetch_ordersConsultarea comenzilor.
cancel_orderAnularea unei comenzi eligibile.
submit_claimProcesarea unei reclamații; poate avea efect de creditare.

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Nu substituim aceste nume cu aliasuri presupuse. Mai ales, get_checkout nu plasează comanda. Descrierea show_submit_checkout indică un buton către checkoutul web, unde utilizatorul verifică și finalizează comanda.

Diagrama 3 — MCP și serviciile comerciale

Reconstrucție conceptuală, nu documentație internă Rohlik. Clientul MCP aparține logic hostului; este desenat separat pentru claritate. Topologia backendului este abstractizată.

Diagrama 3 — MCP și serviciile comercialeReconstrucție conceptuală, nu documentație internă Rohlik. Clientul MCP aparține logic hostului; este desenat separat pentru claritate. Topologia backendului este abstractizată.Utilizator → MCP host: aplicație AI + LLMMCP host: aplicație AI + LLM → MCP clientMCPSezamo MCP Server → API-uri și servicii de businessAPI-uri și servicii de business → Date autoritativeAPI-uri și servicii de business → Depozit și logisticăUtilizatorMCP host: aplicație AI +LLMMCP clientSezamo MCP ServerAPI-uri și servicii debusinessDate autoritativeDepozit și logistică

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Descrierea textuală a conexiunilor
  • UtilizatorMCP host: aplicație AI + LLM
  • MCP host: aplicație AI + LLMMCP client
  • MCP clientSezamo MCP Server — MCP
  • Sezamo MCP ServerAPI-uri și servicii de business
  • API-uri și servicii de businessDate autoritative
  • API-uri și servicii de businessDepozit și logistică

Operațiile expuse acoperă responsabilități precum catalogul, coșul, livrarea, comenzile, profilul/fidelizarea, reclamațiile, ambalajele returnabile și rețetele. Gruparea lor în domenii este interpretarea noastră, nu inventarul microserviciilor companiei.

12. MCP nu este backend-ul supermarketului

În modelul ilustrat, hostul și modelul interpretează intenția, iar serverul MCP expune operațiile comerciale. Evidența autoritativă pentru stoc, plăți, comenzi sau livrare rămâne în sistemele care gestionează acele domenii.

Un server MCP poate valida argumente, combina răspunsuri și simplifica o operație pentru agent. Nu trebuie să devină o cale prin care regulile backendului sunt ocolite.

De exemplu, un tool de anulare trebuie să obțină o decizie a domeniului comenzilor asupra eligibilității. Nu poate deduce dintr-un mesaj conversațional că pregătirea fizică s-a oprit.

Aceasta este o recomandare de separare a responsabilităților, nu o concluzie că am verificat intern implementarea Sezamo.

13. Interfața se schimbă, obligațiile rămân

Într-o interfață clasică, utilizatorul interacționează cu elementele interfeței, iar acțiunile sale declanșează apeluri API. Într-o interfață conversațională, utilizatorul formulează intenția, modelul propune apeluri de instrumente, iar aplicația le execută în limitele permise.

Exemplu conceptual: „Adaugă ingredientele pentru carbonara, alege variantele pe care le cumpăr de obicei și evită produsele indisponibile.”

Agentul ar putea consulta preferințele la care are acces autorizat, căuta produse, verifica variantele și adăuga articolele acceptate. Dacă nu cunoaște numărul de porții sau bugetul, poate cere clarificări. Dacă o parte din operații reușește, trebuie să comunice exact ce a schimbat, fără să repete automat tot fluxul.

Un coș afișat vizual rămâne util pentru cantități, prețuri și înlocuiri. UI-ul clasic nu dispare: devine și suprafața în care verifici consecințele unei intenții formulate liber.

14. MCP dincolo de cumpărături

Rohlik enumeră MCP în 17 repository-uri și în 15+ servicii, iar FastMCP în 8 repository-uri. OpenAI GPT, LangChain/LangGraph, Langfuse și LiteLLM completează inventarul. Rohlik.

Repository-urile, serviciile și instrumentele sunt categorii distincte; numerele lor nu sunt interschimbabile. Nici prezența FastMCP nu dovedește că fiecare server MCP al grupului folosește acel framework.

Distincția arhitecturală rămâne utilă: protocolul definește contractul, biblioteca serverului îl implementează, iar orchestrarea stabilește succesiunea apelurilor. Modelul și observabilitatea au alte responsabilități. Inventarul tehnologic nu dovedește cum sunt legate toate aceste componente într-un anumit agent.

Inferență: un protocol comun poate servi agenți pentru clienți, dezvoltare, operațiuni și analiză. Nu rezultă că toți au aceleași permisiuni sau accesează aceleași sisteme. Exemplul de raportare internă arată concret o utilizare distinctă de cumpărături.

15. reporting-mcp: accesul la date nu înlocuiește sensul lor

În articolul din 24 aprilie 2026, Rohlik prezintă reporting-mcp, un gateway către Snowflake și un semantic layer versionat în Git. Sunt documentate search_verified_queries, search_tableau_metrics și read_query; scrierile sunt dezactivate implicit. Articolul Rohlik.

Problema generală este semantică. „Venit” poate include sau exclude retururi; „client activ” are nevoie de o perioadă și de criterii; „marjă” cere o formulă convenită. O interogare SQL care rulează fără eroare poate calcula indicatorul greșit. Un strat semantic face explicite relațiile, dimensiunile și formulele. Snowflake: semantic views.

Stratul Rohlik nu trebuie confundat automat cu produsul Snowflake „Semantic Views”.

Diagrama 4 — MCP și stratul semantic

Sinteză conceptuală după articolul Rohlik despre reporting-mcp. Include generarea de SQL nou și recomandarea unei verificări suplimentare; nu impune folosirea exclusivă a interogărilor aprobate.

Diagrama 4 — MCP și stratul semanticSinteză conceptuală după articolul Rohlik despre reporting-mcp. Include generarea de SQL nou și recomandarea unei verificări suplimentare; nu impune folosirea exclusivă a interogărilor aprobate.Agent AI → reporting-mcpreporting-mcp → Strat semantic / interogări verificateStrat semantic / interogări verificate → Selectare și validare SQLSelectare și validare SQL → Snowflakefără rezultat potrivitMetadate + SQL nou → Validare read-onlyValidare read-only → SnowflakeSnowflake → RezultatSQL nou: recomandareAgent AIreporting-mcpStrat semantic / interogăriverificateSelectare și validare SQLSnowflakeMetadate + SQL nouValidare read-onlyRezultatVerificare suplimentară

Poți derula orizontal. Cu tastatura, apasă Tab până când zona este focalizată, apoi folosește săgețile.

Descrierea textuală a conexiunilor
  • Agent AIreporting-mcp
  • reporting-mcpStrat semantic / interogări verificate
  • Strat semantic / interogări verificateSelectare și validare SQL
  • Selectare și validare SQLSnowflake
  • reporting-mcpMetadate + SQL nou — fără rezultat potrivit (conexiune punctată)
  • Metadate + SQL nouValidare read-only
  • Validare read-onlySnowflake
  • SnowflakeRezultat
  • RezultatVerificare suplimentară — SQL nou: recomandare (conexiune punctată)

Prioritatea interogărilor verificate este îndrumare pentru agent. Rohlik permite și explorare cu SQL nou; nu garantează folosirea exclusivă a interogărilor aprobate. Articolul Rohlik.

Lecția de guvernanță este să separi trei verificări: are utilizatorul dreptul să vadă datele, este permisă interogarea și corespunde rezultatul definiției comerciale? Read-only limitează modificările, dar nu rezolvă riscul divulgării datelor, costul unei interogări sau interpretarea greșită. O formulă aprobată cere și controlul filtrelor, perioadei și granularității folosite.

16. Când AI-ul primește dreptul să modifice lumea reală

Citirea catalogului și anularea unei comenzi au consecințe diferite. Agentul poate propune un apel, dar backendul trebuie să verifice dreptul utilizatorului asupra comenzii și dacă modificarea mai este permisă.

O autorizare OAuth nu înlocuiește confirmarea acțiunii concrete. Utilizatorul trebuie să înțeleagă ce se schimbă, iar reluarea unei cereri după un timeout nu trebuie să dubleze efectul. Acestea sunt reguli generale de proiectare, nu constatări despre implementarea Sezamo. MCP: tools, autorizare.

La fel, o descriere de tool care cere confirmare nu dovedește că serverul o impune tehnic. Între intenția exprimată și efectul comercial există limite de autorizare, validare și execuție care trebuie verificate separat.

De aici pornește o analiză distinctă: „Când AI-ul poate anula o comandă: cum securizezi un server MCP tranzacțional”. În acest articol, lecția rămâne arhitecturală: apariția unui client AI nu transferă către model autoritatea serviciilor comerciale.

17. Ce putem învăța ca ingineri

  1. Modelul domeniului precedă framework-ul. Definește ce înseamnă rezervat, confirmat, pregătit și expediat.
  2. Lumea fizică schimbă limitele tranzacțiilor. Un rollback software nu poate anula toate efectele operaționale.
  3. Convergența stărilor trebuie proiectată. În modelul eventual consistency, stabilește întârzieri acceptabile, reconciliere și reguli pentru stări contradictorii.
  4. Observabilitatea face parte din arhitectură. Fără corelare între operații, un răspuns HTTP corect poate ascunde un flux incomplet.
  5. Izolarea între piețe trebuie păstrată până la ultimul consumer. Nu se termină la filtrul din interfață.
  6. Agenții AI au nevoie de contracte mai precise. Numele, erorile, efectele și limitele instrumentelor trebuie să fie explicite.
  7. MCP standardizează accesul, nu adevărul comercial. Autorizarea și sensul datelor rămân responsabilități distincte.
  8. Permisiunile și confirmările fac parte din arhitectura de securitate. Nu le lăsa exclusiv în seama instrucțiunilor adresate modelului.

Sticla de kefir face vizibilă problema: utilizatorul cere o schimbare, iar infrastructura trebuie să o transforme într-o livrare posibilă. Agentul AI poate formula următoarea cerere. Sistemul trebuie să verifice dacă aceasta este autorizată, dacă mai este fezabilă și ce s-a întâmplat în realitate.

Pentru verificări practice privind lansarea și responsabilitatea operațională, consultă resursele FiraCode. Despre autor poți citi pe pagina studioului și fondatorului.

Analiză independentă bazată pe surse tehnice Rohlik Group, Sezamo și MCP, precum și pe examinarea metadatelor conectorului Sezamo. Nu au fost executate operații asupra conturilor sau comenzilor pentru acest articol. Diagramele conceptuale nu reprezintă documentație internă Rohlik. FiraCode nu este afiliat cu Rohlik sau Sezamo.

Surse și referințe

  1. Rohlik — Technology

    Consultată la

  2. Rohlik — Countries

    Consultată la

  3. Rohlik — Tech Stack

    Consultată la

  4. Spring — Transaction Management

    Consultată la

  5. Testcontainers for Java

    Consultată la

  6. Veloq — WMS

    Consultată la

  7. Veloq — WES

    Consultată la

  8. Rohlik — Munich AutoStore announcement (2022)

    Consultată la

  9. Google OR-Tools — Introduction

    Consultată la

  10. Veloq — Router

    Consultată la

  11. AWS — Saga orchestration

    Consultată la

  12. RabbitMQ — Reliability

    Consultată la

  13. RabbitMQ — Acknowledgements and confirms

    Consultată la

  14. AWS — Transactional outbox

    Consultată la

  15. Docker — Images

    Consultată la

  16. Kubernetes — Pods

    Consultată la

  17. Google Cloud — GKE overview

    Consultată la

  18. GitLab — CI/CD

    Consultată la

  19. Argo CD — Automated sync

    Consultată la

  20. Argo Rollouts — Documentation

    Consultată la

  21. Kubernetes — Pod lifecycle

    Consultată la

  22. OpenTelemetry — Overview

    Consultată la

  23. MCP — Architecture (2026-07-28)

    Consultată la

  24. MCP — Server primitives (2026-07-28)

    Consultată la

  25. MCP — Transports (2026-07-28)

    Consultată la

  26. MCP — Authorisation (2026-07-28)

    Consultată la

  27. Sezamo — MCP documentation

    Consultată la

  28. Sezamo — Introducere MCP

    Consultată la

  29. Rohlik — AI-ready data warehouse (24 April 2026)

    Consultată la

  30. Snowflake — Semantic views

    Consultată la

  31. MCP — Tools (2026-07-28)

    Consultată la

  32. Rohlik — Veloq

    Consultată la

Discutăm despre integrarea ta?

Dacă website-ul tău trebuie să comunice cu sisteme operaționale, putem porni de la fluxuri, date și limitele de acces.

Contactează FiraCode