{
    "componentChunkName": "component---src-templates-note-note-js",
    "path": "/notes/internal/grofers/Tools",
    "result": {"data":{"mdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is a \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/notes/placeholder\",\n    \"title\": \"placeholder\"\n  }, \"placeholder\"), \". \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/notes/Help-me-fill-up-this-page\",\n    \"title\": \"Help me fill up this page\"\n  }, \"Help me fill up this page\"), \"\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"WAF\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Web Application Firewall\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"We use\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CloudFlare WAF\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Other options\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Akamai Kona Site Defener\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Barracuda\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Fortinet\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Palo Alto\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"AWS WAF\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CloudFront with AWS Shield\"))))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CDN - \", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Content Delivery Network\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"We used\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CloudFlare\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Alternatives\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Amazon Cloud Front\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"API gateway\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Reverse Proxy\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Request Routing\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Load Balancing\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Tools\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"KONG - Blinkit\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"nginx - Learning Paths\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"haProxy - World \", mdx(\"em\", {\n    parentName: \"li\"\n  }, \"Bank\"), \"inc\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CDP - \", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Customer Data Platforms\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"We Used\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Segment\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Others\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Rudder Stack\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Snow plow\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Jitsu\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Apache Unomi\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.perplexity.ai/search/cdp-alternatives-to-cSb2a5AeSuyfwr7rjQ5tqw\"\n  }, \"https://www.perplexity.ai/search/cdp-alternatives-to-cSb2a5AeSuyfwr7rjQ5tqw\")))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"App Monitoring\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Firebase\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Configuration Management\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Consul\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Consul KV - our implementation\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Secret Management\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Vault\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Feature Flag\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Launch Darkly\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Secrets Management\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Virtualisation and orchestration\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Docker\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Kubernetes\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Concept\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"base\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"overlays\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Configuration overrides \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"/notes/kustomise\",\n    \"title\": \"kustomise\"\n  }, \"kustomise\"), \"\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"common configs\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"environment specific overrides\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Dev set up\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"APM\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"New Relic\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Monitoring\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Prometheus and Grafana\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Log Management\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Promtail for log shipping\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Loki do\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Prometheus for metrics\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"apps expose at /metrics\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Initially grafana cloud?\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Distributed Logging\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Mesh tracing\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Request tracing\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Open Telemetry - Blinkit\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"traceid and spanid\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Zipkin\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"twitter\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Pixies\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CNCF\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Tools\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Open Telemetry\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Zipkin \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Jaueger\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Data processing\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Types of processing\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"OL-A-P\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"OL-T-P\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Types of data\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"source application data\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"event data\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"app events data\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"derived data\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Debezium\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"stream the changes to Kafka\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CDC - Change Data Capture\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Airlfow\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"DAGs\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Crons\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Flink - Aggregation\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Spark - \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Redshit - Compute\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"HUDI - datalake\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"snowflake\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"ETL\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"EMR\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Presto\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Query Engine\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Redash - UI\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Event Data\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Rudder\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"CI/CD\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Jenkins\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"ArgoCD\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Incident Management\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Tools\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Ops Genie\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"PagerDuty\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Concepts\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Oncall Rotation\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Generic Rotation and Overrides for special events\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Primary and secondary oncall\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"EMs were the tertiary on call\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"High impact days\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"RCA templates\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"services impacted\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"timelines\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"QOS and orders impacted\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Financial impact\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"TODOs from the RCA\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Collaboration with SRE team\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Suggestions to other services\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Roll back using git\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Integration with slack for roll backs\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"All DB changes had roll backs\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Partial roll outs using LaunchDarkly\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Project Management\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Jira\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Stories\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Story pointers\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"EPIC\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Mapping to OKRs \"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Support Tickets\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"FreshDesk\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Messaging\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Gupshup\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Gossip(service)\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Load testing\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Locust with K8s\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Open source\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Uses python\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"load/test generation can be distributed\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"detailed simulation of user behaviour\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"we created different test users for personas and used them for simulation\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Testing on test environment\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Testing on live environment and cancelling the orders later\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Chatbot\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"FreshWorks Chatbot acquired Joe Hukum\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Data lakes\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"RedShift\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"HUD\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Redshift Sprectrum\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"KPIs\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Tableau\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Business Metrics Dashboard - Sonar\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Kafka -> flink -> PINOT\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Feature Store\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"DynamoDB\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Nyala\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Kafka based Message Queues\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"SNS\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"SQS\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"rabbitMQ\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Topics\", mdx(\"ol\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"DLQ\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"terraform\")), mdx(\"p\", null, \"Grofers architecture\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.google.com/document/d/1ErXxp6x0V58yN7jiM8Gy6iUCN_3uzq-QP0emzLyP5ew/edit\"\n  }, \"https://docs.google.com/document/d/1ErXxp6x0V58yN7jiM8Gy6iUCN_3uzq-QP0emzLyP5ew/edit\")), mdx(\"li\", {\n    parentName: \"ol\"\n  })));\n}\n;\nMDXContent.isMDXComponent = true;","inboundReferences":[]}},"pageContext":{"slug":"internal/grofers/Tools","node":{"childMdx":{"slug":"internal/grofers/Tools"}}}},
    "staticQueryHashes": []}