YAS (Yet Another Shop) is a production-grade, open-source e-commerce platform implemented as a microservices architecture using Java Spring Boot for the backend and Next.js for the frontend (both storefront and admin backoffice). The system is decomposed into ~15 independent microservices (product, cart, order, customer, inventory, payment, promotion, rating, tax, location, media, search, webhook, recommendation, and sample data) that communicate via REST with resilience4j circuit breakers/retries and event-driven patterns using Kafka and Debezium CDC for cross-service data synchronization (e.g., product changes propagate to Elasticsearch for search and PgVector for recommendation). Authentication and authorization are handled via Keycloak with OAuth2/JWT. The architecture includes BFF (Backend For Frontend) gateways using Spring Cloud Gateway and two Next.js frontends. Infrastructure is fully containerized with Docker Compose and Kubernetes Helm charts, with observability via OpenTelemetry, Grafana, Loki, and Tempo. The codebase includes comprehensive unit/integration tests, UI automation tests (Selenium/Cucumber), and CI/CD pipelines per service. While the repository is primarily an application, it incorporates data engineering patterns (CDC, vector embeddings) for the recommendation and search features, giving it a slight hybrid data character. Overall, the code demonstrates solid engineering practices, a well-defined microservice boundary, and several reusable components, though some duplication across services and boilerplate configs exist.
Apache ServiceComb Java Chassis is a production-grade microservices SDK for Java, providing a comprehensive framework for building, registering, discovering, and governing distributed services. It supports multiple programming models (Spring MVC, JAX-RS, POJO) and transport protocols (REST over Vert.x/Servlet, custom binary Highway, WebSocket). The architecture is modular: a core engine (SCBEngine, Invocation) orchestrates filter chains for consumer, provider, and edge roles; pluggable service registries (ServiceCenter, Consul, ZooKeeper, Nacos, etcd, lightweight) handle discovery and registration; governance modules (circuit breaker, retry, rate limiting, bulkhead, fault injection) are policy-driven via Resilience4j; and Swagger/OpenAPI generators automatically produce API contracts from Java annotations. Dynamic configuration is supported through multiple sources (config-center, Kie, Apollo, etcd) with priority-based injection and hot-reloading. External dependencies include Spring Boot, Vert.x, Jackson, Guava, Resilience4j, Zipkin, and Micrometer. In production, a typical data flow begins with a consumer invocation (via RestTemplate, Invoker.createProxy, or RpcReference) that passes through a consumer filter chain (load balancing, retry, circuit breaker), then a transport layer (REST or Highway) to the provider, which processes the request through a provider filter chain (rate limiting, validation, business logic) and returns a response. The framework handles service registration at startup, periodic heartbeats, and instance cache updates via discovery events. Edge/gateway services can apply custom authentication and routing filters. The codebase is large (3355 files) but well-organized into modules: core, transports, providers, governance, swagger, service-registry, clients, foundations, and demos. It demonstrates strong engineering practices: extensive use of SPI for extensibility, filter chain pattern for middleware, event bus for decoupled lifecycle events, and priority-based configuration management. However, the sheer number of demo modules and multiple registry implementations introduces maintenance overhead, and some legacy patterns (LegacyPropertyFactory, JMockit in tests) indicate areas of technical drift.