<?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: Murali</title>
    <description>The latest articles on DEV Community by Murali (@muraliairody).</description>
    <link>https://dev.to/muraliairody</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%2F3569645%2Fc598cb40-3c74-4cfa-9c38-73c04f148780.jpg</url>
      <title>DEV Community: Murali</title>
      <link>https://dev.to/muraliairody</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muraliairody"/>
    <language>en</language>
    <item>
      <title>Behind Every Click: Understanding Client–Server Architecture</title>
      <dc:creator>Murali</dc:creator>
      <pubDate>Thu, 04 Dec 2025 05:41:00 +0000</pubDate>
      <link>https://dev.to/muraliairody/behind-every-click-understanding-client-server-architecture-4hpd</link>
      <guid>https://dev.to/muraliairody/behind-every-click-understanding-client-server-architecture-4hpd</guid>
      <description>&lt;p&gt;Client–server architecture is one of the most fundamental models used in modern application development. &lt;/p&gt;

&lt;p&gt;It consists of two major components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client&lt;/strong&gt; — the user or application making the request&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server&lt;/strong&gt; — the machine that processes the request and returns the response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a user wants to access a server, the simplest method is by pinging the server’s IP address. However, IP addresses are difficult to remember, which makes direct access impractical. To solve this problem, we use the &lt;strong&gt;Domain Name System (DNS)&lt;/strong&gt;. &lt;br&gt;
DNS converts user-friendly domain names into IP addresses, allowing users to connect to the server seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Server Performance and Scaling
&lt;/h2&gt;

&lt;p&gt;A server with limited hardware for example, 2 CPUs and 4 GB RAM can process only a certain number of requests. When traffic increases significantly, users may experience delays or the server may even become unresponsive.&lt;/p&gt;

&lt;p&gt;To handle this, we can scale the system in two ways:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Vertical Scaling (Scaling Up)
&lt;/h2&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%2Fdce0xgoosjtrr88k9olo.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%2Fdce0xgoosjtrr88k9olo.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This involves increasing the physical resources of the server, such as upgrading to 16 CPUs and 128 GB RAM. &lt;br&gt;
While this increases the server’s capacity, it introduces problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource wastage when traffic is low&lt;/li&gt;
&lt;li&gt;Downtime during scaling, since the server needs to be restarted&lt;/li&gt;
&lt;li&gt;Hardware limits — there is a maximum capacity beyond which upgrades are not possible&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Horizontal Scaling (Scaling Out)
&lt;/h2&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%2F42mmkdcrkv3ozp7kg24n.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%2F42mmkdcrkv3ozp7kg24n.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of upgrading one large server, we duplicate multiple small servers with the same configuration (e.g., multiple 2-CPU, 4-GB-RAM servers).&lt;br&gt;
Benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No downtime when adding or removing servers&lt;/li&gt;
&lt;li&gt;Better cost efficiency&lt;/li&gt;
&lt;li&gt;High fault tolerance&lt;/li&gt;
&lt;li&gt;Efficient traffic management during peak times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, when we clone servers, each server gets its own IP address, creating an important question…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Do We Handle Multiple Server IPs If DNS Points to Only One&lt;/strong&gt;&lt;br&gt;
This is where Load Balancers come into play.&lt;br&gt;
A load balancer sits between clients and servers. It exposes one public IP to the DNS and intelligently distributes incoming traffic to multiple backend servers.&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%2F6u4wbt6wyigbmuxqb4r9.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%2F6u4wbt6wyigbmuxqb4r9.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical Design Considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If multiple servers exist, how does the load balancer decide which server to send each request to?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;How do we maintain user sessions across multiple servers? (e.g., login sessions)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;How do auto-scaling groups work when traffic increases suddenly?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;How do applications store shared files when servers are distributed?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;How does health-checking ensure that traffic is never sent to a failed server?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>distributedsystems</category>
      <category>systemdesign</category>
      <category>architecture</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Basic Data Types in Python</title>
      <dc:creator>Murali</dc:creator>
      <pubDate>Sat, 18 Oct 2025 11:06:47 +0000</pubDate>
      <link>https://dev.to/muraliairody/basic-data-types-in-python-50fe</link>
      <guid>https://dev.to/muraliairody/basic-data-types-in-python-50fe</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. int (Integer)&lt;/strong&gt;&lt;br&gt;
Definition:&lt;br&gt;
An integer is a whole number (positive, negative, or zero) without a decimal point.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a = 10
b = -25
c = 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No limit on the size of an integer (Python handles big integers automatically).&lt;/li&gt;
&lt;li&gt;Supports arithmetic operations: +, -, &lt;em&gt;, /, //, %, *&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x = 5
y = 2
print(x + y)   # 7
print(x // y)  # 2  (integer division)
print(x ** y)  # 25 (power)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. float (Floating Point)&lt;/strong&gt;&lt;br&gt;
Definition:&lt;br&gt;
A float represents real numbers (numbers with decimals).&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pi = 3.14159
temperature = -5.4
height = 10.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for precise decimal calculations.&lt;/li&gt;
&lt;li&gt;Supports all arithmetic operations.&lt;/li&gt;
&lt;li&gt;You can use scientific notation:
e = 1.23e4   # 1.23 × 10⁴ → 12300.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a = 2.5
b = 4.0
print(a * b)    # 10.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. complex (Complex Number)&lt;/strong&gt;&lt;br&gt;
Definition:&lt;br&gt;
A complex number has a real and an imaginary part, written as a + bj,&lt;br&gt;
where a is real and b is imaginary.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;z1 = 2 + 3j
z2 = 1 - 4j
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;z.real gives the real part.&lt;/li&gt;
&lt;li&gt;z.imag gives the imaginary part.&lt;/li&gt;
&lt;li&gt;Supports arithmetic operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;z = 2 + 3j
print(z.real)  # 2.0
print(z.imag)  # 3.0
print(z * 2)   # (4+6j)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. bool (Boolean)&lt;/strong&gt;&lt;br&gt;
Definition:&lt;br&gt;
Boolean type has only two values: True and False.&lt;br&gt;
Used in conditional logic and comparisons.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;is_active = True
is_admin = False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bool is actually a subclass of int:&lt;/li&gt;
&lt;li&gt;True → 1&lt;/li&gt;
&lt;li&gt;False → 0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print(True + True)   # 2
print(False + True)  # 1
#Used in comparisons:
x = 10
y = 5
print(x &amp;gt; y)  # True
print(x == y) # False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. str (String)&lt;/strong&gt;&lt;br&gt;
Definition:&lt;br&gt;
A string is a sequence of characters enclosed in single, double, or triple quotes.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name = "Ravi"
greeting = 'Hello'
paragraph = """This is
a multi-line string."""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strings are immutable (cannot be changed after creation).&lt;/li&gt;
&lt;li&gt;You can concatenate (+), repeat (*), slice, and iterate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s = "Python"
print(s[0])      # P
print(s[-1])     # n
print(s[0:3])    # Pyt
print(s + "3")   # Python3
print(s * 2)     # PythonPython
Common string methods:
text = "hello world"
print(text.upper())    # HELLO WORLD
print(text.capitalize()) # Hello world
print(text.replace("world", "Python"))  # hello Python
print(text.split())    # ['hello', 'world']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
