portaldacalheta.pt
  • Основен
  • Управление На Проекти
  • Дизайн На Марката
  • Процес На Проектиране
  • Начин На Живот
Наука За Данни И Бази Данни

Игра за мащабиране! до хиляди едновременни искания



Уеб разработчици на Scala често не успяват да вземат предвид последиците от хиляди потребители, които имат достъп до нашите приложения едновременно. Може би защото обичаме бързо да прототипираме; може би защото тестването на такива сценарии е просто трудно .

Независимо от това, аз ще твърдя, че пренебрегването на мащабируемостта не е толкова лошо, колкото звучи - ако използвате подходящия набор от инструменти и следвате добри практики за развитие.



Пренебрегването на мащабируемостта не е толкова лошо, колкото звучи - ако използвате подходящите инструменти.

Лоджиня и пиесата! Рамка

Преди време стартирах проект, наречен Lojinha (което в превод означава „малък магазин“ на португалски), опитът ми да изградя сайт за търг. (Между другото, този проект е отворен код ). Мотивацията ми беше следната:



  • Наистина исках да продам някои стари неща, които вече не използвам.
  • Не обичам традиционните сайтове за търгове, особено тези, които имаме тук, в Бразилия.
  • Исках да 'играя' с Играйте! Рамка 2 (предназначен за игра на думи).

Така че, както беше споменато по-горе, реших да използвам Играйте! Рамка . Нямам точен брой колко време е отнело изграждането, но със сигурност не е минало много време, преди сайтът ми да бъде стартиран и работещ с простата система, внедрена в http://lojinha.jcranky.com . Всъщност прекарах поне половината от времето за разработка за дизайна, който използва Twitter Bootstrap (не забравяйте: аз не съм дизайнер ...).



Параграфът по-горе трябва да изясни поне едно нещо: не се тревожех много за представянето, ако изобщо го създавах, когато създавах Lojinha.

И точно това е моята идея: има сила в използването на правилните инструменти - инструменти, които ви водят по правилния път, инструменти, които ви насърчават да следвате най-добрите практики за разработка от самото им изграждане.



В този случай тези инструменти са Play! Рамката и Scala език , с Акка правейки някои „гостувания“.

Позволете ми да ви покажа какво имам предвид.



Неизменност и кеширане

Общоприето е, че минимизирането на изменчивостта е добра практика. Накратко, изменчивостта затруднява разсъжденията относно вашия код, особено когато се опитвате да въведете някакъв паралелизъм или паралелизъм.

Играта! Рамката на Scala ви кара да използвате неизменност през голяма част от времето, както и самият език на Scala. Например резултатът, генериран от контролер, е неизменим. Понякога може да смятате тази неизменност за „досадна“ или „досадна“, но тези „добри практики“ са „добри“ по някаква причина.



В този случай неизменността на контролера беше от решаващо значение, когато най-накрая реших да провеждам някои тестове за ефективност: открих затруднение и за да го поправя, просто кеширах този неизменяем отговор.

От кеширане , Имам предвид запазване на обекта за отговор и обслужване на идентичен екземпляр, както е, на всички нови клиенти. Това освобождава сървъра от необходимостта да преизчислява резултата отново. Не би било възможно да се даде един и същ отговор на множество клиенти, ако този резултат беше променлив.



Недостатъкът: за кратък период (времето на кеша изтича) клиентите могат да получават остаряла информация. Това е проблем само в сценарии, при които клиентът абсолютно се нуждае от достъп до най-новите данни, без толеранс към забавяне.

За справка ето кода на Scala за зареждане на началната страница със списък с продукти, без кеширане:



def index = Action { implicit request => Ok(html.index(body = html.body(Items.itemsHigherBids(itemDAO.all(false))), menu = mainMenu)) }

Сега, добавяне на кеша:

def index = Cached('index', 5) { Action { implicit request => Ok(html.index(body = html.body(Items.itemsHigherBids(itemDAO.all(false))), menu = mainMenu)) } }

Съвсем просто, нали? Тук, „Индекс“ е ключът, който ще се използва в кеш системата, а 5 е времето на изтичане, в секунди.

интернет на нещата домакински уреди
След кеширане, производителността се е увеличила до 800 заявки в секунда. Това е подобрение от повече от 4 пъти за по-малко от два реда код.

За да тествам ефекта от тази промяна, проведох някои тестове на JMeter (включени в репозитория на GitHub) локално. Преди да добавя кеша, постигнах пропускателна способност от приблизително 180 заявки в секунда. След кеширане, производителността се е увеличила до 800 заявки в секунда. Това е подобрение от повече от 4x за по-малко от два реда код.

Ето как използвах Play! кеш за подобряване на производителността в моя сайт за търг Scala.

Консумация на памет

Друга област, в която правилните инструменти на Scala могат да направят голяма разлика, е консумацията на памет. Ето, пак играйте! тласка ви в правилната (мащабируема) посока. В Java света, за „нормално“ уеб приложение, написано с API на сървлета (т.е. почти всяка рамка на Java или Scala там), е много изкушаващо да поставите много боклуци в потребителската сесия, защото API предлага лесни за извикване методи, които ви позволяват:

session.setAttribute('attrName', attrValue);

Тъй като е толкова лесно да добавите информация към потребителската сесия, тя често се злоупотребява. В резултат на това рискът от изразходване на твърде много памет по вероятно без основателна причина е еднакво висок.

С играта! Framework, това не е опция - Framework просто няма пространство на сесия от страна на сървъра. Играта! Потребителската сесия на framework се съхранява в бисквитка на браузъра и вие трябва да живеете с нея. Това означава, че пространството на сесията е ограничено по размер и тип: можете да съхранявате само низове. Ако трябва да съхранявате обекти, ще трябва да използвате кеширащия механизъм, който обсъдихме преди. Например може да искате да съхраните имейл адреса или потребителското име на текущия потребител в сесията, но ще трябва да използвате кеша, ако трябва да съхраните цял потребителски обект от вашия модел на домейн.

Играйте! ви държи на правилния път, принуждавайки ви да обмислите внимателно използването на паметта си, което създава код за първо преминаване, който е практически готов за клъстер.

Отново това може да изглежда като болка в началото, но в действителност, Играйте! ви държи на правилния път, принуждавайки ви да обмислите внимателно използването на паметта си, което създава код за първо преминаване, който е практически готов за клъстер - особено като се има предвид, че няма сесия от страна на сървъра, която би трябвало да се разпространява в целия ви клъстер, създавайки живот безкрайно по-лесно.

Async поддръжка

Следващ в тази игра! преглед на рамката, ние ще разгледаме как играе! също блести в асинхронна (хронична) поддръжка. И освен родните му функции, играйте! ви позволява да вграждате Акка , мощен инструмент за асинхронна обработка.

Въпреки че Lojinha все още не се възползва напълно от Akka, нейната проста интеграция с Play! направи много лесно:

  1. Планирайте асинхронна услуга за електронна поща.
  2. Обработвайте едновременно оферти за различни продукти.

Накратко, Akka е изпълнение на Актьорски модел известен от Ерланг . Ако не сте запознати с Akka Model Model, просто си го представете като малка единица, която комуникира само чрез съобщения.

За да изпратя имейл асинхронно, първо създавам правилното съобщение и актьор . Тогава всичко, което трябва да направя, е нещо като:

EMail.actor ! BidToppedMessage(item.name, itemUrl, bidderEmail)

Логиката за изпращане на имейли е внедрена вътре в актьора и съобщението казва на актьора кой имейл бихме искали да изпратим. Това се прави в схема за пожар и забрава, което означава, че горният ред изпраща заявката и след това продължава да изпълнява каквото имаме след това (т.е. не блокира).

За повече информация относно родната Async на Play!, Разгледайте официална документация .

Заключение

В обобщение: Бързо разработих малко приложение, Пазарувайте , способни да мащабират и намаляват много добре. Когато се сблъсках с проблеми или открих тесни места, поправките бяха бързи и лесни, с много кредити поради инструментите, които използвах (Play !, Scala, Akka и т.н.), което ме подтикна да следвам най-добрите практики по отношение на ефективността и мащабируемост. С малко загриженост за производителността успях да мащабирам до хиляди едновременни заявки.

Когато разработвате следващото си приложение, обмислете внимателно инструментите си.

Старши инженер Ruby on Rails

Други

Старши инженер Ruby on Rails
Как бързо да трансформирате скучните икони в оригинални шедьоври

Как бързо да трансформирате скучните икони в оригинални шедьоври

Ui Design

Популярни Публикации
Изцеление на скъсани вериги за доставки: производство извън Китай
Изцеление на скъсани вериги за доставки: производство извън Китай
Включете Angular 2: Надстройка от 1.5
Включете Angular 2: Надстройка от 1.5
Урок за работен поток за проектиране за разработчици: Осигурете по-добър UI / UX навреме
Урок за работен поток за проектиране за разработчици: Осигурете по-добър UI / UX навреме
PHP Frameworks: Избор между Symfony и Laravel
PHP Frameworks: Избор между Symfony и Laravel
Шевморфизъм, плосък дизайн и възходът на типографския дизайн
Шевморфизъм, плосък дизайн и възходът на типографския дизайн
 
.NET Core - да станем диви и с отворен код. Microsoft, какво ти отне толкова време ?!
.NET Core - да станем диви и с отворен код. Microsoft, какво ти отне толкова време ?!
Крайно ръководство за езика за обработка, част I: Основите
Крайно ръководство за езика за обработка, част I: Основите
Ractive.js - Уеб приложения, направени лесно
Ractive.js - Уеб приложения, направени лесно
Защо има толкова много Pythons?
Защо има толкова много Pythons?
Съвети и инструменти за оптимизиране на приложения за Android
Съвети и инструменти за оптимизиране на приложения за Android
Популярни Публикации
  • хакната кредитна карта с баланс 2019
  • размери на устройството за отзивчив уеб дизайн
  • pmo не се използва
  • изучаване на C++ програмиране
  • пример за уеб приложение на node js
  • node js прави асинхронното повикване синхронно
Категории
  • Управление На Проекти
  • Дизайн На Марката
  • Процес На Проектиране
  • Начин На Живот
  • © 2022 | Всички Права Запазени

    portaldacalheta.pt