<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Aayush Kumar on Medium]]></title>
        <description><![CDATA[Stories by Aayush Kumar on Medium]]></description>
        <link>https://medium.com/@akJarvis?source=rss-8ed2a1bd0ce3------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*6QPss_BCNtsjZPyQ43lmXA.jpeg</url>
            <title>Stories by Aayush Kumar on Medium</title>
            <link>https://medium.com/@akJarvis?source=rss-8ed2a1bd0ce3------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 28 May 2026 17:08:23 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@akJarvis/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[DevOps In Finance Services — A Modest & Predictable Success]]></title>
            <link>https://medium.com/opslyft/devops-in-finance-services-a-modest-predictable-success-c5ae4001ebbd?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/c5ae4001ebbd</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[finance]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Sat, 15 Jun 2019 15:29:43 GMT</pubDate>
            <atom:updated>2019-06-15T15:29:43.930Z</atom:updated>
            <content:encoded><![CDATA[<h3>DevOps In Finance Services — A Modest &amp; Predictable Success</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*038UzH4E5TaTfQ6E0vKxHg.jpeg" /></figure><p>We are living in a quick changing condition where sudden innovative, financial and political changes can happen unexpectedly and where it is important to adjust rapidly to these changes. which is particularly valid in the financial segment also, where there is a more noteworthy need to surpass the desires for clients and give continuous service. This financial business has dependably been among the most innovative interesting and technologically advanced areas of business. These days are the age of the digitized world, where clients need their information to be accessible on the go unlike old times, that is so made with various convenient handy applications and their Personally Identifying Information (PII) like banking card numbers to be kept secure.</p><p>So in order to comply with the upcoming competition that are born daily and also to stay competitive on the market the financial industries have now to take advantage of the new and the best practices that are in trend so as to offer end to end uninterrupted and user friendly service to the client by making the best available use of IT technology.</p><p>Earlier Waterfall methodologies created an inflexible approach to application development and mounting technical debt. Not only this many firms pursued agile methodologies for development project bringing a digital solution to life quickly often in just weeks, or even days. It leads to incomplete existing operations stack, and to the technical debt.</p><p>Now to answer all our needs, DevOps is the solution to it, a modern method of organizing the various software delivery pipelines, the operational workflow, the increasing business process its demand and also ensuring reliability optimizing expenses in turn delivering more value can be achieved by it. DevOps provides a fully agile approach to application development and maintenance keeping to the strict regulation gates. Integrating DevOps in the financial services sector can not only help us to achieve the above-mentioned goals but also has various added advantage such as:</p><ol><li>Using the principles of Continuous Integration(CI), Continuous Deployment (CD) and provisioning the immutable Infrastructure as Code (IaC) thus ensuring security and compliance.</li><li>Better collaboration between teams.“You build it, you run it” is one of the main DevOps principles.</li><li>Automation of daily routine tasks helps in improving operational versatility and infrastructure performance.</li></ol><p>The entire service life cycle works together starting from design via the process of development to production operations, maintenance, and support. DevOps is helpful for the adoption of other technologies such as blockchain</p><p>Today, a new challenge faced by the finance sector in its day to day operation is to meet the upcoming standards. To be in pace with the upcoming digitalization, many companies are modernizing their back-end systems and processes. Compliance with regulations, alleviating risk for better security and meeting governance requirements also are the factors that lead to software innovation a slow and complex process. Still, during the last few years, the financial services sector is leading the change by adopting latest technologies and modern software delivery practices including DevOps, continuous delivery (CD). Based on the recent report 80 percent of the firms in the financial services sector are already implementing DevOps, 14 percent are trying to do so in the coming 12–18 months period contributing to an overall rate of 94 percent.</p><h3>CAMS and DevOps</h3><p>Here’s a good acronym CAMS for defining the implementation of DevOps in true sense.</p><p><strong>Culture:</strong> Everybody needs to support this vision that DevOps need to be successful and needs to be implemented.</p><p><strong>Automation:</strong> Automating the tedious or time-consuming tasks and link all used tools together into a single (automated) process.</p><p><strong>Measurement:</strong> Objective measurements are needed to understand what needs to be automated first and where to improve.</p><p><strong>Sharing:</strong> To improve ideas within the team and also across the team.</p><p>A sense of ownership develops while adopting to DevOps as the team owns the entire life-cycle that means a single team becomes responsible for all aspects resulting in a better quality of the software and maintenance.</p><p>Apart from this DevOps is trying to improve and accelerate the most time-consuming processes, are able to deliver every release faster and more reliably. Implementation of DevOps provides a fully agile approach to application development and maintenance while keeping to the strict regulation gates which can be automated to continuously pass and validate. DevOps environment breaks it into smaller sections and automates the process. It is a cultural change allowing organizations to break down the barrier between the development team and the operations team.</p><p><a href="https://www.six-group.com/financial-information/en/home.html">SIX — Financial Group</a> is a striking example of a successful DevOps transformation in the finance sector both technically and organizationally.</p><p>DevOps usage takes out the security issues before they become a noteworthy risk and scales the IT forms over the entire venture, along these lines enabling a start to finish and enthusiastic pathway to creation. Consistently, more associations are changing to DevOps and not thinking back. The change to DevOps culture may require some investment, however, it will alter the exercises of an association, including monetary administrations.</p><p><em>At OpsLyft, we believe in DevOps as a way to practice engineering. We work with customers to provide state of art DevOps solutions and help them save money their cloud bills. Write to us at </em><a href="http://mailto:contact@opslyft.com/"><em>contact@opslyft.com</em></a><em>, I’m sure we’ll just fit in :)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c5ae4001ebbd" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/devops-in-finance-services-a-modest-predictable-success-c5ae4001ebbd">DevOps In Finance Services — A Modest &amp; Predictable Success</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[DevOps: A prescription leading to a cure for healthcare]]></title>
            <link>https://medium.com/opslyft/devops-a-prescription-leading-to-a-cure-for-healthcare-8dd82b7c186e?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/8dd82b7c186e</guid>
            <category><![CDATA[healthcare]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Mon, 03 Jun 2019 19:03:15 GMT</pubDate>
            <atom:updated>2019-06-03T19:03:15.782Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/778/1*GD-S9KGG1VjyWGUqbr3fMQ.jpeg" /><figcaption>Image Credits: Getty Images/iStockphoto</figcaption></figure><p>My last couple of months were spent on DevOps consulting for a fast-growing US-Healthcare based tech startup. The realization, which in no time I experienced was that the healthcare industry has to comply with complex data security regulations. But at the same time, this industry has goldmines of data at their disposal. Given that multiple regulations and strict security have to be ensured while analyzing and processing data, a DevOps approach for infrastructure management is very much required in healthcare</p><p>The healthcare industry has grown and matured significantly over the decades. From shelves filled with files, it has moved on to utilizing the latest IT technology available, dedicated data centers and public or private cloud infrastructure. While the advantages of adopting DevOps methodology throughout IT-Infrastructure are proven, here’s what it means to adopt DevOps workflows in healthcare:</p><ul><li><strong>Adherence to compliances and data security:</strong> Handling the personal data of customers became much more closely monitored and regulated in the present day scenario. Several of the main requirements of the new regulation is limiting the levels of access to the data to the minimally required, ensuring the transparency of data handling, security of data storage, and the customer’s right to demand the deletion of their personal details whenever he asks for. From a DevOps perspective, this means eliminating all kinds of waste, as well as ensuring optimal performance and security of operations. In terms of software delivery, automated unit tests ensure thorough code testing to minimize the risk of code bugs and backdoor access to the apps. In terms of operations, constant monitoring of infrastructure performance allows determining the optimal ways of system functioning, removing multiple bottlenecks and potential security breaches. In terms of compliance, the regulatory requirements are easily codified and automatically applied while designing and implementing the cloud infrastructure, greatly reducing the operational overhead and simplifying the compliance checks from the authorities.</li><li><strong>Shorter time to market for your products:</strong> When the cloud infrastructure management is automated, the software delivery lifecycle becomes much more predictable and the resulting time to market for your product updates is significantly shorter.</li><li><strong>Improved infrastructure efficiency: </strong>Developing applications and healthcare services is a critical process to deliver new healthcare solutions. However, this process must be managed properly so that you don’t experience vast amounts of resources sprawl. DevOps offers ways to leverage resources much more efficiently. For example, an event-driven serverless architecture allows developers to leverage only the resources they need for the app or microservice being developed. It’s basically the utility consumption of resources when creating applications and services. So, when you’re leveraging a healthcare cloud provider (AWS or Azure) on their HIPAA-compliant architecture, you can do some pretty powerful things with DevOps and application delivery.</li><li><strong>Data-driven approach:</strong> As patient data continues to grow at an exponential rate, healthcare providers have turned to DevOps in an effort to accelerate their complex big data project deployments. With a variety of data sources ranging from Electronic Health Records (EHRs), medical devices, pharmacies, and lab reports, to insurance claims, comes the need to structure, update and analyze that data for effective and improved healthcare delivery. The deployment delays associated with a traditional software development life cycle can significantly raise the cost and affect the overall usability of the project.</li></ul><p>Most of the public cloud vendors are now offering solutions which can be effectively leveraged to build healthcare management platforms at scale. Following are a few:</p><ul><li><a href="https://aws.amazon.com/health/">Healthcare &amp; Life sciences by AWS</a></li><li><a href="https://azure.microsoft.com/en-in/industries/healthcare/">Microsoft Azure’s health cloud platform</a></li><li><a href="https://cloud.google.com/healthcare/">Google’s standards-based healthcare API</a></li></ul><p>The healthcare industry is rapidly developing data-driven technology solutions to further patient-centered care all while reducing costs. With the healthcare landscape shifting to an on-demand delivery system of medical services and solutions, healthcare providers and hospitals are turning to DevOps in an effort to advance healthcare innovation.</p><p><em>At </em><a href="https://opslyft.com/"><em>OpsLyft</em></a><em>, we are passionate about everything related to the cloud. We work with customers across geographies to provide state of art DevOps services. We’d love to hear your DevOps challenges and success stories, please do write to us at contact@opslyft.com. I’m sure we’ll just fit in well for you :)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8dd82b7c186e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/devops-a-prescription-leading-to-a-cure-for-healthcare-8dd82b7c186e">DevOps: A prescription leading to a cure for healthcare</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Digital transformation and the road to AIOps]]></title>
            <link>https://medium.com/opslyft/digital-transformation-and-the-road-to-aiops-ecbadd29f494?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/ecbadd29f494</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Mon, 25 Mar 2019 07:11:54 GMT</pubDate>
            <atom:updated>2019-03-25T07:11:54.461Z</atom:updated>
            <content:encoded><![CDATA[<p>The idea behind writing this post is based on a quick call with one of my college juniors where I was trying to explain her about Artificial Intelligence and it’s possible applications in DevOps. According to her, it’s a system which can be run by any person irrespective of background. That’s perfect!</p><p>In my previous post on the <a href="https://www.linkedin.com/pulse/strong-interdependency-between-ai-devops-aayush-kumar/">dependency of DevOps on AI</a>, we saw that how AI can help DevOps teams develop, deliver, deploy and organize applications to improve the performance and perform the business operations of DevOps. Now if we think deeper into this, we know for sure that ‘DevOps &amp; Cloud’ has already become a promising combination for many companies across the world. Though cloud and DevOps are different propositions, they are intertwined and this combination provides agility and efficiency in IT operations. Automated IT infrastructure is already well-established. Self-healing systems are either not far off with the arrival of containerized orchestration tools (Kubernetes, Docker swarm, etc.). Automated build/deployment of the entire cloud infrastructure using DevOps pipeline in agile fashion is common now. AI will further expand the boundaries of IT infrastructure automation. Future will see intelligent infra powered by sophisticated algorithms using technologies such as machine learning (ML) and deep learning. From an execution point of view, this can be achieved through AI-Ops.</p><p>AIOps is the application of artificial intelligence for IT operations. It is the future of ITOps, combining algorithmic and human intelligence to provide full visibility into the state and performance of the IT systems that businesses rely on. Successful digital transformation will rely on AIOps to enable IT to operate at the speed that modern business requires. Promising AI-Ops products as per Gartner should have the following characteristics :</p><ul><li>They should help reduce noise (for example, in the form of false alarms or redundant-events)</li><li>Provide better causality, which helps identify the probable cause of incidents</li><li>Capture anomalies that go beyond static thresholds to proactively detect abnormal conditions</li><li>Extrapolate future events to prevent potential breakdowns</li><li>Initiate action to resolve a problem (either directly or via integration)</li></ul><p>However, with the existence of so many DevOps tools, we need to understand that where do AI-Ops tools fit into modern IT Environment. When looking at AIOps for the first time, it is not immediately obvious how it fits into existing categories of tools. The reason is that AIOps does not replace existing monitoring, log management, service desk, or orchestration tools. Instead, it sits at the intersection of these different domains, consuming and integrating information across all of them and providing useful output to ensure a synchronized picture is available from every tool. The whole process will include applying ML models to do the historical data analysis and predict the future of operations on a timeline, highlighting the potential issues and suggesting possible remediation. There could be various manifestations of this troika — AI + Cloud + DevOps; however, we are still at the nascent stage of working with this. But, the basic contour shall consist of embedded intelligence to automate applications/infra, self-learning applications, and in-built governance powered by integrated analytics.</p><p>To bring such systems into action, Gartner suggests following optimizations that should be brought in to transform IT-Ops to AI-Ops :</p><ul><li>Deploy AIOps by adopting an incremental approach that starts with historical data, and progress to the use of streaming data, aligned with a continuously improving IT operations maturity.</li><li>Select platforms that enable comprehensive insight into past and present states of IT systems by identifying AIOps platforms that are capable of ingesting and providing access to text and metric data.</li><li>Deepen their IT operations team’s analytical skills by selecting tools that support the ability to incrementally deploy the four phases of IT-operations-oriented machine learning: descriptive, diagnostic, proactive capabilities and root cause analysis to help avoid high-severity outages.</li></ul><p>The adoption of AI with DevOps + Cloud is symbiotic. If we look at it technically, the state of software engineering is such that deep learning and machine learning are now progressively becoming mainstream. We no longer need to understand the mathematical jargons like ‘stochastic gradient descent’ or ‘back propagation’ to apply deep learning concepts. We will also not have to write a thousand lines of python code to build a native chatbot. Hundreds of machine learning/deep learning models are now available as managed service on the cloud, along with various AI tools provided by cloud platforms. Cloud providers are trying to make it easy to run the machine learning workloads on their platform. They are offering virtual machines (VM) based on the graphics processing unit (GPU) to build ML applications in the cloud, APIs for pre-built models and natural language processing (NLP) engines to integrate with their applications. Companies are making AI more accessible to the individual developer. AWS sagemaker is one such effort to make machine learning kit available to common developers for building intelligent applications. We will have products/services in-built with machine learning algorithm, like sentiment analysis, predictive algorithms and deep learning models. Prominent ELK stack, Splunk has already seen machine learning concepts infused in their products to identify anomalous patterns, correlate events between infra, application and business environments.</p><p>To conclude, the combination of AI, DevOps and Cloud are going to change the way business is conducted across sectors. DevOps and AI will keep moving up in the value chain of technology stack along with Cloud. Intelligent automation will become the new normal, driving new innovations and standards. Enterprises should start finding ways to ingest implicit intelligence into their IT ecosystem.</p><p>References :</p><ul><li><a href="https://www.moogsoft.com/resources/aiops/guide/everything-aiops/">Everything You Need To Know About AIOps</a></li><li><a href="https://www.moogsoft.com/resources/aiops/guide/2018-gartner-market-guide-for-aiops-platforms-2018/">Gartner’s 2018 Market Guide For AIOps Platforms</a></li><li><a href="https://www.mindtree.com/blog/cloud-devops-artificial-intelligence-new-troika-intelligent-it-infrastructure">Cloud + DevOps + Artificial Intelligence: The New Troika for Intelligent IT Infrastructure</a></li></ul><p><em>At OpsLyft we are trying to build DevOps tools and platforms powered by AI/ML. We do provide experienced DevOps consulting also. We’d love to hear from you, reach out to us at </em><strong><em>contact@opslyft.com</em></strong><em>. I’m sure we’ll fit in somewhere for you.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ecbadd29f494" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/digital-transformation-and-the-road-to-aiops-ecbadd29f494">Digital transformation and the road to AIOps</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Strong Interdependency Between AI & DevOps]]></title>
            <link>https://medium.com/opslyft/strong-interdependency-between-ai-devops-b71a731d32a6?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/b71a731d32a6</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Mon, 11 Mar 2019 04:44:51 GMT</pubDate>
            <atom:updated>2019-03-11T04:53:50.590Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yxNK89mU_hrj4vmNeF3eYQ.png" /></figure><p>As a part of my entrepreneurial journey, meeting industry experts and gathering insights from them is a regular thing now. I met someone this weekend where we talked about what it takes to build an ideal DevOps world. A world where product owners, development, QA, IT Operations and Infosec work together, not only to help each other, but also to ensure that the overall organization succeeds. By working towards a common goal, they enable the fast flow of planned work into production(e.g. performing tens, hundreds to thousands of code deploys per day), while achieving world class stability, reliability, availability and security. In this world, cross-functional teams rigorously test their hypothesis of which features will most delight users and advance the organization goals. They care not just about implementing user features, but also actively ensure their work flows smoothly and frequently through their entire value stream without causing chaos and disruption to IT operations or any other internal or external customer. But this is hard, the process of constant improvement with human involvement is a challenge when you operate things at scale. Hence, Automation is the Key! It’s the lifeline. This contributes to better sync among the teams and eventually faster and more accurate deployment and releases.</p><blockquote>However, can we make our automations smart and self learning ? Think about automation over automations which just knows what you want for your infrastructure !</blockquote><p>Yes, I’m talking about using AI/Machine Learning capabilities to enhance DevOps. But to recognize any benefit with AI and DevOps, a creative mindset may be required. AI can change how DevOps teams develop, deliver, deploy and organize applications to improve the performance and perform the business operations of DevOps.</p><p>The future of DevOps is AI-driven, helping to manage the immense capacity of data and computation in day-to-day operations. AI has the potential to become the primary tool for assessing, computing and decision-making procedures in DevOps.</p><p>For example, for the most effective medical diagnostic process, you don’t just depend on that detection alone. You use that detection to empower a human diagnostician who can apply a broad understanding of pathologies and deep experience with the complexities of individual patients to deliver the highest quality care. In DevOps, we can do the same. We can use AI to capture insights that teach us how to continuously optimize our workflows and processes. We can also use our AI learnings to push our work up higher on the value chain.</p><p>Collaboration between DevOps and AI can have numerous use cases. Some of them can be :</p><ol><li><strong>Smarter Development</strong> : We all learn through iterations. Same goes for machines. Most machine learning systems use neural networks, which are a set of layered algorithms that accept multiple data streams, then use algorithms to process that data through the layers. You train them by inputting past data with a known result. These learning systems can also be applied to data collected from other parts of the DevOps process. This includes more traditional development metrics such as velocity, burn rate, and defects found etc.</li><li><strong>Smarter Monitoring</strong> : If you’re beyond the beginner’s level in DevOps, you are likely using multiple tools to view and act upon data. Each monitors the application’s health and performance in different ways. What we lack, however, is the ability to find relationships between this wealth of data from different tools. Learning systems can take all of these disparate data streams as inputs, and produce a more robust picture of application health than is available today.</li><li><strong>Predicting Faults :</strong> This relates to analyzing trends. If you know that your monitoring systems produce certain readings at the time of a failure, a machine learning application can look for those patterns as a prelude to a specific type of fault. If you understand the root cause of that fault, you can take steps to avoid it happening.</li><li><strong>Feedback Mechanisms :</strong> One of the biggest problems with DevOps is that we don’t seem to learn from our mistakes. Even if we have an ongoing feedback strategy, we likely don’t have much more than a wiki that describes problems we’ve encountered, and what we did to investigate them. All too often, the answer is that we rebooted our servers or restarted the application. Machine learning systems can dissect the data to show clearly what happened over the last day, week, month, or year. It can look at seasonal trends or daily trends, and give us a picture of our application at any given moment.</li></ol><p>We can literally can derive numerous of use cases over a coffee when it comes to working AI with DevOps. Having said that, it’s first very important to Know Your DevOps First. As enticing as it may be to dive headfirst into AI, you’re not going to be as effective as you can be if you lose the humanity from your dev team. You don’t want to be so reliant on robots and so dysfunctional as humans that when it comes to complex problems, you are functionally unable to process or resolve them. At <a href="https://opslyft.com/">OpsLyft</a>, we believe that the future of AI and DevOps is bright. There’s a future here where the rote business of work that we all deal with every day will be as archaic as accounting by hand. We’re in an exciting time.</p><p>We’d love to hear your stories about DevOps automation and possible use cases of AI/ML to it. Reach out to us at <strong>contact@opslyft.com</strong> as we surely can help you enhance your cloud by simplifying DevOps for you :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b71a731d32a6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/strong-interdependency-between-ai-devops-b71a731d32a6">Strong Interdependency Between AI &amp; DevOps</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Microservices at Scale: Apache Mesos]]></title>
            <link>https://medium.com/opslyft/microservices-at-scale-apache-mesos-95a4f33d3fda?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/95a4f33d3fda</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[container-orchestration]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[mesos]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Mon, 25 Feb 2019 14:49:47 GMT</pubDate>
            <atom:updated>2019-02-25T14:49:47.890Z</atom:updated>
            <content:encoded><![CDATA[<p>Once of the best evolutions seen in software engineering is the paradigm shift from <strong><em>Monolithic Systems </em></strong>to building something called <strong><em>Microservices or Service Oriented Architecture (SOA). </em></strong>Having a single codebase for a product seems clean when it’s reasonably of a small scale. But you may start running into problems as your codebase grows. Some of the common problems that people face :</p><ul><li>As new features are introduced, components become tightly coupled and isolation becomes difficult.</li><li>Continuous Integration becomes a liability rather than an asset as everything in the codebase have to be redeployed for even a small change.</li><li>It takes real effort and confidence for pushing in a big code change as you know for a fact that if it breaks, your entire system would go down.</li></ul><p>With SOA, instead of building a singular system which handles all your business use cases, we divide it into isolated fundamental units or sub-systems, each of which handles a business logic. Every sub-system can then be exposed as internal API’s (services) which can be integrated to other services as desired. Some of key advantages of this approach :</p><ul><li>Each service can have it’s own tech stack and can have its own codebase.</li><li>Maintenance of the overall product becomes easy due to isolation of services from one another.</li></ul><p>It was easy for all to get convinced on the advantages SOA over monolith as a design choice for systems. But if we start thinking a step further, we see for a fact that handling and maintaining SOA based systems at scale is not so straightforward.</p><p>To elaborate more on this, think of a company which has isolated services with backends such as Hadoop clusters for data processing jobs, docker containers for small apps, in-house database servers etc. For an organisation having such diverse technical stacks, it becomes important for them to pay detailed attention to the distribution of infrastructure resources which hosts these services.</p><p>The most important and popular challenge is <strong><em>how to distribute the resources in such a manner so that there is minimum under utilisation of server capacities.</em></strong> All these resources come at a cost and when you’r dealing things at scale and this cost is huge ! Following are some of the common practices which people adopt to cope up with this challenge:</p><ul><li>Statically isolating fixed number of servers as per requirement in the cluster for every work environment. Ex : 25 dedicated machines for a Hadoop Cluster, 15 for Kubernetes and 10 for MPI cluster.</li><li>Having one single server with huge computing and storage capacity and running VM’s in it for different work environments.</li></ul><p>The diagram below illustrates a standard architecture for implementing the above mentioned practices :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/611/1*GoIwz5p9sJ_9YKVyldiY6g.png" /><figcaption>Classic Cluster Architecture. Source : <a href="https://www.inovex.de/blog/apache-mesos-an-introduction/">https://www.inovex.de/blog/apache-mesos-an-introduction/</a></figcaption></figure><p>Now let’s assume a very basic use case where a data processing job requires the Hadoop cluster to run only for 6 hours in a day. Going by the above approach, Hadoop cluster goes under-utilised for remaining 18 hours in day. This, for sure is a big hit in terms of cost. So all in all, the first approach mentioned above isn’t efficient in terms of infrastructure cost. In most of the cases, services running on these individual clusters are so much <strong><em>independent </em></strong>in nature, that it becomes difficult to collectively share the cluster resources <strong><em>across </em></strong>the services, making it difficult to share clusters and data efficiently between them. So this disregards the second approach also to an extent.</p><p>At <a href="https://medium.com/u/e7202155190e">Indix HQ</a> we use <a href="http://mesos.apache.org/">Apache Mesos</a> which is a cluster management open source solution. Mesos is a distributed system kernel and works as a cluster scheduler. It abstracts the resources (CPU, memory, I/O, network) of a cluster for end users. So Mesos abstracts the whole cluster resources into one big computer and allows the user to have OS functionalities on a cluster level. Have a look at the following diagram :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mrupFOvEj9k1f-x0kQLNpw.png" /><figcaption>A cluster with Mesos as scheduler. Source : <a href="https://www.inovex.de/blog/apache-mesos-an-introduction/">https://www.inovex.de/blog/apache-mesos-an-introduction/</a></figcaption></figure><p>Apache Mesos runs on any POSIX oriented operating system (e.g. Linux and OSX) and allows you to share resources between multiple frameworks, which are handled kind of like an application. With Mesos you are able to combine all these resources into one big cluster and run different workloads on it. As a cluster manager, Mesos was architected to solve for a very different set of challenges:</p><ul><li><strong>Colocate diverse workloads : </strong>Same infrastructure can support analytics, stateless microservices, distributed data services and traditional apps to improve utilisation and reduce costs.</li><li><strong>Provide evergreen extensibility : </strong>To run new application and technologies without modifying the cluster manager or any of the existing applications built on top of it.</li><li><strong>Elastically scale : </strong>Scale application and the underlying infrastructure from a handful, to tens, to tens of thousands of nodes.</li></ul><p>Now let’s take a deep dive on how Mesos works internally. Diagram below shows the Mesos architecture :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/836/1*VTdw3C_NhPCiqnhrPf7LEw.png" /><figcaption>Mesos Architecture. Source : <a href="http://mesos.apache.org/documentation/latest/architecture/">http://mesos.apache.org/documentation/latest/architecture/</a></figcaption></figure><p>Typically there are four major components of Mesos :</p><ul><li><strong>Master:</strong> Coordinates the work and decides which framework gets how many resources</li><li><strong>Zookeeper:</strong> Used for coordination of the masters</li><li><strong>Slave:</strong> A worker node which provides its resources to run tasks of a framework</li><li><strong>Framework:</strong> Has a scheduler component which decides where a task gets launched and an executor which executes one or more tasks at the Slave.</li></ul><p><strong><em>And this is how it works:</em></strong> When a Slave notices that it has free resources it sends an offer to the Mesos master which includes its Slave ID and the free resources. The allocation module inside the master decides which framework will get the offer. When a framework receives an offer it can decide how many of the resources it will take. For example the framework may only take the CPUs of an offer to start its tasks. When the framework has decided which resources it will take and how many tasks it will start it sends a message to the master. The message contains the number of tasks and the resources that it will allocate for each task. In a last step the master passes this information on to the slave that reads these <em>taskinfos</em> (taskname, slave id, ressources) and starts the tasks. When the tasks have finished and the resources are free again all these steps will be repeated.</p><p>Mesos has a unique ability to individually manage a diverse set of workloads including traditional applications such as Java, stateless Docker microservices, batch jobs, real-time analytics, and stateful distributed data services. If you want to build a reliable platform that runs multiple mission critical workloads including Docker containers, legacy applications (e.g., Java), and distributed data services (e.g., Spark, Kafka, Cassandra, Elastic), and want all of this portable across cloud providers and/or datacenters, then Mesos (or our own Mesos distribution, Mesosphere DC/OS) is the right fit for you.</p><p>In the next blog I’ll talk about <em>framework </em>named as <strong>Marathon </strong>which we use on top of Mesos as an orchestrator for deployment of our internal as well customer facing microservices.</p><p><em>Thank You </em>for reading this. I am open to any kind of feedback on this.</p><p>References :</p><ul><li><a href="https://www.inovex.de/blog/apache-mesos-an-introduction/">https://www.inovex.de/blog/apache-mesos-an-introduction/</a></li><li><a href="http://mesos.apache.org/documentation/latest/architecture/">http://mesos.apache.org/documentation/latest/architecture/</a></li></ul><p><em>We at </em><a href="http://opslyft.com"><strong><em>OpsLyft</em></strong></a><strong><em> </em></strong><em>help organisations meet their goals for DevOps and make them win with it. Get in touch with us at contact@opslyft.com for further assistance and help.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=95a4f33d3fda" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/microservices-at-scale-apache-mesos-95a4f33d3fda">Microservices at Scale: Apache Mesos</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Tale of Configuration Management]]></title>
            <link>https://medium.com/opslyft/a-tale-of-configuration-management-9d64914dda4e?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/9d64914dda4e</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[configuration-management]]></category>
            <category><![CDATA[ansible]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Mon, 25 Feb 2019 14:43:48 GMT</pubDate>
            <atom:updated>2019-02-25T14:43:48.711Z</atom:updated>
            <content:encoded><![CDATA[<p>Like in any growing product startup, tech stack also evolves with time. It’s iterated over and over (sometimes from scratch) as it scales to achieve it’s engineering milestones. These milestones were more of definitive engineering processes and practices which were validated and confirmed to be fitting our use cases. One such evolution which I experienced was of Configuration Management. <br>This article talks about my journey at <a href="https://medium.com/u/e7202155190e">Indix HQ</a> of Configuration Management and how we ended up using Ansible as a standard for infrastructue creation, provisioning and deployments.</p><h3>Previous State</h3><p>As of circa Aug 2015, we at Indix used a variety of tools and languages to take care of infrastructure creation, provisioning and deployment.</p><ul><li><strong>Infrastructure Creation</strong>: AWS command line tools, fog, knife-ec2</li><li><strong>Provisioning</strong>: chef, chef-solo</li><li><strong>Deployment &amp; Orchestration</strong>: Capistrano, fabric, shell scripts, Go-CD commands, beanstalk etc.</li></ul><p>There were some shortcomings with this approach:</p><ul><li>Failures happened since there was no tight coupling between infra creation, provisioning and deployment. Failure at one stage leads to cascading failures later.</li><li>The tooling to get things in production is pretty complex. Understanding multiple tools and getting familiarity with a new language ( ruby / python ) for most developers is not optimal. This leads to less participation from a larger group of developers in taking care of the systems built. Also it causes a lot of burnout for the DevOps team.</li><li>We didn’t have any single place to know the source of truth of the system. We largely use chef in a pull based mode. This implies that agents keep polling central chef server to know what changes are required to be applied to the system. We experienced state discrepancies where github code, chef server state and machine internal state don’t match. This happened either due to lack of proper checks and balances in the current way of working, developer negligence or sometimes even due to failure during execution of chef-agent which fails silently without raising any alerts. The end result of this invariably leads to production downtime / failure of some or many of our services. This apart we have also seen central chef-server becoming the single point of failure leading to bad state of our systems.</li></ul><h3>Our Experience &amp; Learning</h3><ul><li>Too many tools to learn which have significant learning curve. Also very tight coupling of provisioning across different teams / projects.</li><li>Extremely difficult to quickly create a exact replica of production environment to experimental so to try new code changes.</li><li>Difficult to tweak with hardware ( amazon machine types &amp; volume types ) which is required for any tuning and battle-hardening any backend system .</li><li>No consistency or simple way to configure some of the basic things ranging from monitoring, logging, system sanity checks</li><li>Neither idempotent nor immutable. This implies that tomorrow we can’t simply rerun our entire infra creation, provisioning and deployment in a single way multiple times and be certain that things will keep on working fine.</li></ul><p>Besides the aforementioned pain points, we also realised that there were some things that we would like to have a quicker developer environment setup using virtual boxes or docker. This shall provide us the capability to quickly test things locally and write integration tests.</p><p>So to paraphrase we wanted a system which should be:</p><ul><li>Dead simple. This means very low learning curve and more developer participation. The indirect consequence of it is helping people move fast and get things done rather than being dependent on the devops team entirely.</li><li>Single (or minimal ) tool for infra creation, provisioning and deployment</li><li>One way to do things. Not 5 different languages and frameworks. Something like YAML.</li><li>Building idempotent and immutable infrastructure. It means you can run the same script to create, provision and deploy infra multiple times and it should simply work. This also means that recreating infra, provisioning an deployment shouldn’t be a exercise in frustration but becomes a part of the way we operate</li><li>The above point ensures that it is easy to replicate complete environments with minimal overhead. This also ensures that our continuous delivery system is used to just trigger and doesn’t have any state or intelligence</li><li>Ability to quickly create local dev setup, test environments and write integration tests</li></ul><h3>Ansible Ecosystem</h3><p>We actively followed ansible for over a month plus before seriously trying it out. It seems to solve all the problems that were described earlier in a really simple and elegant fashion.</p><p>The major problems that it addresses are:</p><ul><li>Single place to create infra, provision, deploy and orchestrate.</li><li>You write only in <strong>YAML</strong>.</li><li>Primary mode of operation is push based mode which means post deployment system is immutable. It also gives flexibility to be used in pull based mode which is useful for say Hadoop cluster where nodes may come and go. However in both cases github source is single source of truth.</li><li>Great documentation and solid pre built modules. So for complex things like machine creation and ensuring that only a single machine in a group exists you dont’ have to do anything. Most modules written are idempotent. This is not true just for provisioning ( where it is true for chef &amp; puppet also ) but for even infra creation and deployment.</li></ul><h3>Current State :</h3><p>As of now, most of Indix’s infra is under configuration management via Ansible. This includes migrating legacy systems from no configuration management to Ansible based setup and a few Chef based setups to Ansible based. Any new system that’s being built by developers is brought up using Ansible. <br>Owing to it’s simplicity, the best and perhaps the most important milestone that we are able achieve is that developers now build their systems end to end, meaning that they not only focus on writing application code but also write Ansible scripts for the application’s infrastructure creation, provisioning and deployments. This is a notable cultural practice which has been standardised which also eases and distributes out the ownership and responsibility of DevOps team with developers.</p><p><em>We at </em><a href="http://opslyft.com"><strong><em>OpsLyft</em></strong></a><strong><em> </em></strong><em>help organisations meet their goals for DevOps and make them win with it. Get in touch with us at contact@opslyft.com for further assistance and help.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9d64914dda4e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/a-tale-of-configuration-management-9d64914dda4e">A Tale of Configuration Management</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Demystifying DevOps with Operability Review]]></title>
            <link>https://medium.com/opslyft/demystifying-devops-with-operability-review-b44994082477?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/b44994082477</guid>
            <category><![CDATA[continuous-integration]]></category>
            <category><![CDATA[monitoring]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[containers]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Mon, 25 Feb 2019 14:29:56 GMT</pubDate>
            <atom:updated>2019-02-25T14:29:56.504Z</atom:updated>
            <content:encoded><![CDATA[<p>As a part of Software Development Lifecycle, the major focus of developers is mostly around the coding, optimising and testing the business logic. However, while or even before writing code for the application, not much attention is given to what would happen when application as a dependent/independent system would be up &amp; running in production. This leads to lot of complexities, inefficiencies, unwanted surprises and challenges when the code is pushed to production — most of which could have been eliminated or reduced had we thought of them little early. There comes the necessity of <em>Operability Review</em>. By the term <em>Software Operability</em> — we mean the readiness of a new software to be deployed in production and start handling real traffic. The whole purpose of doing Operability Review of a service is to ensure that it runs <em>Well</em>once deployed, operates as smoothy as possible, very minimal manual intervention is needed to make it up &amp; running.<br>While my stint at <a href="https://medium.com/u/e7202155190e">Indix HQ</a>, I took operability seriously and engage everyone to have regular reviews around the operability items so that we don’t miss anything important and discover them late. In this blog, we will discuss the process we follow, the areas we focus while doing such reviews and how good this has proved to our product life cycle.</p><h3>Elements of Operability Review</h3><p>Before we begin to discuss how do we perform operability review in Indix &amp; what are the areas we cover under that, let’s first try to classify various aspects of a system running in production. From a very high level, health of any system/ application can be categorized as follows -</p><ul><li><strong><em>System Architecture</em></strong></li><li><strong><em>Configuration management &amp; deployment</em></strong></li><li><strong><em>Security</em></strong></li><li><strong><em>Data storage</em></strong></li><li><strong><em>Monitoring</em></strong></li><li><strong><em>Performance</em></strong></li></ul><p>Above are the areas which we should further break up into specific components &amp; review them separately. Also note that, Cost is a critical area which is not mentioned above since it is not really an attribute of the system. But everything we do — we try to optimise the cost incurred due to the same. The following diagram shows the coverage of all the aspects under Operability:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/899/1*T1FPS2Q56ME3wIAJtXAeyg.png" /><figcaption>Image Credits : <a href="https://medium.com/u/18d9b4c0f152">Arijit Bhattacharyya</a></figcaption></figure><h3>System Architecture</h3><h4>Architecture &amp; Deployment diagram:</h4><p>The first thing is to have the deployment &amp; architecture diagrams. Where architecture depicts the logical flow of request/ response inside the system, deployment diagram is focussed on the actual infrastructure. But if the system is not too complex, it makes sense to have them in a single diagram. Having these diagram/s helps people unfamiliar with the application to get a quick understanding of what is inside. This also helps in technical discussions around the other areas under operability.</p><h4>Deployment platform:</h4><p>Our entire infrastructure is in AWS so we really don’t have options in terms of hosting. Though we plan to evaluate other Cloud providers like Azure or GCE in future, EC2 is the choice at this point.</p><p>We have both docker &amp; non-docker services running (On EC2, we are not using ECS) &amp; we have applications running both on EC2 directly as well on a Kubernetes &amp; Mesos cluster. We use Mesos heavily &amp; several internal applications as well as some user-facing services are deployed in Mesos. Based on the nature of the new service, we decide whether it’s a right candidate to be deployed on Mesos or it should be on EC2 instances.</p><h4>Load Balancing:</h4><ul><li>If the service runs on multiple instances &amp; needs load-balancing, then some of the important things to decide for the ELB are -</li><li>Is the service user-facing ? If not, make sure to use internal ELB (Routing via private IPs) as network packets will traverse via public internet otherwise (which doesn’t make sense &amp; might have security concerns).</li><li>Make sure to enable Cross-AZ load balancing. This helps to distribute requests among the registered nodes irrespective of whether they are evenly spread across the AZs or not.</li><li>Enable Connection Draining with appropriate Timeout settings. This is to ensure no interruption of the inflight requests when an instance is being taken OOR for maintenance or something.</li><li>Set Idle Timeout appropriately. Idle Timeout is the duration of a connection can be in idle state before the ELB closes the socket. This applies to both client side as well as EC2 side sockets.</li><li>Enable Access Log for ELB. This is very important as without the access logs, it becomes too difficult to troubleshoot issues in production systems when the requests are coming through load balancer. We have a S3 bucket which is designated to store logs of every ELBs under top level folders/ paths. It might also be useful to push these logs to your centralized logging systems for further analytics.</li><li>Next is the Stickiness settings. Generally speaking, Stickiness is against the very concept of load balancing but sometimes one may need to use session affinity to ensure that every client requests in a session is routed to a particular instance. This is generally implemented using AWSELB/ application Cookies.</li><li>Finally, what kind of load balancer is needed. If we need features like content based routing or multiple listener ports per EC2 nodes — ALB is the choice. But note that ALB doesn’t support TCP listener yet so only HTTP/s protocols can be used. Use ELB otherwise.</li></ul><h4>High Availability:</h4><p>This is a very broad area &amp; we generally take decisions based on the nature of the service &amp; it’s SLA committed to customer/ internally (for internal systems). There are different areas to look into for ensuring Resiliency of your application or achieving High Availability -</p><ul><li>Deploy your instances in multiple regions &amp; in multiple AZs in each of the regions.</li><li>Figure out any SPOF in the deployment. If that blocks the real time response of the app, then this is not acceptable. We need to ensure replica of the same exists &amp; is distributed across independent network infra. If the service is using RDBMS, then we generally use RDS which has Multi-AZ deployments. That ensures synchronous replication of the data to a standby instance in a different Availability Zone (AZ).</li><li>The last but probably the most important is — Choice of EC2 Purchase type. We use Spot instances heavily to reduce our cost but that brings the additional difficulty of maintaining high availability. Depending on the nature, it may not be possible to use spot instances at all but most of the times the strategy of hybrid model works.</li><li>We imitate real production scenarios &amp; try to estimate the numbers for MTTD (Mean-time-to-detect)/ MTTR (Mean-time-to-recover)/ RPO (recovery point objective)/ RTO (recovery time objective) for our services.</li></ul><h4>Scalability:</h4><p>Scalability is extremely important as it helps you to never over provision any resource &amp; scale that out as &amp; when necessary. Thats is an important requirement for optimising the cost of your infra. The only thing to ensure is that your design of the service should be horizontally scalable &amp; not bound by a single m/c due to local data storage/ in-memory data etc. Also, Auto-Scaling is a great feature in AWS which allows to define Cloudwatch based criteria to scale-out or scale-in automatically.</p><h3>Configuration Management &amp; Deployment</h3><h4>CM Tool &amp; Model:</h4><p>We had used Chef for configuration management for a long time &amp; today also, many of the systems are deployed using Chef client/server or chef-solo. But then at some point two tears back, we decided to move to Ansible due to its simplicity &amp; developer friendly architecture. Today, any new infra is deployed using Ansible (And in few cases we started using terraform as well, for the provisioning part). Important thing to ensure here is that the Ansible roles/ playbooks are robust enough that we don’t need any manual intervention to bring up a system. Generally, we keep separate playbooks for provisioning &amp; configuration management as the provisioning part is generally a one time thing whereas configuration management runs regularly on the production systems. You can find some of our Ansible roles published <a href="https://github.com/indix">here</a>.</p><p>Next important thing is to define the management model. We generally have CI/CD pipelines for deploying the configuration changes in push mode but there are cases where Pull mode is must. Consider an Auto-Scaling group — Instances can come up anytime due to a scale out activity &amp; that needs CM to run right after it comes alive. This is taken care by running the same set of configuration management playbooks as part of UDF. Planned changes are still done via pipeline, where a code commit/ merge in master branch should trigger appropriate pipeline/s which then executes the changes in all the relevant nodes in the infra.</p><h4>CI/CD Pipelines:</h4><p>We use Thoughtworks GOCD as the only CI/CD tool at Indix. Any app should have separate Staging &amp; Production pipelines which automates the testing/ deployment of both Staging &amp; Production clusters.</p><h3>Security</h3><p>There are few standard security measure exist in AWS like using Vpc (Classic is no longer an option anyway), using apprpriate ACLs in the subnets &amp; appropriate inbound/outbound ports in the Security Groups. Generally ACLs are not touched and most of the Allow rules are applied to SecGroups. We use separate SecGroups for separate services so that modifying one doesn’t impact anything else. Port requirements are reviewed &amp; SecGroups are created accordingly.</p><p>Next thing is ensure right management of secrets like database passwords &amp; similar, which should never be stored in plaintext when used by the CM tool or deployment pipelines. For example, Encryption key in Chef (Used for encrypted databags) &amp; Vault key (Used by Ansible Vault) should be used to encrypt thise passwords and then can be stored in version control.</p><p>Now the next tricky part is how to manage those encryption keys. Of course they should never be committed to version control but have to be transferred to an instance while bootstrapping. For this, we use Iam roles which allow AWS resources to be accessed without using Access/Secret keys. So the strategy is to store Encryption Secrets in S3 bucket &amp; then launch instances with Iam role with appropriate plocies which can download those keys during bootstrapping.</p><p>Finally, HTTPs is becoming more &amp; more inportant with HTTP/2 even for pages without any sensitive content. At present, we use Certificates from both ACM (AWS Certificate Manager) as well as Let’s Encrypt. Since ACM is limited to only ELB or Cloudfront, we use LE certificates for externally hosted Indix end-points.</p><h3>Data Storage</h3><p>At Indix, we deal with massive amount of data &amp; generally every system in the infrastructure has to deal with some sort of relational or unstructured data. Depending on the requirement of the app, we decide which storage mechanism out of S3/ Ephemeral/ EBS/ EFS fits the bill. This generally depends on the latency of retrieval/ Durablity requirement of the data etc. While using S3, we further decide whether it should be standard S3 or RRS or IA type. Similarly for EBS, we have multiple options like old magnetic volumes or new generation storages like io1/ gp2/ st1 or sc1. If properly chosen, these decisions can have significant impact on your cost while maintaining the latency/ durability requirement of the data. Finally in few cases we use EFS as well, which is apprpriate to be used as a shared storage with less latency than S3 &amp; can be mounted in more than one EC2 instances (Unlike EBS).</p><p>Having some idea about the growth of your data &amp; retention is also important. Accordingly one can define proper Life Cycle policy for S3 buckets to avoid waste of dollars by storing old &amp; unused data. Increasing capacity of EBS on the fly is possible now but nevertheless it helps to allocate the right capacity from the beginnig. EFS scales automatically so thats not a concern there.</p><p>Backup &amp; Recovery is naturally very crucial, we need to ensure that right backup strategy is in place. For SQL data store in RDS, its important to ensure daily backup is in place. For data stored in filesystems, a regular snapshot of EBS volumes needs to be ensured. We use cronjobs &amp; lambda functions to schedule such EBS snapshots. The concepts of MTTD/ MTTR/ RPO/ RTO appliy here similarly.</p><h3>Monitoring</h3><p>Monitoring requirement is analysed both from System &amp; Application aspects. While every service should have standard system monitoring like LoadAverage/ Memory/ Disk-Space/IO etc, application layer monitoring is unique to every app &amp; needs to be identified accordingly. Apart from monitoring the subsystems, an end-to-end check is always must.</p><ul><li>For the internal monitoring platform, we have been using a combination of Sensu &amp; Cloudwatch but recently we are working on migrating to Riemann which is better in terms of real-time monitoring. Also, we use Pingdom for monitoring our services from external to our infrastructure. The new monitoring platform is going to use Telegraf/Riemann/InfluxDB/Grafana where every system is supposed to be sending metrics by telegraf agent to Riemann server, which in turn has the alerts configured &amp; also sends metrics to InfluxDB. Then create Grafana dashboards to have visualization on top of InfluxDB for analysing the trend. This also helps to do capacity planning for your systems. The Alert Notification systems are mainly Email/ Slack &amp; pagerduty — And decided based on the severity of the issues.</li><li>For logging, we use hosted service from <a href="https://www.loggly.com/">Loggly</a>. We have Chef cookbook &amp; Ansible playbook which we customize for every app which pushes the data to Loggly. Then creating dashboards with appropriate set of filters needs to be done in Loggly. Not every service is integrated with Loggly yet, but irrespective of that — it’s important to have proper log rotation strategy so that disks are not unnecessarily filled up by old &amp; useless logs.</li></ul><h3>Performance</h3><p>Performance/ Load testing an application is clearly necessary in order to identify what instance type in AWS is the right fit. There are various tools out there &amp; we generally use <a href="http://locust.io/"><em>Locust</em></a> or <a href="https://github.com/JoeDog/siege"><em>Siege</em></a> or <a href="https://httpd.apache.org/docs/2.4/programs/ab.html"><em>Apache Benchmark</em></a> for http stress testing. Both vertical &amp; horizontal scaling needs to be tuned based on the load test results until latency meets the SLA committed to customers. Another useful tool here is <a href="https://github.com/buger/gor">gor</a> which helps to run performance tests with the live production requests with various kind of filtering.</p><p>So this summarises the areas we analyse to make sure we have a good operable app going to be deployed in production. The points discussed above are not limited to new softwares, but can be done in more or less same fashion against the currently running systems in production as well. This is a simple checklist we follow at Indix &amp; initiate the process during the very early phase of application development. There is always a room for improvement and this kind of process matures over time but based on our experience so far — this approach has proved extremely useful &amp; helped us to figure lot of problems both proactively &amp; reactively before they are deployed once they started running in production.</p><p><em>Interested in having a well defined Operability Review model for your organisation ? We at </em><a href="http://opslyft.com"><strong><em>OpsLyft</em></strong></a><strong><em> </em></strong><em>help organisations make their DevOps a success. Shoot us a mail at contact@opslyft.com for further details</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b44994082477" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/demystifying-devops-with-operability-review-b44994082477">Demystifying DevOps with Operability Review</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Exploring Cost Optimisation on AWS]]></title>
            <link>https://medium.com/opslyft/exploring-cost-optimisation-on-aws-bac5840ad742?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/bac5840ad742</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[serverless]]></category>
            <category><![CDATA[aws-lambda]]></category>
            <category><![CDATA[java]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Mon, 25 Feb 2019 14:06:16 GMT</pubDate>
            <atom:updated>2019-02-27T16:15:00.655Z</atom:updated>
            <content:encoded><![CDATA[<p>In the present day scenario, people really value that moment of instant gratification they get upon leveraging <strong><em>Infrastructure as a Service. </em></strong>Otherwise which would have been a significant effort for solutioning those use cases in house. Yes, we are talking about the power of <a href="http://www.springpeople.com/blog/the-cloud-war-aws-vs-azure-vs-google-cloud-services/"><strong><em>Cloud Computing</em></strong></a><strong><em> , </em></strong>which present day software product/service companies use extensively.</p><p>All of it works perfectly well for you and keeps your life easy until one fine day you start talking about things at <strong>SCALE</strong>. You start dealing with problems like storing and organising your data at large scale, making internal as well customer facing systems highly available, efficient monitoring, logging and alerting mechanisms etc. All of these things can really be a matter of few clicks if you are into using public cloud solutions for real.</p><p>So, as the legends say <strong><em>With Great Power Comes Great Responsibility, </em></strong>one can understand and work around the engineering level responsibilities for the same, but the next big thing which hits the individuals and organisations is that you need to pay your bills for all the resources you leverage on public cloud solutions. Like it or not, your cloud costs can be a bomb if you don’t plan it well.</p><p>I work extensively with <a href="https://www.youtube.com/watch?v=XKWHuFbwTck">AWS Cloud</a> and to be just a little more specific, at <a href="https://medium.com/u/e7202155190e">Indix HQ</a>, a Data as a Service company, are building world’s largest cloud catalog for structured marketplace product information. The scale of data is in hundreds of TBs which we deliver to our customers through <strong>API’s and Bulk Feeds. </strong>As a DevOps and Infrastructure person, I was responsible for designing, developing and maintaining a stable, reliable and secure cloud infrastructure for our internal and customer facing apps on AWS Cloud.</p><p>But AWS like any other public cloud service providers, comes at a cost. When your infrastructure on cloud is serving and processing data at large scale, you are sure to use resources on cloud extensively and nothing is cheap then. Your bills are in thousands of dollars then.</p><p>This is where your Finance and Engineering ninjas adopt cost control measures and try to bring standardisation in the use of resources on cloud as per common best practices. Some of the standards that we follow at Indix are:</p><ul><li>Choosing the right instance types for deploying applications, so that there is no under utilisation of the computation power offered the selected instance type.</li><li>Using Spot Instances for systems which are not mission critical and Reserved Instances for mission critical ones.</li><li>Proper tagging of all the resources. This reduces the risk of anything getting unmonitored.</li><li>Keeping a track of service usage through Cost Explorer</li></ul><p>One of our biggest challenge in terms of controlling costs on AWS despite of following all standard best practices for the same was that we weren’t able to track and hence respond to an unknown event. To elaborate more on this, think of the following possibilities :</p><ul><li>An unexpected autoscaling event during 3 AM at night which scales up and then scales down your cluster which you are likely to keep a track for in terms of cost control.</li><li>Human error of EC2 instances being left idle.</li><li>Untracked jobs which have a potential to incur huge cost due to high Data Transfer.</li></ul><p>Though AWS through <a href="http://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-explorer-what-is.html">Cost Explorer</a> tool helps us analyse cost very efficiently, but we were not sure if we could leverage in a programmatic manner to build our own custom solutions on top of it. One fine day we came across an <a href="https://aws.amazon.com/blogs/aws/new-upload-aws-cost-usage-reports-to-redshift-and-quicksight/">article</a> from <em>Jeff Barr </em>from AWS which talks about how we can use <strong>AWS Cost Usage Report (CUR) </strong>to analyse the cost distribution on AWS. Though the blog says it all, but we wanted to build an automated system which could help us track our costs in the desired time granularity level possible.</p><p>CUR, a CSV file though, is a really complex thing and it was going to take ages for us to parse it and extract the required cost data for our use case. Alternatively, we imported our CSV data to <strong>Amazon Redshift </strong>where we can store large scale data in a Postgres database without caring about the underlying infrastructure for the same. So this way we could store our CUR data in form of a SQL table and can fetch the required data from it using simple/complex queries. It was a fair win over the effort involved in writing parsing scripts for CUR otherwise.</p><p>Added to that, AWS helps us do this entire import process by just a few clicks. It allows you store your billing reports to an S3 bucket and import to Redshift.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/761/1*LOQLWPreycf1USfN7sk0hw.png" /><figcaption>Configuring CUR for granularity and S3 bucket location. Image Source : AWS Blog</figcaption></figure><p>Post configuration of reports you’ll be able get CUR’s in your S3 bucket. We also further configured our reports to make it available into a Redshift cluster by giving a table schema for the report. (<em>You have options to do the same in the same billing console</em>). This meant, we just needed a new redshift cluster and we’r done on the cost data loading part.</p><p>Once we had the data in our Redshift cluster, we started running queries on it right away.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/773/1*lt4yazl2z_Xn7jNxG2Hupw.png" /><figcaption>Redshift console. Image Source : AWS Blog</figcaption></figure><p>Everything we expected after getting inspired from the blog article was working fine for us. The journey was half complete though. What we needed was an end to end automated system which could do the above jobs for us and also alert our engineers or engineering managers whenever there is a certain threshold cost is crossed for monitored resources on AWS.</p><p>We then decided to leverage the power of <strong>AWS Lambda </strong>which is a serverless architecture service provided by AWS. We had the following design for Lambda functions :</p><ul><li><em>Lambda Function #1</em> : Automates the process of fetching CUR from S3 and uploading it to Redshift.</li><li><em>Lambda Function #2 and #3</em> : Reads a set of specified configurations from a JSON file, frames queries from that information, compares the obtained costs from queries with some threshold data and then sends Slack alerts if the thresholds are crossed.</li></ul><p>Let’s take a deep dive in Lambda functions #2 and #3. These are nothing but cron based functions which are responsible for alerting people on Slack (we use it for our internal office communications) whenever a resource on AWS crosses incurs more than a certain specified cost.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/371/1*dPJheZD2_JcMCNW30WW4Tg.png" /><figcaption>Configuration read by Lambda functions for creating queries</figcaption></figure><p>Above image shows the kind of configurations our Lambda functions #2 and #3 read for framing queries. For the above specified configs, the query formed goes something like this :</p><pre>select sum(cast(lineitem_unblendedcost as float)) from #TABLE_NAME where #TAG_NAME=&#39;#TAG_VALUE&#39;;</pre><p>The result of this query gives us sum which is compared against specified <strong>Threshold </strong>value and if the thresholds are crossed, alerts are being sent to specified <strong>Channel </strong>on Slack tagging the concerned Engineering Manager(<strong>EM_Name)</strong>. Following is one of the sample alert :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/442/1*BI_3lg2-cJ7VvIPs3bny5g.png" /></figure><p>So this is it :) Over the day, if the cost shows an unexpected behaviour over our monitored resources, we get to know for sure :)</p><p>Overall graphical representation of the architecture is something like this :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SGsU5FeZMuINqyEXBV9GtQ.png" /><figcaption>Architecture Diagram for Cost Alerting System</figcaption></figure><p>I named it up as PLUTUS :) Soon enough, at <strong>OpsLyft</strong> we are going to release this as a full fledged product which you can use it within your AWS environment.</p><p>Our vision at <a href="https://opslyft.com">OpsLyft</a> is to achieve Digital Transformation with DevOps. We are set of experienced engineers who help organisations achieve their DevOps goals. Please reach out to us at <a href="https://opslyft.com/contact"><strong>contact@opslyft.com</strong></a> for for any help you need on solving problems and enhancing your cloud.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bac5840ad742" width="1" height="1" alt=""><hr><p><a href="https://medium.com/opslyft/exploring-cost-optimisation-on-aws-bac5840ad742">Exploring Cost Optimisation on AWS</a> was originally published in <a href="https://medium.com/opslyft">FinOps Talks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Tale of Configuration Management : Our Ansible Story]]></title>
            <link>https://medium.com/@akJarvis/tale-of-configuration-management-our-ansible-story-e969362f4a76?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/e969362f4a76</guid>
            <category><![CDATA[ansible]]></category>
            <category><![CDATA[configuration-management]]></category>
            <category><![CDATA[devops]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Thu, 18 Jan 2018 23:23:56 GMT</pubDate>
            <atom:updated>2018-01-18T23:32:45.638Z</atom:updated>
            <content:encoded><![CDATA[<p>Like in any other fast growing product startup, Indix’s tech stack also evolved with time. We iterated over and over (sometimes from scratch) as we scaled to achieve our engineering milestones. These milestones were more of definitive engineering processes and practices which were validated and confirmed to be fitting our use cases. One such evolution which we experienced was of Configuration Management. <br>This article talks about <a href="https://medium.com/u/e7202155190e">Indix HQ</a>’s journey of Configuration Management so far and how we ended up using Ansible as a standard for infrastructue creation, provisioning and deployments.</p><h3><strong>Previous State</strong></h3><p>As of circa Aug 2015, we at Indix used a variety of tools and languages to take care of infrastructure creation, provisioning and deployment.</p><ul><li><strong>Infrastructure Creation</strong>: AWS command line tools, fog, knife-ec2</li><li><strong>Provisioning</strong>: chef, chef-solo</li><li><strong>Deployment &amp; Orchestration</strong>: Capistrano, fabric, shell scripts, Go-CD commands, beanstalk etc.</li></ul><p>There were some shortcomings with this approach:</p><ul><li>Failures happened since there was no tight coupling between infra creation, provisioning and deployment. Failure at one stage leads to cascading failures later.</li><li>The tooling to get things in production is pretty complex. Understanding multiple tools and getting familiarity with a new language ( ruby / python ) for most developers is not optimal. This leads to less participation from a larger group of developers in taking care of the systems built. Also it causes a lot of burnout for the DevOps team.</li><li>We didn’t have any single place to know the source of truth of the system. We largely use chef in a pull based mode. This implies that agents keep polling central chef server to know what changes are required to be applied to the system. We experienced state discrepancies where github code, chef server state and machine internal state don’t match. This happened either due to lack of proper checks and balances in the current way of working, developer negligence or sometimes even due to failure during execution of chef-agent which fails silently without raising any alerts. The end result of this invariably leads to production downtime / failure of some or many of our services. This apart we have also seen central chef-server becoming the single point of failure leading to bad state of our systems.</li></ul><h3><strong>Our Experience &amp; Learning</strong></h3><ul><li>Too many tools to learn which have significant learning curve. Also very tight coupling of provisioning across different teams / projects.</li><li>Extremely difficult to quickly create a exact replica of production environment to experimental so to try new code changes.</li><li>Difficult to tweak with hardware ( amazon machine types &amp; volume types ) which is required for any tuning and battle-hardening any backend system .</li><li>No consistency or simple way to configure some of the basic things ranging from monitoring, logging, system sanity checks</li><li>Neither idempotent nor immutable. This implies that tomorrow we can’t simply rerun our entire infra creation, provisioning and deployment in a single way multiple times and be certain that things will keep on working fine.</li></ul><p>Besides the aforementioned pain points, we also realised that there were some things that we would like to have a quicker developer environment setup using virtual boxes or docker. This shall provide us the capability to quickly test things locally and write integration tests.</p><p>So to paraphrase we wanted a system which should be:</p><ul><li>Dead simple. This means very low learning curve and more developer participation. The indirect consequence of it is helping people move fast and get things done rather than being dependent on the devops team entirely.</li><li>Single (or minimal ) tool for infra creation, provisioning and deployment</li><li>One way to do things. Not 5 different languages and frameworks. Something like YAML.</li><li>Building idempotent and immutable infrastructure. It means you can run the same script to create, provision and deploy infra multiple times and it should simply work. This also means that recreating infra, provisioning an deployment shouldn’t be a exercise in frustration but becomes a part of the way we operate</li><li>The above point ensures that it is easy to replicate complete environments with minimal overhead. This also ensures that our continuous delivery system is used to just trigger and doesn’t have any state or intelligence</li><li>Ability to quickly create local dev setup, test environments and write integration tests</li></ul><h3><strong>Ansible Ecosystem</strong></h3><p>We actively followed ansible for over a month plus before seriously trying it out. It seems to solve all the problems that were described earlier in a really simple and elegant fashion.</p><p>The major problems that it addresses are:</p><ul><li>Single place to create infra, provision, deploy and orchestrate.</li><li>You write only in <strong>YAML</strong>.</li><li>Primary mode of operation is push based mode which means post deployment system is immutable. It also gives flexibility to be used in pull based mode which is useful for say Hadoop cluster where nodes may come and go. However in both cases github source is single source of truth.</li><li>Great documentation and solid pre built modules. So for complex things like machine creation and ensuring that only a single machine in a group exists you dont’ have to do anything. Most modules written are idempotent. This is not true just for provisioning ( where it is true for chef &amp; puppet also ) but for even infra creation and deployment.</li></ul><h3><strong>Current State :</strong></h3><p>As of now, most of our infra is under configuration management via Ansible. This includes migrating legacy systems from no configuration management to Ansible based setup and a few Chef based setups to Ansible based. Any new system that’s being built by developers is brought up using Ansible. <br>Owing to it’s simplicity, the best and perhaps the most important milestone that we are able achieve is that developers now build their systems end to end, meaning that they not only focus on writing application code but also write Ansible scripts for the application’s infrastructure creation, provisioning and deployments. This is a notable cultural practice which has been standardised which also eases and distributes out the ownership and responsibility of DevOps team with developers.</p><p>I would like to thank <a href="https://medium.com/u/60e678aad316">Varun Jain</a>, ex-Indixer, (now CEO, <a href="https://medium.com/u/8bb117375895">SendX</a>) who played a key role in incepting the idea for adoption of Ansible as an organisation wide Configuration Management tool. Most of the points covered in this article are inspired from his analysis presented to us for motivation towards Ansible adoption.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e969362f4a76" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Demystifying DevOps with Operability Review]]></title>
            <link>https://medium.com/@akJarvis/demystifying-devops-with-operability-review-a3c0acde9409?source=rss-8ed2a1bd0ce3------2</link>
            <guid isPermaLink="false">https://medium.com/p/a3c0acde9409</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Aayush Kumar]]></dc:creator>
            <pubDate>Sun, 29 Oct 2017 13:53:13 GMT</pubDate>
            <atom:updated>2017-10-29T14:03:35.358Z</atom:updated>
            <content:encoded><![CDATA[<p>As a part of Software Development Lifecycle, the major focus of developers is mostly around the coding, optimising and testing the business logic. However, while or even before writing code for the application, not much attention is given to what would happen when application as a dependent/independent system would be up &amp; running in production. This leads to lot of complexities, inefficiencies, unwanted surprises and challenges when the code is pushed to production — most of which could have been eliminated or reduced had we thought of them little early. There comes the necessity of <em>Operability Review</em>. By the term <em>Software Operability</em> — we mean the readiness of a new software to be deployed in production and start handling real traffic. The whole purpose of doing Operability Review of a service is to ensure that it runs <em>Well</em> once deployed, operates as smoothy as possible, very minimal manual intervention is needed to make it up &amp; running.<br>At <a href="https://medium.com/u/e7202155190e">Indix HQ</a>, we take operability seriously and engage everyone to have regular reviews around the operability items so that we don’t miss anything important and discover them late. In this blog, we will discuss the process we follow, the areas we focus while doing such reviews and how good this has proved to our product life cycle.</p><h3>Elements of Operability Review</h3><p>Before we begin to discuss how do we perform operability review in Indix &amp; what are the areas we cover under that, let’s first try to classify various aspects of a system running in production. From a very high level, health of any system/ application can be categorized as follows -</p><ul><li><strong><em>System Architecture</em></strong></li><li><strong><em>Configuration management &amp; deployment</em></strong></li><li><strong><em>Security</em></strong></li><li><strong><em>Data storage</em></strong></li><li><strong><em>Monitoring</em></strong></li><li><strong><em>Performance</em></strong></li></ul><p>Above are the areas which we should further break up into specific components &amp; review them separately. Also note that, Cost is a critical area which is not mentioned above since it is not really an attribute of the system. But everything we do — we try to optimise the cost incurred due to the same. The following diagram shows the coverage of all the aspects under Operability:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/899/1*T1FPS2Q56ME3wIAJtXAeyg.png" /><figcaption>Image Credits : <a href="https://medium.com/u/18d9b4c0f152">Arijit Bhattacharyya</a></figcaption></figure><h3>System Architecture</h3><h4>Architecture &amp; Deployment diagram:</h4><p>The first thing is to have the deployment &amp; architecture diagrams. Where architecture depicts the logical flow of request/ response inside the system, deployment diagram is focussed on the actual infrastructure. But if the system is not too complex, it makes sense to have them in a single diagram. Having these diagram/s helps people unfamiliar with the application to get a quick understanding of what is inside. This also helps in technical discussions around the other areas under operability.</p><h4>Deployment platform:</h4><p>Our entire infrastructure is in AWS so we really don’t have options in terms of hosting. Though we plan to evaluate other Cloud providers like Azure or GCE in future, EC2 is the choice at this point.</p><p>We have both docker &amp; non-docker services running (On EC2, we are not using ECS) &amp; we have applications running both on EC2 directly as well on a Kubernetes &amp; Mesos cluster. We use Mesos heavily &amp; several internal applications as well as some user-facing services are deployed in Mesos. Based on the nature of the new service, we decide whether it’s a right candidate to be deployed on Mesos or it should be on EC2 instances.</p><h4>Load Balancing:</h4><ul><li>If the service runs on multiple instances &amp; needs load-balancing, then some of the important things to decide for the ELB are -</li><li>Is the service user-facing ? If not, make sure to use internal ELB (Routing via private IPs) as network packets will traverse via public internet otherwise (which doesn’t make sense &amp; might have security concerns).</li><li>Make sure to enable Cross-AZ load balancing. This helps to distribute requests among the registered nodes irrespective of whether they are evenly spread across the AZs or not.</li><li>Enable Connection Draining with appropriate Timeout settings. This is to ensure no interruption of the inflight requests when an instance is being taken OOR for maintenance or something.</li><li>Set Idle Timeout appropriately. Idle Timeout is the duration of a connection can be in idle state before the ELB closes the socket. This applies to both client side as well as EC2 side sockets.</li><li>Enable Access Log for ELB. This is very important as without the access logs, it becomes too difficult to troubleshoot issues in production systems when the requests are coming through load balancer. We have a S3 bucket which is designated to store logs of every ELBs under top level folders/ paths. It might also be useful to push these logs to your centralized logging systems for further analytics.</li><li>Next is the Stickiness settings. Generally speaking, Stickiness is against the very concept of load balancing but sometimes one may need to use session affinity to ensure that every client requests in a session is routed to a particular instance. This is generally implemented using AWSELB/ application Cookies.</li><li>Finally, what kind of load balancer is needed. If we need features like content based routing or multiple listener ports per EC2 nodes — ALB is the choice. But note that ALB doesn’t support TCP listener yet so only HTTP/s protocols can be used. Use ELB otherwise.</li></ul><h4>High Availability:</h4><p>This is a very broad area &amp; we generally take decisions based on the nature of the service &amp; it’s SLA committed to customer/ internally (for internal systems). There are different areas to look into for ensuring Resiliency of your application or achieving High Availability -</p><ul><li>Deploy your instances in multiple regions &amp; in multiple AZs in each of the regions.</li><li>Figure out any SPOF in the deployment. If that blocks the real time response of the app, then this is not acceptable. We need to ensure replica of the same exists &amp; is distributed across independent network infra. If the service is using RDBMS, then we generally use RDS which has Multi-AZ deployments. That ensures synchronous replication of the data to a standby instance in a different Availability Zone (AZ).</li><li>The last but probably the most important is — Choice of EC2 Purchase type. We use Spot instances heavily to reduce our cost but that brings the additional difficulty of maintaining high availability. Depending on the nature, it may not be possible to use spot instances at all but most of the times the strategy of hybrid model works.</li><li>We imitate real production scenarios &amp; try to estimate the numbers for MTTD (Mean-time-to-detect)/ MTTR (Mean-time-to-recover)/ RPO (recovery point objective)/ RTO (recovery time objective) for our services.</li></ul><h4>Scalability:</h4><p>Scalability is extremely important as it helps you to never over provision any resource &amp; scale that out as &amp; when necessary. Thats is an important requirement for optimising the cost of your infra. The only thing to ensure is that your design of the service should be horizontally scalable &amp; not bound by a single m/c due to local data storage/ in-memory data etc. Also, Auto-Scaling is a great feature in AWS which allows to define Cloudwatch based criteria to scale-out or scale-in automatically.</p><h3>Configuration Management &amp; Deployment</h3><h4>CM Tool &amp; Model:</h4><p>We had used Chef for configuration management for a long time &amp; today also, many of the systems are deployed using Chef client/server or chef-solo. But then at some point two tears back, we decided to move to Ansible due to its simplicity &amp; developer friendly architecture. Today, any new infra is deployed using Ansible (And in few cases we started using terraform as well, for the provisioning part). Important thing to ensure here is that the Ansible roles/ playbooks are robust enough that we don’t need any manual intervention to bring up a system. Generally, we keep separate playbooks for provisioning &amp; configuration management as the provisioning part is generally a one time thing whereas configuration management runs regularly on the production systems. You can find some of our Ansible roles published <a href="https://github.com/indix">here</a>.</p><p>Next important thing is to define the management model. We generally have CI/CD pipelines for deploying the configuration changes in push mode but there are cases where Pull mode is must. Consider an Auto-Scaling group — Instances can come up anytime due to a scale out activity &amp; that needs CM to run right after it comes alive. This is taken care by running the same set of configuration management playbooks as part of UDF. Planned changes are still done via pipeline, where a code commit/ merge in master branch should trigger appropriate pipeline/s which then executes the changes in all the relevant nodes in the infra.</p><h4>CI/CD Pipelines:</h4><p>We use Thoughtworks GOCD as the only CI/CD tool at Indix. Any app should have separate Staging &amp; Production pipelines which automates the testing/ deployment of both Staging &amp; Production clusters.</p><h3>Security</h3><p>There are few standard security measure exist in AWS like using Vpc (Classic is no longer an option anyway), using apprpriate ACLs in the subnets &amp; appropriate inbound/outbound ports in the Security Groups. Generally ACLs are not touched and most of the Allow rules are applied to SecGroups. We use separate SecGroups for separate services so that modifying one doesn’t impact anything else. Port requirements are reviewed &amp; SecGroups are created accordingly.</p><p>Next thing is ensure right management of secrets like database passwords &amp; similar, which should never be stored in plaintext when used by the CM tool or deployment pipelines. For example, Encryption key in Chef (Used for encrypted databags) &amp; Vault key (Used by Ansible Vault) should be used to encrypt thise passwords and then can be stored in version control.</p><p>Now the next tricky part is how to manage those encryption keys. Of course they should never be committed to version control but have to be transferred to an instance while bootstrapping. For this, we use Iam roles which allow AWS resources to be accessed without using Access/Secret keys. So the strategy is to store Encryption Secrets in S3 bucket &amp; then launch instances with Iam role with appropriate plocies which can download those keys during bootstrapping.</p><p>Finally, HTTPs is becoming more &amp; more inportant with HTTP/2 even for pages without any sensitive content. At present, we use Certificates from both ACM (AWS Certificate Manager) as well as Let’s Encrypt. Since ACM is limited to only ELB or Cloudfront, we use LE certificates for externally hosted Indix end-points.</p><h3>Data Storage</h3><p>At Indix, we deal with massive amount of data &amp; generally every system in the infrastructure has to deal with some sort of relational or unstructured data. Depending on the requirement of the app, we decide which storage mechanism out of S3/ Ephemeral/ EBS/ EFS fits the bill. This generally depends on the latency of retrieval/ Durablity requirement of the data etc. While using S3, we further decide whether it should be standard S3 or RRS or IA type. Similarly for EBS, we have multiple options like old magnetic volumes or new generation storages like io1/ gp2/ st1 or sc1. If properly chosen, these decisions can have significant impact on your cost while maintaining the latency/ durability requirement of the data. Finally in few cases we use EFS as well, which is apprpriate to be used as a shared storage with less latency than S3 &amp; can be mounted in more than one EC2 instances (Unlike EBS).</p><p>Having some idea about the growth of your data &amp; retention is also important. Accordingly one can define proper Life Cycle policy for S3 buckets to avoid waste of dollars by storing old &amp; unused data. Increasing capacity of EBS on the fly is possible now but nevertheless it helps to allocate the right capacity from the beginnig. EFS scales automatically so thats not a concern there.</p><p>Backup &amp; Recovery is naturally very crucial, we need to ensure that right backup strategy is in place. For SQL data store in RDS, its important to ensure daily backup is in place. For data stored in filesystems, a regular snapshot of EBS volumes needs to be ensured. We use cronjobs &amp; lambda functions to schedule such EBS snapshots. The concepts of MTTD/ MTTR/ RPO/ RTO appliy here similarly.</p><h3>Monitoring</h3><p>Monitoring requirement is analysed both from System &amp; Application aspects. While every service should have standard system monitoring like LoadAverage/ Memory/ Disk-Space/IO etc, application layer monitoring is unique to every app &amp; needs to be identified accordingly. Apart from monitoring the subsystems, an end-to-end check is always must.</p><ul><li>For the internal monitoring platform, we have been using a combination of Sensu &amp; Cloudwatch but recently we are working on migrating to Riemann which is better in terms of real-time monitoring. Also, we use Pingdom for monitoring our services from external to our infrastructure. The new monitoring platform is going to use Telegraf/Riemann/InfluxDB/Grafana where every system is supposed to be sending metrics by telegraf agent to Riemann server, which in turn has the alerts configured &amp; also sends metrics to InfluxDB. Then create Grafana dashboards to have visualization on top of InfluxDB for analysing the trend. This also helps to do capacity planning for your systems. The Alert Notification systems are mainly Email/ Slack &amp; pagerduty — And decided based on the severity of the issues.</li><li>For logging, we use hosted service from <a href="https://www.loggly.com/">Loggly</a>. We have Chef cookbook &amp; Ansible playbook which we customize for every app which pushes the data to Loggly. Then creating dashboards with appropriate set of filters needs to be done in Loggly. Not every service is integrated with Loggly yet, but irrespective of that — it’s important to have proper log rotation strategy so that disks are not unnecessarily filled up by old &amp; useless logs.</li></ul><h3>Performance</h3><p>Performance/ Load testing an application is clearly necessary in order to identify what instance type in AWS is the right fit. There are various tools out there &amp; we generally use <a href="http://locust.io/"><em>Locust</em></a> or <a href="https://github.com/JoeDog/siege"><em>Siege</em></a> or <a href="https://httpd.apache.org/docs/2.4/programs/ab.html"><em>Apache Benchmark</em></a> for http stress testing. Both vertical &amp; horizontal scaling needs to be tuned based on the load test results until latency meets the SLA committed to customers. Another useful tool here is <a href="https://github.com/buger/gor">gor</a> which helps to run performance tests with the live production requests with various kind of filtering.</p><p>So this summarises the areas we analyse to make sure we have a good operable app going to be deployed in production. The points discussed above are not limited to new softwares, but can be done in more or less same fashion against the currently running systems in production as well. This is a simple checklist we follow at Indix &amp; initiate the process during the very early phase of application development. There is always a room for improvement and this kind of process matures over time but based on our experience so far — this approach has proved extremely useful &amp; helped us to figure lot of problems both proactively &amp; reactively before they are deployed once they started running in production.</p><p><em>Thanks to </em><a href="https://medium.com/u/18d9b4c0f152"><em>Arijit Bhattacharyya</em></a><em> our Director of Engineering, DevOps for laying the foundation of Operability Review process at Indix. All the practices mentioned in the blog are implemented as a standard checklist for any system (internal or customer facing) as a part of his review process only :)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a3c0acde9409" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>