MACH Nedir ve Kim Tanımladı?

MACH tarafından icat edilen bir kısaltmadır MACH İttifakı, bir dernek Commercetools, Contentful, EPAM Systems ve diğerleri tarafından 2020'de kurulan teknoloji satıcılarının sayısı. Hayır bu bir üründür — bina sistemleri için bir dizi mimari prensiptir modern bir işletme.

  • M — Mikro hizmetler: her iş fonksiyonu bağımsız bir hizmettir
  • A — Önce API: Her hizmet, iyi tanımlanmış API'leri birincil arayüz olarak sunar
  • C — Bulutta yerel: Esnek ölçeklendirme ve yönetilen hizmetlerle genel bulut için tasarlandı
  • H — Başsız: ön uç ve arka uç birbirinden ayrılmıştır

Temel fikir şudur türünün en iyisi: tek bir süit satın almak yerine her şeyi yapan (vasat), her işlev için en iyi hizmeti seçen ve bir platform oluşturan kişiye özel. Ürünler için en iyi arama motoru (Algolia), en iyi ödeme (Stripe), en iyi CMS (İçerikli), en iyi PIM (Akeneo).

Ayrıntılı Olarak Dört MACH Boyutu

Mikro Hizmetler: Sınırlı Bağlam için Ayrıştırma

MACH mimarisinde ticaret alanı, hizalanmış bağımsız hizmetlere ayrıştırılır yapay zeka sınırlı bağlam Etki Alanı Odaklı Tasarım:

// Esempio di decomposizione in microservizi commerce

const MACH_SERVICES = {
  // Servizi core commerce
  catalog: 'Gestione prodotti, categorie, attributi, varianti',
  pricing: 'Regole di prezzo, sconti, tier pricing, valute',
  inventory: 'Stock real-time, warehouse, backorder',
  cart: 'Sessioni di carrello, regole di promozione',
  checkout: 'Checkout flow, address validation, ordine',
  payments: 'Processing pagamenti, rimborsi, split payments',
  fulfillment: 'Gestione spedizioni, tracking, resi',

  // Servizi supporto
  search: 'Full-text search, filtri, ranking (Algolia)',
  recommendations: 'Prodotti correlati, personalization',
  cms: 'Contenuto editoriale, landing page (Contentful/Sanity)',
  pim: 'Product Information Management (Akeneo)',
  loyalty: 'Punti, rewards, programmi fedeltà',
  notifications: 'Email, SMS, push notifications',
};

API-First: Uygulama Öncesi Sözleşme

API öncelikli bir sistemde API, tanımlanan sözleşmedir Önce uygulamanın. Sözleşme gereği her ekip kendi hizmetini bağımsız olarak geliştirebilir. API zaten tanımlanmış.

// OpenAPI spec per il Catalog Service
openapi: 3.1.0
info:
  title: Catalog Service API
  version: 2.0.0

paths:
  /products:
    get:
      summary: Lista prodotti con paginazione e filtri
      parameters:
        - name: cursor
          in: query
          schema:
            type: string
        - name: category
          in: query
          schema:
            type: string
        - name: priceMin
          in: query
          schema:
            type: number
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductPage'

  /products/{id}:
    get:
      summary: Dettaglio prodotto singolo
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '404':
          $ref: '#/components/responses/NotFound'

Bulutta Yerel: Esnek Ölçeklendirme ve Yönetilen Hizmetler

Bulutta yerel "bulutta çalışır" anlamına gelmez; bu, özellikle istismar edilmek üzere tasarlanmış anlamına gelir bulut yetenekleri: otomatik yatay ölçeklendirme, hata toleransı, gözlemlenebilirlik entegre:

  • Kubernetes (veya olaya dayalı yükler için Lambda İşlevleri) tarafından düzenlenen Docker kapsayıcıları
  • Kendi kendine yönetilen örnekler yerine yönetilen veritabanları (Cloud Spanner, RDS, DynamoDB)
  • Eşzamansız iletişim için yönetilen olay veri yolu (AWS EventBridge, Google Pub/Sub)
  • Ön uç teslimatı için küresel CDN
  • Otomatik devre kesici ve dayanıklılık için yeniden deneme

Başsız: Arka Uçtan Arındırılmış Ön Uç

MACH'ın H boyutu serinin ilk makalesinde zaten incelenmişti: ön uç API tüketir, arka uç tarafından oluşturulmaz. Bir MACH mimarisinde bunu tamamlar çoğu zaman bir anlamına gelir BFF (Ön Uç için Arka Uç) API'yi i için optimize etmek belirli müşteriler:

// BFF Pattern: GraphQL aggregation layer
// Aggrega chiamate a più microservizi in un'unica risposta ottimizzata

type Query {
  productPage(
    category: String
    cursor: String
    filters: [FilterInput!]
  ): ProductPageResult!
}

type ProductPageResult {
  products: [ProductSummary!]!
  facets: [FacetGroup!]!       # da Algolia
  recommendations: [ProductSummary!]!  # da recommendation service
  pageInfo: PageInfo!
}

// Il resolver fa chiamate parallele a catalog, search e recommendations
const resolvers = {
  Query: {
    productPage: async (_, args) => {
      const [products, facets, recs] = await Promise.all([
        catalogService.getProducts(args),
        searchService.getFacets(args),
        recommendationService.get(args.category),
      ]);
      return { products, facets, recommendations: recs, pageInfo: products.pageInfo };
    },
  },
};

MACH ve Monolith: Gerçek Karşılaştırma

MACH ve Monolith: Ne Zaman Daha İyi?

  • Monolith yönetildi (Shopify, WooCommerce): haftalar içinde pazara sunma süresi, küçük ekip, düşük maliyetler — GMV < 5M EUR/yıl için ideal
  • Kısmi MACH (başsız + türünün en iyisi): Kademeli esneklik, orta ekip — özel ihtiyaçlara sahip GMV için ideal 5-50 milyon Euro/yıl
  • Tam MACH: maksimum esneklik, yüksek maliyetler, büyük ekip — GMV > 50 milyon Euro/yıl veya belirli kurumsal gereksinimler için haklı

MACH Yönetişimi ve Anti-örüntü

MACH uygulamalarında en yaygın hata yönetişim olmadan çok fazla parçalanmaktır:

Kaçınılması Gereken MACH Anti-Desen

  • Erken mikro hizmetler: 1000'i işlerken 20 hizmete ayrıştırın sipariş/ay tamamen aşırı mühendisliktir. Modüler bir monolitle başlayın, sadece ayrıştırın farklı ölçeklenen parçalar.
  • Sürümlendirilmiş API sözleşmesi yok: API sürümü oluşturma olmadan her ekip konuşlandırmada diğerlerini kıracaktır. OpenAPI 3.1 + anlamsal sürümlendirmeyi benimseyin.
  • Basamaklı senkronize çağrılar: Sırayla 5 hizmeti çağıran istek gecikme biriktirir. Mümkün olan yerlerde paralel çağrılar kullanın; ağır okumalar için CQRS modelini kullanın.
  • Paylaşılan veritabanı: Eğer iki MACH servisi veritabanını paylaşıyorsa, bunlar gerçekten bağımsız. Her hizmetin kendi veri deposu olması gerekir.

MACH'ı Kademeli Olarak Uygulayın

MACH'a tek seferde geçiş yapmanıza gerek yok. Boğucu incir modeli yaklaşımı tavsiye edilir:

  1. Aşama 1: Mevcut monolitin üzerine başsız bir katman ekleyin. Ön uç yeni çağrılar API, monolit API'yi REST/GraphQL katmanı aracılığıyla oluşturur. Çekirdekte herhangi bir değişiklik yok.
  2. Aşama 2: En çok ihtiyaç duyulan işlev için ilk mikro hizmeti çekin spesifikasyonlar (genellikle: arama veya envanter). Monolit gerisini halletmeye devam ediyor.
  3. Aşama 3: Kademeli olarak kaldırarak, servise göre ekstraksiyon hizmetine devam edin monolite bağımlılık.

Sonuçlar

MACH bir kontrol listesi değil, mimari bir istektir. API öncelikli ve başsız ilkeler kısmi uygulamalarda bile gerçek değer katarlar. Mikro hizmetlere ayrıştırma ve Bulut yerelliği resmi tamamlıyor ancak kurumsal olgunluk gerektiriyor.

Sonraki yazılarımızda somut uygulamaları inceleyeceğiz: İsteyenler için Shopify Hydrogen yönetilen altyapı konusunda kafasız, kendi kendine barındırılan açık kaynağı tercih edenler için Medusa.js, e Yerel GraphQL ihtiyaçları olan Python ekiplerinin satıcısı.