{"id":36008,"date":"2022-01-21T14:36:01","date_gmt":"2022-01-21T11:36:01","guid":{"rendered":"https:\/\/orbitsoft.com\/blog\/?p=36008"},"modified":"2023-07-03T11:22:11","modified_gmt":"2023-07-03T08:22:11","slug":"devops","status":"publish","type":"post","link":"https:\/\/orbitsoft.com\/blog\/devops\/","title":{"rendered":"What tasks does DevOps solve?"},"content":{"rendered":"<div class=\"wp-block-lazyblock-case lazyblock-case-2qFLAW\"><div class=\"styled-block\">\n  <div class=\"styled-block__main\">\n          <h3 class=\"styled-block__title\">\n        In brief      <\/h3>\n        <ul class=\"case__list\">\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">01<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>Task<\/span>\n            <\/div>\n            <p>Automate chain of processes that code goes through from developer to user, and make sure it works correctly.<\/p>          <\/div>\n        <\/li>\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">02<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>Project<\/span>\n            <\/div>\n            <p>POSiFLORA Sales accounting system<\/p>          <\/div>\n        <\/li>\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">03<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>Expert<\/span>\n            <\/div>\n            <p>DevOps-engineer<\/p>          <\/div>\n        <\/li>\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">04<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>What tasks it solves for the project<\/span>\n            <\/div>\n            <ul>\n<li>Increases speed of downloading updates to the server<\/li>\n<li>Reduces errors<\/li>\n<li>Reduces downtime<\/li>\n<\/ul>          <\/div>\n        <\/li>\n            \n                    <li class=\"case__item\">\n              \n          <span class=\"case__order\">05<\/span>\n          <div class=\"case__body\">\n            <div class=\"case__title\">\n              <span>System results for business<\/span>\n            <\/div>\n            <ul>\n<li>Platform is used by 8,500 flower shops<\/li>\n<li>3.2 million API requests daily<\/li>\n<li>Uptime \u2013 99.95%<\/li>\n<li>Possible emergency down time &#8211; no more than one hour per year<\/li>\n<\/ul>          <\/div>\n        <\/li>\n          <\/ul>\n  <\/div>\n  <\/div><\/div>\n\n\n<p>Over the past decade, the development cycle has become more complicated, and a new profession has appeared: DevOps engineer. It combines the functions of a developer and a system administrator. He or she prepares the server infrastructure for deploying programs, helps developers upload code to the server, and makes sure that everything runs correctly.<\/p>\n\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-Z1ftN8B\"><figure class=\"article__figure  article__figure_no-shadow\">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/1111.jpg\" alt=\"\">\n    <\/div>\n                <figcaption>Previously, developers wrote the program code and put in on the server themselves. The sysadmin managed a server: changed drivers, and set up databases and network protocols<\/figcaption>\n    <\/figure><\/div>\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-1c26Pi\"><figure class=\"article__figure  article__figure_no-shadow\">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/2222.jpg\" alt=\"\">\n    <\/div>\n                <figcaption>This is what one modern approach to development looks like: developers write code, test id, and give it to QA. A DevOps uploads the code to an external server, and ensures its correct execution.<\/figcaption>\n    <\/figure><\/div>\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-Z27YfyW\"><h2 class=\"article__h\">How DevOps delivered 35 days of uptime for the POSiFLORA Platform <\/h2><\/div>\n\n\n<p>POSiFLORA is a sales accounting and control system designed specifically for the floristry business. It\u2019s a single online platform with which you can manage all business processes at the same time:<\/p>\n\n\n\n<ul>\n<li>Plan purchases, and keep records of flowers received and stock balances<\/li>\n\n\n\n<li>Make bouquets, place orders, and accept payment from buyers<\/li>\n\n\n\n<li>Analyze sales, stimulate customer loyalty, and allocate shifts to florists<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-YejLC\"><h2 class=\"article__h\">DevOps task #1: Prepare a programming environment &#8211; an isolated area for a project on the server <\/h2><\/div>\n\n\n<p>Previously, the server was simply an iron box for storing data. Now, cloud servers are increasingly used, such as Google Cloud or Amazon Web Services.  As an example, the POSiFLORA code is stored in Yandex.Cloud data centers.<\/p>\n\n\n\n<p>In order for the code on the server to be executed, the DevOps prepares the environment for it: installs databases, programming languages, and application programs.  For example, to run the POSiFLORA server-side powered by PHP, the DevOps must first install the language interpreter in the server.<\/p>\n\n\n\n<p>An important task of a DevOps is to make configuration files. These are like text files that describe the infrastructure. If code contains commands that the program executes, then the configuration files contain commands that the server executes. For example, in order for the system to see the disks with databases connected to the MySQL server, it must be described in the configuration file.<\/p>\n\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-ZYbE6t\"><figure class=\"article__figure  article__figure_no-shadow\">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/44444.png\" alt=\"\">\n    <\/div>\n                <figcaption>This configuration file describes which drives exist, and how they are connected to one of the MySQL servers.<\/figcaption>\n    <\/figure><\/div>\n\n<div class=\"wp-block-lazyblock-heading3 lazyblock-heading3-17uJj3\"><h3 class=\"article__h3\">How this helps businesses<\/h3><\/div>\n\n\n<p>As the infrastructure is always ready to upload new code, a CI\/CD approach is implemented \u2013 continuous integration and delivery. As soon as the developers complete the code for a new function, it\u2019s tested and uploaded to the external server. This reduces release time: new platform functions reach POSiFLORA users faster, and they increase sales earlier with the help of these new functions.<\/p>\n\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-Z1bVGdC\"><h2 class=\"article__h\">DevOps task #2: Automate downloading updates to an external server <\/h2><\/div>\n\n\n<p>The DevOps uses the Docker tool to organize the packaging of code into containers. As they have standard dimensions, ordinary real-world freight containers are stacked as a constructor on the deck of any dry cargo ship. Inside the virtual containers is a code that \u201ctravels\u201d to the server to be executed there. The DevOps also sets up a container management system. For POSiFLORA this is Swarm. Swarm monitors their condition, joint operation, and distributes the load.<\/p>\n\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-1aNW7R\"><figure class=\"article__figure  article__figure_no-shadow\">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/55555.jpg\" alt=\"\">\n    <\/div>\n                <figcaption>Sample Docker file: take a base node image here, add NGINX to it, copy some files, and declare variables (ENV)<\/figcaption>\n    <\/figure><\/div>\n\n\n<p>Containerization helps:<\/p>\n\n\n\n<ul>\n<li>Avoid code conflicts with other system components, so you no longer hear programmers spout the legendary phrase, \u201cIt works on my machine!\u201d<\/li>\n\n\n\n<li>Increase the speed of uploading code to the server, as the container is already prepared for work at startup<\/li>\n\n\n\n<li>Quickly return to the previous version if problems are found in a new version: upload the old containers and everything works again.<\/li>\n<\/ul>\n\n\n\n<p>Automation of routine processes reduces human error. For example, a person, having posted the code, may forget to add the corresponding changes to the database. The system will not forget.<\/p>\n\n\n\n<p>As a result, programmers can focus on their main task: development. And the DevOps helps you go the rest of the way: collecting verified codes in a container, sending it to the server, and adding it to an already running program.<\/p>\n\n\n<div class=\"wp-block-lazyblock-heading3 lazyblock-heading3-Z1xaDpn\"><h3 class=\"article__h3\">How it helps businesses<\/h3><\/div>\n\n\n<p>Users encounter fewer bugs and incompatibilities, and enjoy a more positive experience from working with the platform. And programmers are busy only with the code: they don\u2019t think about its future path or compatibility problems. This means they spend less working time on peripheral issues.<\/p>\n\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-1nfFus\"><h2 class=\"article__h\">DevOps task #3: make sure the \u201cconveyor\u201d is working <\/h2><\/div>\n\n\n<p><strong>What it does:<\/strong><\/p>\n\n\n\n<p>For POSiFLORA and other OrbitSoft projects, we chose the Zabbix monitoring system, because it can monitor both the server infrastructure and the program deployed in it. It also has convenient tools for setting up requests and notifications:<\/p>\n\n\n\n<p>1. Server monitoring <\/p>\n\n\n\n<p> Built-in Zabbix tools allow you to monitor the parameters of the server on which POSiFLORA is loaded: whether it\u2019s available, whether it is overloaded with processes, and whether there\u2019s enough free space and RAM.<\/p>\n\n\n\n<p>2. Monitoring the program.<\/p>\n\n\n\n<p>POSiFLORA is built on microservices. It\u2019s set of functions is assembled from separate, independent modules, each of which performs its own task, such as working with a basket, placing orders, paying, and so on. This is convenient because if one module fails, the others continue to work. To test the operation of each module, we created a request-response system and configured notifications for them.<\/p>\n\n\n\n<ul>\n<li>Query system.<\/li>\n<\/ul>\n\n\n\n<p>By sending a request to the module, we are asking \u201cHow are you?\u201d. Some of the responses related to this request come from the module: \u201cEverything is fine\u201d or \u201cI have a problem\u201d. For example, to test the system&#8217;s performance, you need to send a POST request with a client identifier to a previously created &#8220;test&#8221; client: https:\/\/catalog.posiflora.com\/api\/v1\/status. In response, you will receive the current HTTP status &#8211; 200 or 201, which means &#8220;the request was successfully processed&#8221;, and the client status itself is in json format. Here it\u2019s important for us that the response, in principle, is returned: this means that the system is working. If the request reveals a problem, a script written by DevOps converts it into an event in the monitoring system<\/p>\n\n\n\n<ul>\n<li>Notification system.<\/li>\n<\/ul>\n\n\n\n<p>In order not to miss important events and to respond to them as soon as possible, the DevOps engineer sets up sending events from monitoring to e-mail through OrbitSoft&#8217;s own mail server. In order for notifications to come to Telegram, the DevOps wrote a script and created a bot. But the latest version of Zabbix already has such a function, so the script was disabled.<\/p>\n\n\n<div class=\"wp-block-lazyblock-figure lazyblock-figure-Z2369V8\"><figure class=\"article__figure  article__figure_no-shadow\">\n        <div class=\"article__figure-img\" >\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/33333.jpg\" alt=\"\">\n    <\/div>\n                <figcaption>Notification of the monitoring system in Telegram about high load on the processor<\/figcaption>\n    <\/figure><\/div>\n\n\n<p><strong>How it helps businesses<\/strong><\/p>\n\n\n\n<p>Monitoring identifies faults and bottlenecks before everything breaks down. This helps to avoid \u201cconveyor\u201d accidents, and downtime during repairs. Thus, uptime for POSiFLORA is 99.95%, and possible emergency stop time is no more than one hour per year.<\/p>\n\n\n<div class=\"wp-block-lazyblock-heading lazyblock-heading-ZmJyBO\"><h2 class=\"article__h\">Advice from OrbitSoft: which projects need DevOps, and which ones can do without it. <\/h2><\/div>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Criterion<\/strong><\/td><td><strong>DevOps needed<\/strong><\/td><td><strong>Can be handled without DevOps<\/strong><\/td><\/tr><tr><td><strong>Team size<\/strong><\/td><td>DevOps are needed not only on large projects, but also on small ones, for 3 to 4 developers<\/td><td>Only very small teams of a couple of developers can do without the dedicated role of DevOps. Moreover, some of them will have to take over DevOps functions. In any case, you need to have a programming language interpreter, a database on the server, and set up a security policy.<\/td><\/tr><tr><td><\/td><td>DevOps is needed where there is data exchange with servers: for the development of a website, web services, browser applications, and mobile applications like messengers and social networks.<\/td><td>DevOps isn\u2019t needed when developing mobile applications that don\u2019t connect to the Internet. For example, for a photo editor, calculator, or simple game. In this case, the programmer writes the code, the application is tested by QA engineers, and then it is placed in the App Store, Google Play, or Windows Market, where the infrastructure is monitored by Apple, Google, and Microsoft.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<div class=\"wp-block-lazyblock-important-block lazyblock-important-block-Z141YQk\"><div class=\"important-box\">\n  <div class=\"important-box__main\">\n          <p class=\"important-box__h\">Technical block<\/p>\n      \t<ul>\n<li>Docker containerization and orchestration, Docker Compose, Docker Swarm<\/li>\n<li>Linux based servers<\/li>\n<li>Monitoring on Zabbix, and tracking the speed of request processing by servers of the Grafana cluster<\/li>\n<li>Logging Elasticsearch plus Greylog<\/li>\n<\/ul>  <\/div>\n  <\/div><\/div>\n\n<div class=\"wp-block-lazyblock-banner lazyblock-banner-Z1SRDf2\"><div \n  class=\"banner\n   \n  \" \n  >\n    <div class=\"banner__body\">\n        <h2 class=\"banner__h\"> We release projects for online and offline business<\/h2>\n        <div class=\"banner__content\">\n            <p><strong>We work with businesses of any scale.<\/strong> Our clients include international companies, large and medium-sized businesses, and startups.<\/p>\n<p><strong>Telecom<\/strong>: cellular operators, Internet service providers.<\/p>\n<p><strong>Finance<\/strong>: electronic payment systems, insurance companies and brokers.<\/p>\n<p><strong>Retail<\/strong>: stores, trade networks.<\/p>\n<p><strong>Internet advertising<\/strong>: advertising agencies, advertising networks.<\/p>\n<p><strong>Medicine<\/strong>: clinics, medical services.<\/p>        <\/div>\n                            <div \n              class=\"banner__button button js-form-modal\n               button_style_light-on-promo2\">\n              Discuss or order development                          <\/div>\n            <\/div>\n    <div class=\"banner__photo\">\n        <img decoding=\"async\" src=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/friendship.png\" alt=\"\" class=\"banner__img\">\n    <\/div>\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Over the past decade, the development cycle has become more complicated, and a new profession has appeared: DevOps engineer. It combines the functions of a developer and a system administrator. He or she prepares the server infrastructure for deploying programs, helps developers upload code to the server, and makes sure that everything runs correctly. POSiFLORA [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":36020,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[196],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What tasks does DevOps solve? - OrbitSoft Blog<\/title>\n<meta name=\"description\" content=\"In the article we explain what does a DevOps-engineer do to provide 99.95% uptime of the POSiFLORA business automation system\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/orbitsoft.com\/blog\/devops\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"What tasks does DevOps solve? - OrbitSoft Blog\" \/>\n<meta name=\"twitter:description\" content=\"In the article we explain what does a DevOps-engineer do to provide 99.95% uptime of the POSiFLORA business automation system\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/devops-1029x1002-1.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@orbitsoft\" \/>\n<meta name=\"twitter:site\" content=\"@orbitsoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What tasks does DevOps solve? - OrbitSoft Blog","description":"In the article we explain what does a DevOps-engineer do to provide 99.95% uptime of the POSiFLORA business automation system","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/orbitsoft.com\/blog\/devops\/","twitter_card":"summary_large_image","twitter_title":"What tasks does DevOps solve? - OrbitSoft Blog","twitter_description":"In the article we explain what does a DevOps-engineer do to provide 99.95% uptime of the POSiFLORA business automation system","twitter_image":"https:\/\/orbitsoft.com\/blog\/wp-content\/uploads\/devops-1029x1002-1.jpg","twitter_creator":"@orbitsoft","twitter_site":"@orbitsoft","twitter_misc":{"Written by":"admin","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/orbitsoft.com\/blog\/devops\/","url":"https:\/\/orbitsoft.com\/blog\/devops\/","name":"What tasks does DevOps solve? - OrbitSoft Blog","isPartOf":{"@id":"https:\/\/orbitsoft.com\/blog\/#website"},"datePublished":"2022-01-21T11:36:01+00:00","dateModified":"2023-07-03T08:22:11+00:00","author":{"@id":"https:\/\/orbitsoft.com\/blog\/#\/schema\/person\/e515b3fa91e283750477594c4f028b7b"},"description":"In the article we explain what does a DevOps-engineer do to provide 99.95% uptime of the POSiFLORA business automation system","breadcrumb":{"@id":"https:\/\/orbitsoft.com\/blog\/devops\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/orbitsoft.com\/blog\/devops\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/orbitsoft.com\/blog\/devops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/orbitsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What tasks does DevOps solve?"}]},{"@type":"WebSite","@id":"https:\/\/orbitsoft.com\/blog\/#website","url":"https:\/\/orbitsoft.com\/blog\/","name":"OrbitSoft Blog","description":"Discover the latest in news and resources for OrbitSoft","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/orbitsoft.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/orbitsoft.com\/blog\/#\/schema\/person\/e515b3fa91e283750477594c4f028b7b","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/orbitsoft.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b1b269c579caf059f82b6d114c63fc49?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b1b269c579caf059f82b6d114c63fc49?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/orbitsoft.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts\/36008"}],"collection":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=36008"}],"version-history":[{"count":11,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts\/36008\/revisions"}],"predecessor-version":[{"id":36593,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/posts\/36008\/revisions\/36593"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/media\/36020"}],"wp:attachment":[{"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=36008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/categories?post=36008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/orbitsoft.com\/blog\/wp-json\/wp\/v2\/tags?post=36008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}