<?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: Abhishek Ray</title>
    <description>The latest articles on DEV Community by Abhishek Ray (@abhishekray07).</description>
    <link>https://dev.to/abhishekray07</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%2F222288%2F2ccbfee7-5044-4a7d-8873-9577059419ab.png</url>
      <title>DEV Community: Abhishek Ray</title>
      <link>https://dev.to/abhishekray07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhishekray07"/>
    <language>en</language>
    <item>
      <title>Surviving Your First On-Call Shift: 5 Essential Tips</title>
      <dc:creator>Abhishek Ray</dc:creator>
      <pubDate>Wed, 21 Aug 2024 04:25:57 +0000</pubDate>
      <link>https://dev.to/opslane/surviving-your-first-on-call-shift-5-essential-tips-4km3</link>
      <guid>https://dev.to/opslane/surviving-your-first-on-call-shift-5-essential-tips-4km3</guid>
      <description>&lt;p&gt;Joining the on-call rotation for the first time can be daunting. With the right preparation and mindset, you can handle it like a pro. &lt;/p&gt;

&lt;p&gt;Here are five essential tips to help you survive your first on-call shift:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Shadow and Prepare
&lt;/h3&gt;

&lt;p&gt;Before taking on full responsibility, take part in at least one shadow rotation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Observe an experienced colleague during their on-call shift (shadow)&lt;/li&gt;
&lt;li&gt;Have a senior engineer watch and guide you through a shift (reverse shadow)&lt;/li&gt;
&lt;li&gt;Use these experiences to familiarize yourself with common issues and procedures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you shadow, start preparing your environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install and test all necessary tools&lt;/li&gt;
&lt;li&gt;Verify access to production systems and monitoring tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Understand Your Responsibilities
&lt;/h3&gt;

&lt;p&gt;Know exactly what qualifies as an on-call issue and what can wait until business hours:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Familiarize yourself with your team's escalation policy&lt;/li&gt;
&lt;li&gt;Understand the severity levels of different types of incidents&lt;/li&gt;
&lt;li&gt;Know when to wake up your manager or escalate to other teams&lt;/li&gt;
&lt;li&gt;Don't hesitate to ask for help if you're unsure about something&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Master Your Tools
&lt;/h3&gt;

&lt;p&gt;Efficiency during incidents depends on your ability to use your tools effectively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice using monitoring and alerting systems&lt;/li&gt;
&lt;li&gt;Understand how to use your ticketing system for tracking issues&lt;/li&gt;
&lt;li&gt;Be proficient with communication tools for team coordination&lt;/li&gt;
&lt;li&gt;Know how to access and navigate production systems safely&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Document Everything
&lt;/h3&gt;

&lt;p&gt;Thorough documentation is crucial for effective incident management and knowledge sharing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log every action you take during an incident&lt;/li&gt;
&lt;li&gt;Record the outcomes of your actions&lt;/li&gt;
&lt;li&gt;Use a dedicated tool or notebook for documentation&lt;/li&gt;
&lt;li&gt;Include enough detail for others to understand what happened and what you did&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Learn and Improve
&lt;/h2&gt;

&lt;p&gt;Every on-call shift is an opportunity to grow and enhance your skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After each shift, reflect on the incidents you handled&lt;/li&gt;
&lt;li&gt;Identify areas where you can improve&lt;/li&gt;
&lt;li&gt;Seek feedback from more experienced team members&lt;/li&gt;
&lt;li&gt;Contribute to improving runbooks and processes based on your experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember, everyone starts somewhere. Your team is there to support you, so don't be afraid to ask for help when you need it. &lt;/p&gt;

&lt;p&gt;Good luck, and may your pager stay silent!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>oncall</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AWS RDS Proxy Deep Dive: What is it and when to use it</title>
      <dc:creator>Abhishek Ray</dc:creator>
      <pubDate>Wed, 16 Dec 2020 18:42:00 +0000</pubDate>
      <link>https://dev.to/abhishekray07/aws-rds-proxy-deep-dive-what-is-it-and-when-to-use-it-5bio</link>
      <guid>https://dev.to/abhishekray07/aws-rds-proxy-deep-dive-what-is-it-and-when-to-use-it-5bio</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;AWS Relational Database Service (RDS) is a managed database service that was launched almost 10 years ago. Over the last 10 years, application patterns have evolved which has led to various challenges when it comes to interacting with the database:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Applications, especially serverless applications, have a large number of open DB connections. RDS only allows a &lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections" rel="noopener noreferrer"&gt;limited number of open connections&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Custom failure handling code can become hard to manage and error-prone. Handling database failovers is one such example of handling failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS RDS proxy is a fully-managed database proxy for Amazon RDS. RDS proxy works by pooling and sharing DB connections and thus makes applications more scalable as well as resilient to database failures. They key benefits of using RDS proxy are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connection pooling and sharing: Improves application performance by reducing the number of open database connections&lt;/li&gt;
&lt;li&gt;RDS proxy helps improve application availability during failure scenarios such as a database failover.&lt;/li&gt;
&lt;li&gt;RDS Proxy gives you the choice to use IAM authentication for connecting to the database, thus removing the need for database credentials in the application code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RDS proxy is currently available for Aurora MySQL, Aurora PostgreSQL, RDS MySQL and RDS PostgreSQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Concepts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connection Pooling
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PwTNPLrA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://learnaws.org/assets/img/rds-proxy/connection-pooling.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PwTNPLrA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://learnaws.org/assets/img/rds-proxy/connection-pooling.png" alt="https://learnaws.org/assets/img/rds-proxy/connection-pooling.png" width="432" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connection pooling is an optimization that enables applications to share and re-use database connections, thus reducing the load on the database itself. Opening and closing a new database connection is CPU-intensive whereas additional memory is needed for each open connection. Connection pooling also removes the need to worry about database connections in the application code.&lt;/p&gt;

&lt;p&gt;Each database transaction uses one underlying database connection which can be reused once the transaction has finished. This transaction-level reuse is called connection multiplexing (or connection reuse).&lt;/p&gt;

&lt;p&gt;In connection multiplexing, database connections are shared between client connections which helps minimize the resource overhead on the database server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pinning
&lt;/h3&gt;

&lt;p&gt;In some cases, RDS proxy can’t safely reuse a database connection outside of the current session. In such scenarios, the same connection is used for the session until the session ends. This behavior is called pinning.&lt;/p&gt;

&lt;p&gt;AWS recommends trying to avoid pinning as much as possible since it makes it harder to share connections and thus reduces the benefits of using RDS proxy.&lt;/p&gt;

&lt;p&gt;Some reasons why a connection might be pinned are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change of session variable&lt;/li&gt;
&lt;li&gt;Change of configuration parameter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More details about pinning can be found &lt;a href="https://github.com/awsdocs/amazon-rds-user-guide/blob/master/doc_source/rds-proxy.md#rds-proxy-pinning" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure Handling
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jnHYynpE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://learnaws.org/assets/img/rds-proxy/failover.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jnHYynpE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://learnaws.org/assets/img/rds-proxy/failover.png" alt="https://learnaws.org/assets/img/rds-proxy/failover.png" width="461" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A common failure scenario is a database failover, where the original database instance becomes unavailable and is replaced by another one. A failover can happen for various reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planned maintenance such as a database upgrade&lt;/li&gt;
&lt;li&gt;A problem with the database instance itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RDS proxy can improve application availability in such a situation by waiting for the new database instance to be functional and maintaining any requests received from the application during this time. The end result is that the application is more resilient to issues with the underlying database.&lt;/p&gt;

&lt;p&gt;AWS claims that RDS proxy improves failover times by 30-60%. These numbers seem to hold up based on tests like &lt;a href="https://www.percona.com/community-blog/2020/01/07/a-first-look-at-amazon-rds-proxy/" rel="noopener noreferrer"&gt;this&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security benefits
&lt;/h3&gt;

&lt;p&gt;RDS proxy can provide an additional layer of security between the application and the underlying database. AWS recommends enforcing IAM authentication while connecting to the proxy as that eliminates the need to specify database credentials anywhere in the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sKjy_4v1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://learnaws.org/assets/img/rds-proxy/proxy-security.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sKjy_4v1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://learnaws.org/assets/img/rds-proxy/proxy-security.png" alt="https://learnaws.org/assets/img/rds-proxy/proxy-security.png" width="432" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Amazon RDS Proxy is priced per vCPU per hour for each database instance for which it is enabled. The price depends on the RDS instance type used by your database. The larger the database instance, the more you end up paying.&lt;/li&gt;
&lt;li&gt;Partial hours are billed in one-second increments with a 10-minute minimum charge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additional information can be found &lt;a href="https://aws.amazon.com/rds/proxy/pricing/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring
&lt;/h2&gt;

&lt;p&gt;RDS proxy can be monitored by using Amazon CloudWatch. CloudWatch is well integrated with RDS proxy and provides useful metrics that can be used to understanding the performance and behavior of the proxy.&lt;/p&gt;

&lt;p&gt;Some key metrics to keep an eye are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DatabaseConnections&lt;/code&gt;: Number of database connections to the backend database&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DatabaseConnectionsCurrentlyBorrowed&lt;/code&gt;: Number of connections currently being used by your application. Important to set an alarm on this metric.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DatabaseConnectionsCurrentlySessionPinned&lt;/code&gt;: Number of connections in the pinned state. This number should ideally be as low as possible to maximize RDS proxy performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Shortcomings
&lt;/h2&gt;

&lt;p&gt;Some key limitations for RDS proxy are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RDS proxy must be in the same VPC as the database instance. The proxy cannot be publicly accessible even if the database instance is.&lt;/li&gt;
&lt;li&gt;RDS proxy cannot be used with a self-managed EC2-instance based database.&lt;/li&gt;
&lt;li&gt;RDS proxy cannot be used for Aurora Serverless yet&lt;/li&gt;
&lt;li&gt;A proxy can only be associated with 1 Database instance&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Amazon RDS proxy is a database proxy that helps improve application availability and performance. It is particularly helpful for applications that have the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unpredictable workloads&lt;/li&gt;
&lt;li&gt;Frequently open and close database connections&lt;/li&gt;
&lt;li&gt;Higher availability during transient database failures&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>database</category>
      <category>devops</category>
    </item>
    <item>
      <title>AWS EC2 Instance Comparison: M5 vs R5 vs C5</title>
      <dc:creator>Abhishek Ray</dc:creator>
      <pubDate>Mon, 02 Sep 2019 04:08:27 +0000</pubDate>
      <link>https://dev.to/abhishekray07/aws-ec2-instance-comparison-m5-vs-r5-vs-c5-50b3</link>
      <guid>https://dev.to/abhishekray07/aws-ec2-instance-comparison-m5-vs-r5-vs-c5-50b3</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.learnaws.org" rel="noopener noreferrer"&gt;https://www.learnaws.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AWS has a lot of different instance types and it can be difficult to decide which instance type would be the best for a particular use-case. In this article, we will compare three of the most popular instance types (M5, R5 and C5) AWS offers across various dimensions such as their specs, their performance as well the cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparing M5, R5 and C5 instance families
&lt;/h3&gt;

&lt;h4&gt;
  
  
  M5 Instances
&lt;/h4&gt;

&lt;p&gt;Amazon EC2 M5 Instances offer a balance of compute, memory and networking resources and thus they are ideal for a broad range of workloads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jXg4ws_q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/icsgepm0igb6k5d6vlid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jXg4ws_q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/icsgepm0igb6k5d6vlid.png" alt="m5-instance-specs" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  R5 Instances
&lt;/h4&gt;

&lt;p&gt;Amazon EC2 R5 instances are memory-optimized instances.  R5 instances are well suited for memory intensive applications such as high-performance databases, distributed web scale in-memory caches, mid-size in-memory databases, real time big data analytics, and other enterprise applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MlEBRuUJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/wt1chjktkdtfihvrgkj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MlEBRuUJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/wt1chjktkdtfihvrgkj2.png" alt="r5-instance-specs" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  C5 Instances
&lt;/h4&gt;

&lt;p&gt;Amazon EC2 C5 instances are optimized for compute. C5 instances offer the lowest price per vCPU in the Amazon EC2 family and are ideal for running advanced compute-intensive workloads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E5G01Hf5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/wl67wxw7gt1p5vs9c3ka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E5G01Hf5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/wl67wxw7gt1p5vs9c3ka.png" alt="c5-instance-specs" width="800" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;We compared the performance between these instance families by running a bunch of tests on the following instances:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;m5.xlarge&lt;/li&gt;
&lt;li&gt;r5.xlarge&lt;/li&gt;
&lt;li&gt;c5.xlarge&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instance Type&lt;/th&gt;
&lt;th&gt;Number of cores&lt;/th&gt;
&lt;th&gt;Memory (GB)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;m5.xlarge&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;r5.xlarge&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c5.xlarge&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Processor performance
&lt;/h4&gt;

&lt;p&gt;We used &lt;a href="https://www.geekbench.com/" rel="noopener noreferrer"&gt;Geekbench&lt;/a&gt; to compare the performance of these instance types. Geekbench is a processor benchmarking program. It runs a series of tests on a processor and times how long the processor takes to complete the tasks. The faster the CPU, the higher the score.&lt;/p&gt;

&lt;p&gt;All three instance types use the Intel Xeon Platinum 8000 series (Skylake-SP) processor. However, one key difference is the CPU clock speed. Both the M5 and R5 instances families have a core Turbo CPU clock speed of up to 3.1 GHz whereas the C5 instances have a clock speed of up to 3.4 GHz.&lt;/p&gt;

&lt;p&gt;As expected, the c5 instances perform the best on the Geekbench tests.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instance Type&lt;/th&gt;
&lt;th&gt;Single-core score&lt;/th&gt;
&lt;th&gt;Multi-core score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;m5.xlarge&lt;/td&gt;
&lt;td&gt;3905&lt;/td&gt;
&lt;td&gt;8697&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;r5.xlarge&lt;/td&gt;
&lt;td&gt;4112&lt;/td&gt;
&lt;td&gt;9132&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c5.xlarge&lt;/td&gt;
&lt;td&gt;4215&lt;/td&gt;
&lt;td&gt;9415&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Memory performance
&lt;/h4&gt;

&lt;p&gt;We used &lt;a href="https://github.com/jeffhammond/STREAM" rel="noopener noreferrer"&gt;Stream&lt;/a&gt; benchmark to compare the memory performance across these instance types. Stream is used to measure the sustained memory bandwidth.&lt;/p&gt;

&lt;p&gt;In this test, the r5 instances performed the best as expected. R5 instances are memory-optimized and have the most amount of memory as compared to M5 and C5. The M5 instances have more memory available than the C5 instances and have better memory performance than the C5 instances.&lt;/p&gt;

&lt;h5&gt;
  
  
  m5.xlarge
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nt"&gt;-------------------------------------------------------------&lt;/span&gt;

Function    Best Rate MB/s  Avg &lt;span class="nb"&gt;time     &lt;/span&gt;Min &lt;span class="nb"&gt;time     &lt;/span&gt;Max &lt;span class="nb"&gt;time

&lt;/span&gt;Copy:           27275.6     0.006025     0.005866     0.006193

Scale:          27054.6     0.006070     0.005914     0.006232

Add:            28308.0     0.008854     0.008478     0.009080

Triad:          28298.5     0.008879     0.008481     0.009268

&lt;span class="nt"&gt;-------------------------------------------------------------&lt;/span&gt;

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

&lt;/div&gt;



&lt;h5&gt;
  
  
  r5.xlarge
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nt"&gt;-------------------------------------------------------------&lt;/span&gt;

Function    Best Rate MB/s  Avg &lt;span class="nb"&gt;time     &lt;/span&gt;Min &lt;span class="nb"&gt;time     &lt;/span&gt;Max &lt;span class="nb"&gt;time

&lt;/span&gt;Copy:           28324.3     0.005796     0.005649     0.005914

Scale:          27793.0     0.005834     0.005757     0.005905

Add:            28616.2     0.008505     0.008387     0.008691

Triad:          28704.4     0.008515     0.008361     0.008679

&lt;span class="nt"&gt;-------------------------------------------------------------&lt;/span&gt;

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

&lt;/div&gt;



&lt;h5&gt;
  
  
  c5.xlarge
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-------------------------------------------------------------&lt;/span&gt;

Function    Best Rate MB/s  Avg &lt;span class="nb"&gt;time     &lt;/span&gt;Min &lt;span class="nb"&gt;time     &lt;/span&gt;Max &lt;span class="nb"&gt;time

&lt;/span&gt;Copy:           26445.8     0.006110     0.006050     0.006173

Scale:          26306.9     0.006143     0.006082     0.006235

Add:            27072.4     0.008962     0.008865     0.009093

Triad:          27002.7     0.008980     0.008888     0.009053

&lt;span class="nt"&gt;-------------------------------------------------------------&lt;/span&gt;

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

&lt;/div&gt;



&lt;h4&gt;
  
  
  Disk performance
&lt;/h4&gt;

&lt;p&gt;We also ran simple read &amp;amp; write benchmarks to test the performance of the EBS volumes on each of these instance types.&lt;/p&gt;

&lt;p&gt;The R5 instances performed the best on the disk performance benchmarks.&lt;/p&gt;

&lt;h5&gt;
  
  
  m5.xlarge
&lt;/h5&gt;

&lt;p&gt;Write&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;dd &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;16k &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;102400 &lt;span class="nv"&gt;oflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;direct &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/zero &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;test_data

102400+0 records &lt;span class="k"&gt;in
&lt;/span&gt;102400+0 records out
1677721600 bytes &lt;span class="o"&gt;(&lt;/span&gt;1.7 GB, 1.6 GiB&lt;span class="o"&gt;)&lt;/span&gt; copied, 77.5204 s, 21.6 MB/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nb"&gt;dd &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;16K &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;102400 &lt;span class="nv"&gt;iflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;direct &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;test_data &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/null

102400+0 records &lt;span class="k"&gt;in
&lt;/span&gt;102400+0 records out
1677721600 bytes &lt;span class="o"&gt;(&lt;/span&gt;1.7 GB, 1.6 GiB&lt;span class="o"&gt;)&lt;/span&gt; copied, 57.9766 s, 28.9 MB/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  r5.xlarge
&lt;/h5&gt;

&lt;p&gt;Write&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;dd &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;16k &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;102400 &lt;span class="nv"&gt;oflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;direct &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/zero &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;test_data

102400+0 records &lt;span class="k"&gt;in
&lt;/span&gt;102400+0 records out
1677721600 bytes &lt;span class="o"&gt;(&lt;/span&gt;1.7 GB, 1.6 GiB&lt;span class="o"&gt;)&lt;/span&gt; copied, 58.0189 s, 28.9 MB/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;dd &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;16K &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;102400 &lt;span class="nv"&gt;iflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;direct &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;test_data &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/null

102400+0 records &lt;span class="k"&gt;in
&lt;/span&gt;102400+0 records out
1677721600 bytes &lt;span class="o"&gt;(&lt;/span&gt;1.7 GB, 1.6 GiB&lt;span class="o"&gt;)&lt;/span&gt; copied, 40.6274 s, 41.3 MB/s

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

&lt;/div&gt;



&lt;h5&gt;
  
  
  c5.xlarge
&lt;/h5&gt;

&lt;p&gt;Write&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;dd &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;16k &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;102400 &lt;span class="nv"&gt;oflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;direct &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/zero &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;test_data

102400+0 records &lt;span class="k"&gt;in
&lt;/span&gt;102400+0 records out
1677721600 bytes &lt;span class="o"&gt;(&lt;/span&gt;1.7 GB, 1.6 GiB&lt;span class="o"&gt;)&lt;/span&gt; copied, 63.4356 s, 26.4 MB/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;dd &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;16K &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;102400 &lt;span class="nv"&gt;iflag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;direct &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;test_data &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/null

102400+0 records &lt;span class="k"&gt;in
&lt;/span&gt;102400+0 records out
1677721600 bytes &lt;span class="o"&gt;(&lt;/span&gt;1.7 GB, 1.6 GiB&lt;span class="o"&gt;)&lt;/span&gt; copied, 46.5171 s, 36.1 MB/s

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

&lt;/div&gt;



&lt;h4&gt;
  
  
  Pricing
&lt;/h4&gt;

&lt;p&gt;We compared the prices between these instance families by looking at the &lt;strong&gt;price per hour&lt;/strong&gt; for each instance type.&lt;/p&gt;

&lt;p&gt;C5 instances are the cheapest amongst the three instance families whereas the R5 instances are the most expensive. R5 instances are almost &lt;strong&gt;50%&lt;/strong&gt; more expensive than C5 instances.&lt;/p&gt;

&lt;p&gt;Price/core for Linux on-demand instances:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instance Type&lt;/th&gt;
&lt;th&gt;Price / hour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;m5.xlarge&lt;/td&gt;
&lt;td&gt;$0.192&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;r5.xlarge&lt;/td&gt;
&lt;td&gt;$0.252&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;c5.xlarge&lt;/td&gt;
&lt;td&gt;$0.170&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;The new C5 instances offer the best processor performance as well as price and should be the go-to instance type for most use-cases.&lt;/p&gt;

&lt;p&gt;If the use-case requires a lot of memory, then the choice becomes either between M5 and R5. Critical applications such as in-memory databases and caches should use the R5 instances since they are optimized for such use-cases.&lt;/p&gt;

&lt;p&gt;Applications such as batch processing systems are probably better suited for M5 instances since they need the additional memory but are not as performance-critical.&lt;/p&gt;




</description>
      <category>aws</category>
    </item>
  </channel>
</rss>
