<?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: Ashan Fernando</title>
    <description>The latest articles on DEV Community by Ashan Fernando (@ashanfernando).</description>
    <link>https://dev.to/ashanfernando</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%2F51404%2Fa2df60d6-6305-4c9b-841a-600eba7e472c.png</url>
      <title>DEV Community: Ashan Fernando</title>
      <link>https://dev.to/ashanfernando</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashanfernando"/>
    <language>en</language>
    <item>
      <title>Composable Software Architectures are Trending: Here’s Why</title>
      <dc:creator>Ashan Fernando</dc:creator>
      <pubDate>Tue, 19 Mar 2024 11:11:18 +0000</pubDate>
      <link>https://dev.to/bitdev_/composable-software-architectures-are-trending-heres-why-17ka</link>
      <guid>https://dev.to/bitdev_/composable-software-architectures-are-trending-heres-why-17ka</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgujyhrjo8a06at6nap0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgujyhrjo8a06at6nap0h.png" alt="Monolith to Composable" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The progression from monolithic applications to composable architecture marks a significant leap in building highly scalable and maintainable software applications. This evolution crossed different milestones in its path.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Era of Monolithic Applications
&lt;/h2&gt;

&lt;p&gt;Historically, software systems were predominantly monolithic. In these systems, various components, including the user interface, business logic, and data access layers, are tightly integrated within a single codebase. While this approach was straightforward and productive initially, it inevitably led to challenges as applications grew in complexity.&lt;/p&gt;

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

&lt;p&gt;Even a minor modification to the application could necessitate rebuilding, testing, and redeploying the entire application, introducing inefficiency. Additionally, developer efficiency decreases as many developers have to collaborate and handle a broader cognitive load to identify the areas of change and their impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Modular Monolith
&lt;/h2&gt;

&lt;p&gt;Before the widespread adoption of microservices and micro frontends, the modular monolith architectural style emerged as a middle ground between the traditional monolith and the fully distributed microservices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F657mag29qemkgq7zxr9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F657mag29qemkgq7zxr9g.png" alt="Modular Monolith" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This approach aims to retain the operational simplicity of the monolith while introducing a level of modularity and separation of concerns typically associated with Microservices. It draws clear boundaries around modules, making development and testing more granular, reducing the cognitive load for development, and thus improving overall productivity.&lt;/p&gt;

&lt;p&gt;Yet, the fundamental challenges of a large code base still exist, impacting developer collaboration and efficient use of resources to run the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shift Toward Microservices and Micro Frontends
&lt;/h2&gt;

&lt;p&gt;The advent of Microservices marked a paradigm shift to address many challenges of monolithic architectures at scale. Microservices architecture enabled independent development, testing, and deployment by breaking down applications into smaller, loosely coupled services, each responsible for a specific function and communicating through well-defined interfaces.&lt;/p&gt;

&lt;p&gt;Building on the principles of Microservices, the concept of Micro frontends emerged to address similar challenges in the frontend landscape. Microfrontends extend the Microservices paradigm to the frontend, breaking down monolithic frontend codebases into smaller, more manageable pieces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flm1yjj0b3brz6qjs4bcb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flm1yjj0b3brz6qjs4bcb.png" alt="Microservies and Microfrontends" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, there is a fundamental difference between Microservices and Microfrontends. Microservices are distributed systems where each service has an end-to-end lifecycle and complete autonomy in development and operations. Therefore, it is recommended that each Microservice run on its own process (runtime isolation) and databases (data isolation) and has its own codebase (code isolation), minimizing dependencies across development teams, resulting in less reuse and collaboration.&lt;/p&gt;

&lt;p&gt;On the other hand, Micro frontends need a significant level of component reuse to keep UI consistent. It requires either run-time or build-time (preferred) integration before running in the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf5fixjjugg99cad981j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf5fixjjugg99cad981j.png" alt="Development Cost vs Application Size" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microservices and Micro frontends are not suitable for everyone. A startup or a small development team may find it difficult and counter-productive to adapt these architectural styles as they come with overheads in setting up projects and managing operations. Therefore, the cost of adapting these architectures makes sense beyond a certain scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Purely Composable Architecture
&lt;/h2&gt;

&lt;p&gt;Composability involves creating software applications from independent, reusable components, each encapsulating its dependencies and distinct functionality. Then, these components (building blocks) can be combined to build complex applications. It’s a fundamental difference to the way we used to develop software applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv5059i5f9va2osveh4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv5059i5f9va2osveh4d.png" alt="Purely Composable" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since components are smaller, reusable building blocks, the context of change becomes the scope of the components that can be modified and tested independently. The main gap in implementing composable architecture in the past is not having robust tooling to support it. And since some changes may cut across multiple components, robust tooling that aids in modifying components in bulk and testing the dependency chain is required.&lt;/p&gt;

&lt;p&gt;The following diagram showcases how &lt;a href="https://bit.dev"&gt;bit&lt;/a&gt; shows the dependency graph of modified components and their dependents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh3nrkws8sc8l14t7bsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh3nrkws8sc8l14t7bsg.png" alt="Bit Dependency Graph" width="700" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the beauty of this approach is that since it’s so fundamental, you can use it with other architectural styles to address some of their weaknesses. Following are some examples.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use components to build your Microservices so that you can start collaborating between teams and share components.&lt;/li&gt;
&lt;li&gt;Use app as the shell component to build your Micro frontends, using a &lt;a href="https://bit.dev/reference/reference/scope/scope-overview/"&gt;remote scope&lt;/a&gt; for each team.&lt;/li&gt;
&lt;li&gt;Create an &lt;a href="https://bit.dev/reference/envs/create-env/"&gt;Env&lt;/a&gt; for each Microservice so that the technology used in each Microservice is independent of one another.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxakbopi0f0ltvku19001.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxakbopi0f0ltvku19001.png" alt="Bit UI" width="720" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, since each component has its documentation, clear interfaces, tests, and previews and share these in &lt;a href="https://bit.cloud"&gt;bit.cloud&lt;/a&gt;, collaboration increases at scale across codebases and teams.&lt;/p&gt;

&lt;p&gt;And there are many other benefits of implementing a composable architecture;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Flexibility:&lt;/strong&gt; Architecture becomes flexible when adopting different styles and patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability of the development team:&lt;/strong&gt; Individual components can be scaled as needed, allowing for more efficient resource utilization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability:&lt;/strong&gt; The modular nature of composable architectures simplifies maintenance and updates, as changes are localized to specific components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Innovation and Speed:&lt;/strong&gt; Reusable components accelerate development cycles and foster innovation by enabling teams to leverage existing functionalities for new applications and collaborate better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better dependency management:&lt;/strong&gt; Consider a scenario where a UI component library is used across multiple projects within an organization. Bit can manage these components’ dependencies, ensuring that updates do not break functionality in any projects relying on the library.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The evolution from monolithic applications to composable architectures is redefining the standards for software development. With the support of advanced tools like Bit, the future of software development is set to be more flexible, efficient, and aligned with the dynamic needs of businesses.&lt;/p&gt;

&lt;p&gt;As we move forward, composable architectures will undoubtedly continue to shape the future of software development, marking a significant shift towards more adaptable and resilient software systems.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deployment Strategies for Auto-Scaling and Load Balancing EC2 Instances in AWS</title>
      <dc:creator>Ashan Fernando</dc:creator>
      <pubDate>Mon, 26 Feb 2018 15:03:48 +0000</pubDate>
      <link>https://dev.to/ashanfernando/deployment-strategies-for-auto-scaling-and-load-balancing-ec2-instances-in-aws--2e6l</link>
      <guid>https://dev.to/ashanfernando/deployment-strategies-for-auto-scaling-and-load-balancing-ec2-instances-in-aws--2e6l</guid>
      <description>

&lt;p&gt;Scalability is one of the most important aspects to consider for modern web application deployments. With the advancement of Cloud technologies, it has never been easier to design solutions for scalability. The elasticity of Cloud provides the basic foundation and flexibility to design practical solutions.&lt;/p&gt;

&lt;p&gt;Using AWS, it is possible to provision EC2 instances and pay only for the time of usage and also allowing to automate the scaling out (Creating more instances) for the demand automatically, with tools like Auto Scaling Configurations, Launch Configurations, Load Balancers, &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html"&gt;Amazon Machine Images&lt;/a&gt; (AMIs) and more.&lt;/p&gt;

&lt;p&gt;However, there are various factors that involve in building a reliable and efficient scaling platform for your application deployments which is worth to consider. Therefore it is required to design the auto-scaling appropriately to address the following,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scaling efficiently on demand (reducing new instance provisioning time).&lt;/li&gt;
&lt;li&gt;New deployment support with near zero downtime.&lt;/li&gt;
&lt;li&gt;Rollback support.&lt;/li&gt;
&lt;li&gt;Disaster recovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Auto-Scaling and Load Balancing Tools in AWS
&lt;/h1&gt;

&lt;p&gt;There are several fundamental services required for autoscaling and load balancing deployments. Most of these services are readily available as managed services from AWS.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load Balancer - Requires to balance the load coming from clients and fairly distribute to the healthy EC2 instances. It also requires to identify unhealthy instances and stop sending the traffic. In AWS, there are multiple types of Load Balancers available (Classic Load Balancer, Application Load Balancer &amp;amp; Network Load Balancer) which can be used for different purposes. However, Application Load Balancer is commonly used for general Web Applications.&lt;/li&gt;
&lt;li&gt;Auto-Scaling Tools - These tools are needed to identify the limitations of existing capacity and trigger provisioning of new instances (Scale-out) and also to terminate instances (Scale-in) when the load is less. AWS provides a combination of tools to support this including CloudWatch (To monitor), Auto-Scaling Configurations, Launch Configurations (Instructions to bootstrap new instance).&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Using Custom AMIs
&lt;/h1&gt;

&lt;p&gt;One of the common approaches is to create an &lt;a href="https://n2ws.com/how-to-guides/automate-amazon-ec2-instance-backup.html"&gt;AWS EC2&lt;/a&gt; instance with the required operating system and application inside and create a Custom AMI (Virtual Machine Image). This allows defining the AMI reference in AWS EC2 Launch Configuration to instruct AWS auto-scaling tools to bootstrap new instances using the custom AMI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Straightforward to configure the provisioning rules.&lt;/li&gt;
&lt;li&gt;Easy to rollback and update new instances (AWS provides support for rolling updates).&lt;/li&gt;
&lt;li&gt;Support for deploying a large number of instances.&lt;/li&gt;
&lt;li&gt;Relatively fast bootstrap process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cons
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Requires to have a relatively complex build process and required to build new AMIs for each update.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, it is also possible to have a Custom AMI and do minor configurations upon the EC2 instance bootstrap process.&lt;/p&gt;

&lt;h1&gt;
  
  
  Dynamically Bootstrap EC2 Instances
&lt;/h1&gt;

&lt;p&gt;In this approach, it is possible to use a base AMI provided by Amazon which contains only the operating system and general software. There are several approaches to implement dynamically bootstrapping EC2 instances for an application deployment.&lt;/p&gt;

&lt;p&gt;Use a Base AMI from Amazon and bootstraps its application when the instance is starting using the AWS Launch Configurations. &lt;br&gt;
Create a Custom AMI that is capable of loading a specified version of the application upon bootstrap.&lt;br&gt;
It is also possible to use a base Amazon AMI with Docker where the container image is pulled or built upon bootstrapping of the instance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Not required to keep AMIs for each deployment.&lt;/li&gt;
&lt;li&gt;Base AMI software patching can be done independently from the application.&lt;/li&gt;
&lt;li&gt;Straightforward to configure the provisioning rules.&lt;/li&gt;
&lt;li&gt;Build process and deployment is straightforward (Without the need for the AMI build).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cons
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;For large applications, bootstrapping can take more time causing problems for spike loads (Taking too much time to provision and handle the excess load).&lt;/li&gt;
&lt;li&gt;Supporting rollback would be difficult unless following an approach to keep track of bootstrap code with deployment version (e.g Store each deployment in S3 and bootstrap process will retrieve the relevant version).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, using &lt;a href="https://en.wikipedia.org/wiki/Docker_(software)"&gt;Docker&lt;/a&gt; can solve some of the problems of deployment versioning and rollback which requires to containerize the applications and have a unique docker build process.&lt;/p&gt;


</description>
      <category>aws</category>
      <category>autoscaling</category>
      <category>loadbalancing</category>
      <category>cloud</category>
    </item>
    <item>
      <title>The Importance of Capacity Planning for EBS Volumes in AWS</title>
      <dc:creator>Ashan Fernando</dc:creator>
      <pubDate>Thu, 01 Feb 2018 19:06:07 +0000</pubDate>
      <link>https://dev.to/ashanfernando/the-importance-of-capacity-planning-for-ebs-volumes-in-aws-3pd0</link>
      <guid>https://dev.to/ashanfernando/the-importance-of-capacity-planning-for-ebs-volumes-in-aws-3pd0</guid>
      <description>

&lt;p&gt;Provisioning an EC2 instance with an EBS volume for your applications is quite straightforward in AWS. However, have you ever thought whether you are provisioning either under or over the required amount of capacity for Storage? &lt;/p&gt;

&lt;p&gt;This is one of the main places where over provisioning happens. Its common to provision higher amount of capacity or throughput just to be on the safe side but finally ending up in problems when application workload changes. Therefore doing a proper capacity planning considering different factors like volume type, size, throughput, latency, automation, and costs are really important.&lt;/p&gt;

&lt;p&gt;In addition, there are other factors such as selecting the taking snapshots, pre-warming &amp;amp; etc. which also affects AWS EBS performance that also needs to be considered for capacity planning.&lt;/p&gt;

&lt;p&gt;One of the main challenges applications faces with poor capacity planning is in handling peak application loads as well as when handling failures. With the support of automation tools available in AWS and knowing the limitations, it is possible to plan for these situations without over-provisioning the storage which costs more.&lt;/p&gt;

&lt;h1&gt;
  
  
  Storage Volume Type and Size
&lt;/h1&gt;

&lt;p&gt;This is one of the main areas where wrong selections are made since AWS EBS provides multiple options for underlying physical storage device types and storage capacity. In the past, it was important to plan for the storage size since it was required to restart the EC2 instance after increasing the storage size which can result in a downtime. With the current generation of AWS &lt;a href="https://n2ws.com/how-to-guides/how-to-increase-the-size-of-an-aws-ebs-cloud-volume-attached-to-a-linux-machine.html"&gt;EBS Volumes&lt;/a&gt;, you can increase the size, change the volume type of IOPS without detaching it. It is possible to do the same for detached volumes as well.&lt;/p&gt;

&lt;p&gt;Another important action you can take is to automate the associated volume modifications using CloudFormation, AWS CLI or using AWS SDKs so that you can provision the required configuration optimally and when it is needed.&lt;/p&gt;

&lt;h1&gt;
  
  
  Storage IOPS
&lt;/h1&gt;

&lt;p&gt;It is equally important to do plan on the required throughput. Most of the time I see many EC2 configurations go ahead with the default settings in selecting general purpose &lt;a href="https://en.wikipedia.org/wiki/Solid-state_drive"&gt;SSD&lt;/a&gt; which is alright unless you know what you are doing. However, there are costs benefits in selecting &lt;a href="https://en.wikipedia.org/wiki/Hard_disk_drive"&gt;HDD&lt;/a&gt; storage over SSD for several sequential access scenarios or non-trivial workloads which needs to be considered while planning the throughput. On the other hand, if you are dealing with applications with high-performance requirements and IOPS, it is important to do several load testing for the application forehand and understand the IOPS requirements for different nature of workloads so that adequate automation and capacity can be provisioned to efficiently run the applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  Storage Latency
&lt;/h1&gt;

&lt;p&gt;This is one of the areas where many forget about considering especially for high-performance applications. One of the important aspects of managing latency is to manage the queue length which depends on the number of pending I/Os for an EBS device. You need to consider this and plan the queue considerations based on the latency and I/O size.&lt;/p&gt;

&lt;p&gt;Another area many are unaware of is that upon creation of an EBS volume from a snapshot and try to access it for the first time can cause unexpected latencies. For an application that requires performance starting from the first read needs to be Pre-Warmed by hitting each block before running the application in production which can be achieved by initializing the EBS.&lt;/p&gt;

&lt;h1&gt;
  
  
  Automation
&lt;/h1&gt;

&lt;p&gt;This is a very crucial area which you should be focussing on. Knowing the limitations and capabilities for automating EBS capacity and provisioning possibilities can save lots of money due to over and under provisioning of EBS volumes. &lt;/p&gt;

&lt;p&gt;One of the places you can start in figuring out the automation capabilities is to go through the features in AWS EBS Volume in web console and then understand the underlying configurations which you can automate or require manual interactions. In addition looking at the matrices in &lt;a href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html"&gt;CloudWatch&lt;/a&gt; for EBS also provides a great insight in possibilities to monitor and trigger for automation which might require writing a custom logic using AWS EBS SDK in a Lambda function or period monitor and provisioning triggers.&lt;/p&gt;

&lt;h1&gt;
  
  
  Costs
&lt;/h1&gt;

&lt;p&gt;Provisioning extreme limits with the highest throughput available is something anyone can do. It takes careful planning and effort to identify the required capacity limitations and provision accordingly. This is the most important area you need to carefully evaluate for AWS EBS capacity planning because finally, it boils down to the application performance and how efficiently the storage is utilized for the application reducing the costs. &lt;/p&gt;

&lt;p&gt;I frequently use &lt;a href="https://calculator.s3.amazonaws.com/index.html"&gt;AWS Calculator&lt;/a&gt; to come up with rough estimates after selecting the EBS volume size, type and IOPS configurations. It is also important to understand that the AWS costs changes from region to region and also based on the Usage. So selecting right region while having the necessary configuration for automated tasks can save you a considerable amount of money if done properly. This includes scheduling snapshots on required time frames, increasing storage size with predictive analysis while affecting the changes at the right time frames.&lt;/p&gt;


</description>
      <category>aws</category>
      <category>storage</category>
      <category>ebsvolumes</category>
      <category>cloud</category>
    </item>
    <item>
      <title>AWS Storage Costs</title>
      <dc:creator>Ashan Fernando</dc:creator>
      <pubDate>Tue, 09 Jan 2018 09:58:47 +0000</pubDate>
      <link>https://dev.to/ashanfernando/aws-storage-costs-1a5a</link>
      <guid>https://dev.to/ashanfernando/aws-storage-costs-1a5a</guid>
      <description>&lt;p&gt;Amazon Web Services (AWS) provides various storage options for backup, archiving, and disaster recovery as well as for block, file, and object storage. These low-cost storage options provide high availability and durability for different use cases (more details from the official &lt;a href="https://aws.amazon.com/whitepapers/storage-options-aws-cloud/"&gt;documentation&lt;/a&gt;). Each of these storage options differs from each other providing unique offerings. It is important not only to understand the appropriate use cases for storage, but also the underlying cost structure.&lt;/p&gt;

&lt;p&gt;Total Cost of Ownership of storage will also differ depending on region and the approach of storage management. It is important to provision the required amount and scale up once required. There are third-party storage management tools which provide automated options with different &lt;a href="https://www.netapp.com/us/cloud/ontap-cloud-native-pricing"&gt;AWS cost structures&lt;/a&gt;. For example, third-party solutions like NetApp's ONTAP cloud provide enhanced features for &lt;a href="https://cloud.netapp.com/cloud-ontap"&gt;AWS storage&lt;/a&gt;, for example, automating workloads, disaster recovery, devops, file sharing, database management, and more.&lt;/p&gt;

&lt;p&gt;To monitor the storage is consumed, there are various tools available, including AWS internal ones as well as third-party tools such as AWS Billing Console, Bills, Cost Explorer or Third Party Storage Management tools with custom monitoring support.&lt;/p&gt;

&lt;h1&gt;
  
  
  Storage Cost Calculation
&lt;/h1&gt;

&lt;p&gt;When estimating storage costs, it requires looking at the use case from different dimensions depending on the specific storage option. One or more of these dimensions are required to be considered while calculating storage costs. In general, the dimensions we can look into can be divided as follows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage capacity provisioned/used&lt;/li&gt;
&lt;li&gt;Data transfer capacity&lt;/li&gt;
&lt;li&gt;Data transfer rate&lt;/li&gt;
&lt;li&gt;Replication factor&lt;/li&gt;
&lt;li&gt;Access patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note: AWS also provides cost savings based on AWS Free Tier limits. You can track your AWS Free Tier usage to stay under the free tier limits.&lt;/strong&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Simple Storage Service (S3)
&lt;/h2&gt;

&lt;p&gt;AWS S3 is a scalable and highly durable object storage service in the cloud with following pricing components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage (per GB per month)&lt;/li&gt;
&lt;li&gt;Data transfer in or out (per GB per month)&lt;/li&gt;
&lt;li&gt;Requests (per thousand requests per month)&lt;/li&gt;
&lt;li&gt;Data Transfer In and Out (for S3 Transfer Acceleration)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Glacier
&lt;/h2&gt;

&lt;p&gt;Low-cost, highly durable archive storage in the cloud with following pricing components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage (per GB per month)&lt;/li&gt;
&lt;li&gt;Data transfer out (per GB per month)&lt;/li&gt;
&lt;li&gt;Requests (per thousand Upload and Retrieval requests per month)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon Elastic File System (EFS)
&lt;/h2&gt;

&lt;p&gt;EFS is a scalable network file storage for Amazon EC2 instances where you only pay for the amount of storage used in your file system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Elastic Block Store (EBS)
&lt;/h2&gt;

&lt;p&gt;EBS provides Block storage volumes for Amazon EC2 instances with following pricing components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provisioned storage&lt;/li&gt;
&lt;li&gt;I/O requests&lt;/li&gt;
&lt;li&gt;Snapshot storage &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Amazon EC2 Instance Storage
&lt;/h2&gt;

&lt;p&gt;Temporary block storage volumes for Amazon EC2 instances with no additional charge for data storage on local instance store volumes. However, data transfers across regions and Availability Zone incur data transfer charges.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Storage Gateway
&lt;/h2&gt;

&lt;p&gt;AWS Storage Gateway is an on-premises storage appliance that integrates with cloud storage with following pricing components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gateway usage (per gateway per month)&lt;/li&gt;
&lt;li&gt;Snapshot storage usage (per GB per month)&lt;/li&gt;
&lt;li&gt;Volume storage usage (per GB per month)&lt;/li&gt;
&lt;li&gt;Virtual tape library/shelf storage (per GB per month)&lt;/li&gt;
&lt;li&gt;Retrieval from virtual tape shelf (per GB)&lt;/li&gt;
&lt;li&gt;Data transfer out (per GB per month)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Snowball
&lt;/h2&gt;

&lt;p&gt;Snowball Data transportation mechanism for large amounts of data to and from the cloud with following pricing components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service fee (per job)&lt;/li&gt;
&lt;li&gt;Extra day charges &lt;/li&gt;
&lt;li&gt;Data transfer&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS CloudFront
&lt;/h2&gt;

&lt;p&gt;Global content delivery network (CDN) with following pricing components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regional data transfer out (per GB) &lt;/li&gt;
&lt;li&gt;Number of requests (per 10,000)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Estimate and Monitor Usage and Costs
&lt;/h1&gt;

&lt;p&gt;You can use the &lt;a href="https://calculator.s3.amazonaws.com/index.html"&gt;AWS Cost Calculator&lt;/a&gt; to estimate the storage costs. You only need to enter the approximate values and the calculator does the rest. It is also important to understand that the storage costs vary by the AWS Region.&lt;/p&gt;

&lt;p&gt;AWS Billing and Cost Management dashboard provide rich set of features to monitor Usage costs. Using the dashboard, you can check various graphs that show different breakdowns of your AWS usage as well as the last month, month-to-date, and month-end forecasted costs appear below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PPtLNFvw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8h1pee739tpnhetmb91z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PPtLNFvw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8h1pee739tpnhetmb91z.png" alt="AWS Billing Stats"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use Cost Allocation Tags to further drill down and filter the costs. AWS also generates Cost Allocation Tags, containing resource creator information, that is automatically applied to the resources provisioned.&lt;/p&gt;

&lt;p&gt;AWS Cost Explorer is another tool that comes in the Billing dashboard. You can use it to view costs data up to the last 13 months and also forecast how much you are likely to spend in the next three months with various filters.&lt;/p&gt;

&lt;p&gt;In addition, you can set up budgets and notify the right people when a threshold exceeds by sending notifications via email or publishing notifications to your SNS topic.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>storage</category>
      <category>costs</category>
      <category>cloud</category>
    </item>
    <item>
      <title> 5 Things You Didn't Know about Enterprise Cloud Storage</title>
      <dc:creator>Ashan Fernando</dc:creator>
      <pubDate>Wed, 03 Jan 2018 03:38:10 +0000</pubDate>
      <link>https://dev.to/ashanfernando/5-things-you-didnt-know-about-enterprise-cloud-storage-163d</link>
      <guid>https://dev.to/ashanfernando/5-things-you-didnt-know-about-enterprise-cloud-storage-163d</guid>
      <description>&lt;p&gt;With the advancement of cloud technologies, many enterprises moving to the cloud. This is mainly due to reduced total cost of ownership. The cloud is also becoming the technology innovation center for enterprises providing cutting edge technology influencing the architectures of enterprise systems. At the heart of enterprises, cloud storage and compute takes a major role. You can find a range of tools and technologies, such as &lt;a href="https://aws.amazon.com/storagegateway/"&gt;AWS Storage Gateway&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/en-us/services/storsimple/"&gt;Microsoft Azure StorSimple&lt;/a&gt;, &lt;a href="https://cloud.netapp.com/cloud-ontap"&gt;NetApp ONTAP Cloud&lt;/a&gt;, etc. to manage enterprise cloud storage and compute. This article focuses on storage technologies that help to enhance their enterprise systems.&lt;/p&gt;

&lt;h1&gt;
  
  
  #1 Elasticity for Disk Storage with adjustable throughput and physical storage type selection
&lt;/h1&gt;

&lt;p&gt;If you have been using cloud compute services such as Amazon EC2, Microsoft Azure Virtual Machines or Google App Engine before, you have already used block storage services. In the past it was needed to shutdown or restart the virtual machine to increase the volume size. Now cloud providers are making it possible to increase the volume size, adjust performance, or change the volume type while the volume is in use. You can continue to use your application while the change takes effect. AWS has recently introduced this feature while other cloud providers will soon follow the trend. This allows you to provision only the required amount of storage for your enterprise systems and increase it on demand (manually or automatically) paying only for what you use reduces the costs even further.&lt;/p&gt;

&lt;p&gt;Cloud block storage not only allows you to adjust the disk throughput (Input Outputs per Second - IOPS) but also allows to choose the right storage technology for your enterprise application workloads. For example, you are able to select the storage technologies such as SSD, Magnetic Disks (Throughput Optimized, Cold Storage). To compare the Disk Storage Options across the popular public cloud providers, refer the following links.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Elastic Block Storage Volume Types&lt;/li&gt;
&lt;li&gt;Azure Disk Storage&lt;/li&gt;
&lt;li&gt;Google Cloud Platform Storage Options&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  #2 Encryption at Rest
&lt;/h1&gt;

&lt;p&gt;Today, almost all the popular public cloud providers allow to encrypt the disk storage to meet different compliance needs for enterprises. Cloud providers such as Google Cloud Platform, provides encryption by default while others provide it as an option to select based on the enterprise storage compliance requirements.&lt;/p&gt;

&lt;h1&gt;
  
  
  #3 Multi-Level Storage Redundancy
&lt;/h1&gt;

&lt;p&gt;In the Cloud, the level of redundancy for storage comes with the type of the Storage we are using. For example disk storage provides redundancy by replication within the same data center or across multiple datacenters which are physically closer by connecting with low latency fiber optic networks.&lt;/p&gt;

&lt;p&gt;When you use shared disk storage across multiple virtual machines, cloud providers like AWS (Elastic File System) allows the storage to be replicated across physically distant data centers allowing high availability and fault tolerance supporting disaster recovery.&lt;/p&gt;

&lt;p&gt;For object storage services such as AWS S3, Azure Blob Storage and Google Cloud Storage, redundancy goes further deep by allowing multiple replications across several data centers as well as to replicate data across different geographical regions.&lt;/p&gt;

&lt;h1&gt;
  
  
  #4 Virtually Infinite Storage
&lt;/h1&gt;

&lt;p&gt;Depending the storage type there are several limitations for file sizes, single storage size, maximum throughput &amp;amp; etc. Depending on the storage requirements, you should be able to select the best storage options that scales with your workloads. However, you should be able to provision multiple instances of the storage, virtually allowing infinite storage capacity for your enterprise workloads. &lt;/p&gt;

&lt;h1&gt;
  
  
  #5 Different Consistency Models
&lt;/h1&gt;

&lt;p&gt;Cloud storage options come with different consistency models. It is mainly due to the level of redundancy these storage solutions provide. Depending on the storage type in use, your enterprise application required to be designed to support these consistency models. Two common consistency models Cloud Storage provides,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Strong_consistency"&gt;Strong Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With strong consistency your application can expect once a record is written to the storage, subsequent read requests will get the latest update. However, with eventual subsequent reads after a write might retrieve the old object or the new object based on the replication lag. For a properly designed application this will provide better performance with high durability (With replication) since the underlying storage system doesn't wait for the reads to be retrieved while a replication happens.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>storage</category>
      <category>enterprise</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
