{"id":30792,"date":"2019-10-31T21:37:27","date_gmt":"2019-10-31T18:37:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/nash-opyt-sozdaniya-api-gateway\/"},"modified":"2019-10-31T21:37:27","modified_gmt":"2019-10-31T18:37:27","slug":"nash-opyt-sozdaniya-api-gateway","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","title":{"rendered":"API Gateway k\u00e9sz\u00edt\u00e9si tapasztalataink","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>N\u00e9h\u00e1ny c\u00e9g, \u00edgy a megb\u00edz\u00f3nk is, a term\u00e9ket partnerh\u00e1l\u00f3zaton kereszt\u00fcl fejleszti. P\u00e9ld\u00e1ul a nagy online \u00e1ruh\u00e1zak integr\u00e1lva vannak a sz\u00e1ll\u00edt\u00e1si szolg\u00e1ltat\u00e1ssal \u2013 teh\u00e1t term\u00e9ket rendel, \u00e9s hamarosan megkapja a csomag k\u00f6vet\u00e9si sz\u00e1m\u00e1t. Egy m\u00e1sik p\u00e9lda, hogy a rep\u00fcl\u0151jegy megv\u00e9tele mellett biztos\u00edt\u00e1st vagy Aeroexpressz jegyet v\u00e1s\u00e1rol.<\/p>\n<p>Ehhez egy API-t haszn\u00e1lunk, amelyet a partnereknek az API Gateway-en kereszt\u00fcl kell kiadni. Ezt a feladatot mi oldottuk meg. Ebben a cikkben r\u00e9szletezz\u00fck.<\/p>\n<p>Adott: egy \u00f6kosziszt\u00e9ma \u00e9s egy API-port\u00e1l, ahol a felhaszn\u00e1l\u00f3k regisztr\u00e1lva vannak, inform\u00e1ci\u00f3t kapnak stb. Nek\u00fcnk egy k\u00e9nyelmes \u00e9s megb\u00edzhat\u00f3 API Gateway-t kell l\u00e9trehoznunk. A folyamat sor\u00e1n biztos\u00edtanunk kellett <\/p>\n<ul>\n<li>a regisztr\u00e1ci\u00f3t, <\/li>\n<li>az API-hoz val\u00f3 csatlakoz\u00e1s ellen\u0151rz\u00e9s\u00e9t, <\/li>\n<li>a felhaszn\u00e1l\u00f3k v\u00e9gs\u0151 rendszerhaszn\u00e1lat\u00e1nak nyomon k\u00f6vet\u00e9s\u00e9t, <\/li>\n<li>az \u00fczleti mutat\u00f3k figyelembev\u00e9tel\u00e9t.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"API Gateway k\u00e9sz\u00edt\u00e9si tapasztalataink\" src=\"\/wp-content\/uploads\/2019\/04\/4fa66fd4573af16b0bc78aa61173f907.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA cikkben megosztjuk tapasztalatainkat az API Gateway l\u00e9trehoz\u00e1s\u00e1r\u00f3l, amely sor\u00e1n a k\u00f6vetkez\u0151 feladatokat oldottuk meg:<\/p>\n<ul>\n<li>a felhaszn\u00e1l\u00f3 azonos\u00edt\u00e1sa,<\/li>\n<li>a felhaszn\u00e1l\u00f3 jogosults\u00e1ga,<\/li>\n<li>a forr\u00e1sk\u00e9r\u00e9s m\u00f3dos\u00edt\u00e1sa,<\/li>\n<li>a k\u00e9r\u00e9s proxyz\u00e1sa,<\/li>\n<li>a v\u00e1lasz ut\u00f3feldolgoz\u00e1sa.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nK\u00e9tf\u00e9le API-menedzsment l\u00e9tezik:<\/p>\n<p>1. A standard, amely a k\u00f6vetkez\u0151k\u00e9ppen m\u0171k\u00f6dik. A csatlakoz\u00e1s el\u0151tt a felhaszn\u00e1l\u00f3 teszteli a lehet\u0151s\u00e9geket, majd fizet \u00e9s integr\u00e1lja a saj\u00e1t weboldal\u00e1ra. Ezt leggyakrabban a kis- \u00e9s k\u00f6z\u00e9pv\u00e1llalkoz\u00e1sok haszn\u00e1lj\u00e1k.<\/p>\n<p>2. Nagy B2B API menedzsment, amikor a c\u00e9g el\u0151sz\u00f6r \u00fczleti d\u00f6nt\u00e9st hoz a csatlakoz\u00e1sr\u00f3l, partner\u00e9v\u00e9 v\u00e1lik egy szerz\u0151d\u00e9ses k\u00f6telezetts\u00e9ggel, majd csatlakozik az API-hoz. Csak miut\u00e1n a form\u00e1lis \u00fcgyek elint\u00e9z\u00e9se megt\u00f6rt\u00e9nt, a c\u00e9g tesztel\u00e9sre hozz\u00e1f\u00e9r\u00e9st kap, elv\u00e9gzi a tesztel\u00e9st \u00e9s megkezd\u0151dik a termel\u00e9s. De ez nem lehets\u00e9ges a csatlakoz\u00e1si d\u00f6nt\u00e9s n\u00e9lk\u00fcl. <\/p>\n<p><img decoding=\"async\" alt=\"API Gateway k\u00e9sz\u00edt\u00e9si tapasztalataink\" src=\"\/wp-content\/uploads\/2019\/04\/b9ab53d6c64d5a971c4950cd340ad42e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3> A mi megold\u00e1sunk<\/h3>\n<p>\nEbben a r\u00e9szben az API Gateway l\u00e9trehoz\u00e1s\u00e1r\u00f3l besz\u00e9l\u00fcnk.<\/p>\n<p>A l\u00e9trehozott API-h\u00edd v\u00e9gfelhaszn\u00e1l\u00f3i a megb\u00edz\u00f3nk partnerei. Mindenki sz\u00e1m\u00e1ra m\u00e1r rendelkez\u00e9sre \u00e1llnak a sz\u00fcks\u00e9ges szerz\u0151d\u00e9sek. Csak annyit kell tenn\u00fcnk, hogy b\u0151v\u00edtj\u00fck a funkcionalit\u00e1st, figyelembe v\u00e9ve a h\u00eddhoz biztos\u00edtott hozz\u00e1f\u00e9r\u00e9st. Ennek megfelel\u0151en sz\u00fcks\u00e9ges egy ellen\u0151rz\u00f6tt folyamat a csatlakoz\u00e1s \u00e9s a menedzsment ter\u00e9n.<\/p>\n<p>Term\u00e9szetesen lehetett volna valamilyen k\u00e9sz megold\u00e1st v\u00e1lasztani az API menedzsment feladat\u00e1nak megold\u00e1s\u00e1hoz, k\u00fcl\u00f6n\u00f6sen az API Gateway l\u00e9trehoz\u00e1s\u00e1hoz. P\u00e9ld\u00e1ul ilyen volt az<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/api-management\/\"> Azure API Management<\/a><\/noindex>. Nem volt megfelel\u0151 sz\u00e1munkra, mert m\u00e1r volt egy API-port\u00e1lunk \u00e9s egy hatalmas \u00f6kosziszt\u00e9ma \u00e9p\u00edtve k\u00f6r\u00e9. Minden felhaszn\u00e1l\u00f3 m\u00e1r regisztr\u00e1lva volt, tudt\u00e1k, hol \u00e9s hogyan kaphatj\u00e1k meg a sz\u00fcks\u00e9ges inform\u00e1ci\u00f3kat. Az API-port\u00e1lon m\u00e1r l\u00e9teztek a sz\u00fcks\u00e9ges interf\u00e9szek, nek\u00fcnk csak az API Gateway volt sz\u00fcks\u00e9ges. Ezt a fejleszt\u00e9st kezdt\u00fck el. <\/p>\n<p>Amit API Gateway-nek h\u00edvunk \u2014 egyfajta proxy. Itt \u00fajra v\u00e1laszt\u00e1sunk volt \u2014 \u00edrhatunk egy saj\u00e1t proxy-t, vagy v\u00e1laszthatunk m\u00e1r megl\u00e9v\u0151t. Ebben az esetben a m\u00e1sodik utat v\u00e1lasztottuk, \u00e9s a nginx+Lua kombin\u00e1ci\u00f3ra esett a v\u00e1laszt\u00e1sunk. Mi\u00e9rt? Megb\u00edzhat\u00f3, tesztelt szoftverre volt sz\u00fcks\u00e9g\u00fcnk, ami t\u00e1mogatta a sk\u00e1l\u00e1z\u00f3d\u00e1st. Nem akartuk a megval\u00f3s\u00edt\u00e1s ut\u00e1n ellen\u0151rizni a business logika helyess\u00e9g\u00e9t \u00e9s a proxy m\u0171k\u00f6d\u00e9s\u00e9t is. <\/p>\n<p>Minden webservernek van egy k\u00e9r\u00e9sfeldolgoz\u00e1si folyamata. A nginx eset\u00e9ben ez a k\u00f6vetkez\u0151k\u00e9ppen n\u00e9z ki:<\/p>\n<p><img decoding=\"async\" alt=\"API Gateway k\u00e9sz\u00edt\u00e9si tapasztalataink\" src=\"\/wp-content\/uploads\/2019\/04\/b4cba1d37cc769202f92df052b45c77e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(diagram a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">GitHub Lua Nginx<\/a><\/noindex>)<\/p>\n<p>C\u00e9lunk az volt, hogy be\u00e9p\u00fclj\u00fcnk ebbe a folyamatba azon a ponton, ahol m\u00f3dos\u00edtani tudjuk az eredeti k\u00e9r\u00e9st. <\/p>\n<p>Transzparens proxy-t szeretn\u00e9nk l\u00e9trehozni, hogy a funkcion\u00e1lisan a k\u00e9r\u00e9s ugyanolyan maradjon, mint amilyen meg\u00e9rkezett. Csak a hozz\u00e1f\u00e9r\u00e9st ellen\u0151rizz\u00fck a v\u00e9gs\u0151 API-hoz, seg\u00edt\u00fcnk a k\u00e9r\u00e9snek eljutni od\u00e1ig. Ha a k\u00e9r\u00e9s hib\u00e1s volt, akkor a v\u00e9gs\u0151 API-nak kell megmutatnia a hib\u00e1t, nem nek\u00fcnk. Az egyetlen ok, ami\u00e9rt elutas\u00edthatjuk a k\u00e9r\u00e9st, az a hozz\u00e1f\u00e9r\u00e9s hi\u00e1nya az \u00fcgyf\u00e9l r\u00e9sz\u00e9r\u0151l. <\/p>\n<p>A nginx-hez m\u00e1r l\u00e9tezik <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">kiterjeszt\u00e9s<\/a><\/noindex> Gyorsan eml\u00e9kezz\u00fcnk vissza, hogyan m\u0171k\u00f6dik a modul\u00e1ris aritmetika. Az \u00f3ra m\u00e1r egy ismert koncepci\u00f3. Az \u00f3r\u00e1k haszn\u00e1lata <noindex><a rel=\"nofollow\" href=\"http:\/\/www.lua.ru\/\">Lua<\/a><\/noindex>. A Lua egy szkriptnyelv, nagyon k\u00f6nny\u0171 \u00e9s k\u00f6nnyen elsaj\u00e1t\u00edthat\u00f3. \u00cdgy a sz\u00fcks\u00e9ges logik\u00e1t Lua seg\u00edts\u00e9g\u00e9vel val\u00f3s\u00edtottuk meg. <\/p>\n<p>A nginx konfigur\u00e1ci\u00f3 (a route alkalmaz\u00e1s anal\u00f3gi\u00e1ja), ahol elv\u00e9gezz\u00fck a munk\u00e1t, \u00e9rthet\u0151. \u00c9rdekes az utols\u00f3 direkt\u00edva \u2014 post_action.<\/p>\n<pre><code class=\"nginx\">location \/middleware {\n      more_clear_input_headers Accept-Encoding;\n      lua_need_request_body on;\n      rewrite_by_lua_file 'middleware\/rewrite.lua';\n      access_by_lua_file 'middleware\/access.lua';\n      proxy_pass https:\/\/someurl.com;\n      body_filter_by_lua_file 'middleware\/body_filter.lua';\n      post_action \/process_session;\n}\n<\/code><\/pre>\n<p>\nN\u00e9zz\u00fck meg, mi t\u00f6rt\u00e9nik ebben a konfigur\u00e1ci\u00f3ban: <br \/>\n<b>more_clear_input_headers<\/b> \u2014 t\u00f6rli a direkt\u00edva ut\u00e1n megadott headerek \u00e9rt\u00e9k\u00e9t. <br \/>\n<b>lua_need_request_body <\/b>\u2014 szab\u00e1lyozza, hogy sz\u00fcks\u00e9ges-e elolvasni az eredeti k\u00e9r\u00e9s test\u00e9t a rewrite\/access\/access_by_lua direkt\u00edv\u00e1k v\u00e9grehajt\u00e1sa el\u0151tt. Alap\u00e9rtelmez\u00e9s szerint a nginx nem olvassa el az \u00fcgyf\u00e9l k\u00e9r\u00e9s\u00e9nek test\u00e9t, \u00e9s ha sz\u00fcks\u00e9ges, hogy hozz\u00e1f\u00e9rj\u00fcnk, akkor ennek a direkt\u00edv\u00e1nak on \u00e9rt\u00e9k\u0171nek kell lennie.<br \/>\n<b>rewrite_by_lua_file<\/b> \u2014 a szkript el\u00e9r\u00e9si \u00fatja, amely le\u00edrja a k\u00e9r\u00e9sek m\u00f3dos\u00edt\u00e1s\u00e1nak logik\u00e1j\u00e1t<br \/>\n<b>access_by_lua_file <\/b>\u2014 a szkript el\u00e9r\u00e9si \u00fatja, amely le\u00edrja a logik\u00e1t, amely ellen\u0151rzi az er\u0151forr\u00e1shoz val\u00f3 hozz\u00e1f\u00e9r\u00e9st. <br \/>\n<b>proxy_pass <\/b>\u2014 az URL, amelyre a k\u00e9r\u00e9s proxiz\u00e1lva lesz.<br \/>\n<b>body_filter_by_lua_file <\/b>\u2014 a szkript el\u00e9r\u00e9si \u00fatja, amely le\u00edrja a logik\u00e1t a k\u00e9r\u00e9s sz\u0171r\u00e9s\u00e9re, miel\u0151tt azt visszaadn\u00e1nk az \u00fcgyf\u00e9lnek.<br \/>\n\u00c9s v\u00e9g\u00fcl, <b>post_action<\/b> \u2014 hivatalosan nem dokument\u00e1lt direkt\u00edva, amellyel tov\u00e1bbi m\u0171veleteket v\u00e9gezhet\u00fcnk, miut\u00e1n a v\u00e1lasz az \u00fcgyf\u00e9lhez ker\u00fclt. <\/p>\n<p>Ezut\u00e1n l\u00e9p\u00e9sr\u0151l l\u00e9p\u00e9sre elmondjuk, hogyan oldottuk meg a feladatainkat.<\/p>\n<h3>Hiteles\u00edt\u00e9s \u00e9s k\u00e9r\u00e9s m\u00f3dos\u00edt\u00e1sa<\/h3>\n<p>\n<b>Enged\u00e9lyez\u00e9s<\/b><\/p>\n<p>A hiteles\u00edt\u00e9st \u00e9s az azonos\u00edt\u00e1st tan\u00fas\u00edtv\u00e1nyalap\u00fa hozz\u00e1f\u00e9r\u00e9ssel \u00e9p\u00edtett\u00fck fel. Van egy gy\u00f6k\u00e9r tan\u00fas\u00edtv\u00e1ny. Minden \u00faj \u00fcgyf\u00e9lnek gener\u00e1lunk egy egy\u00e9ni tan\u00fas\u00edtv\u00e1nyt, amellyel hozz\u00e1f\u00e9rhet az API-hoz. Ez a tan\u00fas\u00edtv\u00e1ny a nginx be\u00e1ll\u00edt\u00e1sainak server szekci\u00f3j\u00e1ban van konfigur\u00e1lva.<\/p>\n<pre><code class=\"nginx\">ssl on;\nssl_certificate \/usr\/local\/openresty\/nginx\/ssl\/cert.pem;\nssl_certificate_key \/usr\/local\/openresty\/nginx\/ssl\/cert.pem;\nssl_client_certificate \/usr\/local\/openresty\/nginx\/ssl\/ca.crt;\nssl_verify_client on;<\/code><\/pre>\n<p>\n<b>M\u00f3dos\u00edt\u00e1s<\/b><\/p>\n<p>Jogosan mer\u00fclhet fel a k\u00e9rd\u00e9s: mit tegy\u00fcnk a hiteles\u00edtett \u00fcgyf\u00e9llel, ha hirtelen szeretn\u00e9nk kikapcsolni a rendszerr\u0151l? Nem lenne \u00e9rtelme az \u00f6sszes t\u00f6bbi \u00fcgyf\u00e9l tan\u00fas\u00edtv\u00e1ny\u00e1t \u00fajra kibocs\u00e1tani. <\/p>\n<p>\u00cdgy jutottunk el a k\u00f6vetkez\u0151 feladathoz \u2014 a k\u00e9r\u00e9s m\u00f3dos\u00edt\u00e1sa. Az \u00fcgyf\u00e9l eredeti k\u00e9r\u00e9se nem \u00e9rv\u00e9nyes a v\u00e9gs\u0151 rendszer sz\u00e1m\u00e1ra. Az egyik feladat az, hogy kieg\u00e9sz\u00edts\u00fck a k\u00e9r\u00e9s hi\u00e1nyz\u00f3 r\u00e9szeit, hogy \u00e9rv\u00e9nyes legyen. A l\u00e9nyeg az, hogy a hi\u00e1nyz\u00f3 adatok k\u00fcl\u00f6nb\u00f6z\u0151k minden \u00fcgyf\u00e9l eset\u00e9ben. Tudjuk, hogy az \u00fcgyf\u00e9l tan\u00fas\u00edtv\u00e1nnyal \u00e9rkezik, amelyb\u0151l az ujjlenyomatot kivehetj\u00fck, \u00e9s sz\u00fcks\u00e9ges adatokat nyerhet\u00fcnk ki az adatb\u00e1zisb\u00f3l. <\/p>\n<p>Ha b\u00e1rmikor sz\u00fcks\u00e9ges lenne az \u00fcgyf\u00e9l kikapcsol\u00e1sa a szolg\u00e1ltat\u00e1sunkb\u00f3l, az adatai elt\u0171nnek az adatb\u00e1zisb\u00f3l, \u00e9s nem fog tudni semmit csin\u00e1lni. <\/p>\n<h3>Az \u00fcgyf\u00e9ladatok kezel\u00e9se<\/h3>\n<p>\nMagas rendelkez\u00e9sre \u00e1ll\u00e1st kellett biztos\u00edtanunk, k\u00fcl\u00f6n\u00f6sen abban, ahogyan az \u00fcgyf\u00e9ladatokat megszerezz\u00fck. A bonyodalom abban rejlik, hogy e adatok els\u0151dleges forr\u00e1sa egy k\u00fcls\u0151 szolg\u00e1ltat\u00e1s, amely nem garant\u00e1lja a folyamatos \u00e9s elegend\u0151 sebess\u00e9get. <\/p>\n<p>Ez\u00e9rt magas rendelkez\u00e9sre \u00e1ll\u00e1st kellett biztos\u00edtanunk az \u00fcgyf\u00e9ladatok sz\u00e1m\u00e1ra. Eszk\u00f6z\u00fcl a k\u00f6vetkez\u0151t v\u00e1lasztottuk <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/\">Hazelcast<\/a><\/noindex>, amely sz\u00e1munkra biztos\u00edtja:<\/p>\n<ul>\n<li>gyors adat-hozz\u00e1f\u00e9r\u00e9s,<\/li>\n<li>a lehet\u0151s\u00e9g egy t\u00f6bb node-b\u00f3l \u00e1ll\u00f3 klaszter l\u00e9trehoz\u00e1s\u00e1ra, ahol az adatok k\u00fcl\u00f6nb\u00f6z\u0151 node-okon vannak replik\u00e1lva.<\/li>\n<\/ul>\n<p>\nA legegyszer\u0171bb adatcache-el\u00e9si strat\u00e9gi\u00e1t v\u00e1lasztottuk:<\/p>\n<p><img decoding=\"async\" alt=\"API Gateway k\u00e9sz\u00edt\u00e9si tapasztalataink\" src=\"\/wp-content\/uploads\/2019\/04\/0175d6f0fda543566ab13d4cae9d8cc1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA v\u00e9gs\u0151 rendszerrel val\u00f3 munka sor\u00e1n session-\u00f6k keretein bel\u00fcl zajlik, \u00e9s van egy korl\u00e1t a maxim\u00e1lis sz\u00e1mra. Ha a kliens nem z\u00e1rja be a session-t, ezt nek\u00fcnk kell megtenn\u00fcnk. <\/p>\n<p>A nyitott session inform\u00e1ci\u00f3k a v\u00e9gs\u0151 rendszert\u0151l \u00e9rkeznek, \u00e9s kezdetben a Lua oldal\u00e1n dolgozz\u00e1k fel \u0151ket. Azt d\u00f6nt\u00f6tt\u00fck, hogy a Hazelcast-ot haszn\u00e1ljuk ezen adatok t\u00e1rol\u00e1s\u00e1ra egy .NET-ben \u00edrt task seg\u00edts\u00e9g\u00e9vel. Ezut\u00e1n id\u0151nk\u00e9nt ellen\u0151rizz\u00fck a nyitott session-\u00f6k \u00e9rv\u00e9nyess\u00e9g\u00e9t \u00e9s lez\u00e1rjuk a lej\u00e1rtakat. <\/p>\n<h3>Hozz\u00e1f\u00e9r\u00e9s a Hazelcast-hoz Lua-b\u00f3l \u00e9s .NET-b\u0151l is<\/h3>\n<p>\nLua-hoz nem l\u00e9tezik \u00fcgyf\u00e9l a Hazelcast-hoz, de a Hazelcast rendelkezik REST API-val, amelyet ig\u00e9nybe vett\u00fcnk. A .NET-hez pedig <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/clients\/net\/\">az \u00fcgyf\u00e9l<\/a><\/noindex>, amelyen kereszt\u00fcl tervezt\u00fck a Hazelcast adatokhoz hozz\u00e1f\u00e9rni a .NET oldal\u00e1n. De nem \u00fagy alakult.<\/p>\n<p><img decoding=\"async\" alt=\"API Gateway k\u00e9sz\u00edt\u00e9si tapasztalataink\" src=\"\/wp-content\/uploads\/2019\/04\/52c9437e5cd16073b56afc55a4f415da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA REST-en kereszt\u00fcli ment\u00e9skor \u00e9s a .NET kliensen kereszt\u00fcli lek\u00e9rdez\u00e9skor k\u00fcl\u00f6nb\u00f6z\u0151 sorozat-\/desorozatol\u00f3kat haszn\u00e1lnak. \u00cdgy nem lehets\u00e9ges, hogy az adatokat REST-en kereszt\u00fcl helyezz\u00fck el, \u00e9s a .NET kliensen kereszt\u00fcli hozz\u00e1f\u00e9r\u00e9ssel h\u00edvjuk le, \u00e9s ford\u00edtva. <\/p>\n<p>Ha \u00e9rdekl\u0151d\u0151k akadnak, r\u00e9szletesebben besz\u00e9l\u00fcnk err\u0151l a probl\u00e9m\u00e1r\u00f3l egy k\u00fcl\u00f6n cikkben. Spoiler \u2014 az \u00e1br\u00e1n. <\/p>\n<p><img decoding=\"async\" alt=\"API Gateway k\u00e9sz\u00edt\u00e9si tapasztalataink\" src=\"\/wp-content\/uploads\/2019\/04\/73bb11214fdaeca86ef10cdbd788e288.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Napl\u00f3z\u00e1s \u00e9s monitoroz\u00e1s<\/h3>\n<p>\nA v\u00e1llalati szabv\u00e1nyunk a napl\u00f3z\u00e1sra .NET-en kereszt\u00fcl a Serilog, minden napl\u00f3 v\u00e9g\u00fcl az Elasticsearch-be ker\u00fcl, az elemz\u00e9st a Kibana-n v\u00e9gezz\u00fck. Hasonl\u00f3 dolgot szerett\u00fcnk volna tenni ebben az esetben is. Az egyetlen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DhavalKapil\/elasticsearch-lua\">az \u00fcgyf\u00e9l<\/a><\/noindex> Lua-ban az Elasticsearch munk\u00e1j\u00e1hoz haszn\u00e1lt kliens, amelyet tal\u00e1ltunk, az els\u0151 require-n\u00e9l elromlott. \u00cdgy a Fluentd-t haszn\u00e1ltuk. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.fluentd.org\/\">Fluentd<\/a><\/noindex> \u2014 open source megold\u00e1s az alkalmaz\u00e1s egys\u00e9ges napl\u00f3z\u00e1si r\u00e9teg\u00e9nek biztos\u00edt\u00e1s\u00e1ra. Lehet\u0151v\u00e9 teszi, hogy k\u00fcl\u00f6nb\u00f6z\u0151 alkalmaz\u00e1si r\u00e9tegekb\u0151l gy\u0171jts\u00fck a napl\u00f3kat, majd ezeket egy k\u00f6zponti forr\u00e1sba transzform\u00e1ljuk. <\/p>\n<p>Az API Gateway a K8S-ben m\u0171k\u00f6dik, \u00edgy \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy hozz\u00e1adunk egy fluentd kont\u00e9nert ugyanabba a podba, hogy a megl\u00e9v\u0151 nyitott TCP porton kereszt\u00fcl \u00edrhassuk a napl\u00f3kat. <\/p>\n<p>Azt is megvizsg\u00e1ltuk, hogy a fluentd hogyan viselkedik, ha nincs kapcsolata az Elasticsearch-szel. K\u00e9t napon kereszt\u00fcl folyamatosan \u00e9rkeztek a k\u00e9r\u00e9sek a gateway-be, a fluentd napl\u00f3k mentek, de a fluentd IP-j\u00e9t az Elastic blokkolta. Miut\u00e1n a kapcsolat helyre\u00e1llt, a fluentd remek\u00fcl \u00e1ttolta az \u00f6sszes napl\u00f3t az Elastic-be.<\/p>\n<h3>Z\u00e1r\u00e1s<\/h3>\n<p>\nA v\u00e1lasztott megval\u00f3s\u00edt\u00e1si megk\u00f6zel\u00edt\u00e9s lehet\u0151v\u00e9 tette sz\u00e1munkra, hogy val\u00f3ban m\u0171k\u00f6d\u0151 term\u00e9ket sz\u00e1ll\u00edtsunk a \u00e9les k\u00f6rnyezetbe mind\u00f6ssze 2,5 h\u00f3nap alatt.<\/p>\n<p>Ha valaha hasonl\u00f3 dolgokkal kell foglalkoznia, el\u0151sz\u00f6r is vil\u00e1gosan meg kell \u00e9rtenie, hogy milyen feladatot old meg, \u00e9s hogy milyen er\u0151forr\u00e1sai vannak m\u00e1r. Legyen figyelemmel az API-kezel\u0151 rendszerekkel val\u00f3 integr\u00e1ci\u00f3 bonyolults\u00e1gaira. <\/p>\n<p>\u00c9rtenie kell, hogy pontosan mit tervez fejleszteni \u2014 csak a k\u00e9r\u00e9skezel\u00e9si \u00fczleti logik\u00e1t, vagy ak\u00e1r egy teljes proxyt, ahogyan az a mi eset\u00fcnkben t\u00f6rt\u00e9nt. Ne feledje, hogy mindent, amit saj\u00e1t maga k\u00e9sz\u00edt, k\u00e9s\u0151bb alaposan tesztelnie kell.<br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/true_engineering\/blog\/446438\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043e \u0441\u043b\u0443\u0436\u0431\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u2014 \u0432\u044b \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u0442\u043e\u0432\u0430\u0440 \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0441\u044b\u043b\u043a\u0438. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u043e\u043c \u0432\u044b \u043f\u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0443 \u0438\u043b\u0438 \u0431\u0438\u043b\u0435\u0442 \u043d\u0430 \u0430\u044d\u0440\u043e\u044d\u043a\u0441\u043f\u0440\u0435\u0441\u0441. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 API Gateway. \u042d\u0442\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22777,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f API Gateway | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:37:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47API Gateway fejleszt\u00e9si tapasztalataink | ProHoster","description":"N\u00e9h\u00e1ny c\u00e9g, k\u00f6zt\u00fck megb\u00edz\u00f3nk is, partners\u00e9gi h\u00e1l\u00f3zaton kereszt\u00fcl fejleszti a term\u00e9ket.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f API Gateway | ProHoster","og:description":"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:37:27+00:00","article:modified_time":"2019-10-31T18:37:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30792","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 03:01:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:05:31","updated":"2026-01-21 03:01:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/30792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=30792"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/30792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/22777"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=30792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=30792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=30792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}