As we close out 2023, we at devopsy.kinsta.cloud wanted to highlight the most popular articles of the year. Following is the latest in our series of the Best of 2023.
Welcome to The Long View—where we peruse the news of the week and strip it to the essentials. Let’s work out what really matters.
This week: Amazon Prime Video has ditched its use of microservices-cum-serverless, reverting to a traditional, monolithic architecture. It vastly improved the workload’s cost and scalability. (more…)
Enterprise technology adoption trends can be broadly categorized under three pillars: infrastructure, architecture and technology. Let’s explore what these trends are and how they influence DevOps and DevSecOps adoption in tech corporations worldwide.
Trends in Architecture
In computing, architecture is the collection of protocols encompassing the utility, structure and execution of software applications. Architecture defines how an application works and determines the function of each component, such as data storage and computing capability, for example. Architecture trends directly influence how technology is developed, which also makes it influential on the field of DevOps.
Trend #1: Monolithic to Microservice Architecture
The shift from massive, inflexible systems that limit compatibility to lightweight, nimble software has increased DevOps and DevSecOps adoption. As architectures such as containers become mainstream, it is easier than ever for teams to code, debug and deploy software quickly, and work collaboratively. Microservice architecture offers the benefit of quickly being able to install, run and maintain systems, and is a catalyst to greater DevOps adoption, while containers spur DevSecOps adoption.
Trend #2: Cloud-First Trend
Mobile-first, cloud-first development has revolutionized data transportation, security and collaboration, and made development efficient, safe and transparent. This approach leads many organizations to adopt DevOps/DevSecOps.
Trends in Infrastructure
In IT, infrastructure refers to software, hardware, networking resources, systems and tools that allow companies to operate and manage their production processes.
Infrastructure trends also heavily influence both the hardware and software tools companies use for tracking and manufacturing their products, and therefore directly impact their willingness to adopt DevOps and DevSecOps.
Trend #3: Kubernetes Plus/Minus DevOps
A significant infrastructure trend that affects DevOps is the increasing adoption of Kubernetes by global technology companies. Kubernetes is open-source software designed to orchestrate the management, deployment and scaling of containers, and has seen widespread adoption in the tech industry. Kubernetes empowers organizations to be more productive, with an emphasis on security and collaboration. Containers in Kubernetes seamlessly allow multiple teams to develop a project simultaneously. Resource management and transparency are significantly enhanced, bugs can be fixed more quickly and work cycles can be shortened.
Kubernetes and container management systems also reduce the need for human interaction and facilitate a fully automated, ‘NoOps’ scenario. Kubernetes uses a pipeline architecture approach that makes it easier for developers to use AI and ML tools to analyze, predict, and automate data and work processes.
Furthermore, Kubernetes sets an infrastructure backed on logging, continuous detection, consistency, and self-healing, making it extremely easy and considerably faster for computers to make sense of the data, potentially eliminating human interaction. The infrastructure established by the trendy Kubernetes technology is both advancing and restraining DevOps adoption in companies worldwide, depending on how the companies implement Kubernetes into their work cycle.
Trend #4: The Agile Infrastructure Trend
Agile infrastructure for software development has become the standard for software development, and is perhaps the most influential trend impacting DevOps adoption. Agile, like DevOps, focuses on collaboration, organization, diversifying skill sets to achieve resilience, rapid iteration and self-improving work processes. Adapting to an Agile methodology means each team has members skilled in various disciplines that work in concert. Each product delivered is followed by a feedback cycle. Agile teams in an enterprise are transparent, collaborative and resilient to internal and external conditions.
Trends in Technology
Advancements in technology enable new ways of thinking and new best practices. As tech trends change, the work cycles, processes and mindsets also evolve.
Trend #5: Release & Deployment Automation
Manually moving software between testing and production environments is an inefficient, painful task that must be repeated every time updates are added, new versions are released or new features are built. But with the rise of release and deployment automation, software companies can entirely automate this process, saving time while boosting reliability. With the click of a button, test code can be automatically converted to production-ready work and deployed to version controls or hosting services. With this use of automation, DevOps adoption skyrockets.
Trend #6: Site Reliability Engineers
Site Reliability Engineers (SREs) are in huge demand as organizations strive to create highly scalable and secure software. SREs build robust, reliable software that leverages automation, create self-healing systems that focus on operations and align closely with business imperatives.
Trend #7: Shift Toward AI/ML
The evolution of artificial intelligence and machine learning is changing our entire perspective on the development and use of technology. With increasing automation, ML systems can process large amounts of data, make reliable predictions and provide extremely accurate analyses. AI can make use of this data and these predictions to determine what to do next, and create truly intelligent machines that can function with minimal human interaction.
While this makes systems faster, more autonomous and reliable—which aligns with what DevOps promotes—it can eventually create a NoOps cycle that doesn’t require human intervention. In the short-term, this trend does influence DevOps adoption, but, in the long term, AI/ML could ultimately eliminate DevOps altogether.
It seems that every firm is trying to include DevOps in their software delivery cycle these days. This is understandable. According to the 2019 Accelerate State of DevOps Report, companies using DevOps are more likely to achieve elite performance in software development and delivery.
Companies such as Google and Amazon can be deploying thousands of updates a day. These rapid updates improve company performance and result in the provision of better software solutions for the end-user.
In this article, we will look at seven effective tips to get the most out of your DevOps so you can maximize success. Before we look at some of these tips, let’s briefly define DevOps.
What is DevOps?
DevOps is a term for a group of management practices that aim to quicken the deployment of changes to a system while ensuring high quality delivery. It incorporates management theories such as agile infrastructure and agile development. One of the most influential books on the topic, which resonated with a lot of influential business leaders in Silicon Valley, is “The Lean Startup” by Eric Ries.
At its heart, DevOps boils down to the idea that you should be able to implement changes quickly, so you can release a superior product to your customers faster. This ability to bring a superior product to market fast, gives companies that can achieve this edge an advantage over their competitors.
Review Your Organizational Structure
Collaboration is the bond that allows software companies to deploy and execute changes fast. Companies that are experts at DevOps classically reduce the obstacles to collaboration.
In traditional IT organizations, departments are siloed. They interact with each other only when necessary. Hence, they have limited knowledge of each other’s work. This model presents a linear process of developing, testing and deployment.
To reduce these silos, you need to first analyze your organizational structure, and identify obstacles to collaboration. This starts by ensuring management is on board with your vision. You need to:
Review the job description of managers and create KPI that support collaboration.
Create remuneration packages that foster closer collaboration between departments.
Addressing structural issues that impede collaboration between departments will help. You also need to put in place a system of communication between departments.
Fortunately, there are useful tools to smoothen continuous collaboration between different lines of business. Channels of communications should not be limited to sending emails or conference calls. Remember, DevOps requires continuous and fast collaborations to ensure fast deployment.
Usingunified communications (UC) is an effective way to foster collaboration in a company. Unified communications integrates phone calls, email, chat, document sharing, conferencing and other platforms necessary to exchange information within the organization. Importantly, you can also access much of this information in one place.
Reduce Operational Hurdles for Deployment
The way an update is deployed will differ by company. There is usually a system in place to discuss targets and a series of checks in place before deployment. For example, department heads will come up with an idea. They will be developed, then reviewed by quality assurance before operations deploy it.
This can be a cumbersome and time-consuming process, which slows down the speed of development. The problem for many companies is that changes, both large and small, need to go through the same process of quality assurance before deployment.
While it makes sense to have this process in place for major updates, it should be possible to push smaller updates faster. Two things need to happen to achieve this:
Empower staff to make decisions independently while giving them the opportunity to learn from mistakes without risk.
Reduce the administrative hurdles to deployment by creating a ranking system for reviewing updates. This will allow developers to push small updates independently, or with minimal oversight.
Empowering staff to push changes enables you to speed up DevOps.
Plan in Small Batches
Planning in small batches is important in promoting DevOps in an organization. With small batch testing, the cycles of testing hypotheses, acquiring feedback and going at it again can be done within a very minimal time frame. It is fast and efficient—simple.
This feedback might feel obvious. Perhaps the better question to consider when planning in small batches is: How small is small? Let the INVEST concept in agile development help you out.
Independent: Planned small batches should be independent of other parts.
Negotiable: Every batch should be iterable and negotiable upon receipt of feedback from deployment.
Valuable: Each one should add value to the project and the end-users.
Estimable: Batches should contain estimable information for scope determination.
Small: Small should be small enough to be processed within a few hours up to a few days.
Testable: A planned batch should be testable and can be monitored continuously.
Results of deployment, testing and monitoring of each batch should then be deployed at least once a day. Also, in planning small batches, different departments should be kept in the loop. This will greatly benefit DevOps efforts in the organization.
Create Space for Collaboration
Even without DevOps, fostering collaboration between departments is imperative. You can formalize collaboration through regular meetings. However, departments are usually situated in separate office areas, floors or even different buildings. Think about having to walk to a conference room on a different side of the facility just for a meeting.
This kind of setup is an example of a bottleneck for collaboration in an enterprise. And with collaboration being the heart of DevOps, creating a company culture and office space conducive to teamwork is of utmost importance.
SpaceX is an example of a company that promotes collaboration throughout the organization through company culture and physical space management. Offices are open, and each person can see what everyone else is working on. This promotes motivation for employees to work passionately. Also, everyone has access to camera feeds from different parts of the factory, which inspires curiosity about what others are doing. Because of this culture, employees become dedicated and excited to accomplish results.
Take Advantage of Microservices
In processing complex IT systems, it is more beneficial to break bulks to smaller, more digestible pieces. This is where microservices come in.
Microservices or microservice architecture is an architectural style wherein a complex system is broken down into smaller services. Rather than treating a system as a whole, it is perceived as a collection of manageable pieces.
Teams simultaneously working on parts of a system as a whole makes it more prone to breakdown. Utilizing microservices makes monitoring, maintenance and testing easier. They are also loosely connected to each other which means fixing wouldn’t much affect the other parts. Moreover, each microservice is releasable independently.
As an example, Wix started out with a monolith which was useful at first when they were only handling 1 million sites. However, interdependencies and poor quality coding resulted in downtime which is ultimately bad for business. Now that they shifted to using microservices architecture, they quickly scaled up reaching 70 million sites.
Maintain Continuous Monitoring
DevOps promotes fast and continuous integration and deployment. A fast-paced environment is more susceptible to problems. Something at any point can fail within the software development life cycle.Continuous monitoring helps you identify mistakes fast. It ensures the optimal performance, reliability and health of the software.
Setting monitoring targets, like development milestones, can improve this process. A development milestone is an overarching category that can give an insight into your team’s actual performance. Monitoring tells you the performance of your DevOps implementation.
A method to consider is synthetic monitoring wherein your application undergoes simulated customer interaction. This way, you can monitor the exact action and performance of your software before they get released to actual users.
Practice Change Management
DevOps employs continuous integration, continuous deployment and continuous monitoring. It is a cycle of fast-paced changes. Change management is essential to keep the system run like clockwork.
It might be easier said than done because changes have effects on various stakeholders. This includes your customers as the end-users, security, regulatory compliance and company policies. With this, changes within the development, testing, deployment and monitoring should be cohesively managed.
Change management is intrinsically reactive. It usually happens because of feedback received after deployment. But with DevOps, change management should be proactive. Instead of managing large-scale changes, processes are broken down into smaller parts with clearly defined scopes. Furthermore, anticipated changes are scheduled, scaled and communicated across the board. Possible risks and problems are efficiently managed because of this.
Summary
No system is perfect nor exactly the same. The key to a successful DevOps implementation is assessing what works best for your organization. DevOps is not a standardized process. It is not a system that will work for every company. Rather, DevOps is a theory of management.
Improving DevOps at your firm will involve a system of continuous review and improvement. You need to understand what is working, the problems and what you can improve. This can all be done through continuous processes with the help of automation and collaboration. No matter the size of your software development projects, these simple tips and tricks will help you make the most out of your DevOps.
As we close out 2019, we at devopsy.kinsta.cloud wanted to highlight the five most popular articles of the year. Following is the first in our weeklong series of the Best of 2019.
Microservices are moving to the mainstream. The IDC FutureScape: Worldwide IT Industry 2019 Predictions states that by 2022, 90% of all new apps will feature microservices architecture that “improve the ability to design, debug, update and leverage third-party code.”
With so many organizations adopting or about to adopt microservices, they must be doing something right. In fact, just considering the model is a positive step toward delivering quality software, faster. However, many companies are leaving microservices benefits on the table because there are many pitfalls on the road to success. It’s about so much more than just a technology choice and starting to code microservices.
Indeed, breaking your apps into microservices isn’t enough—you have to manage them, orchestrate them and deal with the data they create and modify. Before you even touch the keyboard it’s a good idea to think about a few points of strategy to ensure success.
Here are five microservices worst practices and how to turn them around.
Implementing Microservices Without the Prerequisites
You can’t take Calculus II without taking Calculus I. Similarly, you can’t roll out microservices without the proper prerequisites. To fully leverage microservices, companies must consider modularity and domain boundaries, and the fundamental distributed systems theory should be considered and established. In addition, while each service is independent, there are operational requirements that must be met. These include DevOps; PaaS; containers or immutable VMs; service replication, registry and discovery; and proactive monitoring and alerts.
Implementing Microservices Without Making Changes to the Development Culture
The biggest mistake organizations make when moving to a microservices architecture model is underestimating how it’s changing the way they need to think about applications and especially the way they think about the teams developing those applications. Traditionally, there are many people involved in the development of an application, with each coming at it from his or her own perspective—the UI specialist, the middleware specialist, DBAs, sysadmins and so on. What worked for one might not work for the other when it gets thrown over the wall, and it often takes a lot of time and frustration to make everything work for everyone. Trying to do microservices without changing that model and mindset will almost certainly set your team up for failure. Instead, think in terms of cohesive, cross-functional teams, each fully responsible for its own unique services and its own set of customers for those services. Each team’s working with other teams as if it’s a business-to-business (B2B) relationship. It’s not an easy cultural transition, but it’s one that is essential for microservices to work.
Going Too Big and Broad Out of the Gate
An organization that goes all-in on microservices all at once is almost certain to run into problems that could completely derail the initiative altogether. Pick a small project, and staff it with people who see the potential of microservices and are excited to work with the technology. Once that project has been successfully completed, use it as a proof point to promote the further use of microservices across the organization and to get others on board.
Misplaced Expectations
Organizations are right to question the performance impact that microservices will have when migrating an existing monolithic application to a microservices model. But their concerns—and expectations—are often misplaced. Yes, there can be a performance hit when decomposing existing monolithic applications in favor of microservices. But what organizations need to understand is the goal of microservices is deployment speed over API invocation speed.
Isolating the development of a service within a team (as mentioned earlier) means the service can be updated as needed—whether that’s weekly, daily or even hourly—in response to business, competitive and security demands. In its Worldwide IT Industry 2019 Predictions report, IDC notes it is “already seeing enterprises that have shifted fully to these new approaches (and supporting tools and technologies) that dramatically accelerate their ability to push out digital innovation through their organization at 50-100 times (or more) the frequency of their traditional approaches.”
Picking the Wrong Applications to Microservice-ize
This worst practice is linked closely to the previous one. Organizations that pick the wrong applications to split into microservices or decompose an entire monolith without thinking about which parts might be best as microservices (and which would fail miserably as microservices) will have the odds stacked against them from the get-go. A financial application or a high-volume application that makes multiple calls may not be good candidates for microservices. Or, it may be that parts of these applications would work well in the microservices model even if the monolith as a whole doesn’t. The idea is to examine each legacy application carefully and to build new applications with microservices in mind from the beginning.
If you’re thinking that it takes a lot to establish a microservices foundation, you’re right. It’s a big investment, and it may take some time before there is a return on that investment. But organizations that move toward microservices in a thoughtful, purposeful way—exploiting the best practices of those that have gone before them—will likely find themselves more agile, more secure and more competitive.
There is steady increase in the adoption of microservice architecture style since 2014 (Figure 1). Microservice architectural style structures an application as a collection of loosely coupled services that implement business capabilities.
An architecture style is a family of architectures that share certain characteristics. For example, N-tier is a common architecture style. Architecture styles generally don’t dictate the use of particular technologies, but some technologies are well-suited for certain architectures. For example, containers are well suited for microservice since they go hand-in-hand for the deployment.
In this article, you will learn about the typical considerations, challenges and benefits of the microservice architecture style.
Figure 1: Microservice Google Trends.
While microservice applications are built as a set of modular components, they are easier to understand, simpler to test and effortless to maintain over the life of the application. It enables organizations to achieve agility and be able to improve the time it takes to get working enhancements to production.
It also enables the continuous delivery/deployment of large, complex applications and the evolution of its technology stack. Having detailed out on the benefits side there are quite a bit of challenges as well, which we will discuss in the next section.
Constraints Imposed by Microservice Style
By adhering to the following constraints imposed by microservice architecture style, what we get is a system where services can be deployed independently, faults are isolated, frequent updates are possible and it’s easy to introduce new technologies into the application.
Each service represents a single responsibility.
Every service is independent of the others.
Each service needs its own JVM (or equivalent) so instances are isolated.
Data is private to the service that owns it.
Services do not share data and need to implement queries that need to retrieve data owned by multiple services.
Well defined mechanism to implement service-to-service communication and scheme to deal with partial failure.
Requests that span multiple services and require careful coordination between the teams.
Testing to cover the interactions between services.
Deploying and managing a system comprised of many different services.
Consider Challenges Versus Benefits
Each architectural constraint has its own associated challenges/benefits, so it’s important to understand and balance both. Before adopting any style of architecture, you have to ask yourself if the benefits outweigh the challenges for the application you are considering.
In the table below, we take a look at the benefits versus challenges of microservice style applications.
Benefits
Challenges
Enables the continuous delivery and deployment of large, complex applications.
There is an additional complexity of creating a distributed system.
Improved maintainability: Each service is relatively small so it’s easier to understand and change.
Implementing requests that span multiple services is more difficult.
Maintaining data consistency between service(s) is a challenge.
Better Testability: services are smaller and faster to test.
Testing the interactions between services is more difficult.
Better deployability: services can be deployed independently.
Increased operational and deployment complexity of deploying and managing a system comprised of many different services.
Each team can develop, test, deploy and scale their services independently of all of the other teams.
Implementing requests that span multiple services requires careful coordination between the teams.
Improved fault isolation.
Inter-service communication and dealing with partial failure implementation is challenging.
Eliminates long-term commitment to a technology stack.
Overhead of multiple JVM runtimes (or equivalent) and increase in memory consumption needs to be taken care of.
Scenarios Where You Can Consider Going for Microservice
Consider an scenario where you are developing an enterprise application that must support the following characteristics:
Support for different variety of clients that includes desktop browsers, mobile browsers and native mobile applications.
Expose an API for third parties to consume.
Integration with other applications via web services or a message broker.
Run multiple instances of the application on multiple machines to fulfill scalability and availability NFR requirements.
Adopt emerging technology stack.
Planning to go for continuous deployment pipeline setup for the application.
From the requirements above, you can very well say the application is 100% fit for a microservices architecture.
You have to define an architecture that structures the application as a set of loosely coupled, collaborating services. Services can communicate using either synchronous or asynchronous protocols. Services can be developed and deployed independently of one another. Each service has its own database in order to be decoupled from other services.
Let’s look at some of the typical scenarios where you can consider going for microservice style of architecture:
Monolithic application migration due to improvements needed in scalability, manageability, agility or speed of delivery.
Re-platform a legacy application by transforming functions/modules to microservices.
Rewriting legacy application to modern languages, technology stack to meet the demands of modern business.
Individual cross-cutting services that are independent in nature. For example: encryption services, authentication services, etc.
Independent business applications or services reused across multiple channels. For example, payment services, login services, flight search services, customer profile services, notification services, etc.
Commonly used enterprise applications. For example, time tracking application.
Scenarios where a service provider makes computing resources and infrastructure management available to the customer as needed. For example, forecasting services, price calculation services, prediction services, etc.
Back-end services for responsive client-side web application where data could be coming from multiple channels or different data sources.
Highly agile applications or applications demanding speed of delivery or time to market or innovation pilots, etc.
Applications that got polyglot, multi-language, cloud application development.
Make the Choice
Before going for microservice architecture, make sure you know the challenges and benefits. Otherwise, your application design could end up with a design that fits the style but does not achieve its full potential. Adopt microservices only if you see enough value for your applications. Also note sometimes relaxing a constraint is better than insisting on architectural purity.
Microservice is an architectural style that can be implemented during complex application development within an organization. The implementation of this architecture allows the application being developed to be highly maintainable and testable, loose, independent during deployment and also strongly organized around business capabilities. In another way, the microservice architecture can be explained quite easily. It is a software development technique that allows for the structuring of an application. The structure of the application being considered will be that of a set of coupled services.
Any application developed using the microservice architecture is easy to understand, develop and test. More so, the application will have a sort of rigid attitude to degradation in the long run. This is due to the concept adopted during design.
The design of the microservice architecture ensures that applications are separated into smaller services, states, etc., until they become fine-grained and light in weight. Therefore, the modularity achieved encourages the adoption of methodologies that will allow for the division of labor. These methodologies will aid in the concurrent design, development and testing of the sub-services independently.
While this architecture is suited to certain scenarios, it (like every other architectural style) has its demerits. Microservice experts advise on the study of the architectural platform before adoption. The implementation of the microservice architecture can be affected by a number of programming languages.
Within the context of this article, I discuss the purpose of the microservice architecture, and also examine the upside and the reasons why they should be learnt and implemented. I also take a look at particular niches that allow the use of microservice architectures and why they use it.
Architecture, Examples and Types of Microservices
The microservice architecture is a major decomposition of the monolithic architectural method. The monolithic architecture had applications developed from the top to bottom and also had the entire development process run as a single unit. The microservice architecture works in contrast to this by enabling modularization. The core of the microservice architecture has requirements that are intensified and made possible by the separation of the primary task into smaller services, in which one service represents just a requirement, function or need.
Examples of microservice architectures can be found in airline service scenario. If we pick out the flight booking component, we could find out that this primary task could be separated into inventory adjustment, seat allocation, fare calculation, timetable lookup, reward management and customer update.
Applying Microservices
Research has it that the majority of the companies that make use of microservices are quite on the high side. This majority includes organizations such as Netflix, eBay, Amazon, PayPal, Twitter, The Guardian, etc. This list also includes the United States Government Digital Service.
The application of microservices can work with a number of technologies but a number of researches attribute effective usage of this architecture with the cloud environment and the DevOps environment as well. These tools and environments help to manage the operational complexities that affect the swift functionality of the architecture.
Why Do They Use It?
Most of the organizations that make use of the microservice architecture did transcend from the monolithic method. This is mostly because the method offers organizations the ability to decompose primary applications into smaller composed pieces. These pieces can then be built independently (which is easier) and also maintained independently as well. Developed pieces have the ability to communicate with each other and work together as well.
The adoption of microservice architecture provides the management of an organization and everyone involved in the development of the application with a decentralized approach towards building the software. This approach breaks the development process into a series of deploy, rebuild and redeploy.
The choice of a microservice architecture also grants organizations the ability to implement variant strategies, tools, techniques, etc., for services that are involved. Studies show that organizations that implement this architecture have a high proficiency rating. This is due to the usability of the architecture in independency, deployment, replacement, etc.
The architecture encourages easy debugging of errors and detection of faults in general. When an error is spotted, the segment from which it originated can be easily traced and the fault can be found shortly after. This, as explained earlier, is because primary tasks are separated into smaller services. Each service can then be fine-grained to simple state. Before the simple state is attained, it is also possible that the service can be separated into a smaller group of services. This option helps the development team actualize a major concept within this architecture, which makes sure that a service handles just one task. Also, the architecture allows for the adoption of management techniques that assist the organization. These management techniques include options such as change management process, continuous software development processes, problem and incident management techniques, etc.
Benefits to Using Microservices
The benefits to using the microservice architecture include:
The actualization of scalability when considering customer-focused services.
Independent deployment of services.
The ability to work with more than one development tool (such as programming languages).
Easing the modularization of tasks within the project as a whole due to the modularization of the application being developed.
Support for a wide range of platforms and devices such as web, mobile, internet of things, etc.