Архитектура на јазол JS - јамка на настани со единечна нишка


Денес ќе го разгледаме моделот Node JS Architecture и Single Threaded Event Loop. Во нашите претходни објави, разговаравме за инсталацијата на Node JS.

Архитектура на јазол JS

Пред да започнете некои примери за програмирање на Node JS, важно е да имате идеја за архитектурата на Node JS. Ќе разговараме за „Како Node JS работи под капакот, каков тип на модел на обработка го следи, како Node JS се справува со истовремени барања со модел со една нишка“ итн. во овој пост.

Модел на јамка на настани со единечна нишка на Node JS

Како што веќе разговаравме, апликациите на Node JS користат архитектура „Модел на јамка на настан со единечна нишка“ за справување со повеќе истовремени клиенти. Постојат многу технологии за веб-апликации како JSP, Spring MVC, ASP.NET, HTML, Ajax, jQuery итн. овие технологии ја следат архитектурата „Мулти-нишки барање-одговор“ за справување со повеќе истовремени клиенти. Веќе сме запознаени со архитектурата „Барање-одговор со повеќе нишки“ бидејќи ја користат повеќето рамки за веб-апликации. Но, зошто платформата Node JS избра различна архитектура за развој на веб-апликации. Кои се главните разлики помеѓу повеќенишки и единечни нишки Архитектура на циклус на настани. Секој веб-развивач може многу лесно да научи Node JS и да развива апликации. Сепак, без да ги разбереме внатрешните работи на Node JS, не можеме многу добро да дизајнираме и развиваме Node JS Applications. Така, пред да започнеме со развивање на Node JS Applications, прво ќе научиме Node JS Platform внатрешни работи.

Јазол JS платформа

Јазол JS платформата користи архитектура \Single Threaded Event Loop за да се справи со повеќе истовремени клиенти. Потоа, како навистина се справува со истовремени барања на клиентите без користење на повеќе нишки. Што е модел на Event Loop? Ќе разговараме за овие концепти еден по еден. Пред да разговараме за\Архитектура на Single Threaded Event Loop“, прво ќе поминеме низ познатата архитектура „Multi-Threaded Request-Response“.

Традиционален модел за обработка на веб-апликации

Секоја веб-апликација развиена без Node JS, обично го следи моделот „Повеќе нишки барање-одговор“. подгответе го одговорот и испратете го назад до клиентот. Овој модел користи HTTP протокол. Бидејќи HTTP е протокол без државјанство, овој модел на барање/одговор е исто така модел без државјанство. Така, можеме да го наречеме ова како Модел без државјанство Барање/одговор. Меѓутоа, овој модел користи Повеќе нишки за справување со истовремени барања на клиентите. Пред да разговарате за внатрешните работи на овој модел, прво поминете низ дијаграмот подолу. Чекори за обработка на моделот на барање/одговор:

  • Клиенти Испратете барање до веб-сервер.
  • Веб-серверот внатрешно одржува група на ограничени теми за да обезбеди услуги за барањата на клиентите.
  • Веб-серверот е во бесконечна јамка и чека дојдовни барања од клиентот
  • Веб-серверот ги прима тие барања.
    • Презема едно барање од клиентот од веб-серверот
    • Земи една нишка од базенот на теми
    • Доделете ја оваа нишка на барање на клиентот
    • Оваа тема ќе се грижи за читање на барањето на клиентот, обработка на барањето на клиентот, извршување на какви било операции за блокирање IO (доколку е потребно) и подготвување одговор
    • Оваа тема го испраќа подготвениот одговор назад до веб-серверот
    • Веб-серверот за возврат го испраќа овој одговор до соодветниот клиент.

    • Овде \n број на клиенти Испратете барање до веб-серверот.Да претпоставиме дека истовремено пристапуваат на нашата веб-апликација.
    • Да претпоставиме дека нашите клиенти се Client-1, Client-2… и Client-n.
    • Веб-серверот внатрешно одржува базен со ограничена нишка. Дозволете ни да претпоставиме \m број на нишки во базенот на теми.
    • Веб-серверот ги прима тие барања едно по едно.
      • Подигнување на веб-серверот клиент-1 Барање-1, подигнување на една нишка Т-1 од базенот на теми и доделете го ова барање на темата Т-1
        • Никата Т-1 чита Барање-1 на клиент-1 и ја обработува
        • Барањето клиент-1-1 не бара никакви операции за блокирање на IO
        • Thread T-1 ги прави потребните чекори и го подготвува Response-1 и го испраќа назад до серверот
        • Веб-серверот за возврат испратете го овој одговор-1 на клиентот-1

        Веб-серверот подигнува уште едно барање за клиент-2-2, земете една нишка Т-2 од базенот на теми и доделете го ова барање на темата Т-2

        • Никата T-2 го чита барањето за клиент-1-2 и го обработува
        • Барањето клиент-1-2 не бара никакви операции за блокирање на IO
        • Thread T-2 ги прави потребните чекори и го подготвува Response-2 и го испраќа назад до серверот
        • Веб-серверот за возврат испратете го овој одговор-2 на клиентот-2

        Веб-серверот зема друго барање за клиент-n-n, земете една нишка T-n од базенот на нишки и доделете го ова барање на темата T-n

        • Никата T-n чита Барање клиент-n-n и ја обработува
        • Клиент-n Барање-n бара тешки операции за блокирање IO и пресметување
        • Thread T-n бара повеќе време за интеракција со надворешни системи, ги прави потребните чекори и го подготвува Response-n и го испраќа назад до серверот
        • Веб-серверот за возврат испратете го овој Одговор-n до клиентот-nАко \n е поголем од \m (повеќето пати е точно), тогаш серверот доделува нишки на барањата на клиентот до достапните нишки . Откако ќе се искористат сите m Нишки, тогаш преостанатото барање на клиентот треба да почека во редот додека некои од зафатените нишки не ја завршат својата работа за обработка на барања и слободно да го подигнат следното барање. Ако тие нишки се зафатени со блокирање IO Tasks (на пример, интеракција со база на податоци, датотечен систем, JMS редица, надворешни услуги итн.) подолго време, тогаш останатите клиенти треба да чекаат подолго време.

        Откако нишките се бесплатни во Thread Pool и достапни за следните задачи, серверот ги зема тие нишки и ги доделува на преостанатите барања на клиентите.

        Секоја нишка користи многу ресурси како меморија итн. Затоа, пред да ги префрлат тие нишки од зафатена состојба во состојба на чекање, тие треба да ги ослободат сите стекнати ресурси.

        Недостатоци на Модел без државјанство со барање/одговор:

        • Ракувањето со сè повеќе и повеќе истовремени барања на клиентот е малку тешко.
        • Кога ќе се зголемат истовремените барања на клиентот, тогаш тој треба да користи се повеќе и повеќе нишки, конечно тие јадат повеќе меморија.
        • Понекогаш, барањето на клиентот треба да почека достапните нишки да ги обработат нивните барања.
        • Го троши времето во обработката на блокирање задачи на IO.

        Архитектура на јазол JS - јамка на настани со единечна нишка

        Јазол JS платформата не го следи Моделот без државјанство со повеќе нишки Барање/одговор. Следи Single Threaded with Event Loop Model. Модел за обработка на Node JS главно базиран на модел базиран на настани Javascript со механизам за повратен повик Javascript. Треба да имате добро познавање за тоа како функционираат настаните на Javascript и механизмот за повратен повик. Ако не знаете, Ве молиме прво поминете низ тие објави или упатства и добијте некоја идеја пред да преминете на следниот чекор во оваа објава. Бидејќи Node JS ја следи оваа архитектура, може многу лесно да се справи со се повеќе и повеќе истовремени барања на клиентите. Пред да разговарате за внатрешните работи на овој модел, прво поминете низ дијаграмот подолу. Се обидов да го дизајнирам овој дијаграм за да ја објаснам секоја точка на Node JS Internals. Главното срце на моделот Node JS Processing е \Event Loop. Ако го разбереме ова, тогаш е многу лесно да се разберат внатрешните делови на Node JS. Чекори за обработка на моделот на јамка на настани со единечна нишка:

        • Клиенти Испратете барање до веб-сервер.
        • Веб-серверот Node JS внатрешно одржува базен со ограничена нишка за да обезбеди услуги за барањата на клиентите.
        • Веб-серверот Node JS ги прима тие барања и ги става во редица. Познато е како \Редот за настани.
        • Веб-серверот Node JS внатрешно има компонента, позната како \Јамка на настани. Зошто го доби ова име е тоа што користи неопределен циклус за примање барања и нивно обработување. (Видете некој Java Pseudo код за да го разберете ова подолу).
        • Јамката за настани користи само една нишка. Тоа е главното срце на моделот за обработка на платформата Node JS.
        • Even Loop проверува дека секое барање на клиентот е поставено во редот на настани. Ако не, тогаш чекајте ги дојдовните барања на неодредено време.
        • Ако да, тогаш подигнете едно барање на клиентот од редот на настани
          • Започнува процесирање на тоа барање на клиентот
          • Ако барањето на клиентот не бара никакви операции за блокирање на IO, тогаш обработете сè, подгответе го одговорот и испратете го назад до клиентот.
          • Ако барањето на клиентот бара некои операции за блокирање на IO како интеракција со база на податоци, датотечен систем, надворешни услуги, тогаш тоа ќе следи поинаков пристап
            • Ја проверува достапноста на нишките од внатрешниот базен на теми
            • Собира една нишка и го додели ова барање на клиентот на таа нишка.
            • Таа нишка е одговорна за преземање на тоа барање, обработка, извршување на операции за блокирање IO, подготовка на одговор и испраќање назад во циклусот на настани
            • Јамката за настани за возврат го испраќа тој одговор до соодветниот клиент.

            • Овде \n број на клиенти Испратете барање до веб-серверот. Да претпоставиме дека истовремено пристапуваат до нашата веб-апликација.
            • Да претпоставиме дека нашите клиенти се Client-1, Client-2… и Client-n.
            • Веб-серверот внатрешно одржува базен со ограничена нишка. Дозволете ни да претпоставиме \m број на нишки во базенот на теми.
            • Веб-серверот Node JS ги прима барањата Client-1, Client-2… и Client-n и ги става во редот на настани.
            • Node JS Even Loop Ги зема тие барања едно по едно.
              • Прикажува дури и јамка Барање клиент-1-1
                • Проверува дали Барањето за клиент-1 бара некои операции за блокирање IO или бара повеќе време за сложени пресметковни задачи.
                • Бидејќи ова барање е едноставно пресметување и задача на IO што не е блокирана, не бара посебна нишка за да се обработи.
                • Јамката на настани ги обработува сите чекори предвидени во операцијата Барање-1 на клиент-1 (Овде Операции се функциите на Java скрипта) и го подготвува одговорот-1
                • Јамката за настани испраќа одговор-1 до клиентот-1

                • Проверува дали Client-2 Request-2 бара какви било операции за блокирање IO или бара повеќе време за сложени пресметковни задачи.
                • Бидејќи ова барање е едноставно пресметување и задача на IO што не е блокирана, не бара посебна нишка за да се обработи.
                • Крајот на настани ги обработува сите чекори предвидени во операцијата Барање-2 на клиент-2 и го подготвува одговорот-2
                • Јамката на настанот испраќа одговор-2 до клиентот-2

                • Проверува дали Client-n Request-n бара некои операции за блокирање IO или бара повеќе време за сложени пресметковни задачи.
                • Бидејќи ова барање е многу сложена пресметка или задача за блокирање на IO, Even Loop не го обработува ова барање.
                • Јамката за настани ја зема низата T-1 од Внатрешната група на нишки и го доделува ова Барање за клиент-n-n на низата T-1
                • Темата T-1 го чита и обработува барањето-n, ја изврши потребната задача за блокирање IO или пресметување и на крајот го подготвува одговорот-n
                • Никата T-1 го испраќа овој одговор-n до циклусот на настани
                • Јамката за настани за возврат, го испраќа овој одговор-n до клиентот-n

                function1(function2,callback1);
                function2(function3,callback2);
                function3(input-params);
                

                ЗАБЕЛЕШКА: -

                • Ако не разбирате како се извршуваат овие функции, тогаш мислам дека не сте запознаени со функциите на Java Script и механизмот за повратен повик.
                • Треба да имаме идеја за функциите на Java Script и механизмите за повратен повик. Поминете низ некое онлајн упатство пред да започнете со развојот на нашата апликација Node JS.

                Архитектура на јазол JS - Предности на јамката на настани со една нишка

                1. Ракувањето со сè повеќе истовремени барања на клиентот е многу лесно.
                2. Иако нашата апликација Node JS прима се повеќе и повеќе истовремени барања на клиентите, нема потреба од создавање сè повеќе нишки, поради циклусот на настани.
                3. Апликацијата Node JS користи помалку нишки за да може да користи само помалку ресурси или меморија

                Псевдо код на јамка на настани

                Бидејќи сум развивач на Јава, ќе се обидам да објаснам „Како работи циклусот на настани“ во терминологијата Јава. Не е во чист Java код, претпоставувам дека секој може да го разбере ова. ми коментар.

                public class EventLoop {
                while(true){
                        	if(Event Queue receives a JavaScript Function Call){
                        		ClientRequest request = EventQueue.getClientRequest();
                                            If(request requires BlokingIO or takes more computation time)
                                                    Assign request to Thread T1
                                            Else
                                                  Process and Prepare response
                                  }
                            }
                } 
                

                Тоа е сè за Node JS Architecture и Node JS за циклус на настани со единечна нишка.