{"id":3639,"date":"2017-02-07T09:51:25","date_gmt":"2017-02-07T08:51:25","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=3639"},"modified":"2023-08-28T14:18:25","modified_gmt":"2023-08-28T12:18:25","slug":"fabric8-czyli-mikro-uslugi-bardziej-przyjazne","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/fabric8-czyli-mikro-uslugi-bardziej-przyjazne\/","title":{"rendered":"Fabric8, czyli mikro-us\u0142ugi bardziej przyjazne"},"content":{"rendered":"\n<p>Wszyscy zapewne zdajemy sobie spraw\u0119 z popularno\u015bci jak\u0105 zdobywa w ostatnim czasie architektura system\u00f3w oparta o mikrous\u0142ugi. Podej\u015bcie to obiecuje nam przejrzysto\u015b\u0107 architektury, \u0142atwe w utrzymaniu, sp\u00f3jne funkcjonalnie fragmenty systemu, skalowalno\u015b\u0107 itd. Ma jednak te\u017c swoje bol\u0105czki&#8230;<\/p>\n\n\n\n<p>Wdro\u017cenie systemu opartego o mikrous\u0142ugi jest znacz\u0105co bardziej skomplikowane \u2013 przecie\u017c w miejsce monolitycznej aplikacji spakowanej np. do postaci jednego pliku WAR dostajemy kilka\/kilkana\u015bcie artefakt\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"color: #999999;\"><em>Troch\u0119 teorii&#8230;<\/em><\/span><\/h2>\n\n\n\n<p>Jak zapanowa\u0107 nad tym chaosem i zorganizowa\u0107 prac\u0119? Jak przygotowa\u0107 \u015brodowiska, kt\u00f3re pozwol\u0105 na uzyskanie obiecywanej skalowalno\u015bci i zapewni\u0105, \u017ce na produkcji system zachowa si\u0119 tak jak na testach? A co z b\u0142\u0119dami \u201edziwne, u mnie dzia\u0142a..\u201d?<\/p>\n\n\n\n<p>Rozwi\u0105zaniem powszechnie \u0142\u0105czonym z mikrous\u0142ugami jest konteneryzacja aplikacji, czyli prosto ujmuj\u0105c zamkni\u0119cie takiej us\u0142ugi wraz z ca\u0142ym \u015brodowiskiem jej uruchomienia w niezmiennym obrazie i uruchamianie kolejnych instancji na podstawie tego obrazu (np. przy pomocy Docker\u2019a opisanego r\u00f3wnie\u017c na naszym blogu <a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/\">https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/<\/a>). Pozwala to wyeliminowa\u0107 b\u0142\u0119dy wynikaj\u0105ce z&nbsp;konfiguracji \u015brodowiska.<\/p>\n\n\n\n<p>Na tym etapie zastanawiacie si\u0119 pewnie, gdzie w tym wszystkim powi\u0105zanie z tematem wpisu, czyli tajemniczym (je\u015bli jeszcze nie sprawdzili\u015bcie co to) <a href=\"https:\/\/fabric8.io\/\" rel=\"nofollow\" >fabric8<\/a>\u2026<\/p>\n\n\n\n<p>Ot\u00f3\u017c <a href=\"https:\/\/fabric8.io\/\" rel=\"nofollow\" >fabric8<\/a> (wymawiane <em>fabricate<\/em><a href=\"https:\/\/fabric8.io\/\" rel=\"nofollow\" ><em>)<\/em><\/a> to nic innego, jak platforma do developmentu system\u00f3w w architekturze mikrous\u0142ug. A w zasadzie nie tylko developmentu, ale do obs\u0142ugi ca\u0142ego procesu od momentu znalezienia si\u0119 kodu w repozytorium, czyli zbudowania obrazu z aplikacj\u0105, uruchomienia test\u00f3w, wdro\u017cenia na \u015brodowisko testowe i dalej produkcyjne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"color: #999999;\"><em>Troch\u0119 historii\u2026<\/em><\/span><\/h2>\n\n\n\n<p>Jego pocz\u0105tki le\u017c\u0105 w Apache ServiceMix, kt\u00f3re zosta\u0142o zaadaptowane przez FuseSource jako projekt Fuse, a potem w 2012 roku Fuse trafi\u0142 pod skrzyd\u0142a RedHata i przybra\u0142 nazw\u0119 Jboss Fuse. Projekt otrzyma\u0142 wszystko, czego mo\u017cna wymaga\u0107 od rozwi\u0105za\u0144 w standardzie enterprise \u2013 oficjalny support du\u017cego dostawcy, stabilizacj\u0119 kodu itd.<\/p>\n\n\n\n<p>Na bazie Jboss Fuse powsta\u0142 w\u0142a\u015bnie Fabric8, kt\u00f3ry do tej ca\u0142ej pot\u0119gi dok\u0142ada jeszcze atuty takie jak wygodny webowy interfejs czy wsparcie dla kontener\u00f3w Docker\u2019a. Do tego umo\u017cliwia prost\u0105 i szybk\u0105 instalacj\u0119 lokaln\u0105 (wystarczy pobra\u0107 binaria, uruchomi\u0107 i po chwili cieszy\u0107 si\u0119 platform\u0105).<\/p>\n\n\n\n<p>No i jest darmowe \ud83d\ude42<\/p>\n\n\n\n<p>Wi\u0119cej o historii Fabric8 mo\u017cecie przeczyta\u0107 na blogu jednego z lider\u00f3w projektu Michael\u2019a Rice\u2019a (<a href=\"http:\/\/michaelrice.com\/2014\/09\/history-of-fabric8-fuse-servicemix-and-camel\/\" rel=\"nofollow\" >http:\/\/michaelrice.com\/2014\/09\/history-of-fabric8-fuse-servicemix-and-camel\/<\/a>).<\/p>\n\n\n\n<p>Projekt jest aktywnie rozwijany przez spo\u0142eczno\u015b\u0107 pod okiem i przy wsparciu RedHat\u2019a. Jak wida\u0107 na githubie \u2013 ca\u0142y czas co\u015b si\u0119 w nim dzieje.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/Bez-tytulu.jpg\"><img decoding=\"async\" width=\"643\" height=\"128\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/Bez-tytulu.jpg\" alt=\"screen z GitHub\" class=\"wp-image-23835\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/Bez-tytulu.jpg 643w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/08\/Bez-tytulu-300x60.jpg 300w\" sizes=\"(max-width: 643px) 100vw, 643px\" \/><\/a><figcaption class=\"wp-element-caption\">\u0179r\u00f3d\u0142o: https:\/\/github.com\/fabric8io\/fabric8<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"color: #999999;\"><em>Co jeszcze oferuje Fabric8?<\/em><\/span><\/h2>\n\n\n\n<p>Fabric8 to nie tylko platforma do delpoymentu i budowania. W pakiecie otrzymujemy zainstalowany, skonfigurowany (a co najlepsze konfiguracja obejmuje r\u00f3wnie\u017c zale\u017cno\u015bci mi\u0119dzy narz\u0119dziami np. hooki na repozytorium kodu startuj\u0105ce buildy) i gotowy do u\u017cytku zestaw narz\u0119dzi na kt\u00f3ry sk\u0142adaj\u0105 si\u0119 m.in. :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/gogs.io\/\" rel=\"nofollow\" >GOGS<\/a> \u2013 lekkiego i wygodnego systemu zarz\u0105dzaj\u0105cego repozytoriami Git<\/li>\n\n\n\n<li><a href=\"https:\/\/jenkins.io\/\" rel=\"nofollow\" >JENKINS<\/a> \u2013 znane i popularne narz\u0119dzie CI, kt\u00f3re zbuduje nasze projekty<\/li>\n\n\n\n<li><a href=\"https:\/\/www.sonatype.com\/nexus-repository-sonatype\" rel=\"nofollow\" >NEXUS<\/a> \u2013 repozytorium artefakt\u00f3w, kt\u00f3re przechowa wyniki build\u00f3w<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/registry\/\" rel=\"nofollow\" >DOCKER REGISTRY<\/a> \u2013 repozytorium obraz\u00f3w Dockera<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/fabric8io\/fabric8-forge\" rel=\"nofollow\" >FABRIC8-FORGE<\/a> \u2013 rozszerzenie Fabric8 dla <a href=\"https:\/\/forge.jboss.org\/\" rel=\"nofollow\" >JBboss Forge<\/a>, czyli zestawu kreator\u00f3w i dodatk\u00f3w umo\u017cliwiaj\u0105cych szybkie tworzenie szkielet\u00f3w projekt\u00f3w w wielu technologiach<\/li>\n<\/ul>\n\n\n\n<p>oraz wiele innych, kt\u00f3rych przedstawia\u0107 nie trzeba jak Kibana, Grafana, Elasticsearch czy Gerrit , ale te\u017c Chaos Monkey, kt\u00f3ra pozwala na testowanie odporno\u015bci systemu na losowe pady poszczeg\u00f3lnych komponent\u00f3w. A wszystko to skalowalne dzi\u0119ki klastrowi <a href=\"http:\/\/kubernetes.io\/\" rel=\"nofollow\" >Kubernetes\u2019a<\/a>,&nbsp;na kt\u00f3rym ca\u0142o\u015b\u0107 jest uruchomiona (w wersji developerskiej klaster tworzony jest lokalnie).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"color: #999999;\"><em>Czy to wszystko jest bardzo skomplikowane?<\/em><\/span><\/h2>\n\n\n\n<p>Kubernetes, Docker, Jenkins, Nexus, klaster\u2026 du\u017co tego\u2026 zapewne ci\u0119\u017cko zacz\u0105\u0107 pracowa\u0107 z tym narz\u0119dziem\u2026 Ot\u00f3\u017c nie! No dobrze, mo\u017ce od pewnego momentu robi si\u0119 trudniej, ale sam start jest prosty. W dalszej cz\u0119\u015bci wpisu przybli\u017c\u0119 Wam jak \u0142atwo i szybko uruchomi\u0107 fabric8.<\/p>\n\n\n\n<p>Lokalna instalacja platformy z w\u0142asnym klastrem Kubernetes\u2019a zajmuje 30 minut (instalacj\u0105 na gotowym klastrze zajmiemy si\u0119 przy innej okazji).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><em><span style=\"color: #999999;\">Refleksji s\u0142\u00f3w kilka&#8230;<\/span><\/em><\/h2>\n\n\n\n<p>\u017beby nie by\u0107 bezkrytycznym \u2013 fabric8 ma niestety troch\u0119 obci\u0105\u017ce\u0144 genetycznych wynikaj\u0105cych z bycia projektem open-source. Wprawdzie jest firmowany i mocno wspierany przez czo\u0142owych architekt\u00f3w JBoss\u2019a, ale mimo wszystko pracuje nad nim spo\u0142eczno\u015b\u0107. Wspomnia\u0142em wcze\u015bniej, \u017ce w projekcie ruch panuje znaczny, jednak ma to te\u017c swoje konsekwencje i trzeba o nich pami\u0119ta\u0107.<\/p>\n\n\n\n<p>Jak by to uj\u0105\u0107 obrazowo\u2026<\/p>\n\n\n\n<p>Czasem mo\u017cna odnie\u015b\u0107 wra\u017cenie, \u017ce f8 jest jak osiedlowa piaskownica, w kt\u00f3rej bawi\u0105 si\u0119 panowie od Fuse\u2019a i co lepsze przetestowane zabawki zabieraj\u0105 do swojego ogrodzonego fortu\u2026<\/p>\n\n\n\n<p>Wchodzenie na produkcj\u0119 z tak\u0105 platform\u0105 powinno by\u0107 dobrze przemy\u015blane. Nie da si\u0119 jednak ukry\u0107, \u017ce projekt stanowi \u015bwietne \u017ar\u00f3d\u0142o natchnienia w budowaniu stosu technologicznego (dziesi\u0105tki gotowych narz\u0119dzi) i opracowywania wszelkiej ma\u015bci PoC\u2019\u00f3w.<\/p>\n\n\n\n<p>Jak ju\u017c sprawdzicie, czego potrzebujecie \u2013 wasz przyjazny DevOps z pewno\u015bci\u0105 wesprze was w przygotowaniu w\u0142asnego \u015brodowiska \ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"color: #999999;\"><em>By\u0142a teoria, by\u0142a historia, zr\u00f3bmy co\u015b konkretnego&#8230;<\/em><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/fabric8.io\/guide\/getStarted\/index.html\" rel=\"nofollow\" >Kompletny przewodnik po instalacji lokalnej<\/a> (na r\u00f3\u017cnych systemach) i na gotowym klastrze mo\u017cecie znale\u017a\u0107 na stronie projektu fabric8.&nbsp;Poni\u017cej przejdziemy przez instalacj\u0119 na systemie operacyjnym Linuxie (w moim przypadku by\u0142a to dystrybucja Ubuntu 16.4LTS).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"color: #999999;\"><em>Instalacja sterownika wirtualizacji KVM<\/em><\/span><\/h2>\n\n\n\n<p>Instalacj\u0119 rozpoczynamy od instalacji <a href=\"https:\/\/github.com\/kubernetes\/minikube\/blob\/master\/DRIVERS.md#kvm-driver\" rel=\"nofollow\" >sterownika wirtualizacji KVM<\/a>. Mo\u017cna skorzysta\u0107 r\u00f3wnie\u017c z wirtualizacji w oparciu o sterownik <a href=\"https:\/\/github.com\/kubernetes\/minikube\/blob\/master\/DRIVERS.md#xhyve-driver\" rel=\"nofollow\" >xhyve<\/a>, ale Minikube (lokalna wersja Kubernetesa) jest aktualnie testowany w oparciu o&nbsp; sterownik KVM, wi\u0119c powinno by\u0107 stabilniej.<\/p>\n\n\n\n<p>Zgodnie z <a href=\"https:\/\/github.com\/dhiltgen\/docker-machine-kvm#quick-start-instructions\" rel=\"nofollow\" >instrukcj\u0105 do sterownika<\/a> instalacja sk\u0142ada si\u0119 z kilku polece\u0144:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\n$ sudo curl -L https:\/\/github.com\/dhiltgen\/docker-machine-kvm\/releases\/download\/v0.7.0\/docker-machine-driver-kvm -o \/usr\/local\/bin\/docker-machine-driver-kvm\n\n$ sudo chmod +x \/usr\/local\/bin\/docker-machine-driver-kvm\n\n# Install libvirt and qemu-kvm on your Debian\/Ubuntu\n$ sudo apt install libvirt-bin qemu-kvm\n\n# Add yourself to the libvirtd group (use libvirt group for rpm based distros) so you don&#039;t need to sudo\n$ sudo usermod -a -G libvirtd $(whoami)\n\n# Update your current session for the group change to take effect\n$ newgrp libvirtd\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\"><em><span style=\"color: #999999;\">Pobieramy i instalujemy fabric8<\/span><\/em><\/h2>\n\n\n\n<p>Je\u015bli pracujemy na systemie z rodziny Linux lub OS X ca\u0142a instalacja sprowadza si\u0119 w zasadzie do pobrania i uruchomienia jednego skryptu <span style=\"color: #ff0000;\">(UWAGA!, <u>skryptu tego NIE wykonujemy jako root<\/u><\/span> \u2013 inaczej robi si\u0119 ba\u0142agan w \u015bcie\u017ckach i uprawnieniach do katalog\u00f3w i plik\u00f3w):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\n$ curl -sS https:\/\/get.fabric8.io\/download.txt | bash\nDownloading \/home\/czarek\/.fabric8\/bin\/gofabric8 release 0.4.112\n\u2026\nHTTP request sent, awaiting response... 200 OK\nLength: 51899810 (49M) &#x5B;application\/octet-stream]\n\u2026 \nInstalling binaries to ~\/.fabric8\/bin\nAdd &#039;~\/.fabric8\/bin&#039; to your path so you can execute the new binaries\nFor example:\nEdit your ~\/.zshrc or ~\/.bashrc and append to the end of the file\nexport PATH=$PATH:~\/.fabric8\/bin\nsource ~\/.zshrc or ~\/.zshrc\n\nTo work with the fabric8 microservices platform either:\n - &#039;gofabric8 start&#039; for a local cloud development platform\n - &#039;gofabric8 deploy&#039; to deploy on an existing Kubernetes or OpenShift cluster\n<\/pre><\/div>\n\n\n<p>Tak, to takie proste \ud83d\ude42<\/p>\n\n\n\n<p>Je\u015bli dodali\u015bcie ju\u017c do \u015bcie\u017cki katalog z binariami, mo\u017cecie \u015bmia\u0142o uruchomi\u0107 <span style=\"color: #008000;\"><em>gofabric8 start.<\/em><\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><em><span style=\"color: #999999;\">[Ladies|Gentlemen] Start your engines\u2026<\/span><\/em><\/h2>\n\n\n\n<p>Aby pu\u015bci\u0107 w ruch nasz\u0105 nowo zainstalowan\u0105 platform\u0119 wydajemy komend\u0119:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\n $ gofabric8 start \n<\/pre><\/div>\n\n\n<p>Po wykonaniu instrukcji pobrane zostan\u0105 binaria <span style=\"color: #800000;\">minikube<\/span> (potrzebne do uruchomienia lokalnie jednow\u0119z\u0142owego klaster Kubernetesa) i<span style=\"color: #800000;\"> kubectl<\/span> (narz\u0119dzie do interakcji z klastrami Kubernetesa).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nDownloading https:\/\/storage.googleapis.com\/minikube\/releases\/ v0.14.0\/minikube-linux-amd64...\nDownloaded \/home\/czarek\/.fabric8\/bin\/minikube\nDownloading https:\/\/storage.googleapis.com\/kubernetes-release\/release\/v1.5.1\/bin\/linux\/amd64\/kubectl...\nDownloaded \/home\/czarek\/.fabric8\/bin\/kubectl\nusing the executable \/home\/czarek\/.fabric8\/bin\/minikube\nrunning: \/home\/czarek\/.fabric8\/bin\/minikube start --vm-driver=kvm --memory=6144 --cpus=1 --disk-size=50g\nStarting local Kubernetes cluster...\nKubectl is now configured to use the cluster.\n<\/pre><\/div>\n\n\n<p>Skoro wszystko uruchomi\u0142o si\u0119 poprawnie, nie pozostaje nam nic innego jak dosta\u0107 si\u0119 do webowej konsoli fabric8.<\/p>\n\n\n\n<p>Wydanie poni\u017cszego polecenia spowoduje otwarcie konsoli w domy\u015blnej przegl\u0105darce:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\n$ gofabric8 console\n\nOpening URL  http:\/\/192.168.42.60:31811\n<\/pre><\/div>\n\n\n<p>Je\u015bli chcemy pozna\u0107 tylko adres url, aby otworzy\u0107 go w przegl\u0105darce innej ni\u017c domy\u015blna, z pomoc\u0105 przychodzi nam polecenie:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\n$ gofabric8 service fabric8 --url\nhttp:\/\/192.168.42.60:31811\n<\/pre><\/div>\n\n\n<p>W podobny spos\u00f3b mo\u017cemy dosta\u0107 si\u0119 te\u017c bezpo\u015brednio do gui i &nbsp;innych narz\u0119dzi (gogs, Jenkins, Nexus). Dosta\u0107 si\u0119 do nich mo\u017cna oczywi\u015bcie r\u00f3wnie\u017c z konsoli fabric8.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\n$ gofabric8 service gogs\n$ gofabric8 service jenkins\n$ gofabric8 service nexus\n<\/pre><\/div>\n\n\n<p>Je\u015bli na bie\u017c\u0105co pod\u0105\u017cali\u015bcie za instrukcjami, w przegl\u0105darce powinni\u015bcie zobaczy\u0107 co\u015b takiego:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/01\/hfgh.jpg\"><img decoding=\"async\" width=\"642\" height=\"297\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/01\/hfgh.jpg\" alt=\"screen\" class=\"wp-image-3753\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/01\/hfgh.jpg 642w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/01\/hfgh-300x139.jpg 300w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/a><\/figure>\n\n\n\n<p>Pod terminem \u201eteam\u201d kryje si\u0119 tak naprawd\u0119 pojedynczy system z\u0142o\u017cony z wielu mikrous\u0142ug \u017cyj\u0105cy sobie w obr\u0119bie jednej <a href=\"http:\/\/kubernetes.io\/docs\/user-guide\/namespaces\/\" rel=\"nofollow\" >przestrzeni nazw (klastr\u00f3w wirtualnych)<\/a> na klastrze Kubernetesa. W fabric8 nazwano to \u201ezespo\u0142em\u201d prawdopodobnie, aby podkre\u015bli\u0107 zale\u017cno\u015b\u0107 namespace \u2013 system (ale to tylko m\u00f3j domys\u0142 \ud83d\ude42 ).<\/p>\n\n\n\n<p>I to by by\u0142o na tyle, je\u015bli chodzi o instalacj\u0119 i uruchomienie platformy fabric8.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><em>Zapraszam do poklikania, rozpoznania, komentowania, zadawania pyta\u0144.<\/em><\/span><\/p>\n\n\n\n<p>W kolejnym wpisie chcia\u0142bym przej\u015b\u0107 przez tworzenie nowej aplikacji, import istniej\u0105cego projektu i \u201epu\u0142apki\u201d z tym zwi\u0105zane.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;3639&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;2&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 2)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Fabric8, czyli mikro-us\u0142ugi bardziej przyjazne&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 2)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Wszyscy zapewne zdajemy sobie spraw\u0119 z popularno\u015bci jak\u0105 zdobywa w ostatnim czasie architektura system\u00f3w oparta o mikrous\u0142ugi. Podej\u015bcie to obiecuje &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/fabric8-czyli-mikro-uslugi-bardziej-przyjazne\/\">Continued<\/a><\/p>\n","protected":false},"author":119,"featured_media":3866,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[],"class_list":["post-3639","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2017\/01\/fabric8-being-devops-doesnt-suck-anymore-1-638.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/3639"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/119"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=3639"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/3639\/revisions"}],"predecessor-version":[{"id":23837,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/3639\/revisions\/23837"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/3866"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=3639"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=3639"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=3639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}