{"id":92595,"date":"2020-08-29T07:42:06","date_gmt":"2020-08-29T05:42:06","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej"},"modified":"2020-08-29T07:42:06","modified_gmt":"2020-08-29T05:42:06","slug":"razrabotat-videoplatformu-za-90-dnej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej","title":{"rendered":"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>K\u00ebt\u00eb pranver\u00eb ishim n\u00eb kushte shum\u00eb t\u00eb k\u00ebndshme. P\u00ebr shkak t\u00eb pandemis\u00eb, u b\u00eb e qart\u00eb se konferencat tona t\u00eb ver\u00ebs duhet t'i kalonim online. Dhe p\u00ebr ta zhvilluar ato n\u00eb m\u00ebnyr\u00eb cil\u00ebsore, zgjidhjet e gatshme nuk ishin t\u00eb mjaftueshme; duhej nd\u00ebrtuar nj\u00eb platform\u00eb t\u00eb vetme. Dhe p\u00ebr k\u00ebt\u00eb kishim tre muaj.<\/p>\n<p><\/p>\n<p>E qart\u00eb, ishin tri muaj emocionues. Por nga jasht duket se nuk \u00ebsht\u00eb shum\u00eb e qart\u00eb: \u00e7far\u00eb p\u00ebrb\u00ebn nj\u00eb platform\u00eb p\u00ebr konferenca online? Nga cilat pjes\u00eb p\u00ebrb\u00ebhet ajo? Prandaj, gjat\u00eb konferenc\u00ebs s\u00eb fundit t\u00eb ver\u00ebs DevOops, pyeta ata q\u00eb ishin p\u00ebrgjegj\u00ebs p\u00ebr k\u00ebt\u00eb detyr\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Nikolaj Mol\u00e7anov \u2014 drejtori teknik i JUG Ru Group; <\/li>\n<li>Vladimir Krasilshchik \u2014 nj\u00eb programues pragmatik Java, i angazhuar n\u00eb backend (mund t\u00eb keni par\u00eb gjithashtu paraqitjet e tij n\u00eb konferencat tona Java);<\/li>\n<li>Artyom Nik\u043e\u043d\u043e\u0432 \u2014 p\u00ebrgjegj\u00ebs p\u00ebr t\u00ebr\u00eb transmetimin ton\u00eb video.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebrve\u00e7 k\u00ebsaj, n\u00eb konferencat e vjesht\u00ebs dhe dimrit do t\u00eb p\u00ebrdorim nj\u00eb version t\u00eb p\u00ebrmir\u00ebsuar t\u00eb t\u00eb nj\u00ebjt\u00ebs platform\u00eb \u2014 k\u00ebshtu q\u00eb shum\u00eb p\u00ebrdorues t\u00eb Habr do t\u00eb jen\u00eb gjithashtu p\u00ebrdorues t\u00eb saj.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/3d9f65911fa12310efff215a4ba0f2bc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"obschaya-kartina\">Pamja e p\u00ebrgjithshme<\/h1>\n<p><\/p>\n<p>\u2014 Si ishte p\u00ebrb\u00ebrja e ekipit?<\/p>\n<p><\/p>\n<p><b>Nikolaj Mol\u00e7anov:<\/b> \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a, \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0442\u0440\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435\u0440\u0430, \u0431\u044d\u043a\u0435\u043d\u0434\u0435\u0440. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, T-shaped \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442!<\/p>\n<p><\/p>\n<p>\u2014 \u041a\u0430\u043a \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> \u0414\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u043c\u0430\u0440\u0442\u0430 \u0443 \u043d\u0430\u0441 \u043a \u043e\u043d\u043b\u0430\u0439\u043d\u0443 \u043d\u0435 \u0431\u044b\u043b\u043e \u0433\u043e\u0442\u043e\u0432\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u0447\u0435\u0433\u043e. \u0410 15 \u043c\u0430\u0440\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0442\u0435\u043b\u0430\u0441\u044c \u0432\u0441\u044f \u043a\u0430\u0440\u0443\u0441\u0435\u043b\u044c \u0441 \u043e\u043d\u043b\u0430\u0439\u043d\u043e\u043c. \u041c\u044b \u0437\u0430\u0432\u0435\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432, \u0441\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438, \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0441\u0451 \u0437\u0430 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. <\/p>\n<p><\/p>\n<p>\u042d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0448\u043b\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u0442\u0430\u043f\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u0438\u0447, \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u044d\u0442\u0438 \u0444\u0438\u0447\u0438, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u044d\u0442\u0438\u0445 \u0444\u0438\u0447, \u0438\u0445 \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 6 \u0438\u044e\u043d\u044f \u043c\u044b \u0432\u044b\u043a\u0430\u0442\u0438\u043b\u0438 \u0432\u0441\u0451 \u0432 \u043f\u0440\u043e\u0434 \u043d\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/techtrain.ru\/\">TechTrain<\/a><\/noindex>. \u041d\u0430 \u0432\u0441\u0451 \u043f\u0440\u043e \u0432\u0441\u0451 \u0431\u044b\u043b\u043e 90 \u0434\u043d\u0435\u0439.<\/p>\n<p><\/p>\n<p>\u2014 \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0443\u0441\u043f\u0435\u0442\u044c \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u043c\u044b \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043b\u0438\u0441\u044c?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> \u0420\u0430\u0437 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u043c \u0432 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 DevOops \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u2014 \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u042f \u043b\u0438\u0447\u043d\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043b\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0432\u0435\u0449\u044c: \u043f\u0440\u0438\u043d\u0435\u0441\u0443 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044e \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435. <\/p>\n<p><\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u043e\u044f\u043b\u0430 \u0442\u0430\u043a: \u0434\u0430\u0439\u0442\u0435 \u043d\u0430\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u0435\u043b\u044f\u043c \u0431\u0438\u043b\u0435\u0442\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u0412\u0441\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u043e \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0430\u043f\u043e\u0432, \u0438 \u0432\u0441\u0435 \u0444\u0438\u0447\u0438 (\u043e\u043a\u043e\u043b\u043e 30 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445), \u0431\u044b\u043b\u0438 \u043f\u043e\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 4 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438:<\/p>\n<p><\/p>\n<ul>\n<li>t\u00eb cilat ne patjet\u00ebr do t'i b\u00ebjm\u00eb (pa to nuk mund t\u00eb jetojm\u00eb), <\/li>\n<li>t\u00eb cilat do t'i b\u00ebjm\u00eb n\u00eb radh\u00ebn e dyt\u00eb, <\/li>\n<li>t\u00eb cilat ne kurr\u00eb nuk do t'i b\u00ebjm\u00eb, <\/li>\n<li>dhe ato q\u00eb kurr\u00eb-jo-kurr\u00eb nuk do t'i b\u00ebjm\u00eb. <\/li>\n<\/ul>\n<p><\/p>\n<p>T\u00eb gjitha ve\u00e7orit\u00eb nga dy kategorit\u00eb e para i kemi b\u00ebr\u00eb. <\/p>\n<p><\/p>\n<p>\u2014 E di q\u00eb jan\u00eb regjistruar n\u00eb total 600 detyra n\u00eb JIRA. P\u00ebr tridhjet\u00eb muaj, ju keni b\u00ebr\u00eb 13 mikrosherbime dhe dyshoj se ato jan\u00eb shkruar jo vet\u00ebm n\u00eb Java. Keni p\u00ebrdorur teknologji t\u00eb ndryshme, keni ngritur dy klaster\u00eb Kubernetes n\u00eb tre zona disponibiliteti dhe 5 RTMP stream-e n\u00eb Amazon.<\/p>\n<p><\/p>\n<p>Tani le t\u00eb shqyrtojm\u00eb \u00e7do komponent t\u00eb sistemit ve\u00e7 e ve\u00e7.<\/p>\n<p><\/p>\n<h1 id=\"striming\">Streaming<\/h1>\n<p><\/p>\n<p>\u2014 T\u00eb fillojm\u00eb me at\u00eb, kur ne tashm\u00eb kemi nj\u00eb pamje video dhe ajo po d\u00ebrgohet n\u00eb disa sh\u00ebrbime. Artyom, na trego si ndodh ky streaming?<\/p>\n<p><\/p>\n<p><b>Artyom Nik\u043e\u043d\u043e\u0432:<\/b> Schemi yn\u00eb duket k\u00ebshtu: imazhi nga kamera -&gt; pultin ton\u00eb -&gt; serveri lokal RTMP -&gt; Amazon -&gt; playeri video. M\u00eb shum\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jugru\/blog\/505138\/\">kemi shkruar p\u00ebr k\u00ebt\u00eb<\/a><\/noindex> n\u00eb Habra n\u00eb qershor.<\/p>\n<p><\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, ka dy m\u00ebnyra globale p\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb: ose n\u00eb harduer, ose duke p\u00ebrdorur zgjidhje software. Ne zgjodh\u00ebm rrug\u00ebn e softit, sepse \u00ebsht\u00eb m\u00eb e leht\u00eb n\u00eb rastin e fol\u00ebsve t\u00eb larg\u00ebt. Nuk \u00ebsht\u00eb gjithmon\u00eb e mundur t\u00eb sjell\u00ebsh harduer p\u00ebr nj\u00eb fol\u00ebs n\u00eb nj\u00eb tjet\u00ebr vend, nd\u00ebrsa instalimi i nj\u00eb programi duket m\u00eb i leht\u00eb dhe m\u00eb i sigurt p\u00ebr fol\u00ebsin. <\/p>\n<p><\/p>\n<p>Sa i p\u00ebrket harduerit, ne kemi nj\u00eb num\u00ebr kamerash (n\u00eb studiot tona dhe te fol\u00ebsit e larg\u00ebt), disa pult n\u00eb studio, t\u00eb cilat ndonj\u00ebher\u00eb duhet t\u00eb riparohen p\u00ebrpara n\u00eb udh\u00ebzim gjat\u00eb transmetimit.<\/p>\n<p><\/p>\n<p>Sinjalet nga k\u00ebto pajisje hyjn\u00eb n\u00eb kompjuter\u00eb me bordet e kapjes, hyrjes\/daljes dhe kartat audio. Atje sinjalet p\u00ebrzihen dhe mblidhen n\u00eb layout-e:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/6657d95080f2263d4ea17b85d57d5919.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Shembulli i nj\u00eb laye t\u00eb 4 fol\u00ebsve<\/i><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/ac3565b1b5a0f8356e20821b95037c2d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Shembulli i nj\u00eb laye t\u00eb 4 fol\u00ebsve<\/i><\/p>\n<p><\/p>\n<p>M\u00eb pas, transmetimi vazhdon pa nd\u00ebrprerje me ndihm\u00ebn e tre kompjuter\u00ebve: ka nj\u00eb makin\u00eb kryesore dhe dy q\u00eb punojn\u00eb me radh\u00eb. Kompjuteri i par\u00eb mbledh prezantimin e par\u00eb, i dyti \u2014 pushimin, i pari \u2014 prezantimin tjet\u00ebr, i dyti \u2014 pushimin tjet\u00ebr dhe k\u00ebshtu me radh\u00eb. Nd\u00ebrsa makina kryesore p\u00ebrzjen t\u00eb parin me t\u00eb dytin.<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb formohet nj\u00eb trek\u00ebnd\u00ebsh, dhe n\u00eb rast t\u00eb r\u00ebnies s\u00eb ndonj\u00ebra nga k\u00ebto nyje, ne mund t\u00eb vazhdojm\u00eb t\u00eb d\u00ebrgojm\u00eb p\u00ebrmbajtje klient\u00ebve shpejt dhe pa humbur cil\u00ebsi. Nj\u00eb situat\u00eb e till\u00eb ndodhi. N\u00eb jav\u00ebn e par\u00eb t\u00eb konferencave, ne riparojm\u00eb nj\u00eb makin\u00eb, e ndezim\/e fikim. Duket se njer\u00ebzit jan\u00eb t\u00eb k\u00ebnaqur me q\u00ebndrueshm\u00ebrin\u00eb ton\u00eb. <\/p>\n<p><\/p>\n<p>M\u00eb pas, rrjedhat nga kompjuter\u00ebt shkojn\u00eb n\u00eb serverin lokal, i cili ka dy detyra: t\u00eb rruaj\u00eb rrjedhat RTMP dhe t\u00eb regjistron nj\u00eb kopje rezerv\u00eb. K\u00ebshtu, ne kemi disa pik\u00eb regjistrimi. M\u00eb von\u00eb, rrjedhat e videos d\u00ebrgohen n\u00eb nj\u00eb pjes\u00eb t\u00eb sistemit ton\u00eb, e nd\u00ebrtuar mbi sh\u00ebrbimet SaaS t\u00eb Amazon. P\u00ebrdorim <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/medialive\/\">MediaLive<\/a><\/noindex>, S3, CloudFront. <\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Dhe \u00e7far\u00eb ndodh atje para se videoja t\u00eb arrij\u00eb tek shikuesit? A nuk duhet ta prishni ndonj\u00ebher\u00eb?<\/p>\n<p><\/p>\n<p><b>Artyom:<\/b> Ne ngushtojm\u00eb videon nga ana jon\u00eb, e d\u00ebrgojm\u00eb n\u00eb MediaLive. Atje, aktivizojm\u00eb transcoder-at. Ata ricodojn\u00eb videon n\u00eb koh\u00eb reale n\u00eb disa rezolucione q\u00eb njer\u00ebzit t\u00eb mund ta shikojn\u00eb at\u00eb n\u00eb telefonat e tyre, p\u00ebrmes internetit t\u00eb dob\u00ebt n\u00eb vil\u00eb dhe k\u00ebshtu me radh\u00eb. M\u00eb pas, k\u00ebto transmetime preken n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Chunk_(information)\">\u00e7anka<\/a><\/noindex>, k\u00ebshtu funksionon protokolli <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP_Live_Streaming\">HLS<\/a><\/noindex>. Ne i japim frontend-it nj\u00eb playlist, n\u00eb t\u00eb cil\u00ebn jan\u00eb treguesit p\u00ebr k\u00ebto copa.<\/p>\n<p><\/p>\n<p>\u2014 A p\u00ebrdorim rezolucionin 1080p?<\/p>\n<p><\/p>\n<p><b>Artyom:<\/b> Gjer\u00ebsia \u00ebsht\u00eb si video 1080p \u2014 1920 piksel, nd\u00ebrsa lart\u00ebsia \u00ebsht\u00eb pak m\u00eb e vog\u00ebl, figura \u00ebsht\u00eb m\u00eb e zgjatur \u2014 kjo ka shkaqet e veta.<\/p>\n<p><\/p>\n<h1 id=\"pleer\">Lojtari<\/h1>\n<p><\/p>\n<p>\u2014 Artiom e p\u00ebrshkroi se si videoja p\u00ebrfundon n\u00eb transmetime, si ndahen n\u00eb lista t\u00eb ndryshme p\u00ebr rezolucione t\u00eb ndryshme ekranesh, shkurtohet n\u00eb fragmente dhe hyn n\u00eb lojtar. Kolja, tregoi tani, \u00e7far\u00eb \u00ebsht\u00eb ky lojtar, si konsumon transmetimin, p\u00ebrse HLS?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Kemi nj\u00eb lojtar q\u00eb e ndjekin t\u00eb gjith\u00eb shikuesit e konferenc\u00ebs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/dae747f03795382deb0977d54dfa7561.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb thelb, kjo \u00ebsht\u00eb nj\u00eb mb\u00ebshtjell\u00ebs mbi bibliotek\u00ebn <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/video-dev\/hls.js\">hls.js<\/a><\/noindex>, mbi t\u00eb cil\u00ebn jan\u00eb shkruar shum\u00eb lojtar\u00eb t\u00eb tjer\u00eb. Por na nevojitej nj\u00eb funksionalitet shum\u00eb specifik: rikthim prapa dhe sh\u00ebnim n\u00eb vendin ku ndodhet personi, cili prezantim po e shikon tani. Po ashtu, na duhen dizajne t\u00eb posa\u00e7me, logo dhe \u00e7do gj\u00eb tjet\u00ebr q\u00eb \u00ebsht\u00eb integruar me ne. K\u00ebshtu q\u00eb vendos\u00ebm t\u00eb shkruajm\u00eb nj\u00eb bibliotek\u00eb t\u00eb vetme (mb\u00ebshtjell\u00ebs mbi HLS) dhe ta integrojm\u00eb n\u00eb faqe. <\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb funksionaliteti kryesor, k\u00ebshtu q\u00eb u realizua thuajse e para. M\u00eb pas, p\u00ebrreth k\u00ebsaj gjith\u00e7ka filloi t\u00eb rritet. <\/p>\n<p><\/p>\n<p>N\u00eb fakt, player-i merr nga backend-i nj\u00eb list\u00eb me lidhje p\u00ebr chunks, t\u00eb lidhura me koh\u00ebn dhe cil\u00ebsin\u00eb, dhe i shkarkon ato t\u00eb nevojshme n\u00eb m\u00ebnyr\u00eb q\u00eb t'i tregoj\u00eb p\u00ebrdoruesit, duke kryer n\u00eb k\u00ebt\u00eb proces nj\u00ebfar\u00eb 'magjie'.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/e20335b062f38ccf05af41a4324ff4fb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Shembulli i koh\u00ebs<\/i><\/p>\n<p><\/p>\n<p>\u2014 Direkt n\u00eb player \u00ebsht\u00eb e integruar nj\u00eb buton p\u00ebr t\u00eb shfaqur koh\u00ebn e t\u00eb gjitha prezantimeve...<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Po, ne menj\u00ebher\u00eb zgjidh\u00ebm problemin e navigimit t\u00eb p\u00ebrdoruesit. N\u00eb mes t\u00eb prillit vendos\u00ebm t\u00eb mos transmetonim \u00e7do konferenc\u00eb n\u00eb nj\u00eb faqe t\u00eb ve\u00e7ant\u00eb, por t'i bashkonim t\u00eb gjitha n\u00eb nj\u00eb. K\u00ebshtu, p\u00ebrdoruesit me bilet\u00eb Full Pass mund t\u00eb kalojn\u00eb lirisht midis konferencave t\u00eb ndryshme: si transmetimi direkt ashtu edhe regjistrimet e kaluara. <\/p>\n<p><\/p>\n<p>Dhe p\u00ebr t\u00eb leht\u00ebsuar p\u00ebrdoruesit n\u00eb l\u00ebvizjen e tyre n\u00eb transmetimin aktual dhe kalimin midis temave, vendos\u00ebm t\u00eb krijojm\u00eb nj\u00eb buton 'I gjith\u00eb transmetimi' dhe karta horizontale p\u00ebr prezantimet p\u00ebr kalimin mes temave dhe prezantimeve. Aty ka kontroll nga tastiera.<\/p>\n<p><\/p>\n<p>\u2014 A kishte ndonj\u00eb v\u00ebshtir\u00ebsi teknike me k\u00ebt\u00eb?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Ishte me shiritin e rrotullimit, ku sh\u00ebnohen pikat e fillimit t\u00eb prezantimeve t\u00eb ndryshme. <\/p>\n<p><\/p>\n<p>\u2014 N\u00eb fund, a e realizuat k\u00ebto sh\u00ebnime n\u00eb shiritin e rrotullimit m\u00eb her\u00ebt se YouTube?<\/p>\n<p><\/p>\n<p><b>Artyom:<\/b> Ata e kishin at\u00ebher\u00eb n\u00eb beta. Duket se \u00ebsht\u00eb nj\u00eb ve\u00e7ori mjaft e komplikuar, pasi ata e kan\u00eb provuar pjes\u00ebrisht me p\u00ebrdoruesit gjat\u00eb vitit t\u00eb kaluar. Dhe tani, p\u00ebrfundimisht, ka arritur n\u00eb shitje. <\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Por ne e kemi \u00e7uar n\u00eb shitje m\u00eb shpejt. E v\u00ebrteta \u00ebsht\u00eb q\u00eb pas k\u00ebsaj ve\u00e7orie t\u00eb thjesht\u00eb fshihet nj\u00eb sasi e madhe t\u00eb backend-it, frontend-it dhe llogaritjeve dhe matematik\u00ebs brenda lojtarit.<\/p>\n<p><\/p>\n<h1 id=\"frontend\">Frontend<\/h1>\n<p><\/p>\n<p>\u2014 Le t\u00eb kuptojm\u00eb si del ky p\u00ebrmbajtje q\u00eb ne e tregojm\u00eb (kartela e prezantimit, fol\u00ebsit, faqja, orari) n\u00eb frontend?<\/p>\n<p><\/p>\n<p><b>Vladimir Krasilshchik:<\/b> Kemi disa sisteme t\u00eb brendshme IT. Ka nj\u00eb sistem ku jan\u00eb regjistruar t\u00eb gjitha prezantimet dhe t\u00eb gjith\u00eb fol\u00ebsit. Ka nj\u00eb proces me t\u00eb cilin fol\u00ebsi merr pjes\u00eb n\u00eb konferenc\u00eb. Fol\u00ebsi aplikon, sistemi e kap at\u00eb, m\u00eb pas ka nj\u00eb pipeline t\u00eb caktuar nga i cili krijohet prezantimi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/309559ba100f9b5e2195c7720b82f62d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>K\u00ebshtu fol\u00ebsi sheh pipeline-in<\/i><\/p>\n<p><\/p>\n<p>Ky sistem \u00ebsht\u00eb zhvillim i brendsh\u00ebm p\u00ebr ne. <\/p>\n<p><\/p>\n<p>M\u00eb von\u00eb, nga raportet e ve\u00e7anta duhet t\u00eb nd\u00ebrtojm\u00eb nj\u00eb planifikim. Si\u00e7 dihet, kjo \u00ebsht\u00eb nj\u00eb detyr\u00eb NP-e komplikuar, por ne e zgjidhim n\u00eb nj\u00eb far\u00eb m\u00ebnyre. P\u00ebr k\u00ebt\u00eb, aktivizojm\u00eb nj\u00eb komponent tjet\u00ebr q\u00eb formon orarin dhe e d\u00ebrgon at\u00eb n\u00eb sh\u00ebrbimin e jasht\u00ebm t\u00eb Cloud-it, Contentful. Atje, gjith\u00e7ka duket si nj\u00eb tabel\u00eb, ku ka dit\u00ebt e konferenc\u00ebs, n\u00eb dit\u00eb - koh\u00eb t\u00eb caktuara, dhe n\u00eb t\u00eb - prezantime, pushime ose aktivitete sponsoruese. Pra, p\u00ebrmbajtja q\u00eb ne shohim ndodhet n\u00eb nj\u00eb sh\u00ebrbim t\u00eb jasht\u00ebm. Dhe q\u00ebllimi \u00ebsht\u00eb t\u00eb arrijm\u00eb tek faqja. <\/p>\n<p><\/p>\n<p>Duket se faqja \u00ebsht\u00eb thjesht nj\u00eb faqe me nj\u00eb lojtar, dhe nuk ka asgj\u00eb t\u00eb komplikuar k\u00ebtu. P\u00ebrve\u00e7 faktit q\u00eb nuk \u00ebsht\u00eb k\u00ebshtu. Backend-i q\u00eb q\u00ebndron pas k\u00ebsaj faqeje shkon n\u00eb Contentful, merr orarin nga aty, formon disa objekte dhe i d\u00ebrgon n\u00eb frontend. Me ndihm\u00ebn e nj\u00eb lidhjeje t\u00eb websockets, e cila b\u00ebhet nga \u00e7do klient i platform\u00ebs son\u00eb, ne d\u00ebrgojm\u00eb nj\u00eb p\u00ebrdit\u00ebsim t\u00eb orarit nga backend n\u00eb frontend. <\/p>\n<p><\/p>\n<p>Nj\u00eb rast real: nj\u00eb fol\u00ebs ndryshoi pun\u00eb pik\u00ebrisht gjat\u00eb konferenc\u00ebs. Duhet ta ndryshojm\u00eb pllak\u00ebn e kompanis\u00eb q\u00eb e pun\u00ebson. Si ndodh kjo nga backend? Nj\u00eb azhurnim i d\u00ebrgohet t\u00eb gjith\u00eb klient\u00ebve p\u00ebrmes WebSocket-it, dhe m\u00eb pas frontend-i e rib\u00ebhet vet\u00eb timeline-in. T\u00eb gjitha k\u00ebto ndodhin n\u00eb m\u00ebnyr\u00eb t\u00eb pand\u00ebrprer\u00eb. Kombinimi i sh\u00ebrbimit n\u00eb njohje dhe disa nga komponent\u00ebt tan\u00eb na jep mund\u00ebsin\u00eb t\u00eb formojm\u00eb gjith\u00eb k\u00ebt\u00eb p\u00ebrmbajtje dhe ta ofrojm\u00eb p\u00ebrpara. <\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> K\u00ebtu \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb sqarojm\u00eb se faqja jon\u00eb nuk \u00ebsht\u00eb nj\u00eb aplikacion klasik SPA. Kjo \u00ebsht\u00eb si nj\u00eb faqe e nd\u00ebrtuar, e renderuar, ashtu edhe nj\u00eb SPA. N\u00eb t\u00eb v\u00ebrtet\u00eb, Google e sheh k\u00ebt\u00eb faqe si HTML t\u00eb renderuar. Kjo \u00ebsht\u00eb mir\u00eb p\u00ebr SEO dhe p\u00ebr shp\u00ebrndarjen e p\u00ebrmbajtjes tek p\u00ebrdoruesi. Ai nuk pret ngarkimin e 1.5 megabajto JavaScript p\u00ebr t\u00eb par\u00eb faqen, ai e sheh menj\u00ebher\u00eb faqen e renderuar, dhe ju e ndjeni k\u00ebt\u00eb \u00e7do her\u00eb kur kaloni tek nj\u00eb prezantim. Gjith\u00e7ka ndodh p\u00ebr nj\u00eb gjysm\u00eb sekonde, pasi p\u00ebrmbajtja \u00ebsht\u00eb tashm\u00eb gati dhe e vendosur n\u00eb vendin e duhur.<\/p>\n<p><\/p>\n<p>\u2014 Le t\u00eb p\u00ebrmblidhim gjith\u00e7ka t\u00eb th\u00ebn\u00eb m\u00eb par\u00eb, duke enumeruar teknologjit\u00eb. T\u00eb Ma ka treguar se kemi 5 Amazon-stream, aty d\u00ebrgojm\u00eb video dhe tinguj. Atje kemi skript bash, me ndihm\u00ebn e t\u00eb cil\u00ebve e fillojm\u00eb, e konfigurojm\u00eb...<\/p>\n<p><\/p>\n<p><b>Artyom:<\/b> Kjo ndodh p\u00ebrmes API AWS, ka shum\u00eb sh\u00ebrbime teknike t\u00eb tjera p\u00ebrkrah\u00ebse. Ne e ndam\u00eb detyrat tona n\u00eb m\u00ebnyr\u00eb q\u00eb un\u00eb t\u00eb d\u00ebrgoj n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/cloudfront\/\">CloudFront<\/a><\/noindex>, nd\u00ebrsa zhvilluesit e frontend-it dhe backend-it marrin prej aty. Ne kemi nj\u00eb num\u00ebr t\u00eb caktuar t\u00eb mb\u00ebshtetjeve tona p\u00ebr t\u00eb thjeshtuar publikimin e p\u00ebrmbajtjes, q\u00eb m\u00eb pas e b\u00ebjm\u00eb n\u00eb 4K etj. Duke qen\u00eb se afatet ishin shum\u00eb t\u00eb shkurtra, ne praktikisht e b\u00ebm\u00eb k\u00ebt\u00eb t\u00eb gjith\u00eb mbi baz\u00ebn e AWS.<\/p>\n<p><\/p>\n<p>\u2014 M\u00eb pas gjith\u00e7ka shkon n\u00eb lojtar, duke p\u00ebrdorur backend-in e sistemit. Ne kemi n\u00eb lojtar TypeScript, React, Next.JS. Dhe n\u00eb backend kemi disa sh\u00ebrbime n\u00eb C#, Java, Spring Boot dhe Node.js. T\u00eb gjitha k\u00ebto zhvillohen me Kubernetes, duke p\u00ebrdorur infrastruktur\u00ebn e Yandex.Cloud.<\/p>\n<p><\/p>\n<p>Gjithashtu d\u00ebshiroj t\u00eb theksoj se kur m\u00eb duhej t\u00eb njihesha me platform\u00ebn, nuk ishte e v\u00ebshtir\u00eb: t\u00eb gjitha depozit\u00eb jan\u00eb n\u00eb GitLab, gjith\u00e7ka \u00ebsht\u00eb mir\u00eb e em\u00ebruar, jan\u00eb shkruar teste, ka dokumentacion. K\u00ebshtu q\u00eb edhe n\u00eb situata urgjente, u kujdes\u00ebn p\u00ebr k\u00ebto gj\u00ebra.<\/p>\n<p><\/p>\n<h1 id=\"biznes-ogranicheniya-i-analitika\">Kufizimet biznesore dhe analiza<\/h1>\n<p><\/p>\n<p>\u2014 Ne kemi targetuar k\u00ebrkesat e biznesit p\u00ebr 10,000 p\u00ebrdorues. Koha \u00ebsht\u00eb p\u00ebr t\u00eb folur p\u00ebr kufizimet e biznesit q\u00eb kishim. Na duhej t\u00eb siguroni nj\u00eb ngarkes\u00eb t\u00eb lart\u00eb, t\u00eb respektojm\u00eb ligjin p\u00ebr ruajtjen e t\u00eb dh\u00ebnave personale. \u00c7far\u00eb tjet\u00ebr?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Fillimisht ne u orientuam nga k\u00ebrkesat p\u00ebr videon. E r\u00ebnd\u00ebsishmja \u2014 ruajtja e shp\u00ebrndar\u00eb e videove n\u00eb t\u00eb gjith\u00eb bot\u00ebn p\u00ebr nj\u00eb shp\u00ebrndarje t\u00eb shpejt\u00eb p\u00ebr klient\u00ebt. Nga k\u00ebrkesat e tjera \u2014 zgjidhja 1080p, si dhe mund\u00ebsia p\u00ebr t\u00eb rikthyer p\u00ebrpara, q\u00eb shum\u00eb t\u00eb tjer\u00eb nuk e realizojn\u00eb n\u00eb koh\u00eb reale. M\u00eb von\u00eb shtuam mund\u00ebsin\u00eb p\u00ebr t\u00eb aktivizuar shpejt\u00ebsin\u00eb 2x, me t\u00eb cil\u00ebn mund t\u00eb \"kap\u00ebsh\" transmetimin dhe m\u00eb pas t\u00eb vazhdosh t\u00eb shikosh konferenc\u00ebn n\u00eb koh\u00eb reale. Gjithashtu, ndodhi q\u00eb t\u00eb zhvillohet funksionaliteti i sh\u00ebnjimit t\u00eb timeline. P\u00ebrve\u00e7 k\u00ebsaj, ne duhej t\u00eb ishim t\u00eb papenguar dhe t\u00eb p\u00ebrballonim nj\u00eb ngarkes\u00eb prej 10,000 lidhjesh. Nga pik\u00ebpamja e backend-it, kjo do t\u00eb thot\u00eb rreth 10,000 lidhje t\u00eb shum\u00ebzuara me 8 k\u00ebrkesa p\u00ebr \u00e7do rifreskim t\u00eb faqes. Dhe kjo \u00ebsht\u00eb tashm\u00eb 80,000 RPS\/s. Mjaft shum\u00eb.<\/p>\n<p><\/p>\n<p>\u2014 A kishin gjithashtu k\u00ebrkesa p\u00ebr \"ekspozit\u00ebn virtuale\" me stendet e partner\u00ebve online?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Po, kjo duhej b\u00ebr\u00eb mjaft shpejt dhe n\u00eb m\u00ebnyr\u00eb universale. Kishim deri n\u00eb 10 kompani partnere p\u00ebr \u00e7do konferenc\u00eb, dhe t\u00eb gjitha faqet e tyre duhej t\u00eb ishin nd\u00ebrtuar brenda nj\u00eb ose dy jav\u00ebsh. P\u00ebr m\u00eb tep\u00ebr, p\u00ebrmbajtja e tyre ndryshonte pak n\u00eb format. Megjithat\u00eb, u b\u00eb nj\u00eb caktues i caktuar q\u00eb mbledh k\u00ebto faqe n\u00eb fluks, praktikisht pa pjes\u00ebmarrje t\u00eb m\u00ebtejshme nga zhvillimi. <\/p>\n<p><\/p>\n<p>\u2014 Kishte gjithashtu k\u00ebrkesa p\u00ebr analiz\u00ebn e shikimeve n\u00eb koh\u00eb reale dhe statistikat. E di q\u00eb ne p\u00ebrdorim p\u00ebr k\u00ebt\u00eb Prometheus, por tregoni m\u00eb shum\u00eb: \u00e7far\u00eb k\u00ebrkesash p\u00ebrmbushim p\u00ebr analiz\u00ebn, dhe si realizohet kjo?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Fillimisht kemi k\u00ebrkesa marketingu p\u00ebr mbledhjen p\u00ebr A\/B-testimin dhe p\u00ebr mbledhjen e informacionit p\u00ebr t\u00eb kuptuar si t'i ofrojm\u00eb p\u00ebrmbajtjen m\u00eb t\u00eb mir\u00eb klientit n\u00eb t\u00eb ardhmen. Ka gjithashtu k\u00ebrkesa p\u00ebr ndonj\u00eb analiz\u00eb mbi aktivitetet partnere dhe analiz\u00ebn q\u00eb ju shihni (num\u00ebrimin e vizitave). T\u00eb gjitha informacionet mblidhen n\u00eb koh\u00eb reale. <\/p>\n<p><\/p>\n<p>Ne mund t\u00eb ofrojm\u00eb k\u00ebt\u00eb informacion n\u00eb nj\u00eb form\u00eb t\u00eb agreguar edhe p\u00ebr fol\u00ebsit: sa njer\u00ebz t\u00eb kan\u00eb par\u00eb n\u00eb nj\u00eb moment t\u00eb caktuar. Gjithashtu, n\u00eb p\u00ebrputhje me ligjin 152 FZ, llogaria personale dhe t\u00eb dh\u00ebnat personale nuk gjurmohen n\u00eb fare. <\/p>\n<p><\/p>\n<p>Platforma ka tashm\u00eb mjete marketingu dhe metrika tona p\u00ebr matjen e aktivizmit t\u00eb p\u00ebrdoruesve pik\u00ebrisht n\u00eb koh\u00eb reale (kush ka par\u00eb \u00e7do sekond\u00eb t\u00eb prezantimit), p\u00ebr t\u00eb nd\u00ebrtuar grafikun e vizitave t\u00eb prezantimeve. N\u00eb baz\u00eb t\u00eb k\u00ebtyre t\u00eb dh\u00ebnave kryhen hulumtime q\u00eb do t\u00eb lejojn\u00eb konferencat e ardhshme t\u00eb jen\u00eb m\u00eb t\u00eb mira. <\/p>\n<p><\/p>\n<h1 id=\"frod\">Fraud\u00eb<\/h1>\n<p><\/p>\n<p>A kemi mekanizma anti-fraud\u00eb?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> P\u00ebr shkak t\u00eb kufijve t\u00eb rrept\u00eb temporal nga pik\u00ebpamja e biznesit, fillimisht nuk ishte p\u00ebrcaktuar q\u00ebllimi p\u00ebr t\u00eb bllokuar menj\u00ebher\u00eb lidhjet e tep\u00ebrta. N\u00ebse dy p\u00ebrdorues hynin me t\u00eb nj\u00ebjtin llogari, ata mund t\u00eb shihnin p\u00ebrmbajtjen. Por dim\u00eb se sa shikime t\u00eb nj\u00ebkohshme ka pasur nga nj\u00eb llogari. Dhe disa violator\u00eb t\u00eb ve\u00e7ant\u00eb kan\u00eb qen\u00eb t\u00eb bllokuar. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Duhet t'i jepet merita, nj\u00eb nga p\u00ebrdoruesit e bllokuar e kuptoi pse ndodhi kjo. Erdhi, k\u00ebrkoi falje dhe premtoi se do t\u00eb blinte bilet\u00eb.<\/p>\n<p><\/p>\n<p>\u2014 P\u00ebr t\u00eb gjitha k\u00ebto t\u00eb ndodhin, duhet t\u00eb ndjekim t\u00eb gjith\u00eb p\u00ebrdoruesit nga hyrja deri n\u00eb dalje, gjithmon\u00eb duke ditur se \u00e7far\u00eb po b\u00ebjn\u00eb. Si funksionon ky sistem?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Do doja t\u00eb flisja p\u00ebr analitik\u00ebn dhe statistik\u00ebn, t\u00eb cilat ne m\u00eb pas i analizojm\u00eb p\u00ebr suksesin e ligj\u00ebrat\u00ebs ose mund t'i ofrojm\u00eb m\u00eb von\u00eb partner\u00ebve. T\u00eb gjith\u00eb klient\u00ebt jan\u00eb t\u00eb lidhur p\u00ebrmes nj\u00eb lidhjeje WebSocket me nj\u00eb grup t\u00eb caktuar backend. Atje \u00ebsht\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.com\/\">Hazelcast<\/a><\/noindex>. Secili klient n\u00eb \u00e7do periudh\u00eb kohe d\u00ebrgon informacion p\u00ebr at\u00eb q\u00eb b\u00ebn dhe cilin track po e shikon. M\u00eb pas, kjo informat\u00eb p\u00ebrpunohet shpejt nga jobs t\u00eb Hazelcast-it dhe kthehet te t\u00eb gjith\u00eb ata q\u00eb po shikojn\u00eb k\u00ebto tracks. Ne shohim n\u00eb k\u00ebnd, sa njer\u00ebz jan\u00eb tani me ne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/fa08d10412cbdab418914183f25efa3b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo e nj\u00ebjta informat\u00eb ruhet n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mongodb.com\/\">Mongo<\/a><\/noindex> dhe d\u00ebrgohet n\u00eb liqenin ton\u00eb t\u00eb t\u00eb dh\u00ebnave, n\u00ebp\u00ebrmjet t\u00eb cilit kemi mund\u00ebsin\u00eb t\u00eb nd\u00ebrtojm\u00eb nj\u00eb grafik m\u00eb interesant. Vjen pyetja: sa p\u00ebrdorues unik\u00eb kan\u00eb par\u00eb k\u00ebt\u00eb ligj\u00ebrat\u00eb? Ne shkojm\u00eb n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/\">Postgres<\/a><\/noindex>, atje jan\u00eb ping-et e gjith\u00eb njer\u00ebzve q\u00eb erdh\u00ebn p\u00ebrmes id t\u00eb k\u00ebsaj ligj\u00ebrate. I mblodh\u00ebm, i agreguam unik\u00ebt, dhe tani mund ta kuptojm\u00eb.<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Por k\u00ebt\u00eb arsye, ne marrim gjithashtu t\u00eb dh\u00ebna n\u00eb koh\u00eb reale nga Prometheus. Ai \u00ebsht\u00eb i orientuar ndaj t\u00eb gjitha sh\u00ebrbimeve Kubernetes, ndaj Kubernetes vet\u00eb. Grumbullon gjith\u00e7ka, dhe me Grafana mund t\u00eb nd\u00ebrtojm\u00eb \u00e7do grafik n\u00eb koh\u00eb reale.<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Nga nj\u00ebra an\u00eb, ne e nxjerrim k\u00ebt\u00eb p\u00ebr p\u00ebrpunim t\u00eb m\u00ebtejsh\u00ebm t\u00eb tipit OLAP. Nd\u00ebrsa p\u00ebr aplikacionin OLTP, t\u00eb gjitha k\u00ebto d\u00ebrgohen n\u00eb Prometheus, Grafana dhe grafiket madje p\u00ebrputhen! <\/p>\n<p><\/p>\n<p>\u2014 Ky \u00ebsht\u00eb rasti kur grafiket p\u00ebrputhen.<\/p>\n<p><\/p>\n<h1 id=\"dinamicheskie-izmeneniya\">Ndryshimet dinamike<\/h1>\n<p><\/p>\n<p>\u2014 Na thoni, si realizohen ndryshimet dinamike: n\u00ebse raporti anulohet 6 minuta para fillimit, cila \u00ebsht\u00eb zinxhirin e veprimit? Cili \u00ebsht\u00eb pipeline q\u00eb aktivizohet?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Pipeline \u00ebsht\u00eb shum\u00eb kushtor. Ka disa mund\u00ebsi. E para \u2014 programi q\u00eb krijon orarin ka funksionuar dhe e ka ndryshuar k\u00ebt\u00eb orar. Orari i ndryshuar shp\u00ebrndahet n\u00eb Contentful. Pas k\u00ebsaj, backend-i kupton se ka ndryshime p\u00ebr k\u00ebt\u00eb konferenc\u00eb n\u00eb Contentful, merr dhe ri-nd\u00ebrton. Gjith\u00e7ka grumbullohet dhe d\u00ebrgohet p\u00ebrmes websocket. <\/p>\n<p><\/p>\n<p>Mund\u00ebsia e dyt\u00eb, kur gjith\u00e7ka ndodh me nj\u00eb rit\u00ebm t\u00eb \u00e7mendur: redaktori ndryshon informacionin n\u00eb Contentful me duar (linkun n\u00eb Telegram, prezantimin e referuesit, etj.) dhe aktivizohet e nj\u00ebjta logjik\u00eb si her\u00ebn e par\u00eb. <\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> \u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0422\u0430\u043a\u0436\u0435 \u0438 \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432\u0440\u0435\u043c\u044f, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043a\u043b\u0430\u0434 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> \u0422\u0430\u043a\u0436\u0435 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0441\u0435\u0447\u043a\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432 \u0432 \u0442\u0430\u0439\u043c\u043b\u0430\u0439\u043d\u0435. \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043c\u044b\u0448\u043a\u0443 \u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u043a\u0443, \u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0440\u0435\u0436\u0438\u0441\u0441\u0435\u0440\u0443 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438, \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043e\u0442\u0441\u0435\u0447\u043a\u0438. \u0420\u0435\u0436\u0438\u0441\u0441\u0435\u0440 \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438, \u0431\u044d\u043a\u0435\u043d\u0434 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432 \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0435\u043a\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c, \u043f\u043b\u0435\u0435\u0440 \u0440\u0438\u0441\u0443\u0435\u0442 \u043e\u0442\u0441\u0435\u0447\u043a\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043d\u0430\u0432\u0438\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0434\u043e\u043a\u043b\u0430\u0434\u0430. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0436\u0435\u0441\u0442\u043a\u043e\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435, \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435. \u0422\u044b \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0448\u044c \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u0435\u0432\u044c\u044e, \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><\/p>\n<h1 id=\"deployment\">\u0414\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442<\/h1>\n<p><\/p>\n<p>\u2014 \u042f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u043e \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442. \u041a\u043e\u043b\u044f \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0443\u0431\u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438, \u0438\u0437 \u0447\u0435\u0433\u043e \u044d\u0442\u043e \u0432\u0441\u0451?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> N\u00eb fillim pat\u00ebm nj\u00eb k\u00ebrkes\u00eb nga ana teknike p\u00ebr produktin q\u00eb t\u00eb ishte sa m\u00eb shum\u00eb i abstrahuar nga ndonj\u00eb ofrues. T\u00eb shkonim n\u00eb AWS p\u00ebr t\u00eb b\u00ebr\u00eb skriptet Terraform specifike p\u00ebr AWS, ose specifike p\u00ebr Yandex, ose p\u00ebr Azure etj., nuk ishte shum\u00eb e p\u00ebrshtatshme. Kemi pasur nevoj\u00eb t\u00eb zhvendosemi diku. <\/p>\n<p><\/p>\n<p>T\u00eb parat tri jav\u00ebt vazhdimisht po k\u00ebrkonim m\u00ebnyr\u00ebn se si ta b\u00ebjm\u00eb k\u00ebt\u00eb m\u00eb mir\u00eb. N\u00eb fund arrit\u00ebm n\u00eb p\u00ebrfundimin se Kubernetes n\u00eb k\u00ebt\u00eb rast \u00ebsht\u00eb gjith\u00e7ka p\u00ebr ne, sepse lejon krijimin e sh\u00ebrbimeve automatikisht t\u00eb shkall\u00ebzueshme, nd\u00ebrrimin automatik dhe merrni nga kutia pothuajse t\u00eb gjitha sh\u00ebrbimet. Sigurisht, duhej t\u00eb trajnonim t\u00eb gjith\u00eb sh\u00ebrbimet p\u00ebr t\u00eb punuar me Kubernetes, Docker, dhe ekipi gjithashtu duhej t\u00eb m\u00ebsonte. <\/p>\n<p><\/p>\n<p>Kemi dy klastera. Nj\u00eb testues dhe nj\u00eb prodhues. Ata jan\u00eb absolutisht identik\u00eb nga pik\u00ebpamja e harduerit dhe konfiguriacioneve. Po implementojm\u00eb infrastruktur\u00ebn si kod. T\u00eb gjitha sh\u00ebrbimet shp\u00ebrndahen me pipeline automatik n\u00eb tre ambiente nga deg\u00ebt e tipareve, nga deg\u00ebt kryesore, nga ato testuese, nga GitLab. Kjo \u00ebsht\u00eb maksimalisht e integruar n\u00eb GitLab, maksimalisht e integruar me Elastic, Prometheus. <\/p>\n<p><\/p>\n<p>Ne jemi n\u00eb gjendje t\u00eb lan\u00e7ojm\u00eb shpejt (p\u00ebr backend gjat\u00eb 10 minutave, p\u00ebr frontend gjat\u00eb 5 minutave) ndryshime n\u00eb \u00e7do ambient me t\u00eb gjitha testet, integrimet, ekzekutimin e testeve funksionale, testeve integruese n\u00eb ambient, dhe gjithashtu t\u00eb testojm\u00eb me teste ngarkese n\u00eb ambientin testues p\u00ebr t\u00eb marr\u00eb rreth t\u00eb nj\u00ebjt\u00ebs gj\u00eb q\u00eb duam t\u00eb arrijm\u00eb n\u00eb prodhim. <\/p>\n<p><\/p>\n<h1 id=\"pro-testy\">P\u00ebr testet<\/h1>\n<p><\/p>\n<p>\u2014 G hampir cdo gj\u00eb e testoni, \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb besosh se si e keni shkruar. Mund t\u00eb flas\u00ebsh p\u00ebr testet e backend-it: sa \u00ebsht\u00eb i mbuluar gjith\u00e7ka, cilat teste?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Jan\u00eb shkruar dy lloje testesh. T\u00eb parat jan\u00eb testet komponentale. Testet e nivelit t\u00eb ngjitjes s\u00eb gjith\u00eb aplikacionit spring dhe baz\u00ebs n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.testcontainers.org\/\">Testcontainers<\/a><\/noindex>. Kjo \u00ebsht\u00eb nj\u00eb kontroll i skenar\u00ebve t\u00eb biznesit m\u00eb t\u00eb lart\u00eb. Nuk po testoj funksionet. Ne testojm\u00eb vet\u00ebm disa gj\u00ebra t\u00eb m\u00ebdha. P\u00ebr shembull, direkt n\u00eb test simulon procesin e ky\u00e7jes s\u00eb p\u00ebrdoruesit, k\u00ebrkes\u00ebn nga ky p\u00ebrdorues p\u00ebr biletat, ose aksesin p\u00ebr t\u00eb par\u00eb nj\u00eb stream. Scenar\u00ebt e p\u00ebrdoruesit jan\u00eb shum\u00eb t\u00eb qart\u00eb. <\/p>\n<p><\/p>\n<p>P\u00ebrgjith\u00ebsisht e nj\u00ebjta gj\u00eb \u00ebsht\u00eb realizuar n\u00eb at\u00eb q\u00eb quhet teste integruese, t\u00eb cilat realisht funksionojn\u00eb n\u00eb mjedis. N\u00eb fakt, kur nj\u00eb tjet\u00ebr shp\u00ebrndarje n\u00eb prodhim b\u00ebhet, skenar\u00ebt baz\u00eb t\u00eb v\u00ebrtet\u00eb gjithashtu funksionojn\u00eb n\u00eb prodhim. E nj\u00ebjta lidhje, k\u00ebrkesa p\u00ebr bileta, k\u00ebrkesa p\u00ebr akses n\u00eb CloudFront, kontrolli p\u00ebr t\u00eb siguruar q\u00eb stream-i zgjidhet me lejet e mia, kontrolli i nd\u00ebrfaqes s\u00eb regjisor\u00ebve. <\/p>\n<p><\/p>\n<p>Aktualisht kam rreth 70 teste komponenti dhe rreth 40 teste integruese. Pokrimi \u00ebsht\u00eb shum\u00eb af\u00ebr 95%. Kjo p\u00ebr testet komponenti, p\u00ebr ato integruese jan\u00eb pak m\u00eb pak, sepse nuk ka nevoj\u00eb p\u00ebr aq shum\u00eb. Duke marr\u00eb parasysh q\u00eb projekti ka gjith\u00ebfar\u00eb gjenerimeve t\u00eb kodit, ky \u00ebsht\u00eb nj\u00eb tregues shum\u00eb i mir\u00eb. Nuk kishte asnj\u00eb m\u00ebnyr\u00eb tjet\u00ebr p\u00ebr t\u00eb b\u00ebr\u00eb at\u00eb q\u00eb kemi b\u00ebr\u00eb p\u00ebr tre muaj. Sepse n\u00ebse do t\u00eb testonim n\u00eb m\u00ebnyr\u00eb manuale, duke i dh\u00ebn\u00eb funksionalitetet testuesit ton\u00eb, dhe ajo do t\u00eb gjej\u00eb gabime dhe do t'i kthej\u00eb p\u00ebr rregullim, at\u00ebher\u00eb ky proces i ndihm\u00ebs s\u00eb kodit do t\u00eb ishte shum\u00eb i gjat\u00eb, dhe ne nuk do t\u00eb arrinim n\u00eb asnj\u00eb afat.<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Kushtimisht, p\u00ebr t\u00eb kryer nj\u00eb rregresion n\u00eb t\u00eb gjith\u00eb platform\u00ebn kur ndonj\u00eb funksion ndryshohet, duhen dy dit\u00eb duke punuar dhe klikuar kudo. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Prandaj, \u00ebsht\u00eb nj\u00eb sukses i madh q\u00eb, kur un\u00eb estimoj nj\u00eb ve\u00e7ori, them se m\u00eb nevojiten 4 dit\u00eb p\u00ebr dy thjesht\u00ebsi dhe 1 websocket, Kolya lejon. Ai tashm\u00eb \u00ebsht\u00eb m\u00ebsuar q\u00eb n\u00eb k\u00ebto 4 dit\u00eb jan\u00eb t\u00eb p\u00ebrfshira 2 lloje testesh, dhe m\u00eb pas, ka t\u00eb ngjar\u00eb q\u00eb gjith\u00e7ka do t\u00eb funksionoj\u00eb. <\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Edhe un\u00eb kam shkruar 140 teste: komponente + funksionale, t\u00eb cilat b\u00ebjn\u00eb t\u00eb nj\u00ebjt\u00ebn gj\u00eb. T\u00eb nj\u00ebjtat skenar\u00eb testohen dhe n\u00eb prodhim, n\u00eb test dhe n\u00eb zhvillim. Gjithashtu, koh\u00ebt e fundit kemi filluar t\u00eb kemi teste funksionale bazike UI. K\u00ebshtu ne mbulojm\u00eb funksionalitetet m\u00eb t\u00eb bazuara q\u00eb mund t\u00eb d\u00ebshtojn\u00eb. <\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Sigurisht, \u00ebsht\u00eb e nevojshme t\u00eb flasim p\u00ebr testet e ngarkes\u00ebs. Duhej t\u00eb kontrollonim platform\u00ebn n\u00ebn nj\u00eb ngarkes\u00eb q\u00eb i afrohej realitetit, p\u00ebr t\u00eb kuptuar se \u00e7far\u00eb ndodh me Rabbit, \u00e7far\u00eb ndodh me JVM-t\u00eb, sa realisht nevojitet memorie. <\/p>\n<p><\/p>\n<p>\u2014 Nuk e di sakt\u00ebsisht n\u00ebse po testojm\u00eb ndonj\u00eb gj\u00eb n\u00eb an\u00ebn e transmetimeve, por e mbaj mend se kishte probleme me transkoder\u00ebt kur b\u00ebm\u00eb mitapet. A kemi testuar transmetimet?<\/p>\n<p><\/p>\n<p><b>Artyom:<\/b> I kemi testuar iterativ. Po organizonim takime. N\u00eb procesin e organizimit t\u00eb takimeve kishim rreth 2300 tiketa JIRA. K\u00ebto ishin thjesht gj\u00ebra standarde q\u00eb njer\u00ebzit b\u00ebnin p\u00ebr t\u00eb organizuar takimet. Merrnim pjes\u00eb t\u00eb platform\u00ebs n\u00eb nj\u00eb faqe t\u00eb ve\u00e7ant\u00eb p\u00ebr takimet, t\u00eb cil\u00ebn e menaxhonte Kirill Tolkachev (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/tolkkv\/\" class=\"user_link\">tolkkv<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Sinqerisht, nuk kishte probleme t\u00eb m\u00ebdha. Vet\u00ebm disa her\u00eb has\u00ebm defekte p\u00ebr shkak t\u00eb caches n\u00eb CloudFront, i zgjidh\u00ebm mjaft shpejt \u2014 thjesht rikonfiguruam politikat. Kishte shum\u00eb m\u00eb tep\u00ebr defekte te njer\u00ebzit, n\u00eb sistemet e transmetimit n\u00eb vend. <\/p>\n<p><\/p>\n<p>Gjat\u00eb konferencave na duhej t\u00eb shkruanim disa eksportues t\u00eb tjer\u00eb p\u00ebr t\u00eb mbuluar m\u00eb shum\u00eb pajisje dhe sh\u00ebrbime. N\u00eb disa raste, na duhej t\u00eb krijonim bicicleta t\u00eb veta vet\u00ebm p\u00ebr metrika. Bota e AV (audio-video) nuk \u00ebsht\u00eb shum\u00eb e ndritshme - ke nj\u00eb \"API\" pajisjeje, mbi t\u00eb cilin thjesht nuk ke ndikim. Dhe nuk \u00ebsht\u00eb aspak e garantuar q\u00eb mund t\u00eb marr\u00ebsh informacionin q\u00eb t\u00eb nevojitet. Furnizuesit e pajisjeve jan\u00eb me t\u00eb v\u00ebrtet\u00eb t\u00eb ngadalsh\u00ebm dhe \u00ebsht\u00eb pothuajse e pamundur t\u00eb arrish at\u00eb q\u00eb d\u00ebshiron. N\u00eb total, m\u00eb shum\u00eb se 100 pajisje, ato japin gj\u00ebn\u00eb q\u00eb nuk ka nevoj\u00eb, dhe ti shkruan eksportues t\u00eb \u00e7uditsh\u00ebm dhe t\u00eb tep\u00ebrt, p\u00ebrmes t\u00eb cil\u00ebve mund t\u00eb debagohet sistemi n\u00eb nj\u00ebfar\u00eb m\u00ebnyre.<\/p>\n<p><\/p>\n<h1 id=\"oborudovanie\">Pajisjet<\/h1>\n<p><\/p>\n<p>\u2014 E mbaj mend si, para fillimit t\u00eb konferencave, ne pjes\u00ebrisht blenim pajisje.<\/p>\n<p><\/p>\n<p><b>Artyom:<\/b> Blem\u00eb kompjuter\u00eb, laptop\u00eb, bllok baterish. N\u00eb k\u00ebt\u00eb moment, mund t\u00eb jetojm\u00eb pa energji elektrike p\u00ebr 40 minuta. N\u00eb qershor, n\u00eb Sh\u00ebn Petersburg pati stuhi t\u00eb forta \u2014 k\u00ebshtu q\u00eb kemi p\u00ebrjetuar nj\u00eb nd\u00ebrprerje t\u00eb till\u00eb. Megjithat\u00eb, disa ofrues vijn\u00eb me fibra optike nga pika t\u00eb ndryshme. Kjo n\u00eb t\u00eb v\u00ebrtet\u00eb \u00ebsht\u00eb 40 minuta nd\u00ebrprerjeje p\u00ebr nd\u00ebrtes\u00ebn, gjat\u00eb t\u00eb cilave do t\u00eb kemi drit\u00eb, funksionimin e z\u00ebrit, kamerat etj.<\/p>\n<p><\/p>\n<p>\u2014 Me historia \u00ebsht\u00eb e ngjashme me internetin. N\u00eb zyr\u00ebn ku ndodhen studiot tona, ne kaluam nj\u00eb rrjet t\u00eb shk\u00eblqyer mes kat\u00ebrra.<\/p>\n<p><\/p>\n<p><b>Artyom:<\/b> Kemi 20 GBit fiber optik mes kat\u00ebrra. M\u00eb tej n\u00eb kat\u00ebra ndodhet fibra, ndonj\u00ebher\u00eb jo, por gjithsesi ka m\u00eb pak se kanale gigabit \u2014 ne i nxjerrim mes videove t\u00eb konferencave. N\u00eb fakt, \u00ebsht\u00eb shum\u00eb e leht\u00eb t\u00eb punosh me infrastruktur\u00ebn ton\u00eb, pasi n\u00eb konferencat offline rrall\u00eb gjejm\u00eb mund\u00ebsi t\u00eb b\u00ebjm\u00eb k\u00ebt\u00eb. <\/p>\n<p><\/p>\n<p>\u2014 Edhe para se t\u00eb punoja n\u00eb JUG Ru Group, kisha par\u00eb si vendosen pajisjet p\u00ebr nj\u00eb nat\u00eb n\u00eb konferencat offline, ku ndodhet nj\u00eb monitor i madh me t\u00eb gjitha metrikat q\u00eb nd\u00ebrtoni n\u00eb Grafana. Tani gjithashtu ekziston nj\u00eb sall\u00eb-shtab, ku q\u00ebndron ekipi i zhvillimit, i cili gjat\u00eb konferenc\u00ebs rregullon ndonj\u00eb defekt dhe zhvillon karakteristika. Gjithashtu ka nj\u00eb sistem monitorimi q\u00eb shfaqet n\u00eb nj\u00eb ekran t\u00eb madh. Artyom, Kolya dhe djemt\u00eb e tjer\u00eb q\u00ebndrojn\u00eb dhe shikojn\u00eb q\u00eb gjith\u00e7ka t\u00eb mos bjer\u00eb dhe t\u00eb punoj\u00eb bukur.<\/p>\n<p><\/p>\n<h1 id=\"kuryozy-i-problemy\">Kuriozitete dhe probleme<\/h1>\n<p><\/p>\n<p>\u2014 Flisni p\u00ebr shkurt mbi at\u00eb q\u00eb ofrojm\u00eb, si\u00e7 jan\u00eb transmetimet me Amazon, nj\u00eb player me web, t\u00eb gjitha jan\u00eb shkruar n\u00eb gjuh\u00eb t\u00eb ndryshme programimi, ofrohet q\u00ebndrueshm\u00ebri dhe k\u00ebrkesa t\u00eb tjera biznesi, p\u00ebrfshir\u00eb nj\u00eb llogari t\u00eb personalizuar e cila mb\u00ebshtetet p\u00ebr persona juridik\u00eb dhe fizik\u00eb, dhe ne mund t\u00eb integrohemi me dik\u00eb p\u00ebrmes OAuth 2.0, ka mbrojtje ndaj mashtrimit, bllokim p\u00ebrdoruesi. Ne mund t\u00eb zbatojm\u00eb ndryshime dinamikisht, sepse e kemi b\u00ebr\u00eb mir\u00eb k\u00ebt\u00eb, dhe gjithashtu, gjith\u00e7ka testohet.<\/p>\n<p><\/p>\n<p>M\u00eb intereson t\u00eb di n\u00eb lidhje me ndodhit\u00eb qesharake q\u00eb ndodh\u00ebn gjat\u00eb lansimit t\u00eb di\u00e7kaje. A kishte situata t\u00eb \u00e7uditshme gjat\u00eb zhvillimit t\u00eb backend-it dhe frontend-it, ku ndodhte di\u00e7ka e pazakont\u00eb dhe nuk e dinit se si t\u00eb vepronit?<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> M\u00eb duket se kjo ka ndodhur vet\u00ebm tre muajt e fundit. \u00c7do dit\u00eb. Si\u00e7 mund ta shihni, t\u00eb gjith\u00eb flok\u00ebt e mi jan\u00eb t\u00eb shqyer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00eb zhvillosh nj\u00eb platform\u00eb video brenda 90 dit\u00ebve\" src=\"\/wp-content\/uploads\/2020\/08\/6ff16a1abd6ec5fb445d8d3888d990e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vladimir Krasilshchik pas 3 muajsh, kur ndodhte di\u00e7ka e pazakont\u00eb dhe askush nuk e dinte se \u00e7far\u00eb t\u00eb b\u00ebnte me k\u00ebt\u00eb.<\/i><\/p>\n<p><\/p>\n<p>\u00c7do dit\u00eb kishte di\u00e7ka t\u00eb till\u00eb, kur ndodhte nj\u00eb moment, kur merr dhe t\u00ebrheq flok\u00ebt, ose kupton q\u00eb nuk ka ask\u00ebnd tjet\u00ebr, dhe vet\u00ebm ti mund ta b\u00ebsh k\u00ebt\u00eb. Ngjarja e par\u00eb e madhe p\u00ebr ne ishte TechTrain. M\u00eb 6 qershor n\u00eb or\u00ebn 2 t\u00eb m\u00ebngjesit akoma nuk kishim zbatuar mjedisin e prodhimit, q\u00eb e zbatoi Kola. Dhe dhoma personale nuk funksiononte, as si server autorizimi me OAuth2.0. Ne e shnd\u00ebrruam n\u00eb nj\u00eb ofrues OAuth2.0 p\u00ebr ta lidhur me platform\u00ebn. Kam punuar ndoshta tashm\u00eb 18 or\u00eb rresht, shikoja n\u00eb kompjuter dhe nuk shikoja asgj\u00eb, nuk kuptoja pse nuk punonte, dhe Kola shikonte kodin tim nga larg, k\u00ebrkonte nj\u00eb bug n\u00eb konfigurimin e Spring, e gjeti, dhe dhoma personale filloi t\u00eb punonte, edhe n\u00eb prodhim. <\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Dhe nj\u00eb or\u00eb para TechTrain u b\u00eb publikimi. <\/p>\n<p><\/p>\n<p>K\u00ebtu u krijuan shum\u00eb yje. Na ka pasur fat i madh, sepse kemi krijuar nj\u00eb super ekip, dhe t\u00eb gjith\u00eb u frym\u00ebzuam nga ideja p\u00ebr ta b\u00ebr\u00eb online. T\u00eb gjitha k\u00ebto tri muaj na frym\u00ebzoi fakti q\u00eb ne ishim \"duke b\u00ebr\u00eb YouTube\". Nuk e lejoja veten t\u00eb t\u00ebrhiqja flok\u00ebt, por u thash\u00eb t\u00eb gjith\u00ebve se do t\u00eb dal\u00eb, sepse n\u00eb t\u00eb v\u00ebrtet\u00eb gjith\u00e7ka ishte llogaritur prej koh\u00ebsh. <\/p>\n<p><\/p>\n<h1 id=\"pro-proizvoditelnost\">P\u00ebr performanc\u00ebn<\/h1>\n<p><\/p>\n<p>\u2014 A mund t\u00eb tregoni se sa njer\u00ebz maksimalisht ishin n\u00eb nj\u00eb pasqyr\u00eb? A pati probleme me performanc\u00ebn?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Nuk kishte probleme me performanc\u00ebn, si\u00e7 e tham\u00eb m\u00eb par\u00eb. Numri maksimal i njer\u00ebzve q\u00eb ishin n\u00eb nj\u00eb raport ishte 1300, kjo ndodhi n\u00eb Heisenbug.<\/p>\n<p><\/p>\n<p>\u2014 A pati probleme me shikimin lokal? Dhe \u00ebsht\u00eb e mundur nj\u00eb p\u00ebrshkrim teknik me skema se si funksionon gjith\u00e7ka?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Do ta b\u00ebjm\u00eb nj\u00eb artikull p\u00ebr k\u00ebt\u00eb m\u00eb von\u00eb.<\/p>\n<p><\/p>\n<p>Lokalisht mund t\u00eb debbugohet edhe strimi. Pasi filluan konferencat, kjo u b\u00eb edhe m\u00eb e leht\u00eb, sepse u shfaq\u00ebn strimet prodhuese q\u00eb mund t'i shohim vazhdimisht.<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Sa e kuptoj, zhvilluesit frontend lokal punonin me mocke, dhe m\u00eb pas, pasi koha e l\u00ebshimit n\u00eb dev p\u00ebr frontend \u00ebsht\u00eb gjithashtu e vog\u00ebl (5 minuta), duket se nuk ka probleme me certifikatat. <\/p>\n<p><\/p>\n<p>\u2014 \u00c7do gj\u00eb testihet, debbugohet, madje edhe lokal. Pra, do t\u00eb shkruajm\u00eb nj\u00eb artikull me t\u00eb gjitha ve\u00e7orit\u00eb teknike, do t\u00eb tregojm\u00eb gjith\u00e7ka me skemat, si\u00e7 u b\u00eb.<\/p>\n<p><\/p>\n<p><b>Vladimir:<\/b> Mund ta merrni dhe ta p\u00ebrs\u00ebrisni. <\/p>\n<p><\/p>\n<p>\u2014 P\u00ebr 3 muaj.<\/p>\n<p><\/p>\n<h1 id=\"itog\">P\u00ebrfundimi<\/h1>\n<p><\/p>\n<p>\u2014 T\u00eb gjitha ato q\u00eb jan\u00eb p\u00ebrshkruar s\u00eb bashku duken t\u00eb mrekullueshme duke marr\u00eb parasysh se \u00ebsht\u00eb b\u00ebr\u00eb nga nj\u00eb ekip i vog\u00ebl brenda tre muajve.<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> Nj\u00eb ekip i madh nuk do ta b\u00ebnte k\u00ebt\u00eb. Por nj\u00eb grup i vog\u00ebl njer\u00ebzish, t\u00eb cil\u00ebt komunikojn\u00eb ngusht dhe mir\u00eb me nj\u00ebri-tjetrin dhe mund t\u00eb bien dakord, do ta b\u00ebnte. Ata nuk kan\u00eb ndonj\u00eb kund\u00ebrshtim, arkitektura u ideua brenda dy dit\u00ebve, u finalizua dhe faktikisht nuk ndryshoi. Ka nj\u00eb fasilitim shum\u00eb t\u00eb fort\u00eb t\u00eb k\u00ebrkesave biznesore q\u00eb hyjn\u00eb n\u00eb lidhje me mbingarkes\u00ebn e k\u00ebrkesave p\u00ebr ve\u00e7ori dhe ndryshime. <\/p>\n<p><\/p>\n<p>\u2014 \u00c7far\u00eb doli n\u00eb list\u00ebn tuaj t\u00eb detyrave t\u00eb ardhshme, kur konferencat verore tashm\u00eb u mbajt\u00ebn?<\/p>\n<p><\/p>\n<p><b>\u041d\u0438\u043a\u043e\u043b\u0430\u0439:<\/b> P\u00ebr shembull, tituj. Dritare q\u00eb l\u00ebvizin n\u00eb video, skenat q\u00eb shfaqen n\u00eb disa vende t\u00eb videos n\u00eb var\u00ebsi t\u00eb shfaqjes s\u00eb p\u00ebrmbajtjes. P\u00ebr shembull, fol\u00ebsi d\u00ebshiron t\u00eb b\u00ebj\u00eb nj\u00eb pyetje n\u00eb audienc\u00eb, dhe n\u00eb ekran shfaqet nj\u00eb ank\u00ebtim q\u00eb rikthehet n\u00eb sistem pas rezultateve t\u00eb votimit te fol\u00ebsi vet\u00eb. Nj\u00eb aktivitet social n\u00eb form\u00ebn e p\u00eblqimeve, zemrave, vler\u00ebsimeve t\u00eb prezantimit gjat\u00eb prezantimit, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb mund t\u00eb plot\u00ebsohet feedback-u n\u00eb momentin e duhur, pa u shp\u00ebrqendruar m\u00eb von\u00eb n\u00eb formular\u00ebt e feedback-ut. K\u00ebshtu fillimisht.<\/p>\n<p><\/p>\n<p>Dhe gjithashtu shtimi i gjith\u00eb platform\u00ebs, p\u00ebrve\u00e7 transmetimeve dhe konferencave, gjithashtu gjendja paskonferencale. K\u00ebto jan\u00eb playliste (p\u00ebrfshir\u00eb ato t\u00eb krijuara nga p\u00ebrdoruesit), mund\u00ebsisht p\u00ebrmbajtje nga konferenca t\u00eb kaluara, t\u00eb integruara, t\u00eb markuara, t\u00eb disponueshme p\u00ebr p\u00ebrdoruesin, dhe gjithashtu t\u00eb aksesueshme p\u00ebr shikim n\u00eb faqen ton\u00eb (<noindex><a rel=\"nofollow\" href=\"https:\/\/live.jugru.org\/?utm_source=habr&amp;utm_medium=516688\">live.jugru.org<\/a><\/noindex>). <\/p>\n<p><\/p>\n<p>\u2014 Djem, faleminderit shum\u00eb p\u00ebr p\u00ebrgjigjet!<\/p>\n<p>N\u00ebse mes lexuesve ka ata q\u00eb ishin n\u00eb konferencat tona verore \u2014 ndahuni me mendimet tuaja p\u00ebr playerin dhe transmetimin. \u00c7far\u00eb ishte e p\u00ebrshtatshme, \u00e7far\u00eb ishte irrituese, \u00e7far\u00eb d\u00ebshiron t\u00eb shoh\u00ebsh n\u00eb t\u00eb ardhmen?<\/p>\n<p><\/p>\n<p>N\u00ebse platforma ju ka interesuar dhe d\u00ebshironi ta shihni at\u00eb \"n\u00eb luft\u00eb\" \u2014 ne do ta p\u00ebrdorim p\u00ebrs\u00ebri n\u00eb konferencat tona <noindex><a rel=\"nofollow\" href=\"https:\/\/live.jugru.org\/?utm_source=habr&amp;utm_medium=516688\">vjesht\u00eb-dim\u00ebr<\/a><\/noindex>. Ka nj\u00eb s\u00ebr\u00eb t\u00eb t\u00ebr\u00eb, k\u00ebshtu q\u00eb pothuajse me siguri ka nj\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr ju.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jugru\/blog\/516688\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92596,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92595","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435\" \/>\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\/sq\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430 90 \u0434\u043d\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej\" \/>\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=\"2020-08-29T05:42:06+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-29T05:42:06+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\udd47T\u00eb zhvillohet nj\u00eb platform\u00eb video brenda 90 dit\u00ebve | ProHoster","description":"K\u00ebt\u00eb pranver\u00eb, ne u gjend\u00ebm n\u00eb nj\u00eb situat\u00eb shum\u00eb t\u00eb k\u00ebndshme. P\u00ebr shkak t\u00eb pandemis\u00eb, u b\u00eb e qart\u00eb se konferencat tona t\u00eb ver\u00ebs duhej t\u00eb kalonin n\u00eb format online. Dhe p\u00ebr t\u2019i realizuar ato me cil\u00ebsi, zgjidhjet e gatshme softuerike nuk ishin t\u00eb mjaftueshme, duhej t\u00eb shkruanim nj\u00eb t\u00eb till\u00eb ton\u00ebn. Dhe p\u00ebr k\u00ebt\u00eb kishim vet\u00ebm tre muaj. E qart\u00eb q\u00eb k\u00ebto ishin tri muajt fascinues. Por nga jasht\u00eb, nuk","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0437\u0430 90 \u0434\u043d\u0435\u0439 | ProHoster","og:description":"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0447\u0435\u043d\u044c \u0432\u0435\u0441\u0451\u043b\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0418\u0437-\u0437\u0430 \u043f\u0430\u043d\u0434\u0435\u043c\u0438\u0438 \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043b\u0435\u0442\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u043d\u043b\u0430\u0439\u043d. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435. \u0418 \u043d\u0430 \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430. \u041d\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/razrabotat-videoplatformu-za-90-dnej","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":"2020-08-29T05:42:06+00:00","article:modified_time":"2020-08-29T05:42:06+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92595","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:06:02","updated":"2022-09-30 11:38:11"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/92595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=92595"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/92595\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/92596"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=92595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=92595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=92595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}