Tarpinė pranešimų programinė įranga yra tarpinės programinės įrangos technologija, sudaryta iš pranešimų perdavimo mechanizmo arba pranešimų eilės režimo, kuris naudoja veiksmingą ir patikimą pranešimų mechanizmą, skirtą nuo platformos nepriklausomiems duomenų mainams, ir integruoja paskirstytas sistemas, pagrįstas duomenų perdavimu. Šiuo metu pramonėje yra daug MQ produktų, tokių kaip RabbitMQ, ActiveMQ, ZeroMQ ir kt., kurie yra puiki pranešimų tarpinė programinė įranga, tačiau kurį turėtume pasirinkti projekte? Šiame dokumente įvertinami ir lyginami šie pranešimų eilės produktai: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis ir memcacheQ
Nukrypimas: Čia pirmiausia galime pagalvoti apie nedidelį klausimą: "Kodėl mums reikia pranešimų eilės paslaugų žiniatinklio programose?" ” Pavyzdžiui, į MySQL vienu metu patenka daugybė įterpimo, atnaujinimo ir kitų užklausų, dėl kurių tiesiogiai atsiranda daugybė eilučių ir lentelių užraktų, o galų gale net per daug užklausų, todėl atsiranda per daug ryšio klaidų. Naudodami pranešimų eiles, galime apdoroti užklausas asinchroniškai, sumažindami sistemos apkrovą.
TriušisMQ Tai atvirojo kodo pranešimų eilė, parašyta Erlang, palaikanti daugybę protokolų: AMQP, XMPP, SMTP, STOMP, todėl ji yra labai sunki ir labiau tinkama įmonės lygio plėtrai. Tai pirmaujantis AMQP protokolo įgyvendinimas, kuris įgyvendina brokerio architektūrą, o tai reiškia, kad pranešimai gali būti įtraukti į eilę centriniame mazge prieš siunčiant klientui. Yra geras maršruto parinkimo, apkrovos balansavimo ar duomenų patvarumo palaikymas. Dėl šios funkcijos "RabbitMQ" lengva naudoti ir įdiegti, tinka daugeliui scenarijų, tokių kaip maršruto parinkimas, apkrovos balansavimas ar pranešimų patvarumas, ir tai galima padaryti naudojant vos kelias kodo eilutes su pranešimų eilėmis. Tačiau dėl to jis tampa mažiau keičiamas ir lėtesnis, nes centrinis mazgas padidina delsą ir yra didesnis po pranešimo inkapsuliavimo. Norėdami sukonfigūruoti "RabbitMQ", tiksliniame kompiuteryje turite įdiegti "Erlang" aplinką. Spustelėkite, jei norite peržiūrėti šį vaizdą naujame lange
? MQ (ZeroMQ) Tai žinoma kaip greičiausia pranešimų eilių sistema, ypač didelio pralaidumo poreikio scenarijams. Tai labai lengva pranešimų sistema, sukurta specialiai didelio pralaidumo / mažos delsos scenarijams ir dažnai gali būti randama finansų pasaulio programose. Palyginti su RabbitMQ, ZeroMQ palaiko daugybę išplėstinių pranešimų scenarijų, tačiau ZeroMQ sistemoje turite įdiegti atskirus blokus (pvz., lizdus ar įrenginius ir kt.).
? MQ (ZeroMQ) gali įdiegti išplėstines / sudėtingas eiles, kurias RabbitMQ nemoka, tačiau kūrėjai turi patys sujungti kelias technines sistemas, o techninis sudėtingumas yra iššūkis sėkmingam šio MQ taikymui. ZeroMQ turi unikalų ne tarpinės programinės įrangos modelį, kuriame jums nereikia diegti ir paleisti pranešimų serverio ar tarpinės programinės įrangos, nes jūsų programa atliks šį paslaugos vaidmenį. Viskas, ką jums reikia padaryti, tai tiesiog nurodyti "ZeroMQ" biblioteką, kurią galima įdiegti naudojant "NuGet", ir galėsite mielai siųsti pranešimus tarp programų. Tačiau "ZeroMQ" pateikia tik nenuolatines eiles, o tai reiškia, kad jei įrenginys sugenda, duomenys bus prarasti. Tarp jų "Twitter" "Storm" naudoja "ZeroMQ" kaip duomenų srautų perdavimą. "ZeroMQ" yra labai lankstus, tačiau turite išmokti 80 puslapių vadovą (jei rašote apie paskirstytą sistemą, būtinai jį perskaitykite).
ZeroMQ neturi tarpinės programinės įrangos architektūros ir nereikalauja jokių paslaugų procesų ir paleidimų. Tiesą sakant, jūsų programos galinis punktas atlieka šį tarnybos vaidmenį. Dėl to jį labai paprasta įdiegti, tačiau nerimaujate, kad neturite kur žiūrėti, jei kažkas negerai. Kiek žinome, "ZeroMQ" siūlo tik nepastovias eiles. Galite įdiegti savo audito ir duomenų atkūrimo galimybes ten, kur jų reikia. Spustelėkite, jei norite peržiūrėti šį vaizdą naujame lange
MSMQ Tai vienintelis dalykas "Microsoft" produkte, kuris laikomas vertingu. Jei MSMQ gali įrodyti, kad gali susidoroti su tokia užduotimi, jie nuspręs ją naudoti. Esmė ta, kad šis dalykas nėra sudėtingas, tik gavimas ir siuntimas; Jis turi tam tikrų griežtų apribojimų, pvz., maksimalus pranešimo dydis yra 4 MB. Tačiau jis gali išspręsti šias problemas prisijungęs prie tam tikros programinės įrangos, pvz., "MassTransit" arba "NServiceBus". Spustelėkite, jei norite peržiūrėti šį vaizdą naujame lange
Jafka/Kafka "Kafka" (kuri platina pranešimus skirtinguose mazguose) yra paskirstyta MQ sistema, kurią "LinkedIn" sukūrė ir atvirojo kodo 2010 m. gruodį, o dabar yra "Apache" inkubavimo projektas, didelio našumo įvairiomis kalbomis platinama "Publish/Subscribe" pranešimų eilių sistema, o "Jafka" yra inkubuojama ant "Kafka", kuri yra patobulinta "Kafka" versija. Jis pasižymi šiomis savybėmis: greitas patvarumas, kuris gali išlikti pranešimams esant sistemos pridėtinėms O(1) išlaidoms; Didelis pralaidumas, kuris gali pasiekti 10W/s pralaidumą įprastame serveryje; Visiškai paskirstyta sistema, brokeris, gamintojas ir vartotojas palaiko paskirstytą ir automatiškai pasiekia sudėtingą pusiausvyrą. Palaiko lygiagretų "Hadoop" duomenų įkėlimą, kuris yra perspektyvus sprendimas žurnalo duomenims ir neprisijungus veikiančioms analizės sistemoms, tokioms kaip "Hadoop", tačiau su apdorojimo realiuoju laiku apribojimais. "Kafka" sujungia pranešimų apdorojimą internete ir neprisijungus per "Hadoop" lygiagrečiojo įkėlimo mechanizmą, kuris taip pat svarbus šioje temoje nagrinėjamai sistemai. "Apache Kafka" yra labai lengva pranešimų sistema, palyginti su "ActiveMQ", be labai gero našumo, tai taip pat gerai veikianti paskirstyta sistema. Spustelėkite, jei norite peržiūrėti šį vaizdą naujame lange
Apache ActiveMQ "ActiveMQ" yra kažkur tarp šių dviejų ("RabbitMQ" ir "ZeroMQ"), panašiai kaip "ZemoMQ", ir gali būti įdiegtas tiek tarpinio, tiek P2P režimais. Panašiai kaip RabbitMQ, lengva įgyvendinti pažangius scenarijus ir reikalauja mažai sąnaudų. "ActiveMQ" yra žinomas kaip "Java" pasaulio stuburas. Jis turi ilgą istoriją ir yra plačiai naudojamas. Jis taip pat yra kelių platformų, suteikiantis natūralų integracijos prieigos tašką produktams, kurie nėra "Microsoft" platformoje. Tačiau jį galima apsvarstyti tik tuo atveju, jei jis praėjo MSMQ. Norėdami sukonfigūruoti "ActiveMQ", turite įdiegti "Java" aplinką tiksliniame kompiuteryje. Spustelėkite, jei norite peržiūrėti šį vaizdą naujame lange Svarbu pažymėti, kad naujos kartos "ActiveMQ" produktas yra "Apollo", kuris yra pagrįstas "ActiveMQ" prototipu ir yra greitesnis, patikimesnis ir lengviau prižiūrimas pranešimų tarpininkavimo įrankis. "Apache" vadina "Apollo" greičiausiu ir patikimiausiu STOMP (Streaming Text Oriented Message Protocol) serveriu. "Apollo" savybės yra šios: Palaikomi Stomp 1.0 ir Stomp 1.1 protokolai Temos ir eilės Eilės naršyklė Temos nuolatinės prenumeratos Veidrodinė eilė Patikimi pranešimai Pranešimo galiojimo laikas ir keitimasis Pranešimų parinkiklis JAAS patvirtinta ACL pagrįstas leidimas Palaikykite SSL/TLS ir sertifikato patvirtinimą REST valdymo API Spustelėkite, jei norite peržiūrėti šį vaizdą naujame lange
Redis Tai "Key-Value NoSQL" duomenų bazė, kuri yra aktyviai kuriama ir prižiūrima, nors tai yra "Key-Value" duomenų bazės saugojimo sistema, tačiau ji palaiko MQ funkcijas, todėl gali būti naudojama kaip lengva eilių paslauga. "RabbitMQ" ir "Redis" prisijungimo ir išėjimo iš eilės operacijoms – po 1 milijoną kartų, o vykdymo laikas registruojamas kas 100 000 kartų. Bandymo duomenys yra suskirstyti į keturis skirtingus dydžius: 128 baitai, 512 baitai, 1K ir 10 k. Eksperimentai rodo, kad prisijungus prie komandos, Redis našumas yra didesnis nei RabbitMQ, kai duomenų palyginimas yra mažas, o jei duomenų dydis viršija 10K, Redis yra nepakeliamai lėtas. Išeidamas iš komandos, Redis parodė labai gerus rezultatus, nepriklausomai nuo duomenų dydžio, o RabbitMQ rezultatai buvo daug prastesni nei Redis.
MemcacheQ Nuolatinė pranešimų eilė Memcacheq (sutrumpintai MCQ) yra lengva pranešimų eilė, MemcacheQ funkcijos: 1 Paprasta ir lengva naudoti 2 Greitas apdorojimas 3 Kelios eilės 4 Geras sutapimo našumas 5 Suderinamas su Memcache protokolu. Tai reiškia, kad tiesiog įdiekite "memcache" plėtinį, nereikia jokių papildomų papildinių. 6 Taip pat patogu naudoti zend sistemoje.
Galiausiai šie produktai: 1. Abu turi savo kliento API arba palaiko kelias programavimo kalbas; 2. Yra daug dokumentų; 3. Buvo suteikta teigiama parama. 4. "ActiveMQ", "RabbitMQ", "MSMQ", "Redis" turi pradėti aptarnavimo procesus, kuriuos galima stebėti ir konfigūruoti, o kiti yra problemiški 5. Visi jie užtikrina gana gerą patikimumą (nuoseklumą), mastelio keitimą ir apkrovos balansavimą ir, žinoma, našumą
Aš čia nekalbėsiu nesąmonių, pridedamas žemiau yra bandymų rezultatų rinkinys, perimtas iš interneto. Rodomas per sekundę išsiųstų ir gautų pranešimų skaičius. Visas procesas sugeneravo iš viso 1 milijoną 1K pranešimų. Bandymas buvo atliktas atskirame Windows Vista kompiuteryje.
Kaip matote, ZeroMQ nėra toks lygis, kaip niekas kitas. Jo našumas yra stebėtinai didelis. Nepaisant to, šis produktas neužtikrina pranešimų patvarumo, negali lengvai saugoti ir stebėti tarpinių procesų, reikalauja savikontrolės ir duomenų atkūrimo, todėl jis nėra patenkinamas naudojimo paprastumo ir HA požiūriu. Išvada aiški: jei norite, kad programa kuo greičiau siųstų pranešimus, rinkitės ZeroMQ. Tai vertingiau, kai jums per daug nerūpi atsitiktinai prarasti tam tikras žinutes.
Šiame straipsnyje tinklaraštininkas tikisi (ir nelabai tikisi) naudoti "Rabbit", "Rabbitmq" turi įmontuotą ha, jei suformuojate klasterį, nereikia jaudintis dėl tokių problemų kaip apkrovos balansavimas, ir galite nustatyti eilės veidrodį. Bet toks dalykas yra tas, kad turėtų būti daugiau bandymų, ir galiausiai gausite mėgstamiausią, ir visi dalykai, kuriuos girdėjau ir skaičiau apie "Triušį", leidžia man jaustis, kad tai turėtų būti geriausias pasirinkimas.
|