Filme porno

Categorii

Advertising

Colmena, o arhitectura pentru servicii web extrem de scalabile

Acum aproximativ 3 ani, startup-ul nostru a pivotat dintr-o aplicatie de intrebari si raspunsuri pentru medici catre o platforma de educatie (pe care am numit-o SchoolHouse.io). A fost o mare schimbare de produs si am stiut ca vor urma multe schimbari tehnice.

La acea vreme, aveam o baza de cod Python + Django de 1 an, care devenea deja ruginita si greu de intretinut. Cum am trecut linia mostenita atat de repede?

(suspin)

In mod clar faceam ceva gresit si am vrut sa intelegem ce , asa ca am facut o lista cu principalele noastre puncte de durere :

  • Pentru a intelege cum functioneaza o caracteristica, trebuia sa trecem mult intre codul nostru si cel al cadrului, uneori prin ierarhii lungi de mostenire, decoratori, carlige si conventii documentate undeva. Astfel, de fiecare data cand trebuia sa urmarim un bug sau sa facem o schimbare, trebuia sa ne imbracam palaria Indiana Jones.
  • Nu era evident unde apartineau multe modificari (cum ar fi unele permisiuni, relatii sau validari). Acest lucru a generat o multime de dezbateri interesante, dar in cele din urma irositoare de timp.
  • Testele unitare au fost conduse cu cioturi si batjocuri si, atunci cand nu erau, trebuiau sa fie ocupati cu intelegerea parametrilor HTTP sau cu asigurarea faptului ca baza de date era curata.

Am incercat sa fim uscati, dar lucrul la baza noastra de coduri ne-a facut sa ne inecam.

Aceste probleme ne-au facut neproductivi si ne-au transformat baza de cod in timp.

In plus, am banuit ca nu vom putea sa ne rezolvam problemele de durere daca vom continua sa folosim un cadru MVC dupa carte, asa ca ne-am propus sa proiectam propria noastra arhitectura *, optimizata pentru productivitate si mentenabilitate pe termen lung .

(* prin ceea ce vrem sa spunem, faceti multe cercetari si combinati ideile care ne-au placut cel mai mult cu propriile noastre cazuri de utilizare)

3 ani mai tarziu, am vazut produsul nostru schimbandu-se MULTI, ne-am indragostit de limbaje functionale precum Elm si Haskell si am trecut dincolo de full-stack, avand grija de design grafic, inginerie frontend, administrare de sistem si stiinta datelor. Si in ciuda tuturor acestor schimbari, credem ca s-a intamplat ceva extraordinar: suntem la fel de confortabili cu backend-ul nostru ca in prima zi (fara refactori mari!).

Alegerile noastre arhitecturale ne-au facut viata mai usoara in mod constant, iar acum am dori sa impartasim ceea ce am invatat cu comunitatea. De asemenea, am publicat o implementare a specificatiilor RealWorld pentru a oferi exemple de cod realiste.

Array

Exemplul de aplicatie este scris in Ruby, dar am aplicat aceleasi idei la bazele de cod din Go si Haskell, cu aceleasi efecte.

O aplicatie Colmena este compusa din mai multe celule.

Celulele sunt servicii independente care urmeaza arhitectura hexagonala. Fiecare celula:

  1. Are un scop si o responsabilitate clare.
  2. Are un domeniu intern care reprezinta, valideaza si transforma starea celulei.
  3. Mizeaza pe o serie de interfete pentru a primi intrari de la (si a trimite iesiri catre) servicii si tehnologii externe.
  4. Expune un API public (un contract care precizeaza ce poate face).

Va puteti gandi la celule ca la microservicii foarte mici . De fapt, va incurajam sa incercati sa va faceti celulele cat mai mici posibil. Din experienta noastra, granularea domeniului dvs. in jurul entitatilor si relatiilor va ajuta sa intelegeti, sa testati si sa mentineti baza de cod pe termen lung. Acestea sunt celulele backend-ului RealWorld:

  • utilizator
  • autentificare
  • urmareste (utilizator)
  • articol
  • eticheta
  • comentariu (articol)
  • (articol) feed

Daca v-am spus ca aplicatia noastra este o platforma de blog, scopul fiecarei celule devine destul de clar. Ar fi nevoie doar sa aruncati o privire la directorul lib / real_world pentru a afla unde ar putea fi definita o anumita caracteristica. De acolo, un dezvoltator poate privi rapid API-ul pentru a afla despre operatiunile pe care le accepta si pentru a naviga in implementare intr-un mod foarte gradat si natural.

Fiecare celula modeleaza un domeniu mic.

Acest domeniu poate corespunde unei entitati (de exemplu, un utilizator), unei relatii (de exemplu, un utilizator il urmareste pe altul) sau unei caracteristici speciale (de exemplu, fiecare utilizator are propriul flux materializat de articole).

In Colmena , modificarile domeniului sunt reprezentate ca o succesiune de evenimente . Aceasta succesiune de evenimente este doar apendica, deoarece evenimentele sunt imuabile (sunt fapte care au avut loc deja). In cazul aprovizionarii, aceasta secventa este numita „Sursa adevarului” si ofera:

  • Un jurnal de audit al tuturor actiunilor care au modificat domeniul.
  • Abilitatea pentru alte componente (in aceleasi sau diferite celule) de a asculta anumite evenimente si de a reactiona la ele.

Aceasta din urma practica este cunoscuta in mod obisnuit ca programare bazata pe evenimente sau reactiva si s-a dovedit un mod cu adevarat util de a implementa anumite caracteristici cu cuplare foarte redusa.

Mai mult, deoarece avem o secventa de date imuabile, tot ceea ce face domeniul poate fi conceput ca o functie pura (fara efecte secundare, doar transformari de date deterministe). In Ruby (sau in orice alt limbaj orientat obiect), acest lucru se traduce prin:

  • Fara clase, instante de clasa sau metode.
  • Fara apeluri catre nicio tehnologie sau serviciu extern.
  • Nu este nevoie de cioturi, batjocuri sau alte artefacte de test care fac testele noastre lente sau complicate.

Putem valida si descrie comportamentul aplicatiei noastre intr-un mod simplu si foarte puternic, uitand de zgomot.

Fiecare aplicatie utila trebuie sa lase lumea sa faca ceva cu ea. Vom continua cu exemplul nostru RealWorld.

Celula noastra de urmarire este acolo pentru a indeplini cateva cazuri de utilizare:

  • Un utilizator urmareste un alt profil.
  • Un utilizator nu mai urmareste un alt profil.
  • Cineva doreste sa stie daca un anumit utilizator urmareste un anumit profil.
  • Cineva doreste sa stie ce profil urmareste un utilizator.

Veti observa ca primele doua cazuri de utilizare sunt actiuni care pot (daca regulile de validare o permit) sa schimbe starea celulei, in timp ce ultimele doua cazuri de utilizare sunt doar interogarea starii curente.

In Colmena , apelam primele comenzi si cele din urma interogari si le tratam intr-un mod usor diferit. Acest model se numeste CQRS (separarea responsabilitatii comanda-interogare). Articolul legat face o treaba foarte buna la explicarea avantajelor si dezavantajelor acestei abordari, asa ca ne vom concentra pe implementarea noastra speciala pentru aceasta baza de cod RealWorld:

Este extrem de valoros pentru un proiect sa se asigure ca contractele pentru toate aceste componente orientate catre public sunt corect documentate si versate semantic . Dezvoltatorii trebuie sa fie capabili sa invete si sa aiba incredere, in orice moment:

  • Ce tipuri de evenimente publica aceasta celula? Ce date contin?
  • Care sunt argumentele acestei comenzi? Ce zici de aceasta intrebare?

Avand in vedere ca aceasta este o arhitectura distribuita cu multe componente si celule care functioneaza separat, este corect sa ne intrebam … Sunt schimbarile atomice? Cum le mentinem consecvente?

Atunci cand comenzile trebuie sa fie atomice (de obicei), ele sunt decorate printr-o tranzactie. Aceasta tranzactie este responsabila pentru publicarea secventei de evenimente generate de comanda si rularea materializatorilor corespunzatori. La randul lor, acesti materializatori impun consecventa si integritate . Un materializator ia o succesiune de evenimente si propaga modificarile acestora catre mai multe „modele citite” pe care le folosesc interogarile.

De exemplu, tranzactia din diagrama anterioara ar putea apela la acesti materializatori:

Sa incercam si cu un al doilea exemplu. Avem de-a face cu articole acum. Un materializator poate obtine urmatoarea succesiune de evenimente:

articol_publicat (…)

articol_etichetat (…)

Si efectuati urmatoarele operatii:

  • Stocati intregul articol intr-o baza de date orientata spre documente (de exemplu, MongoDB) pentru a optimiza operatiile de citire.
  • Stocati articolul intr-un index invers al etichetei -> articole pentru a prelua articole cu anumite etichete.
  • Stocati titlul si descrierea articolului intr-o baza de date optimizata pentru cautare (de exemplu, ElasticSearch).

Unele parti ale acestui proces de materializare trebuie sa aiba loc in mod sincron (daca coerenta este o cerinta). Altele se pot intampla asincron (atunci cand este suficienta consecventa).

In acest moment, celula noastra accepta solicitari de la o sursa potential de incredere, stocheaza si preia date dintr-o baza de date si poate fi necesar sa apelati alte celule.

Aceste operatiuni sunt verigile slabe ale dezvoltarii de software. Reteaua poate esua, bazele de date pot fi corupte si API-urile publice nu pot fi de incredere. Deci, ce putem face pentru a minimiza aceste riscuri?

In Colmena , definim fiecare componenta de intrare / iesire ca o interfata (un port in jargonul hexagonal) . O anumita celula s-ar putea baza pe:

  • Un port de depozit, care persista si citeste datele domeniului.
  • Un port al editorului de evenimente, care permite publicarea evenimentelor.
  • Un port router, care comunica cu alte celule.

In Ruby, specificam comportamentul pe care aceste interfete ar trebui sa il satisfaca cu un exemplu comun. Toate implementarile (adaptoarele din jargonul hexagonal) trebuie sa respecte specificatiile daca trebuie sa fie de incredere si sa ofere o manipulare explicita a erorilor, astfel incat riscurile sa poata fi tratate, inregistrate si atenuate cu gratie.

Bazandu-se pe interfete este unul dintre cele mai de baza principii de proiectare si are beneficii practice imediate:

  • Putem scrie un singur test pentru mai multe componente.
  • Putem aplica principiul inversiunii dependentei pentru a injecta adaptoarele de care avem nevoie pentru fiecare mediu (de exemplu, o baza de date SQLite rapida pentru testare si o baza de date cloud complet scalabila in productie).
  • Putem trece la o alta tehnologie fara a schimba codul celulei noastre.

Celulele au limite clar definite, dar trebuie totusi sa comunice intre ele. In Colmena , celulele pot vorbi intre ele in doua moduri diferite:

  • Sincron, invocand o comanda sau o interogare pe cealalta celula. Acesta este un apel traditional de procedura la distanta pe care il efectuam printr-un registru de servicii central pe care il numim router .
  • Asincron, ascultarea evenimentelor produse de cealalta celula si reactia la acestea. Facem acest lucru printr-un broker de evenimente.

In aplicatia noastra de exemplu, atat routerul, cat si porturile de broker de evenimente sunt implementate in memorie. Frumusetea acestor interfete este ca pot fi implementate de un serviciu precum RabbitMQ sau Amazon Kinesis si pot conecta celule desfasurate in diferite parti ale lumii; sau chiar celule scrise in diferite limbaje de programare!

Iata cateva exemple despre cum lipim celulele impreuna in acest serviciu RealWorld:

  • Un contor ascultator reactioneaza la etichetele adaugate sau eliminate dintr-un articol si actualizeaza un numar total de ori in care a fost utilizata o eticheta. In tot acest timp, celula articolului nu stie nici macar ca exista celula eticheta.
  • Celula api este un pic speciala. Acesta expune o parte din comportamentul tuturor celulelor dintr-un API HTTP RESTful. Ca atare, trebuie sa se ocupe de autentificare si autorizare, ascunzand date private si agregand mai multe operatiuni intr-un punct final mai util, efectuand mai multe apeluri secundare catre alte celule din proces. Am aflat recent ca acest model are propriul sau nume.

Am considerat ca este mai bine sa incepem sa explicam aceasta arhitectura de jos in sus, asa ca nu am avut timp sa explicam corect ce naiba este un Colmena .

Colmena inseamna stup in spaniola. La fel ca arhitectura noastra, ???? – stupii sunt compusi din multe unitati hexagonale mici, care sunt izolate unele de altele, dar functioneaza impreuna ca un sistem puternic. Nu-i asa de frumos?

De aici, numele.

In acest articol, am prezentat o prezentare generala a arhitecturii Colmena si a motivelor care ne-au determinat sa o folosim in primul rand.

In urmatoarele, vom mari cateva dintre principalele caracteristici si vom oferi mai multe detalii si exemple de cod.

Video Description:

Acum aproximativ 3 ani, startup-ul nostru a pivotat dintr-o aplicatie de intrebari si raspunsuri pentru medici catre o platforma de educatie (pe care am numit-o SchoolHouse.io). A fost o mare schimbare de produs si am stiut ca vor urma multe schimbari tehnice.La acea vreme, aveam o baza de cod Python + Django de 1 an, care devenea deja ruginita si greu de intretinut. Cum am trecut linia mostenita atat de repede?(suspin)In mod clar faceam ceva gresit si am vrut sa intelegem ce , asa ca am facut o lista cu principalele noastre puncte de durere :Pentru a intelege cum functioneaza o caracteristica, trebuia sa trecem mult intre codul nostru si cel al cadrului, uneori prin ierarhii lungi de mostenire, decoratori, carlige si conventii documentate undeva. Astfel, de fiecare data cand trebuia sa urmarim un bug sau sa facem o schimbare, trebuia sa ne imbracam palaria Indiana Jones.Nu era evident unde apartineau multe modificari (cum ar fi unele permisiuni, relatii sau validari). Acest lucru a generat o multime de dezbateri interesante, dar in cele din urma irositoare de timp.Testele unitare au fost conduse cu cioturi si batjocuri si, atunci cand nu erau, trebuiau sa fie ocupati cu intelegerea parametrilor HTTP sau cu asigurarea faptului ca baza de date era curata.Am incercat sa fim uscati, dar lucrul la baza noastra de coduri ne-a facut sa ne inecam.Aceste probleme ne-au facut neproductivi si ne-au transformat baza de cod in timp.In plus, am banuit ca nu vom putea sa ne rezolvam problemele de durere daca vom continua sa folosim un cadru MVC dupa carte, asa ca ne-am propus sa proiectam propria noastra arhitectura *, optimizata pentru productivitate si mentenabilitate pe termen lung .(* prin ceea ce vrem sa spunem, faceti multe cercetari si combinati ideile care ne-au placut cel mai mult cu propriile noastre cazuri de utilizare)3 ani mai tarziu, am vazut produsul nostru schimbandu-se MULTI, ne-am indragostit de limbaje functionale precum Elm si Haskell si am trecut dincolo de full-stack, avand grija de design grafic, inginerie frontend, administrare de sistem si stiinta datelor. Si in ciuda tuturor acestor schimbari, credem ca s-a intamplat ceva extraordinar: suntem la fel de confortabili cu backend-ul nostru ca in prima zi (fara refactori mari!).Alegerile noastre arhitecturale ne-au facut viata mai usoara in mod constant, iar acum am dori sa impartasim ceea ce am invatat cu comunitatea. De asemenea, am publicat o implementare a specificatiilor RealWorld pentru a oferi exemple de cod realiste. Array Exemplul de aplicatie este scris in Ruby, dar am aplicat aceleasi idei la bazele de cod din Go si Haskell, cu aceleasi efecte.O aplicatie Colmena este compusa din mai multe celule.Celulele sunt servicii independente care urmeaza arhitectura hexagonala. Fiecare celula:Are un scop si o responsabilitate clare.Are un domeniu intern care reprezinta, valideaza si transforma starea celulei.Mizeaza pe o serie de interfete pentru a primi intrari de la (si a trimite iesiri catre) servicii si tehnologii externe.Expune un API public (un contract care precizeaza ce poate face).Va puteti gandi la celule ca la microservicii foarte mici . De fapt, va incurajam sa incercati sa va faceti celulele cat mai mici posibil. Din experienta noastra, granularea domeniului dvs. in jurul entitatilor si relatiilor va ajuta sa intelegeti, sa testati si sa mentineti baza de cod pe termen lung. Acestea sunt celulele backend-ului RealWorld:utilizatorautentificareurmareste (utilizator)articoletichetacomentariu (articol)(articol) feedDaca v-am spus ca aplicatia noastra este o platforma de blog, scopul fiecarei celule devine destul de clar. Ar fi nevoie doar sa aruncati o privire la directorul lib / real_world pentru a afla unde ar putea fi definita o anumita caracteristica. De acolo, un dezvoltator poate privi rapid API-ul pentru a afla despre operatiunile pe care le accepta si pentru a naviga in implementare intr-un mod foarte gradat si natural.Fiecare celula modeleaza un domeniu mic. porno francais gay www.oleolewines.net papa porno montessorihelper.com porno gay français netranger.com discord porno escapeprague.xactprice.org porno gay viol molhimawk.com video porno gay francais www.goodeal.com film porno zoophile ulabi.com porno japonais non censure www.sedonacompass.biz porno ancien distancerunningnews.com blog porno 8002468win.com porno webchoc 75thrangerregiment.com magazine porno hamilton-archives.com porno ejac interne prmspromise.net porno perfect girls www.hackett-company.com thai porno dishnetworkmail.info nabilla porno www.businessaffairs.us lupo porno nocheatersdate.com perfect porno www.perfectbathroom.com porno vor moreorless.com porno gabon www.quantumusers.com Acest domeniu poate corespunde unei entitati (de exemplu, un utilizator), unei relatii (de exemplu, un utilizator il urmareste pe altul) sau unei caracteristici speciale (de exemplu, fiecare utilizator are propriul flux materializat de articole).In Colmena , modificarile domeniului sunt reprezentate ca o succesiune de evenimente . Aceasta succesiune de evenimente este doar apendica, deoarece evenimentele sunt imuabile (sunt fapte care au avut loc deja). In cazul aprovizionarii, aceasta secventa este numita „Sursa adevarului” si ofera:Un jurnal de audit al tuturor actiunilor care au modificat domeniul.Abilitatea pentru alte componente (in aceleasi sau diferite celule) de a asculta anumite evenimente si de a reactiona la ele.Aceasta din urma practica este cunoscuta in mod obisnuit ca programare bazata pe evenimente sau reactiva si s-a dovedit un mod cu adevarat util de a implementa anumite caracteristici cu cuplare foarte redusa.Mai mult, deoarece avem o secventa de date imuabile, tot ceea ce face domeniul poate fi conceput ca o functie pura (fara efecte secundare, doar transformari de date deterministe). In Ruby (sau in orice alt limbaj orientat obiect), acest lucru se traduce prin:Fara clase, instante de clasa sau metode.Fara apeluri catre nicio tehnologie sau serviciu extern.Nu este nevoie de cioturi, batjocuri sau alte artefacte de test care fac testele noastre lente sau complicate.Putem valida si descrie comportamentul aplicatiei noastre intr-un mod simplu si foarte puternic, uitand de zgomot.Fiecare aplicatie utila trebuie sa lase lumea sa faca ceva cu ea. Vom continua cu exemplul nostru RealWorld.Celula noastra de urmarire este acolo pentru a indeplini cateva cazuri de utilizare:Un utilizator urmareste un alt profil.Un utilizator nu mai urmareste un alt profil.Cineva doreste sa stie daca un anumit utilizator urmareste un anumit profil.Cineva doreste sa stie ce profil urmareste un utilizator.Veti observa ca primele doua cazuri de utilizare sunt actiuni care pot (daca regulile de validare o permit) sa schimbe starea celulei, in timp ce ultimele doua cazuri de utilizare sunt doar interogarea starii curente.In Colmena , apelam primele comenzi si cele din urma interogari si le tratam intr-un mod usor diferit. Acest model se numeste CQRS (separarea responsabilitatii comanda-interogare). Articolul legat face o treaba foarte buna la explicarea avantajelor si dezavantajelor acestei abordari, asa ca ne vom concentra pe implementarea noastra speciala pentru aceasta baza de cod RealWorld:Este extrem de valoros pentru un proiect sa se asigure ca contractele pentru toate aceste componente orientate catre public sunt corect documentate si versate semantic . Dezvoltatorii trebuie sa fie capabili sa invete si sa aiba incredere, in orice moment:Ce tipuri de evenimente publica aceasta celula? Ce date contin?Care sunt argumentele acestei comenzi? Ce zici de aceasta intrebare?Avand in vedere ca aceasta este o arhitectura distribuita cu multe componente si celule care functioneaza separat, este corect sa ne intrebam ... Sunt schimbarile atomice? Cum le mentinem consecvente?Atunci cand comenzile trebuie sa fie atomice (de obicei), ele sunt decorate printr-o tranzactie. Aceasta tranzactie este responsabila pentru publicarea secventei de evenimente generate de comanda si rularea materializatorilor corespunzatori. La randul lor, acesti materializatori impun consecventa si integritate . Un materializator ia o succesiune de evenimente si propaga modificarile acestora catre mai multe „modele citite” pe care le folosesc interogarile.De exemplu, tranzactia din diagrama anterioara ar putea apela la acesti materializatori:Sa incercam si cu un al doilea exemplu. Avem de-a face cu articole acum. Un materializator poate obtine urmatoarea succesiune de evenimente:articol_publicat (...) articol_etichetat (...)Si efectuati urmatoarele operatii:Stocati intregul articol intr-o baza de date orientata spre documente (de exemplu, MongoDB) pentru a optimiza operatiile de citire.Stocati articolul intr-un index invers al etichetei -> articole pentru a prelua articole cu anumite etichete.Stocati titlul si descrierea articolului intr-o baza de date optimizata pentru cautare (de exemplu, ElasticSearch).Unele parti ale acestui proces de materializare trebuie sa aiba loc in mod sincron (daca coerenta este o cerinta). Altele se pot intampla asincron (atunci cand este suficienta consecventa).In acest moment, celula noastra accepta solicitari de la o sursa potential de incredere, stocheaza si preia date dintr-o baza de date si poate fi necesar sa apelati alte celule.Aceste operatiuni sunt verigile slabe ale dezvoltarii de software. Reteaua poate esua, bazele de date pot fi corupte si API-urile publice nu pot fi de incredere. Deci, ce putem face pentru a minimiza aceste riscuri?In Colmena , definim fiecare componenta de intrare / iesire ca o interfata (un port in jargonul hexagonal) . O anumita celula s-ar putea baza pe:Un port de depozit, care persista si citeste datele domeniului.Un port al editorului de evenimente, care permite publicarea evenimentelor.Un port router, care comunica cu alte celule.In Ruby, specificam comportamentul pe care aceste interfete ar trebui sa il satisfaca cu un exemplu comun. Toate implementarile (adaptoarele din jargonul hexagonal) trebuie sa respecte specificatiile daca trebuie sa fie de incredere si sa ofere o manipulare explicita a erorilor, astfel incat riscurile sa poata fi tratate, inregistrate si atenuate cu gratie.Bazandu-se pe interfete este unul dintre cele mai de baza principii de proiectare si are beneficii practice imediate:Putem scrie un singur test pentru mai multe componente.Putem aplica principiul inversiunii dependentei pentru a injecta adaptoarele de care avem nevoie pentru fiecare mediu (de exemplu, o baza de date SQLite rapida pentru testare si o baza de date cloud complet scalabila in productie).Putem trece la o alta tehnologie fara a schimba codul celulei noastre.Celulele au limite clar definite, dar trebuie totusi sa comunice intre ele. In Colmena , celulele pot vorbi intre ele in doua moduri diferite:Sincron, invocand o comanda sau o interogare pe cealalta celula. Acesta este un apel traditional de procedura la distanta pe care il efectuam printr-un registru de servicii central pe care il numim router .Asincron, ascultarea evenimentelor produse de cealalta celula si reactia la acestea. Facem acest lucru printr-un broker de evenimente.In aplicatia noastra de exemplu, atat routerul, cat si porturile de broker de evenimente sunt implementate in memorie. Frumusetea acestor interfete este ca pot fi implementate de un serviciu precum RabbitMQ sau Amazon Kinesis si pot conecta celule desfasurate in diferite parti ale lumii; sau chiar celule scrise in diferite limbaje de programare!Iata cateva exemple despre cum lipim celulele impreuna in acest serviciu RealWorld:Un contor ascultator reactioneaza la etichetele adaugate sau eliminate dintr-un articol si actualizeaza un numar total de ori in care a fost utilizata o eticheta. In tot acest timp, celula articolului nu stie nici macar ca exista celula eticheta.Celula api este un pic speciala. Acesta expune o parte din comportamentul tuturor celulelor dintr-un API HTTP RESTful. Ca atare, trebuie sa se ocupe de autentificare si autorizare, ascunzand date private si agregand mai multe operatiuni intr-un punct final mai util, efectuand mai multe apeluri secundare catre alte celule din proces. Am aflat recent ca acest model are propriul sau nume.Am considerat ca este mai bine sa incepem sa explicam aceasta arhitectura de jos in sus, asa ca nu am avut timp sa explicam corect ce naiba este un Colmena .Colmena inseamna stup in spaniola. La fel ca arhitectura noastra, ???? - stupii sunt compusi din multe unitati hexagonale mici, care sunt izolate unele de altele, dar functioneaza impreuna ca un sistem puternic. Nu-i asa de frumos?De aici, numele.In acest articol, am prezentat o prezentare generala a arhitecturii Colmena si a motivelor care ne-au determinat sa o folosim in primul rand.In urmatoarele, vom mari cateva dintre principalele caracteristici si vom oferi mai multe detalii si exemple de cod.

Categorie:
Taguri:
Data adaugarii: