<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Smriti S</title>
    <description>The latest articles on DEV Community by Smriti S (@smritisatyan).</description>
    <link>https://dev.to/smritisatyan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1115114%2F4714166b-ae24-4939-ba6b-18bd4dada5b2.png</url>
      <title>DEV Community: Smriti S</title>
      <link>https://dev.to/smritisatyan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/smritisatyan"/>
    <language>en</language>
    <item>
      <title>Understand security, scalability and decentralization in Blockchain</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Sat, 20 Sep 2025 11:04:13 +0000</pubDate>
      <link>https://dev.to/smritisatyan/understand-security-scalability-and-decentralization-in-blockchain-nkk</link>
      <guid>https://dev.to/smritisatyan/understand-security-scalability-and-decentralization-in-blockchain-nkk</guid>
      <description>&lt;p&gt;If you are a blockchain designer, you would have faced a fundamental challenge: how to balance security, scalability, and decentralization. This is also known as the Blockchain Trilemma, a term popularized by Ethereum co-founder Vitalik Buterin.&lt;/p&gt;

&lt;p&gt;This blog describes the three pillars, along with methods to solve the trilemma.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1c82eoqhpqkeg4mvppe7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1c82eoqhpqkeg4mvppe7.png" alt="trilemma" width="800" height="929"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Pillars of the Trilemma
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Security
&lt;/h3&gt;

&lt;p&gt;A blockchain must resist attacks and ensure the integrity of data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transactions should be immutable once confirmed.&lt;/li&gt;
&lt;li&gt;Malicious actors should not be able to double-spend or alter the history of transactions.&lt;/li&gt;
&lt;li&gt;Consensus mechanisms (Proof of Work, Proof of Stake, etc.) are designed to make attacks costly and impractical.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security is non-negotiable; without it, trust in the system collapses.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Scalability
&lt;/h3&gt;

&lt;p&gt;Scalability refers to the ability of a blockchain to handle high transaction throughput and low latency.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bitcoin handles ~7 transactions per second.&lt;/li&gt;
&lt;li&gt;Ethereum handles ~15–30 transactions per second in its base layer.&lt;/li&gt;
&lt;li&gt;Compare this with Visa, which can process thousands of transactions per second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scalability is critical if blockchains want to support mass adoption for payments, gaming, or enterprise applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Decentralization
&lt;/h3&gt;

&lt;p&gt;Decentralization ensures no single party controls the system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nodes are distributed globally, making censorship difficult.&lt;/li&gt;
&lt;li&gt;Anyone can participate in validating the transactions (permission-less).&lt;/li&gt;
&lt;li&gt;Power is spread among users, not concentrated in a few hands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more decentralized a system, the harder it is to shut it down or manipulate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is it a trilemma?
&lt;/h2&gt;

&lt;p&gt;The challenge is that achieving all three pillars at once is extremely difficult:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you maximize &lt;strong&gt;decentralization&lt;/strong&gt; and &lt;strong&gt;security&lt;/strong&gt; (like Bitcoin), you often sacrifice &lt;strong&gt;scalability&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If you prioritize &lt;strong&gt;scalability&lt;/strong&gt; and &lt;strong&gt;security&lt;/strong&gt; (like some private/permissioned blockchains), you reduce &lt;strong&gt;decentralization&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If you chase &lt;strong&gt;decentralization&lt;/strong&gt; and &lt;strong&gt;scalability&lt;/strong&gt;, you may compromise &lt;strong&gt;security&lt;/strong&gt; due to weaker validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, most blockchain designs can excel at two dimensions but must compromise on the third.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can you solve the trilemma?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Layer 2 Solutions&lt;/strong&gt;&lt;br&gt;
    - Rollups (Optimistic, ZK-Rollups) move transactions off-chain and settle on the main chain. For example: Arbitrum, zkSync.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Sharding&lt;/strong&gt;&lt;br&gt;
    - Splitting the blockchain into smaller “shards” that process subsets of transactions in parallel. For example, Ethereum’s upcoming roadmap includes sharding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Hybrid Consensus Models&lt;/strong&gt;&lt;br&gt;
    - Combining Proof of Stake with other mechanisms for efficiency. For example, Polkadot’s nominated Proof of Stake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Sidechains and App-Specific Chains&lt;/strong&gt;&lt;br&gt;
    - Specialized chains connected to a main network via bridges. For example, Polygon, Cosmos zones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;For developers, architects, and decision-makers, the trilemma isn’t just theoretical. It directly impacts the user experience (slow or costly transactions), system resilience (how hard it is to attack) and governance (who really controls the network).&lt;/p&gt;

&lt;p&gt;Every blockchain project implicitly makes trade-offs. Understanding the trilemma helps you evaluate whether a platform is suited to your use case or no.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>security</category>
      <category>web3</category>
    </item>
    <item>
      <title>Event-Driven Architecture with Blockchain: Use Kafka/MSK and Blockchain Logs</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Sat, 20 Sep 2025 10:51:47 +0000</pubDate>
      <link>https://dev.to/smritisatyan/event-driven-architecture-with-blockchain-use-kafkamsk-and-blockchain-logs-f5n</link>
      <guid>https://dev.to/smritisatyan/event-driven-architecture-with-blockchain-use-kafkamsk-and-blockchain-logs-f5n</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9toxtiukoqulpbq55uki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9toxtiukoqulpbq55uki.png" alt="blockchain" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The intersection of event-driven architecture (EDA) such as Kafka and  blockchain results in trusted events and scalable distribution. In this blog, you will understand the importance of creating and using event-driven systems that connect decentralized data with enterprise infrastructure.&lt;/p&gt;

&lt;p&gt;If you are building real-time dashboards, supply-chain apps, or fintech services, this blog is for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does Event-Driven Architecture Matter?
&lt;/h2&gt;

&lt;p&gt;In an event-driven architecture setup, systems communicate via events—immutable records of an event. Instead of constantly polling for changes, services react as soon as an event is published.&lt;/p&gt;

&lt;p&gt;For example, consider the following chain of events.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A payment service emits an “OrderPaid” event.&lt;/li&gt;
&lt;li&gt;A shipping service reacts to it and dispatches the package.&lt;/li&gt;
&lt;li&gt;An analytics service consumes the same event for reporting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This decoupled model provides scalability, real-time processing, and extensibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blockchain as an Event Source
&lt;/h2&gt;

&lt;p&gt;You can view a blockchain as a stream of ordered events (or transactions). Every transaction represents an action, such as transferring tokens or updating a smart contract.&lt;/p&gt;

&lt;p&gt;But blockchains don’t push data outward; they expect clients to poll. This is where event-streaming platforms come in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Event-Streaming Platform
&lt;/h2&gt;

&lt;p&gt;Apache Kafka is a distributed event-streaming platform built for high-throughput, fault-tolerant event pipelines. Amazon MSK (Managed Streaming for Kafka) provides the same power without the ops overhead.&lt;/p&gt;

&lt;p&gt;By integrating blockchain logs with Kafka/MSK, you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Capture on-chain events as Kafka topics.&lt;/li&gt;
&lt;li&gt;Stream these events to consumers in real time.&lt;/li&gt;
&lt;li&gt;Process them with stream processors (Kafka Streams, Flink, ksqlDB).&lt;/li&gt;
&lt;li&gt;Process these events to multiple downstream systems (databases, microservices, analytics tools).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An exemplar flow is described below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A smart contract emits an event transfer.&lt;/li&gt;
&lt;li&gt;A Web3 listener service subscribes to these logs.&lt;/li&gt;
&lt;li&gt;The listener publishes the events into a Kafka topic token-transfers.&lt;/li&gt;
&lt;li&gt;Downstream services consume the topic:

&lt;ul&gt;
&lt;li&gt;Analytics service updates dashboards.&lt;/li&gt;
&lt;li&gt;Notification service sends alerts to users.&lt;/li&gt;
&lt;li&gt;Fraud detection pipeline checks anomalies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Benefits of integrating blockchain logs with Kafka/MSK&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Scalability: Kafka/MSK can handle millions of events per second.&lt;/li&gt;
&lt;li&gt;Decoupling: Producers (blockchain) don’t need to know about consumers.&lt;/li&gt;
&lt;li&gt;Replay: Kafka retains events, so new consumers can catch up from history.&lt;/li&gt;
&lt;li&gt;Real-time insights: Blockchain + Kafka enables instant reaction to on-chain activity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Event ordering: Kafka guarantees order within partitions, but you must partition carefully (for example, based on transaction hash).&lt;/li&gt;
&lt;li&gt;Data volume: Popular blockchains generate high-volume logs; filtering is critical.&lt;/li&gt;
&lt;li&gt;Latency: Blockchain finality (where a transaction is permanent and irreversible) introduces some delay (for example, 12s in Ethereum).&lt;/li&gt;
&lt;li&gt;Security: Ensure Kafka/MSK pipelines don’t become central trust bottlenecks.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Overall, you should consider the above-mentioned criteria before choosing to intergrate blockchain with an event-driven service.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>kafka</category>
      <category>msk</category>
      <category>eventdriven</category>
    </item>
    <item>
      <title>Introduction to Geth (Go Ethereum)</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Tue, 15 Jul 2025 11:40:24 +0000</pubDate>
      <link>https://dev.to/smritisatyan/introduction-to-geth-go-ethereum-2hk</link>
      <guid>https://dev.to/smritisatyan/introduction-to-geth-go-ethereum-2hk</guid>
      <description>&lt;p&gt;This topic provides a technical overview of Geth for users getting accustomed to protocol-level infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Familiarity with the command line.&lt;/li&gt;
&lt;li&gt;Basic understanding of Ethereum and the Ethereum mainnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is Geth?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Geth&lt;/strong&gt; (short for &lt;strong&gt;Go Ethereum&lt;/strong&gt;) is an open-source Ethereum execution client maintained by the Ethereum Foundation. Written in the Go programming language, Geth implements the Ethereum protocol and provides robust communication between the client and the Ethereum network.&lt;/p&gt;

&lt;p&gt;Running Geth turns your machine into a full Ethereum node, capable of syncing with the blockchain and participating in the network.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After Ethereum’s transition to &lt;strong&gt;Proof of Stake (PoS)&lt;/strong&gt;, each Ethereum node is now composed of two clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;execution client&lt;/strong&gt; (like Geth)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;consensus client&lt;/strong&gt; (like Prysm or Lighthouse)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Functionalities of Geth
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Transaction Execution and EVM Support
&lt;/h3&gt;

&lt;p&gt;As an &lt;strong&gt;execution client&lt;/strong&gt;, Geth handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processing transactions&lt;/li&gt;
&lt;li&gt;Managing blockchain state&lt;/li&gt;
&lt;li&gt;Executing smart contracts&lt;/li&gt;
&lt;li&gt;Supporting the Ethereum Virtual Machine (EVM)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ An execution client must be paired with a consensus client to form a complete Ethereum node.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Staking and PoS Support
&lt;/h3&gt;

&lt;p&gt;Geth helps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate blocks and manage staking operations&lt;/li&gt;
&lt;li&gt;Enforce protocol rules (e.g., signatures, balances)&lt;/li&gt;
&lt;li&gt;Store a complete copy of the Ethereum blockchain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PoS reduces energy consumption compared to the PoW model. Geth maintains up-to-date blockchain history.&lt;/p&gt;

&lt;h3&gt;
  
  
  State Management
&lt;/h3&gt;

&lt;p&gt;Geth maintains the &lt;strong&gt;state trie&lt;/strong&gt; — a data structure that tracks the current state of all accounts and smart contracts. It ensures state consistency by updating this trie as new transactions are processed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;p&gt;Geth uses a &lt;strong&gt;peer-to-peer (P2P)&lt;/strong&gt; protocol to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discover and connect with peers&lt;/li&gt;
&lt;li&gt;Propagate transactions and blocks&lt;/li&gt;
&lt;li&gt;Synchronize with the rest of the Ethereum network&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Does Geth Work?
&lt;/h2&gt;

&lt;p&gt;Geth is executed via the &lt;strong&gt;command line&lt;/strong&gt; and enables you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start/manage Ethereum nodes&lt;/li&gt;
&lt;li&gt;Communicate with the blockchain&lt;/li&gt;
&lt;li&gt;Interact with smart contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  JSON-RPC Communication
&lt;/h3&gt;

&lt;p&gt;Geth communicates with consensus clients via &lt;strong&gt;JSON-RPC APIs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consensus clients request &lt;strong&gt;execution payloads&lt;/strong&gt; from Geth&lt;/li&gt;
&lt;li&gt;Developers use &lt;code&gt;web3.js&lt;/code&gt; or &lt;code&gt;web3.py&lt;/code&gt; libraries to send transactions, query balances, deploy contracts, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Attach Console
&lt;/h3&gt;

&lt;p&gt;To interact with your running Geth node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;geth attach
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Geth Commands
&lt;/h2&gt;

&lt;p&gt;Listed below are commonly used commands to configure and operate Geth:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;geth --help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays the list of available commands and options, along with descriptions to help understand usage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;geth&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Starts a Geth Ethereum node. By default, it connects to mainnet and synchronizes with the blockchain.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + C&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gracefully stops the running Geth Ethereum node.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;For more information on flags and configuration options, refer to the &lt;a href="https://geth.ethereum.org/docs/" rel="noopener noreferrer"&gt;Geth official documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Geth Security and Best Practices
&lt;/h2&gt;

&lt;p&gt;To ensure the security and reliability of your Geth node, follow these best practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regularly check official updates and install the latest version of Geth.&lt;/li&gt;
&lt;li&gt;Use package managers like &lt;code&gt;homebrew&lt;/code&gt;, &lt;code&gt;apt-get&lt;/code&gt;, etc., depending on your OS, for efficient updates.&lt;/li&gt;
&lt;li&gt;Verify the integrity of downloaded files using checksums or other verification methods.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Geth is a foundational component of Ethereum’s infrastructure. As the execution client, it processes transactions, maintains state, and works in tandem with a consensus client to run a full Ethereum node. This collaboration is essential for maintaining the integrity and functionality of the Ethereum network.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Zero to observable with OpenTelemetry and SigNoz</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Tue, 15 Jul 2025 11:32:10 +0000</pubDate>
      <link>https://dev.to/smritisatyan/zero-to-observable-with-opentelemetry-and-signoz-d7o</link>
      <guid>https://dev.to/smritisatyan/zero-to-observable-with-opentelemetry-and-signoz-d7o</guid>
      <description>&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt; is an important concept in software which provides &lt;strong&gt;visibility&lt;/strong&gt; into your application/services. It describes how the services function in real-time and what is happening inside your application. &lt;/p&gt;

&lt;p&gt;Observabilitiy has three main pillars:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Traces&lt;/strong&gt;: Tells which requests are slow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt;: Monitors latency, failures, and so on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs&lt;/strong&gt;: Helps debug errors with context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;How do you ensure your logs, metrics and traces are in place? Observability is the answer to all of these. &lt;strong&gt;OpenTelemetry&lt;/strong&gt; helps &lt;strong&gt;collect traces, metrics, and logs&lt;/strong&gt; in a vendor-agnostic way and send it to a backend like &lt;strong&gt;SigNoz&lt;/strong&gt; for &lt;strong&gt;visualization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This topic describes how you can enforce observability in a simple application using &lt;a href="https://opentelemetry.io/" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt; and &lt;a href="https://signoz.io/" rel="noopener noreferrer"&gt;SigNoz&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opentelemetry.io/" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt;, aka OTel, is a vendor-neutral open source Observability framework to instrument, generate, collect, and export traces, metrics, and logs (aka telemetry data).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://signoz.io/docs/what-is-signoz/" rel="noopener noreferrer"&gt;SigNoz&lt;/a&gt; is an open-source observability tool powered by OpenTelemetry that helps monitor and gain insights into your application and infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;A microservices application (Here, I am using a Flask-based service that simulates real-world behavior like successful requests, errors, and metrics exposure; and it is instrumented with OpenTelemetry.). Download the app &lt;a href="https://github.com/SmritiSatyan/simple-app" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This blog assumes that you are hands on with concepts like containerization and Docker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Steps to setup observability
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/SmritiSatyan/simple-app/blob/main/Dockerfile" rel="noopener noreferrer"&gt;Dockerize your application&lt;/a&gt; and build the application by specifying correct ports. In this case, the local host uses port 8000.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker build -t simple-app .&lt;br&gt;
docker run -p 8000:8000 \&lt;br&gt;
-e OTEL_EXPORTER_OTLP_ENDPOINT=http://host.docker.internal:4318 \&lt;br&gt;
-e OTEL_SERVICE_NAME=simple-app \&lt;br&gt;
simple-app&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up self-hosted &lt;a href="https://signoz.io/docs/install/docker/#install-signoz-using-the-install-script" rel="noopener noreferrer"&gt;SigNoz on Docker using the install script&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://signoz.io/docs/install/docker/#install-signoz-using-the-install-script" rel="noopener noreferrer"&gt;Verify the SigNoz installation&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This installation spins up:
• ClickHouse (for storing telemetry)
• OTEL Collector (for receiving traces/metrics)
• SigNoz login page (on port 8080)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Ensure port 4318 is open; this is where OTEL collector receives HTTP traces.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Hit some endpoints from the terminal to generate traffic and build traces. For example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl http://localhost:8000/
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;The above command displays a simple welcome message.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl http://localhost:8000/fail
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;The above command throws an error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg227yyjj0sn3xf2wwl75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg227yyjj0sn3xf2wwl75.png" alt="Screenshot 2025-07-01 at 9.18.33 AM" width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To run SigNoz on your local machine, go to &lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&lt;/a&gt; from your browser after verifying the installation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Signup to SigNoz, and navigate to "Traces" from the left sidebar.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzcse3k9tpg6ypkbdtt7.png" alt="Screenshot 2025-07-01 at 9.43.03 AM" width="800" height="311"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to "Service Name" and select the app name to display the traces associated with the application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faky0s608126teid2bkx1.png" alt="Screenshot 2025-06-30 at 4.23.38 PM" width="800" height="480"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Depending on the type of metric, you can choose to view a variety of data insights in different formats (table, visual, and so).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This blog demonstrates observability setup using powerful, open-source tools like SigNoz and OpenTelemetry. These tools help build robust observability pipeline with scalability that help catch bugs easily and reduce latency.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Best Practices for Creating Custom Chaos Experiments</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Tue, 25 Feb 2025 07:26:09 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/best-practices-for-creating-custom-chaos-experiments-4963</link>
      <guid>https://dev.to/litmus-chaos/best-practices-for-creating-custom-chaos-experiments-4963</guid>
      <description>&lt;p&gt;Chaos Engineering is all about &lt;strong&gt;breaking things with a purpose&lt;/strong&gt;- to build &lt;strong&gt;resilient systems&lt;/strong&gt;. Many chaos engineering tools offer &lt;strong&gt;predefined faults&lt;/strong&gt;, but where do you start if you want to build custom chaos experiments to suit your infrastructure? And how do you design chaos experiments that are both &lt;strong&gt;effective and safe&lt;/strong&gt;? Let’s break it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Define Clear Objectives
&lt;/h2&gt;

&lt;p&gt;Answer this question: &lt;strong&gt;What are you testing?&lt;/strong&gt;&lt;br&gt;
Chaos experiments should have a &lt;strong&gt;specific goal&lt;/strong&gt;. Before creating a custom experiment, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What failure scenario are we simulating?&lt;/strong&gt; (CPU spikes, network latency, disk failures, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is the expected behavior of the system?&lt;/strong&gt; (Auto-recovery, failover, degraded performance)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What metrics define success or failure?&lt;/strong&gt; (Response time, error rate, downtime)
For example: "I want to test how my application’s microservices handle sudden node failures and verify if traffic automatically shifts to healthy nodes."&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  2. Choose the Right Disruption
&lt;/h2&gt;

&lt;p&gt;Answer this question: &lt;strong&gt;For your application/system, what faults are relevant? What resources should be disrupted?&lt;/strong&gt;&lt;br&gt;
All faults have different consequences (or blast radius). It is recommended to start with low-risk faults (such as network latency, CPU/memory spike, pod restarts) before moving towards destructive tests (such as node failures, killing database instances, packet loss in critical services).&lt;br&gt;
Start executing chaos experiments in a staging environment, analyze results, and gradually increase the chaos impact to different environments (QA, pre-production, production).&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Ensure RBAC Is in Place
&lt;/h2&gt;

&lt;p&gt;Chaos experiments are disruptive if not controlled. Use RBAC policies to prevent unauthorized users from running high-risk experiments. This way, only authorized users/engineers will have the permissions to execute chaos experiments.&lt;br&gt;
The manifest below describes the rules for a user (“chaos-engineer”) who can perform the operations (create, get, and list) on specified resources.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Role&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;chaos-engineer&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;apiGroups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;litmuschaos.io"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chaosengines"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chaosexperiments"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;verbs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;list"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Monitor System Behavior
&lt;/h2&gt;

&lt;p&gt;When a chaos experiment is defined, it is important to audit what goes on when the experiment is in execution. Set up monitoring/observability tools to monitor CPU, memory, and response time, as well as detect unusual errors. This way, you can answer some of the questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did auto-scaling trigger correctly?&lt;/li&gt;
&lt;li&gt;Did users experience downtime?&lt;/li&gt;
&lt;li&gt;Were ale
rts sent to engineers?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Recovery Plan in-place
&lt;/h2&gt;

&lt;p&gt;Sometimes, chaos experiments may not go as expected, and may disrupt to a higher extent than expected. To address such cases, rollback and recovery should be set up.&lt;br&gt;
For example, Kubernetes self-healing, restarting pods after executing the experiment, and so on.&lt;br&gt;
The manifest below uses Kyverno to auto-restart pods after chaos so that the affected pods don’t persist and affect other resources.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kyverno.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ClusterPolicy&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;restart-failed-pods&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;validationFailureAction&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Enforce&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;restart-on-failure&lt;/span&gt;
      &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;kinds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Pod"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;mutate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;patchStrategicMerge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;restartPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Always&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define clear objectives&lt;/strong&gt; → Know what failure you’re testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start small, then scale&lt;/strong&gt; → Begin with low-risk chaos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use RBAC and monitoring&lt;/strong&gt; → Keep experiments safe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor system behavior&lt;/strong&gt; → Audit what goes on when the experiment runs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always have a recovery plan&lt;/strong&gt; → Have rollback/recovery plans in case something doesn’t go as expected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to create custom experiments but don’t know where to start? Join the &lt;a href="https://slack.litmuschaos.io/" rel="noopener noreferrer"&gt;Litmus Slack channel&lt;/a&gt;, check out the &lt;a href="https://github.com/litmuschaos/litmus-docs" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; and &lt;a href="https://dev.to/t/litmuschaos"&gt;blogs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>litmus</category>
      <category>litmuschaos</category>
      <category>chaosengineering</category>
    </item>
    <item>
      <title>The Hidden Risks of Relying Solely on Testing: Why Chaos Engineering is Essential</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Thu, 06 Feb 2025 04:46:35 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/the-hidden-risks-of-relying-solely-on-testing-why-chaos-engineering-is-essential-57</link>
      <guid>https://dev.to/litmus-chaos/the-hidden-risks-of-relying-solely-on-testing-why-chaos-engineering-is-essential-57</guid>
      <description>&lt;p&gt;This blog explores the challenges organizations face when relying solely on testing to validate deployments, highlights how chaos engineering can bridge these gaps, and showcases various adopters of chaos engineering practices along with their use cases.&lt;/p&gt;

&lt;p&gt;Organizations are rolling out changes almost everyday with the help of CI/CD. You can perform automated, manual, unit and integration tests to validate features before deployment. But what if your system encounters unexpected failures? &lt;/p&gt;

&lt;p&gt;What if there are network disruptions, application crashes or resource exhaustions that would impact the application resulting in downtime or cascading failures? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjveynuhqt0ryy544rsc6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjveynuhqt0ryy544rsc6.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These unforeseen failures can’t be addressed using testing because traditional testing methodologies aren’t designed to simulate such complex, real-world conditions.&lt;br&gt;
This is where &lt;strong&gt;chaos engineering&lt;/strong&gt; comes into play. &lt;/p&gt;

&lt;p&gt;You can address the gaps mentioned earlier by incorporating chaos engineering experimentation in your application to build resilient and reliable systems.&lt;/p&gt;

&lt;p&gt;Described below are some organizations (by sector) that leverage chaos engineering to enhance their cloud-native applications and operations:&lt;/p&gt;

&lt;h3&gt;
  
  
  Technology &amp;amp; E-Commerce: The Challenges and Solutions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Flipkart: Handling High-Traffic Events Without Downtime&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; During peak shopping events, Flipkart experienced traffic spikes that led to performance degradation and downtime. Traditional load testing failed to capture the full complexity of real-world failures like network congestion and database latency.&lt;br&gt;
&lt;strong&gt;Impact:&lt;/strong&gt; Shoppers faced checkout failures, slow page loads, and abandoned carts, affecting revenue and customer satisfaction.&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Flipkart integrated chaos engineering to simulate failures in production-like environments, testing how microservices and databases handled stress conditions. This approach helped them optimize auto-scaling strategies and build robust failover mechanisms, ensuring seamless shopping experiences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Delivery Hero: Ensuring Reliability in Food Delivery Services&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Delivery Hero operates a high-demand food delivery service, where real-time order processing and delivery tracking are critical. Network failures and API downtime led to order failures and frustrated customers.&lt;br&gt;
&lt;strong&gt;Impact:&lt;/strong&gt; Customers faced delays or lost orders, affecting restaurant partnerships and overall brand trust.&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Using chaos engineering, Delivery Hero injected failures into their APIs, databases, and network connections to identify weak points. By proactively fixing these, they improved system redundancy, reduced downtime, and ensured smooth operations even during peak hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Talend: Improving Data Pipeline Resiliency&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Talend, a data integration company, processes massive datasets across multiple cloud environments. Issues like database failures or unexpected API rate limits disrupted data workflows, affecting analytics and reporting.&lt;br&gt;
&lt;strong&gt;Impact:&lt;/strong&gt; Businesses relying on Talend’s data pipelines faced inconsistencies in analytics, leading to misinformed decisions.&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Talend used chaos engineering to introduce controlled disruptions in their ETL (Extract, Transform, Load) processes. This approach helped them refine retry logic, optimize failover configurations, and ensure consistent data processing even under failure conditions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Kitopi: Enhancing Reliability in Cloud Kitchens&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; Kitopi, a cloud kitchen platform, depends on efficient order routing and delivery logistics. Unforeseen infrastructure failures, like database slowdowns or application crashes, led to delayed or missed orders.&lt;br&gt;
&lt;strong&gt;Impact:&lt;/strong&gt; Customers experienced long wait times, and restaurant partners faced reduced efficiency.&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Kitopi adopted chaos engineering to simulate database latencies and system crashes. By analyzing system responses, they improved recovery mechanisms, reduced downtime, and ensured reliable operations for food preparation and delivery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Lenskart: Ensuring E-Commerce Stability During Scaling&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; As Lenskart scaled its e-commerce operations, performance bottlenecks emerged due to unpredictable user behavior and traffic surges.&lt;br&gt;
&lt;strong&gt;Impact:&lt;/strong&gt; Checkout failures and slow load times led to cart abandonment and lost sales.&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; Lenskart employed chaos engineering to test their microservices against network failures and sudden traffic bursts. These experiments helped them fine-tune their cloud infrastructure for better scalability and higher uptime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. iFood: Strengthening Food Delivery Operations&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; iFood operates a large-scale food delivery service that depends on real-time coordination between customers, restaurants, and delivery partners. System failures disrupted order processing and driver dispatching.&lt;br&gt;
&lt;strong&gt;Impact:&lt;/strong&gt; Delayed or canceled deliveries hurt customer satisfaction and restaurant partnerships.&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; iFood used chaos engineering to test service degradations, ensuring their systems could handle API timeouts and database failures. By enhancing their error-handling strategies, they minimized order disruptions and maintained seamless delivery services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Wingie Enuygun Company: Improving Online Travel &amp;amp; Finance Platform Resilience&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Challenge:&lt;/strong&gt; &lt;a href="https://dev.to/litmus-chaos/fintech-leaders-journey-to-resilience-with-litmus-chaos-3k19"&gt;Wingie Enuygun&lt;/a&gt;, an online travel and finance platform, faced outages due to third-party API failures and unpredictable network issues.&lt;br&gt;
&lt;strong&gt;Impact:&lt;/strong&gt; Users encountered booking failures and delayed transactions, leading to loss of trust.&lt;br&gt;
&lt;strong&gt;Solution:&lt;/strong&gt; By integrating chaos engineering, they simulated API slowdowns and network failures, allowing them to improve fallback strategies and system stability. As a result, they delivered a more reliable user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Organizations that do not use chaos engineering risk falling into a cycle of operational inefficiencies and poor customer experiences. By injecting controlled failures, chaos engineering helps address these challenges, thereby building robust and scalable systems.&lt;/p&gt;

</description>
      <category>litmus</category>
      <category>litmuschaos</category>
      <category>chaos</category>
    </item>
    <item>
      <title>Fintech Leader's journey to resilience with Litmus Chaos</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Thu, 19 Dec 2024 05:40:06 +0000</pubDate>
      <link>https://dev.to/litmus-chaos/fintech-leaders-journey-to-resilience-with-litmus-chaos-3k19</link>
      <guid>https://dev.to/litmus-chaos/fintech-leaders-journey-to-resilience-with-litmus-chaos-3k19</guid>
      <description>&lt;p&gt;In this blog, you will understand the importance of chaos engineering in Fintech and see how &lt;strong&gt;Wingie Enuygun&lt;/strong&gt; has leveraged &lt;a href="https://docs.litmuschaos.io/" rel="noopener noreferrer"&gt;Litmus Chaos&lt;/a&gt;, an open-source CNCF-hosted platform to build and enhance their application’s resilience. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Chaos Engineering Essential in Fintech?
&lt;/h2&gt;

&lt;p&gt;In the fintech industry, resilience is crucial. Millions of users rely on financial platforms for transactions, payments, and investments. In such cases, system downtime can lead to significant financial loss, regulatory scrutiny, and loss of customer trust. The complexity of fintech applications often involve microservices, third-party integrations, and real-time data processing, making them vulnerable to unexpected failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Chaos Engineering?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Chaos Engineering&lt;/strong&gt; addresses these challenges by intentionally injecting failure into a system before it is in production, to test its ability to withstand and recover from unplanned failures. This proactive approach allows companies to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mitigate Financial Risks&lt;/strong&gt;: Detect issues before they escalate into costly outages or downtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensure Compliance&lt;/strong&gt;: Maintain uninterrupted service to comply with strict financial regulations and SLAs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Customer Trust&lt;/strong&gt;: Provide a seamless, uninterrupted user experience, which is vital for customer confidence in financial transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By testing for failures before they happen, organizations can achieve operational resilience, reduce downtime, and gain the confidence to innovate faster. &lt;/p&gt;

&lt;p&gt;One such organization that uses &lt;strong&gt;LitmusChaos&lt;/strong&gt; is &lt;strong&gt;Wingie Enuygun&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Wingie Enuygun Group, a leader in travel and fintech, employs chaos engineering practices to enhance the resilience of their applications. Using LitmusChaos, they conduct controlled failure experiments during quality assurance (QA) cycles in pre-production environments. This proactive approach allows them to identify and address potential system weaknesses before deployment, ensuring a resilient application and reliable user experience. &lt;/p&gt;

&lt;p&gt;By simulating real-world failure scenarios, such as server crashes or network outages, Wingie analyzes how their application responds and recovers. This process helps in uncovering vulnerabilities that might not be evident through traditional testing methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Wingie Enuygun Uses Litmus Chaos?
&lt;/h2&gt;

&lt;p&gt;Travelers expect instant access to booking platforms, and even minor disruptions can have significant consequences. Recognizing this, Wingie Enuygun incorporates Litmus Chaos Engineering to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identify Bottlenecks&lt;/strong&gt;: By pinpointing performance and scalability issues, Litmus helps optimize its infrastructure to handle peak loads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detect Issues Early&lt;/strong&gt;: Controlled failures reveal potential issues before they impact users, enabling the company to address problems preemptively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foresee Potential Errors&lt;/strong&gt;: Proactive testing allows teams to predict and mitigate issues, reducing the likelihood of costly downtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach gives the organization a strategic advantage, allowing teams to take preventive measures that keep their systems resilient, and highly available.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Wingie Enuygun Uses Litmus Chaos?
&lt;/h2&gt;

&lt;p&gt;To maximize the benefits of chaos engineering, Wingie Enuygun has integrated Litmus into its Quality Assurance (QA) cycles. This process ensures that every update, change, or new feature undergoes chaos testing for resilience before going into the production environment. Here’s how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Controlled Chaos in Pre-Production&lt;/strong&gt;: Before releasing changes into production, controlled disruptions are introduced to stress-test the systems. These disruptions simulate real-world failures, such as server crashes or network interruptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Resilience Testing&lt;/strong&gt;: By automating chaos experiments, the company validates its system’s ability to recover from critical failures like network latency, resource depletion, and service interruptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug Detection and Verification&lt;/strong&gt;: Chaos experiments force failures that might not otherwise surface while testing or in production. This approach helps identify and resolve bugs before they impact users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By embedding chaos engineering within its QA process, Wingie Enuygun strengthens its infrastructure and builds confidence in its system’s ability to withstand adverse conditions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;From QA cycle integration to proactive resilience testing and custom chaos experiments, Wingie Enuygun’s use of chaos engineering has driven continuous improvement and system innovation. &lt;/p&gt;

&lt;p&gt;By leveraging LitmusChaos, the company enhances its ability to detect issues early, optimize performance, and ensure uninterrupted service for its users by improving the resilience of the application.&lt;/p&gt;

</description>
      <category>litmuschaos</category>
    </item>
    <item>
      <title>'Hello World' in Flyte</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Fri, 21 Jul 2023 07:31:59 +0000</pubDate>
      <link>https://dev.to/smritisatyan/hello-world-in-flyte-48of</link>
      <guid>https://dev.to/smritisatyan/hello-world-in-flyte-48of</guid>
      <description>&lt;p&gt;In my &lt;a href="https://dev.to/smritisatyan/10-minutes-to-flyte-4ppk"&gt;previous article&lt;/a&gt;, you understood the salient features of Flyte, which could help you decide if Flyte is the right orchestration platform for you. &lt;/p&gt;

&lt;p&gt;In this article, you will understand how tasks and workflows in Flyte can be used to implement 'k' nearest neighbours in Python.&lt;/p&gt;

&lt;p&gt;The building blocks of Flyte are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tasks&lt;/strong&gt;: It is a versioned, and shareable unit of execution that encapsulates your code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows&lt;/strong&gt;: It is a directed acyclic graph (DAG) of units of work encapsulated by nodes to describe the order of execution of tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, you will understand how to implement k nearest neighbours using tasks and workflows.&lt;/p&gt;

&lt;p&gt;Let's dive into the implementation details!&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Import the required packages.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from typing import List, NamedTuple

import pandas as pd
from flytekit import task, workflow
from sklearn.datasets import load_wine
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Define a &lt;a href="https://realpython.com/python-namedtuple/"&gt;NamedTuple&lt;/a&gt; that provides a name for the output (useful while displaying the output on the console).
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;split_data = NamedTuple(
    "split_data",
    train_features=pd.DataFrame,
    test_features=pd.DataFrame,
    train_labels=pd.DataFrame,
    test_labels=pd.DataFrame,
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Define a task that loads the wine dataset into your environment and splits it into train and test data. Notice the '@task' decorator specified at the beginning of the method.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@task
def data_processing() -&amp;gt; split_data:
    # load wine dataset
    wine = load_wine()

    # convert features and target (numpy arrays) into Modin DataFrames
    wine_features = pd.DataFrame(data=wine.data, columns=wine.feature_names)
    wine_target = pd.DataFrame(data=wine.target, columns=["species"])

    # split the dataset
    X_train, X_test, y_train, y_test = train_test_split(
        wine_features, wine_target, test_size=0.4, random_state=101
    )
    print("Sample data:")
    print(X_train.head(5))
    return split_data(
        train_features=X_train,
        test_features=X_test,
        train_labels=y_train,
        test_labels=y_test,
    )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Define another task that creates a K-nearest neighbour model and fits the model to the data. The predict function is used to predict values from the test data and store them in a list.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@task
def fit_and_predict(
    X_train: pd.DataFrame,
    X_test: pd.DataFrame,
    y_train: pd.DataFrame,
) -&amp;gt; List[int]:
    lr = KNeighborsClassifier()  # create a KNeighborsClassifier model
    lr.fit(X_train, y_train)  # fit the model to the data
    predicted_vals = lr.predict(X_test)  # predict values for test data
    return predicted_vals.tolist()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Define another task that determines the accuracy of the model based on the actual values and predicted values using the "accuracy_score" method.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@task
def calc_accuracy(y_test: pd.DataFrame, predicted_vals_list: List[int]) -&amp;gt; float:
    return accuracy_score(y_test, predicted_vals_list)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6. Define a workflow (annotated with the @workflow decorator). This workflow lists the tasks in the order in which they are to be executed.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@workflow
def pipeline() -&amp;gt; float:
    split_data_vals = data_processing()
    predicted_vals_output = fit_and_predict(
        X_train=split_data_vals.train_features,
        X_test=split_data_vals.test_features,
        y_train=split_data_vals.train_labels,
    )
    return calc_accuracy(
        y_test=split_data_vals.test_labels, predicted_vals_list=predicted_vals_output
    )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  7. The pipeline is invoked, which displays the accuracy of the models.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if __name__ == "__main__":
    print(f"Accuracy of the model is {pipeline()}%")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full code can be found &lt;a href="https://github.com/SmritiSatyan/Flyte-HelloWorld/blob/main/knn.py"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>10 minutes to Flyte</title>
      <dc:creator>Smriti S</dc:creator>
      <pubDate>Sat, 15 Jul 2023 05:29:12 +0000</pubDate>
      <link>https://dev.to/smritisatyan/10-minutes-to-flyte-4ppk</link>
      <guid>https://dev.to/smritisatyan/10-minutes-to-flyte-4ppk</guid>
      <description>&lt;p&gt;An important aspect of building a machine learning pipeline is the 'workflow'. Workflow refers to the phases of a machine learning model defined and executed by the developer. A typical workflow involves phases like data collection, data cleaning, pre-processing, model building, and making predictions.&lt;/p&gt;

&lt;p&gt;A workflow's dependencies on data and infrastructure complicate its maintenance and reproducibility. These dependencies may not allow the user to focus on the business logic thereby reducing the performance of the model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/flyteorg"&gt;Flyte&lt;/a&gt; is your one-stop solution to resolve these data and infrastructure dependencies, focus on the business logic, and improve the efficiency of your machine learning model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Flyte?
&lt;/h2&gt;

&lt;p&gt;Flyte is a distributed workflow automation platform that is&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Kubernetes-built&lt;/li&gt;
&lt;li&gt;Container-native&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can build complex, mission-critical data and machine learning pipelines at scale. You can also accelerate models to production by building highly concurrent, scalable, and maintainable pipelines that scale to millions of executions and containers.&lt;/p&gt;

&lt;p&gt;Flyte bridges the gap between creating machine learning models and setting them in production. You can execute the model and Flyte will seamlessly orchestrate it in the production environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; A 'workflow' in Flyte's context is different from a machine learning workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building blocks of Flyte
&lt;/h2&gt;

&lt;p&gt;The building block of Flyte is a &lt;a href="https://docs.flyte.org/projects/cookbook/en/latest/auto_examples/basics/task.html#basics-of-tasks"&gt;task&lt;/a&gt;. Think of it as a function with the @task decorator. It is an independent unit/s of execution that encapsulates your code. Tasks are versioned and shareable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@task
def some_function(arguments) -&amp;gt; return_type:
    function-body
return value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A single workflow in Flyte can be associated with multiple tasks. Below is an example of two tasks that generate a dataframe and compute descriptive statistics respectively.&lt;br&gt;
Tasks in Flyte are combined to execute them in a specific order using a &lt;a href="https://docs.flyte.org/projects/cookbook/en/latest/auto_examples/basics/basic_workflow.html#workflows"&gt;workflow&lt;/a&gt;. A 'workflow' is a directed acyclic graph (DAG) of units of work encapsulated by nodes that describes the order of execution of tasks. It is specified using the &lt;code&gt;@workflow&lt;/code&gt; decorator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@workflow
def my_workflow(arguments) -&amp;gt; return_type:
    function-body (Specify the order of tasks)
return value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below is an example of a workflow that specifies the order of execution of the above-mentioned tasks. More about it &lt;a href="https://docs.flyte.org/projects/cookbook/en/latest/index.html"&gt;here&lt;/a&gt;.&lt;br&gt;
A &lt;a href="https://docs.flyte.org/en/latest/concepts/nodes.html#divedeep-nodes"&gt;node&lt;/a&gt; represents a unit of work within a workflow. Generally, a node encapsulates an instance of a task and can coordinate task inputs and outputs. It behaves as a wrapper for tasks and workflows and can be visualised on the user interface.&lt;br&gt;
&lt;a href="https://docs.flyte.org/en/latest/concepts/launchplans.html#divedeep-launchplans"&gt;Launchplans&lt;/a&gt; invoke workflow executions. You can bind a partial or complete list of inputs to be passed as arguments to create an 'execution' (workflow execution). Flyte automatically creates a default launch plan (with no inputs) when a workflow is serialised and registered.&lt;/p&gt;

&lt;p&gt;Instead of using a default launch plan, you can create one too! This way, you can supply the parameters to a launch plan instead of using the default one.&lt;br&gt;
An &lt;a href="https://docs.flyte.org/en/latest/concepts/executions.html"&gt;execution&lt;/a&gt; is an instance of a workflow, node, or task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; You can involve tasks and workflows as regular Python methods, import them, and use them in other Python modules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other features of Flyte
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Versioned&lt;/li&gt;
&lt;li&gt;Versioned code, containerized with all the dependencies.&lt;/li&gt;
&lt;li&gt;Versioned entities, with an option to rollback to a specific version.&lt;/li&gt;
&lt;li&gt;Multi-tenant, scalable service to allow users to work in their own isolated repository without affecting other parts of the platform.&lt;/li&gt;
&lt;li&gt;Cached output for every job trigger, allowing reuse (instead of re-compute), thereby saving execution time and resources.&lt;/li&gt;
&lt;li&gt;Metadata capture (logs) for every workflow to backtrack to the source of errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Type system
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Support for multiple data types such as Blobs, Directories, Schema, and more.&lt;/li&gt;
&lt;li&gt;Strongly typed and parameterized tasks.&lt;/li&gt;
&lt;li&gt;Typesafe pipeline construction, that is, every task has an interface characterized by an input and output. This means illegal pipeline construction fails during declaration, rather than at runtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Customization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Out of the box support to run Spark jobs on K8s, Hive queries, and more.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.flyte.org/en/latest/deployment/configuration/customizable_resources.html#deployment-configuration-customizable-resources"&gt;Customizable&lt;/a&gt; user classes to suit specific requirements.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.flyte.org/projects/cookbook/en/latest/integrations.html"&gt;Integrations&lt;/a&gt; (&lt;a href="https://docs.flyte.org/projects/cookbook/en/latest/auto_examples/sql_plugin/index.html"&gt;SQL&lt;/a&gt;, &lt;a href="https://docs.flyte.org/projects/cookbook/en/latest/auto_examples/pandera_plugin/index.html"&gt;Pandera&lt;/a&gt;, &lt;a href="https://docs.flyte.org/projects/cookbook/en/latest/auto_examples/modin_plugin/index.html"&gt;Modin&lt;/a&gt;) to extend Flyte, if you are ready to take a deep-dive!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Miscellaneous
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ability to iterate through models.&lt;/li&gt;
&lt;li&gt;User-friendly &lt;a href="https://docs.flyte.org/projects/flytekit/en/latest/"&gt;SDKs&lt;/a&gt; to run the workflows.&lt;/li&gt;
&lt;li&gt;Ability to generate dynamic graphs to take decisions during run-time (such as tuning hyperparameters during execution, programmatically stopping the training in case of surging errors, modifying logic of code dynamically, and building AutoML pipelines).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this post, you were introduced to Flyte and its features.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
