🌐
Distributed Platform Architecture Map10 ServicesMulti-Layer3 Critical Paths
⚡
Impact Analysis SimulatorRepository Impact Simulator
Click any repository to visualize downstream impact, dependent APIs, affected workflows, and deployment risk score.
dynamic_pricing
incentive-service
message-service
subscription-programs-app
pricing-control-center-jtier
pricing-control-center-ui
machine-learning-toolkit
badges
Badges-Trending-Calculator
dynamic-pricing-nginx
Affected Downstream Services
Dependent APIs & Workflows
Impacted Workflows
-
Score
⚠️
Critical Runtime Dependencies| Repository | Tier | Nodes | Edges | Direct Callers | Checkout Path | Graph Centrality | Blast Radius |
|---|---|---|---|---|---|---|---|
| incentive-service | Tier-1 | 22,346 | 47,303 | checkout · subscription · message · PCC | ● Yes | CRITICAL | |
| dynamic_pricing | Tier-1 | 6,204 | 13,521 | TPIS · VIS · PCC · GAPI | ● Indirect | CRITICAL | |
| message-service | Tier-2 | 8,821 | 18,230 | Rocketman · Regla · Tetris | — No | HIGH | |
| subscription-programs-app | Tier-2 | 2,417 | 7,608 | incentive-svc · KillBill · orders | ● Yes | HIGH | |
| pricing-control-center-jtier | Tier-2 | 1,360 | 2,704 | dynamic_pricing · VIS · Hive | — No | HIGH | |
| machine-learning-toolkit | Tier-3 | 420 | 424 | dynamic_pricing · PCC | — No | MEDIUM | |
| pricing-control-center-ui | Tier-3 | 267 | 236 | PCC JTier · pricing-svc | — No | MEDIUM | |
| badges | Tier-4 | — | — | Badges-Trending-Calculator | — No | LOW | |
| dynamic-pricing-nginx | Tier-2 | — | — | dynamic_pricing | ● Proxy | MEDIUM |
💰
Pricing & Incentive Interaction FlowsComplete request path from user interaction through pricing resolution, incentive evaluation, and subscription eligibility check.
1
User/GAPI
Price request · Akamai CDN · HB mTLS routing
Entry
→
2
Nginx Proxy
dynamic-pricing-nginx · TLS termination · rate limit
<3ms
→
3
dynamic_pricing
CurrentPriceService · RPO flags · BulkPrice V2
15–35ms
→
4
incentive-service
EligibilityEval · CTAOrchestrator · Discount rules
10–40ms ⚠
→
5
PCC JTier
ILS schedule check · CheckForPendingSalesJob
async
→
6
subscription-prg
Membership eligibility · KillBill plan check
if subscribed
→
7
ML Toolkit
min-price floor · Bayesian elasticity → Pricing API
offline feed
→
8
Response
Price + discount + CTA · JSON assembly
<5ms
🔴
dynamic_pricing is a central dependency across pricing workflows
dynamic_pricing sits at the convergence of 5 upstream callers (TPIS, VIS, GAPI, PCC JTier, ML Toolkit) and 4 downstream consumers. Any deployment or degradation cascades across the entire pricing pipeline including Nginx, the ILS control flow, and the email personalisation path.
⚠️
subscription-programs-app depends on pricing eligibility calculations
subscription-programs-app's largest community (#0, 78 nodes) is dedicated entirely to calling incentive-service. Membership activation, KillBill callback handling, and plan enrollment all gate on incentive eligibility — making incentive-service an implicit subscription runtime dependency.
💥
Failure Blast RadiusPropagation of a Tier-1 incentive-service outage across the platform.
🎁
T=0
incentive-service outage
Origin failure
↓ propagates to
checkout-flowCRITICAL
subscription-prgCRITICAL
message-serviceHIGH
dynamic_pricingHIGH
PCC JTier (ILS)MEDIUM
Rocketman (email)MEDIUM
PCC UI (read-only)LOW
ML Toolkit (DAGs)LOW
💡
message-service amplifies downstream notification traffic
An incentive-service outage causes message-service to receive empty incentive responses and retry — tripling outbound Rocketman traffic via the retry ladder while holding open 1000+/min connections.
⚡
Event-Driven CommunicationPublishers
💲JMS
dynamic_pricing
Publishes price change events
🎁mBus
incentive-service
Order lifecycle events
📨mBus
message-service
Campaign logger output
📦Kafka
AMS / VIS
Audience + inventory updates
Message Bus
ActiveMQ + Kafka
jms.topic.dynamic.pricing.update
jms.topic.retail_price_events
jms.topic.program_price_events
audience_ams_pa_create
jms.topic.campaign.events
Subscribers
🎁consume
incentive-service
Consumes price events for CTA
📨consume
message-service
Audience refresh trigger
🔄consume
subscription-programs
InventoryUnits events
📊stream
EDW / Janus
All topics → data warehouse
🧠
Machine Learning Prediction PipelineML models trained and served by machine-learning-toolkit that feed directly into pricing and incentive decisions.
Data Sources
Hive/EDW · Janus events · MDS · Teradata
→
Airflow DAGs
Cloud Composer · 11 DAGs · min-price + elasticity
→
Bayesian STAN
model_pred_v12.stan · hierarchical prior · WMAPE <15%
→
Elasticity Table
median_bayesian_elasticity · BigQuery output
→
dynamic_pricing
min-price floor via Pricing Service API POST
→
incentive-service
Sellout + deal feed models inform discount eligibility
→
Location Embed
supply_training_table → deal-feed ML model feed
🤖
machine-learning-toolkit contributes to pricing optimization decisions
ML toolkit DAGs run on Google Cloud Composer and feed min-price floors directly to dynamic_pricing via the Pricing Service API. Bayesian elasticity coefficients inform ILS scheduling in PCC JTier. A DAG failure or Hive upstream data quality issue causes silent price floor miscalculation with no immediate alert.
🏢
Service Ownership Boundaries💰 Pricing & Promotions — Core
💲dynamic_pricing
⚙️dynamic-pricing-nginx
🎛️pricing-control-center-jtier
🖥️pricing-control-center-ui
🎁 Incentives & Subscriptions
🎁incentive-service
🔄subscription-programs-app
📨 CRM & Messaging
📨message-service
🧠 Data Science (PnP DS)
🧠machine-learning-toolkit
🏷️ Discovery & Badges
🏷️badges
🔢Badges-Trending-Calculator
🚨
High-Risk Architectural AreasIncentive Checkout Coupling
Critical
incentive-service is called synchronously in the checkout hot path with no circuit breaker from subscription-programs-app or message-service. Single outage blocks orders, membership activation, and email personalisation simultaneously.
ML→Pricing Silent Failure
High
ML Toolkit DAG failures cause silent min-price miscalculation in dynamic_pricing — no immediate Grafana alert is configured for DAG failures that affect the Pricing Service API feed. Data quality degradation is invisible to oncall.
Bidirectional PCC↔Pricing
Critical
dynamic_pricing calls PCC JTier for ILS scheduling AND PCC JTier calls dynamic_pricing for price resolution — a bidirectional circular dependency that creates cascading failure modes. No anti-corruption layer exists between them.
Message Service Retry Storms
High
message-service has no DLQ for Rocketman delivery failures. Failed messages are retried 3× then silently dropped. Under Rocketman degradation, retry load amplifies to 3× normal outbound traffic — confirmed blast radius for notification systems.
Audience Pool Starvation
High
incentive-service BulkQualifyCassandraCreator runs synchronous per-user SELECT in a 2-thread pool. Under large audience loads, pool starvation blocks the Akka dispatcher and causes AMS WS 30s timeout cascade — confirmed root cause of SVC-8782.
No Redis Lock on Schedulers
High
Both message-service and incentive-service run background jobs on every pod simultaneously with no distributed lock. Under N-pod deployments, N×concurrent audience imports and campaign loggers hit the same Cassandra/GCS write paths — confirmed anti-pattern.
Membership God-Object
High
Membership (degree 197, betweenness 0.137) in subscription-programs-app bridges 30+ communities. Any NPE, schema change, or method rename propagates breakage across the entire service graph with zero isolation. Confirmed structural god-object.
MySQL BoneCP Exhaustion
High
dynamic_pricing uses BoneCP (unmaintained) with minimal partition size. Concurrent bulk requests from TPIS + VIS exhaust the pool before new connections are provisioned — P99 spikes to 80ms. SEVERE Grafana alert firing in us-central1.
Vendor Bundle False Metrics
Medium
Minified vendor bundles (jQuery DataTables, Swagger UI) in message-service and incentive-service create false god-nodes (degree 719, 704) that distort architectural metrics and community detection in graphify reports.
📊
Runtime Bottleneck Detection| Service | Component | P50 | P99 | Alert | Root Cause | Risk |
|---|---|---|---|---|---|---|
| dynamic_pricing | MySQL BoneCP pool | 12ms | 80ms 🔴 | SEVERE | Pool starvation | |
| incentive-service | Cassandra byKey() audience | 18ms | 120ms 🔴 | SEVERE | 2-thread pool starvation | |
| message-service | /api/getemailmessages | 12ms | 50ms 🔴 | HIGH | incentive-svc sync call | |
| incentive-service | CTAOrchestratorActor | 14ms | 45ms ⚠ | WARN | Redis miss → MySQL | |
| dynamic_pricing | incentive-svc call | 15ms | 45ms ⚠ | WARN | Sync · no timeout | |
| ML Toolkit | Bayesian STAN training | 4h | 8h | OK | n1-standard-96 · expected |
🔮
Platform Intelligence Insights🔴
dynamic_pricing is a central dependency across pricing workflows
Sits at the convergence point of UI (PCC), Nginx proxy, ML min-price feed, ILS scheduler (PCC JTier), VIS/TPIS consumers, and the incentive discount path. A deployment window must coordinate across 6+ teams.
📨
message-service amplifies downstream notification traffic
No DLQ + no circuit breaker on incentive-svc path means message-service acts as a traffic multiplier under degradation — retries × 3 per failed message × N concurrent campaigns = potential 10× traffic spike to Rocketman.
🧠
machine-learning-toolkit contributes to pricing optimization decisions
Bayesian elasticity model output feeds directly into dynamic_pricing price floors. Min-price DAG failures are currently invisible to oncall. Recommend adding Airflow DAG SLA alerts that page oncall@example.com on missed runs.
🔄
subscription-programs-app depends on pricing eligibility calculations
Membership activation gates on incentive-service eligibility evaluation. An incentive outage blocks subscription plan enrollment and KillBill callback processing — converting a pricing service outage into a subscription revenue loss event.
✅
dynamic-pricing-nginx correctly isolates the pricing API surface
Nginx proxy layer (TLS termination, rate limiting, mTLS routing) provides clean isolation of dynamic_pricing from direct public exposure. Deployed separately from the application service — correct separation of concerns.
🏷️
badges ecosystem operates independently with low blast radius
badges + Badges-Trending-Calculator form a self-contained subsystem with minimal upstream dependencies. No runtime coupling to checkout or pricing critical paths — lowest blast radius of all 10 repositories.
GraphLens Platform Intelligence · Pricing and Promotions Platform · Generated 2026-05-13 · graphifyy v1.26.5 · Groupon P&P Engineering
Platform graph basis: 42,479 total nodes · 96,397 total edges across 10 repositories + 42 Groupon Architecture Overview docs
Platform graph basis: 42,479 total nodes · 96,397 total edges across 10 repositories + 42 Groupon Architecture Overview docs