{"id":68402,"date":"2022-10-10T11:49:45","date_gmt":"2022-10-10T11:49:45","guid":{"rendered":"https:\/\/www.globallogic.com\/hr\/?post_type=our-work&#038;p=68402"},"modified":"2025-08-28T08:09:16","modified_gmt":"2025-08-28T08:09:16","slug":"implementacija-internih-azure-servisa-kao-podrska-u-implementaciji-strateskih-funkcionalnosti-klijentskog-vms-rjesenja","status":"publish","type":"insightsection","link":"https:\/\/www.globallogic.com\/hr\/insights\/case-studies\/implementacija-internih-azure-servisa-kao-podrska-u-implementaciji-strateskih-funkcionalnosti-klijentskog-vms-rjesenja\/","title":{"rendered":"Implementacija internih Azure servisa kao podr\u0161ka u implementaciji strate\u0161kih funkcionalnosti klijentskog VMS rje\u0161enja"},"content":{"rendered":"<!-- Paragraph section -->\r\n<section class=\"caseContent\">\r\n    <div class=\"container\">\r\n    <p>&nbsp;<\/p>\n<p><strong>O PROJEKTU<\/strong><br \/>\nKlijent je jedan od vode\u0107ih pru\u017eatelja SaaS rje\u0161enja u podru\u010dju upravljanja privremenom radnom snagom. Njihovo rje\u0161enje pripada u kategoriju Vendor Management sustava (eng. Vendor Management System), koje kompanijama omogu\u0107uje visok stupanj automatizacije, fleksibilnost i jednostavnost u pronala\u017eenju i zaposlenju prikladne privremene radne snage. Kori\u0161tenjem njihovog rje\u0161enja, kompanijama koje imaju potrebu za privremenom radnom snagom (konzultantima) se eliminira potreba za klasi\u010dnim procesima zapo\u0161ljavanja \u010dime se kompanijama uvelike smanjuju tro\u0161kovi i vremenski ciklusi potrebni do zaposlenja kvalitetnog privremenog kadra.<\/p>\n<p>Kako bi odgovorio na rje\u0161enja konkurenata, na tehnolo\u0161ke izazove u domeni privremene radne snage i konstantno rastu\u0107e zahtjeve od strane svojih klijenata, Klijent je odlu\u010dio implementirati odre\u0111ene interne servise temeljene na Azure cloud mikroservisnoj tehnologiji u svrhu podr\u0161ke daljnjem dizajnu i razvoju budu\u0107ih strate\u0161kih funkcionalnosti svojeg SaaS rje\u0161enja, a kako bi u kona\u010dnici realizirali dugoro\u010dni strate\u0161ki cilj &#8211; transformaciju SaaS rje\u0161enja iz postoje\u0107e monolitne arhitekture u cloud mikroservisnu arhitekturu.<\/p>\n<p><strong>PROBLEM<\/strong><\/p>\n<ul>\n<li>Trenutni tro\u0161kovi razvoja novih funkcionalnosti i odr\u017eavanja postoje\u0107ih funkcionalnosti SaaS rje\u0161enja na postoje\u0107oj arhitekturi su visoki<\/li>\n<li>\u201cDeploy\u201d novih funkcionalnosti na postoje\u0107oj arhitekturi je vremenski zahtjevno i kompleksno<\/li>\n<li>Produkcijski bugovi registrirani od strane korisnika sustava su rezultat inicijalne implementacije funkcionalnosti u pro\u0161losti, \u010dime se produkcijski bugovi rje\u0161avaju privremenim kratkoro\u010dnim rje\u0161enjima<\/li>\n<li>Nove funkcionalnosti je te\u017ee pru\u017eiti klijentima jer promjene za jednog klijenta \u010desto utje\u010du na vi\u0161e klijenata zbog takve monolitne arhitekture<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.globallogic.com\/hr\/wp-content\/uploads\/sites\/10\/2022\/10\/gl16.jpg\" alt=\" gl16\" width=\"100%\" \/><\/p>\n<h4>RJE\u0160ENJE I TEHNOLOGIJA<\/h4>\n<p><strong>Strate\u0161ko rje\u0161enje:<\/strong><\/p>\n<ul>\n<li>Kako bi klijent mogao pru\u017eiti nove funkcionalnosti unutar svojeg SaaS rje\u0161enja svojim klijentima koje bi bile temeljene na modernoj mikroservisnoj tehnologiji, potrebno je transformirati postoje\u0107u monolitnu arhitekturu za koje je potrebno i vrijeme i zna\u010dajno financijsko ulaganje<\/li>\n<li>kako bi se ostvario dugoro\u010dni strate\u0161ki cilj prelaska sa monolitnog rje\u0161enja na moderno cloud rje\u0161enje, klijent je odredio klju\u010dne strate\u0161ke smjernice odnosno preduvjete prema kojima se postoje\u0107a arhitektura \u017eeli dekomponirati na vi\u0161e funkcionalnih domena unutar SaaS rje\u0161enja na mikroservise gdje bi svaka od njih bila odgovorna i zaslu\u017ena dijeliti i sinkronizirati podatke koje su potrebne drugoj\/drugima domenama prema servisu rola i prava unutar tih domena<\/li>\n<li>Podi\u0107i servise u Azure cloudu koji \u0107e omogu\u0107iti skalabilnost i pravovremenu sinkronizaciju podataka izme\u0111u razli\u010ditih domena kojima je potrebna odre\u0111ena struktura podataka za nesmetano funkcioniranje sustava<\/li>\n<li>Omogu\u0107iti monitoring nad internim servisima u Azure cloudu koji \u0107e brzo I kvalitetno informirati o odre\u0111enim zastojima servisa kako bi interni korisnici bili pravovremeno obavje\u0161teni i odradili korekciju kod zastoja\/alerta<\/li>\n<li>Redundantnost zna\u010dajke internih servisa<\/li>\n<li>Omogu\u0107avanje autentikacijskog 3rd party cloud rje\u0161enja kojim se posti\u017ee visok stupanj sigurnosti i razli\u010dite metode za autentikaciju korisnika sustava izme\u0111u domena<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h4>Takti\u010dko rje\u0161enje \u2013 servisi<\/h4>\n<p><strong>Tribe cloud infrastruktura<\/strong><br \/>\nJedan od zadataka tima je bio podi\u0107i cjelokupnu hosting infrastrukturu u Azure cloud-u. Infrastruktura je organizirana po principu dijeljenja izme\u0111u vise timova koji sura\u0111uju na razini plemena (tribe). Pa tako resursi kao sto su Cosmos DB Account, App Service Plans, VNet, Front Door, Application Insights i sli\u010dni su setupirani i konfigurirani za vi\u0161e timova. Dok timovi svoje specifi\u010dne resurse kao sto su Web App, Function, Storage account i sli\u010dno dodaju sami. Cilj ovakve organizacije je olak\u0161ati timovima podizanje infrastrukture i smanjiti ukupne tro\u0161kove.<\/p>\n<p>Pri kreiranju infrastrukture koristi se princip Infrastructure as a code (eng. IaaC) koji nalaze da se sama definicije infrastrukture kreira i kontrolira kroz kod. Tim je koristio jezik Bicep koji je nativno rje\u0161enje za definiranje infrastrukture u Microsoft Azure cloud-u. Ovaj pristup je dodatno timu omogu\u0107io da implementira i automatsko deployanje infrastrukture pute Azure DevOps Pipeline-a.<\/p>\n<p>Dodatni bitan aspekt cijele infrastrukture je bila sigurnost. Resursi su stavljeni u Azure VNet te su na taj na\u010din izolirani u privatnu mre\u017eu. Tako\u0111er se za pristup odre\u0111enim resursima koristi Azure Private Endpoints mehanizam koji omogu\u0107uje dodatnu izolaciju pristupa. Svi secreti se postavljaju automatski kroz deployment te se na taj na\u010din izbjegava mogu\u0107nost ljudske gre\u0161ke. Jedna od preostalih stvari u ovom podru\u010dju je pre\u0107i na secretless na\u010din rada.<\/p>\n<p><strong>Account i Identity servisi<\/strong><br \/>\nDvije komponente koje su dio strate\u0161kih pobolj\u0161anja sustava klijenta su Account i Identity servisi. Cilj im je omogu\u0107iti bolji uvid i kontrolu u organizacije i korisnike klijentskih aplikacija. Tim je u sklopu toga implementirao prvu verziju Azure infrastrukture i same implementacije servisa.<\/p>\n<p>Prva funkcionalnost koju nudi Account servis je pra\u0107enje postoje\u0107ih instanci proizvoda koje klijenti koriste te davanje informacija o njima. Za skupljanje podataka o postoje\u0107im instancama koristi se serverless princip. Svaka instanca \u0161alje evente (doga\u0111aje) na Azure Event Grid na koje zatim Azure Function aplikacija kao dio Account servisa reagira i pohranjuje potrebne podatke u Cosmos DB bazu. Dodatno postoji REST API aplikacija hostana u Azure App Services Web Appu koja omogu\u0107uje pristup tim podatcima ostalim servisima. Daljnji razvoj ovog servisa ide u smjeru kontrole instanci aplikacija i njihovo automatsko povezivanje sa sigurnosnim servisima.<\/p>\n<p>Identity servis koristi iste tehni\u010dke principe i tehnologije samo u domeni samih korisnika. Prva verzija servisa prati korisnike koji se logiraju u sustav i gradi bazi pristupa korisnika prema instancama aplikacija. Daljnji razvoj je implementacija standardne IAM (eng. Identity and Access Management) funkcionalnosti ali prilago\u0111ene specifi\u010dnoj klijentskoj poslovnoj domeni.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.globallogic.com\/hr\/wp-content\/uploads\/sites\/10\/2022\/10\/gl30.jpg\" alt=\" gl30\" width=\"100%\" \/><\/p>\n<h4>Tehnologija u projektu:<\/h4>\n<ul>\n<li>Microsoft Azure cloud infrastruktura, Bicep<\/li>\n<li>Azure resursi:\n<ul>\n<li>App services<\/li>\n<li>Functions<\/li>\n<li>Cosmos DB<\/li>\n<li>Front Door<\/li>\n<li>VNet<\/li>\n<li>Application Insights<\/li>\n<li>Key Vault<\/li>\n<\/ul>\n<\/li>\n<li>Auth0 autentikacijsko cloud rje\u0161enje<\/li>\n<li>Performance testovi koriste\u0107i JMeter i BlazeMeter<\/li>\n<li>C# unit i service testovi koriste\u0107i xUnit i Moq<\/li>\n<li>SonarCloud za code coverage i stati\u010dku analizu koda<\/li>\n<li>Azure DevOps Pipelines for CI\/CD<\/li>\n<li>Pipeline as a code principle<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong>TIM<\/strong><br \/>\nU projektu sudjeluje razvojni tim iz Globallogic Hrvatska. Sastav tima \u010dine Softver in\u017eenjeri, QA in\u017eenjeri, Technical lead, Scrum master i Product owner. Isporuka funkcionalnosti temelji se na Scrum metodologiji, a u skladu sa Scrum ceremonijama. Tim koristi udaljen pristup klijentskoj infrastrukturi i softverskim alatima koji su potrebni za komunikaciju i razvoj.Udaljena suradnja i interakcija izme\u0111u hrvatskog tima i timova na klijentskoj strani koji rade na istim feature-ima je organizirana kroz samorganiziraju\u0107e timove unutar plemena (eng. Tribe). U periodu od godine i pol dana ostvarena je odli\u010dna suradnja sa klijentskim timovima i zna\u010dajan napredak u realizaciji internih cloud servisa, \u010dime je hrvatski tim zaslu\u017eio priznanje jednog od \u201chigh performing\u201d razvojnih timova u klijentskoj organizaciji.<\/p>\n<p>Opisani projekt ti zvu\u010di izazovno? \u017deli\u0161 se pridru\u017eiti na\u0161em timu?<br \/>\n<strong>Provjeri trenuta\u010dno otvorena radna mjesta na stranici\u00a0<a href=\"https:\/\/www.globallogic.com\/hr\/careers\/\" target=\"_blank\" rel=\"noopener\">Karijere<\/a><\/strong><\/p>\n    <\/div>\r\n <\/section>\r\n ","protected":false},"excerpt":{"rendered":"","protected":false},"author":68,"featured_media":68404,"parent":0,"menu_order":4,"template":"","insight":[751],"insight-subcats":[61,55],"insight-industry":[750],"insight-services":[],"insight-partners":[],"class_list":["post-68402","insightsection","type-insightsection","status-publish","has-post-thumbnail","hentry","insight-case-studies","insight-subcats-architecture","insight-subcats-cloud","insight-industry-technology"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insightsection\/68402","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insightsection"}],"about":[{"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/types\/insightsection"}],"author":[{"embeddable":true,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/users\/68"}],"version-history":[{"count":2,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insightsection\/68402\/revisions"}],"predecessor-version":[{"id":103171,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insightsection\/68402\/revisions\/103171"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/media\/68404"}],"wp:attachment":[{"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/media?parent=68402"}],"wp:term":[{"taxonomy":"insight","embeddable":true,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insight?post=68402"},{"taxonomy":"insight-subcats","embeddable":true,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insight-subcats?post=68402"},{"taxonomy":"insight-industry","embeddable":true,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insight-industry?post=68402"},{"taxonomy":"insight-services","embeddable":true,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insight-services?post=68402"},{"taxonomy":"insight-partners","embeddable":true,"href":"https:\/\/www.globallogic.com\/hr\/wp-json\/wp\/v2\/insight-partners?post=68402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}