SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Web application architecure: 
overview of techniques 
Ruslan Shevchenko. <ruslan@shevchenko.kiev.ua>! 
GoSave, Inc: http://www.gosave.com!
Themes 
❖ What are current architecture patterns, which ! 
❖ can be used! 
❖ can be reused ( in other languages or frameworks 
than origin)! 
! 
❖ Client/Service interaction. ! 
❖ Reactivity
What is in mainstream now ? 
❖ Sinatra-like frameworks! 
❖ Server:! 
❖ REST ! 
❖ Client: MVC! 
❖ yesterday: backbone! 
❖ today: angular! 
❖ tommorow: react.js + sumthing
shiny 
• http://shiny.rstudio.com/! 
• live example: http://shiny.rstudio.com/gallery/telephones-by-region.html! 
• R language! 
• 8 LOC : server! 
• 12 LOC: UI
shiny: UI.R 
library(shiny) 
library(datasets) 
! 
shinyUI( 
fluidPage( 
titlePanel("Telephones by region"), 
sidebarLayout( 
sidebarPanel( 
selectInput("region", "Region:", 
choices=colnames(WorldPhones)), 
hr(), 
helpText("Data from AT&T (1961) The World's Telephones.") 
), 
mainPanel( 
plotOutput("phonePlot") 
) 
) 
))
shiny: Server.R 
library(shiny) 
! 
# Rely on the 'WorldPhones' dataset in the datasets 
# package (which generally comes preloaded). 
library(datasets) 
! 
shinyServer(function(input, output) { 
output$phonePlot <- renderPlot({ 
barplot(WorldPhones[,input$region]*1000, 
main=input$region, 
ylab="Number of Telephones", 
xlab="Year") 
}) 
})
Shiny: notes 
❖ DSL for HTML! 
❖ Reactive! 
❖ Websocket transport instead request/reply
Shiny: notes 
❖ DSL for HTML! 
❖ Reactive! 
❖ Websocket transport instead request/reply 
❖ Predefined UI skin (twitter bootstrap)! 
❖ Narrow applicability
Conway law 
Organizations which design systems ... are constrained to produce designs which 
are copies of the communication structures of these organizations ……! 
(Conway, 1968)! 
Organization communication ! 
structure 
Software structure 
Shiny <=> existence of data analysis department
max. enterprise: Java 
(Server-centric)! 
❖ dropwizard: https://dropwizard.github.io/dropwizard/! 
❖ spring: http://www.spring.io! 
❖ J2EE %-)
max. enterprise: java 
Relative good and applicable: 
@Path(“/users”) 
@GET 
@Produces({MediaType.APPLICATION_JSON}) 
@ApiOperation(nickname = "getUsers", 
value = "get list of users", 
httpMethod = "GET", 
response = UsersSortDTO.class, 
responseContainer = “List") 
public List<UserDTO> list(@ApiParam SelectorDTO selector) { 
CriteriaQuery<UserDTO> = … 
………. 
return q.getResultList(); 
}
max. enterprise: java 
Relative good and applicable: 
❖ Jersey: https://jersey.java.net/! 
❖ request bind to method.! 
❖ routing is set via annotations.! 
❖ Jackson: https://github.com/FasterXML/jackson! 
❖ annotation-based json serializer with good defaults! 
❖ Swagger: https://helloreverb.com/developers/swagger
Client/Server API issues. 
REST - is not fit for all 
What we do with operations, other than CRUD over resources ? 
❖ RPC on some language on top of javascript [?]! 
❖ adopt IDL protocol [?]! 
❖ fix REST [?] 
Ideal solution yet not exists….
Client/Server API: One Language 
Many implementations 
• Javascript (node.js) ! 
• ClojureScript/ Clojure: http://clojure.org/! 
• Kotlin: http://kotlin-web-site.jetbrains.org/ ! 
• Scala (! 
• scala.js [http://www.scala-js.org/], ! 
• jscala [ https://github.com/nau/jscala ] ! 
• R ! 
• etc … 
❖ Conway law, ! 
❖ Not one ‘ideal’ language for all
Client/Server API: IDL 
IDL == Interface Definition Language 
struct ProfileInfo! 
{! 
1: required string uid;! 
2: optional string firstName;! 
3: optional string middleName;! 
4: optional string lastName;! 
5: optional string email;! 
6: optional string phone;! 
7: optional string addrPostal;! 
}! 
! 
service SelfCare! 
{! 
ProfileInfo getProfileInfo(required string authToken)! 
throws(OperationException)! 
………… 
Implementations:! 
thrift: http://thrift.apache.org/! 
RSDL, WADL (xml-based)
Client/Server: Fix REST 
REST without PUT 
RPC call = create event (i.e. POST /event )! 
seqence of events instead PUT 
CQRS = Command Query Responsibility 
Events State 
Query 
rdonly
Client/Server: Streaming 
Example: sparkle. https://github.com/mighdoll/sparkle 
Visualization of data stream, ! 
coming from server via websocket transport 
Server (scala) 
Client (javascript) 
Server -> Client : Data Stream, ! 
(reply to control messages)! 
! 
Client -> Server: Control messages! 
(subscribe/unsubscribe/transform)
Reactivity: client. 
Shiny: one circuit with client and server. 
More common: client-only reactive interactions, ! 
REST/RPC with server 
❖ Angular.js [2/way binding]! 
❖ React.js [1/way binding] ! 
❖ (model => view)! 
❖ OM: https://github.com/swannodette/om! 
❖ RFP! 
❖ backon.js [ http://baconjs.github.io/], RxJs! 
❖ ELM (language) http://elm-lang.org!
Reactivity: client: Om 
https://github.com/swannodette/om 
Clojure! 
! 
! 
Application state = Tree, bound to clojure atom! 
! 
UI component state = path inside application state! 
! 
Use React.js for updating UI from change in application state!
Reactivity: server 
Reactivity on server - more about C10K ! 
• http://www.reactivemanifesto.org/! 
• http://en.wikipedia.org/wiki/C10k_problem 
No blocking ….! 
event oriented …
Unreactive pseudocode: 1 
def listUsers(r: Request): RequestResult = 
listForm.bind(request){ 
! 
success(form) => Ok (ToJson( 
users.filter(_.name contains form.q). 
page(form.offset,form.limit) 
) ), 
! 
failure(f,message, ex) => Error(403, message) 
! 
}
Unreactive pseudocode: 1 
def listUsers(r: Request): RequestResult = 
listForm.bind(request){ 
! 
success(form) => Ok (ToJson( 
users.filter(_.name contains form.q). 
page(form.offset,form.limit) 
) ), 
! 
failure(f,message, ex) => Error(403, message) 
! 
}
Nonreactive: 1 
Client Application Server Database
Nonreactive: 1 / overload 
Client Application Server Database
Reactive code: 2 
latest Play: 
def listUsers = Action { request => 
listForm.bind(request){ 
! 
success(form) => Ok (ToJson( 
users.filter(_.name contains form.q). 
page(form.offset,form.limit) 
) ), 
! 
failure(f,message, ex) => Error(403, message) 
! 
}
Reactive code: 2 
def listUsers = Action { request => 
listForm.bind(request){ 
! 
success(form) => Ok (ToJson( 
users.filter(_.name contains form.q). 
page(form.offset,form.limit) 
) ), 
! 
failure(f,message, ex) => Error(403, message) 
! 
} 
callback 
latest Play:
Non-reactive: 1 / overload 
Client Application Server Database
Reactive: 2 / overload 
Client Application Server Database
Reactive pseudocode: 3 
Imagine, we have reactive db driver: 
def listUsers = Action { request => 
listForm.bind(request){ 
! 
success(form) => Ok ( 
db.query( 
users.filter(_.name contains form.q). 
page(form.offset,form.limit) 
) map ( x => ToJson(x) ) 
), 
! 
failure(f,message, ex) => Error(403, message) 
! 
} 
callback 
callback
Reactive: 3 / overload 
Client Application Server Database
Server: reactivity 
• 2 callbacks instead sequential code! 
• (welcome to callback hell ?)! 
• functional programming is really needed! 
• Infrastructure is not mature yet.! 
• reactive-mongo, reactive-postgres,! 
• but we have no reactivity suport in jdbc!
Server: reactivity 
Other computation models:! 
• Actors [Erlang, Scala Akka]! 
• Channels [Go, Closure core.async]! 
• Language reactive extensions! 
• [RxNet, RxJava, RxScala]
Web architecture: overview of techniques 
❖ Can’t say that we have some ‘Canonical ideal architecture’.! 
❖ Non-ideal techniques are still interesting.! 
❖ Invention/Reinvention cycle => ! 
❖ Hope we will see something new! 
❖ Take care
Web architecture: overview of techniques 
Thanks for attention.! 
! 
Ruslan Shevchenko, <ruslan@shevchenko.kiev.ua>! 
https://github.com/rssh! 
@rssh1! 
//this talk was bought to you by GoSave: http://www.gosave.com ;)!

Weitere ähnliche Inhalte

Was ist angesagt?

Clojure Workshop: Web development
Clojure Workshop: Web developmentClojure Workshop: Web development
Clojure Workshop: Web developmentSytac
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVCIndicThreads
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weiboshaokun
 
Introduction to Node.JS Express
Introduction to Node.JS ExpressIntroduction to Node.JS Express
Introduction to Node.JS ExpressEueung Mulyana
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Elena Kolevska
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesciklum_ods
 
Dynamic content generation
Dynamic content generationDynamic content generation
Dynamic content generationEleonora Ciceri
 
Web services - A Practical Approach
Web services - A Practical ApproachWeb services - A Practical Approach
Web services - A Practical ApproachMadhaiyan Muthu
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleRaimonds Simanovskis
 
Introduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress DevelopersIntroduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress DevelopersCaldera Labs
 
Integration with Mule
Integration with MuleIntegration with Mule
Integration with MuleRyan Hoegg
 

Was ist angesagt? (19)

Clojure Workshop: Web development
Clojure Workshop: Web developmentClojure Workshop: Web development
Clojure Workshop: Web development
 
Soap and Rest
Soap and RestSoap and Rest
Soap and Rest
 
Helping Things to REST
Helping Things to RESTHelping Things to REST
Helping Things to REST
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weibo
 
Introduction to Node.JS Express
Introduction to Node.JS ExpressIntroduction to Node.JS Express
Introduction to Node.JS Express
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devices
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
 
Dynamic content generation
Dynamic content generationDynamic content generation
Dynamic content generation
 
Web service introduction
Web service introductionWeb service introduction
Web service introduction
 
Web services - A Practical Approach
Web services - A Practical ApproachWeb services - A Practical Approach
Web services - A Practical Approach
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on Oracle
 
Javascript laravel's friend
Javascript laravel's friendJavascript laravel's friend
Javascript laravel's friend
 
Introduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress DevelopersIntroduction to AngularJS For WordPress Developers
Introduction to AngularJS For WordPress Developers
 
Integration with Mule
Integration with MuleIntegration with Mule
Integration with Mule
 
Symfony3 w duecie z Vue.js
Symfony3 w duecie z Vue.jsSymfony3 w duecie z Vue.js
Symfony3 w duecie z Vue.js
 
REST API Laravel
REST API LaravelREST API Laravel
REST API Laravel
 
Web Service
Web ServiceWeb Service
Web Service
 

Ähnlich wie WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений - Руслан Шевченко

Web architecture - overview of techniques.
Web architecture - overview of  techniques.Web architecture - overview of  techniques.
Web architecture - overview of techniques.Ruslan Shevchenko
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationAjax Experience 2009
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングscalaconfjp
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Ngoc Dao
 
Writing RESTful web services using Node.js
Writing RESTful web services using Node.jsWriting RESTful web services using Node.js
Writing RESTful web services using Node.jsFDConf
 
Scala.js for large and complex frontend apps
Scala.js for large and complex frontend appsScala.js for large and complex frontend apps
Scala.js for large and complex frontend appsOtto Chrons
 
Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Visual Engineering
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swiftTim Burks
 
Clojure Web Development
Clojure Web DevelopmentClojure Web Development
Clojure Web DevelopmentHong Jiang
 
sMash at May NYPHP UG
sMash at May NYPHP UGsMash at May NYPHP UG
sMash at May NYPHP UGProject Zero
 
Krug Fat Client
Krug Fat ClientKrug Fat Client
Krug Fat ClientPaul Klipp
 
Clojure and the Web
Clojure and the WebClojure and the Web
Clojure and the Webnickmbailey
 
Developing RESTful WebServices using Jersey
Developing RESTful WebServices using JerseyDeveloping RESTful WebServices using Jersey
Developing RESTful WebServices using Jerseyb_kathir
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with ExamplesGabriele Lana
 
Nodejsexplained 101116115055-phpapp02
Nodejsexplained 101116115055-phpapp02Nodejsexplained 101116115055-phpapp02
Nodejsexplained 101116115055-phpapp02Sunny Gupta
 

Ähnlich wie WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений - Руслан Шевченко (20)

Web architecture - overview of techniques.
Web architecture - overview of  techniques.Web architecture - overview of  techniques.
Web architecture - overview of techniques.
 
Andrei shakirin rest_cxf
Andrei shakirin rest_cxfAndrei shakirin rest_cxf
Andrei shakirin rest_cxf
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
 
JS everywhere 2011
JS everywhere 2011JS everywhere 2011
JS everywhere 2011
 
Switch to Backend 2023
Switch to Backend 2023Switch to Backend 2023
Switch to Backend 2023
 
08 ajax
08 ajax08 ajax
08 ajax
 
Writing RESTful web services using Node.js
Writing RESTful web services using Node.jsWriting RESTful web services using Node.js
Writing RESTful web services using Node.js
 
Scala.js for large and complex frontend apps
Scala.js for large and complex frontend appsScala.js for large and complex frontend apps
Scala.js for large and complex frontend apps
 
Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.
 
Networked APIs with swift
Networked APIs with swiftNetworked APIs with swift
Networked APIs with swift
 
Clojure Web Development
Clojure Web DevelopmentClojure Web Development
Clojure Web Development
 
sMash at May NYPHP UG
sMash at May NYPHP UGsMash at May NYPHP UG
sMash at May NYPHP UG
 
Krug Fat Client
Krug Fat ClientKrug Fat Client
Krug Fat Client
 
SCDJWS 5. JAX-WS
SCDJWS 5. JAX-WSSCDJWS 5. JAX-WS
SCDJWS 5. JAX-WS
 
Clojure and the Web
Clojure and the WebClojure and the Web
Clojure and the Web
 
Developing RESTful WebServices using Jersey
Developing RESTful WebServices using JerseyDeveloping RESTful WebServices using Jersey
Developing RESTful WebServices using Jersey
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
 
Nodejsexplained 101116115055-phpapp02
Nodejsexplained 101116115055-phpapp02Nodejsexplained 101116115055-phpapp02
Nodejsexplained 101116115055-phpapp02
 

Mehr von GeeksLab Odessa

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...GeeksLab Odessa
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...GeeksLab Odessa
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторGeeksLab Odessa
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеGeeksLab Odessa
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...GeeksLab Odessa
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладGeeksLab Odessa
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладGeeksLab Odessa
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладGeeksLab Odessa
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...GeeksLab Odessa
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...GeeksLab Odessa
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко GeeksLab Odessa
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...GeeksLab Odessa
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...GeeksLab Odessa
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...GeeksLab Odessa
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...GeeksLab Odessa
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...GeeksLab Odessa
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...GeeksLab Odessa
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот GeeksLab Odessa
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...GeeksLab Odessa
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js GeeksLab Odessa
 

Mehr von GeeksLab Odessa (20)

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский Виктор
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображение
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
 

Kürzlich hochgeladen

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 

Kürzlich hochgeladen (20)

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 

WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений - Руслан Шевченко

  • 1. Web application architecure: overview of techniques Ruslan Shevchenko. <ruslan@shevchenko.kiev.ua>! GoSave, Inc: http://www.gosave.com!
  • 2. Themes ❖ What are current architecture patterns, which ! ❖ can be used! ❖ can be reused ( in other languages or frameworks than origin)! ! ❖ Client/Service interaction. ! ❖ Reactivity
  • 3. What is in mainstream now ? ❖ Sinatra-like frameworks! ❖ Server:! ❖ REST ! ❖ Client: MVC! ❖ yesterday: backbone! ❖ today: angular! ❖ tommorow: react.js + sumthing
  • 4. shiny • http://shiny.rstudio.com/! • live example: http://shiny.rstudio.com/gallery/telephones-by-region.html! • R language! • 8 LOC : server! • 12 LOC: UI
  • 5. shiny: UI.R library(shiny) library(datasets) ! shinyUI( fluidPage( titlePanel("Telephones by region"), sidebarLayout( sidebarPanel( selectInput("region", "Region:", choices=colnames(WorldPhones)), hr(), helpText("Data from AT&T (1961) The World's Telephones.") ), mainPanel( plotOutput("phonePlot") ) ) ))
  • 6. shiny: Server.R library(shiny) ! # Rely on the 'WorldPhones' dataset in the datasets # package (which generally comes preloaded). library(datasets) ! shinyServer(function(input, output) { output$phonePlot <- renderPlot({ barplot(WorldPhones[,input$region]*1000, main=input$region, ylab="Number of Telephones", xlab="Year") }) })
  • 7. Shiny: notes ❖ DSL for HTML! ❖ Reactive! ❖ Websocket transport instead request/reply
  • 8. Shiny: notes ❖ DSL for HTML! ❖ Reactive! ❖ Websocket transport instead request/reply ❖ Predefined UI skin (twitter bootstrap)! ❖ Narrow applicability
  • 9. Conway law Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations ……! (Conway, 1968)! Organization communication ! structure Software structure Shiny <=> existence of data analysis department
  • 10. max. enterprise: Java (Server-centric)! ❖ dropwizard: https://dropwizard.github.io/dropwizard/! ❖ spring: http://www.spring.io! ❖ J2EE %-)
  • 11. max. enterprise: java Relative good and applicable: @Path(“/users”) @GET @Produces({MediaType.APPLICATION_JSON}) @ApiOperation(nickname = "getUsers", value = "get list of users", httpMethod = "GET", response = UsersSortDTO.class, responseContainer = “List") public List<UserDTO> list(@ApiParam SelectorDTO selector) { CriteriaQuery<UserDTO> = … ………. return q.getResultList(); }
  • 12. max. enterprise: java Relative good and applicable: ❖ Jersey: https://jersey.java.net/! ❖ request bind to method.! ❖ routing is set via annotations.! ❖ Jackson: https://github.com/FasterXML/jackson! ❖ annotation-based json serializer with good defaults! ❖ Swagger: https://helloreverb.com/developers/swagger
  • 13. Client/Server API issues. REST - is not fit for all What we do with operations, other than CRUD over resources ? ❖ RPC on some language on top of javascript [?]! ❖ adopt IDL protocol [?]! ❖ fix REST [?] Ideal solution yet not exists….
  • 14. Client/Server API: One Language Many implementations • Javascript (node.js) ! • ClojureScript/ Clojure: http://clojure.org/! • Kotlin: http://kotlin-web-site.jetbrains.org/ ! • Scala (! • scala.js [http://www.scala-js.org/], ! • jscala [ https://github.com/nau/jscala ] ! • R ! • etc … ❖ Conway law, ! ❖ Not one ‘ideal’ language for all
  • 15. Client/Server API: IDL IDL == Interface Definition Language struct ProfileInfo! {! 1: required string uid;! 2: optional string firstName;! 3: optional string middleName;! 4: optional string lastName;! 5: optional string email;! 6: optional string phone;! 7: optional string addrPostal;! }! ! service SelfCare! {! ProfileInfo getProfileInfo(required string authToken)! throws(OperationException)! ………… Implementations:! thrift: http://thrift.apache.org/! RSDL, WADL (xml-based)
  • 16. Client/Server: Fix REST REST without PUT RPC call = create event (i.e. POST /event )! seqence of events instead PUT CQRS = Command Query Responsibility Events State Query rdonly
  • 17. Client/Server: Streaming Example: sparkle. https://github.com/mighdoll/sparkle Visualization of data stream, ! coming from server via websocket transport Server (scala) Client (javascript) Server -> Client : Data Stream, ! (reply to control messages)! ! Client -> Server: Control messages! (subscribe/unsubscribe/transform)
  • 18. Reactivity: client. Shiny: one circuit with client and server. More common: client-only reactive interactions, ! REST/RPC with server ❖ Angular.js [2/way binding]! ❖ React.js [1/way binding] ! ❖ (model => view)! ❖ OM: https://github.com/swannodette/om! ❖ RFP! ❖ backon.js [ http://baconjs.github.io/], RxJs! ❖ ELM (language) http://elm-lang.org!
  • 19. Reactivity: client: Om https://github.com/swannodette/om Clojure! ! ! Application state = Tree, bound to clojure atom! ! UI component state = path inside application state! ! Use React.js for updating UI from change in application state!
  • 20. Reactivity: server Reactivity on server - more about C10K ! • http://www.reactivemanifesto.org/! • http://en.wikipedia.org/wiki/C10k_problem No blocking ….! event oriented …
  • 21. Unreactive pseudocode: 1 def listUsers(r: Request): RequestResult = listForm.bind(request){ ! success(form) => Ok (ToJson( users.filter(_.name contains form.q). page(form.offset,form.limit) ) ), ! failure(f,message, ex) => Error(403, message) ! }
  • 22. Unreactive pseudocode: 1 def listUsers(r: Request): RequestResult = listForm.bind(request){ ! success(form) => Ok (ToJson( users.filter(_.name contains form.q). page(form.offset,form.limit) ) ), ! failure(f,message, ex) => Error(403, message) ! }
  • 23. Nonreactive: 1 Client Application Server Database
  • 24. Nonreactive: 1 / overload Client Application Server Database
  • 25. Reactive code: 2 latest Play: def listUsers = Action { request => listForm.bind(request){ ! success(form) => Ok (ToJson( users.filter(_.name contains form.q). page(form.offset,form.limit) ) ), ! failure(f,message, ex) => Error(403, message) ! }
  • 26. Reactive code: 2 def listUsers = Action { request => listForm.bind(request){ ! success(form) => Ok (ToJson( users.filter(_.name contains form.q). page(form.offset,form.limit) ) ), ! failure(f,message, ex) => Error(403, message) ! } callback latest Play:
  • 27. Non-reactive: 1 / overload Client Application Server Database
  • 28. Reactive: 2 / overload Client Application Server Database
  • 29. Reactive pseudocode: 3 Imagine, we have reactive db driver: def listUsers = Action { request => listForm.bind(request){ ! success(form) => Ok ( db.query( users.filter(_.name contains form.q). page(form.offset,form.limit) ) map ( x => ToJson(x) ) ), ! failure(f,message, ex) => Error(403, message) ! } callback callback
  • 30. Reactive: 3 / overload Client Application Server Database
  • 31. Server: reactivity • 2 callbacks instead sequential code! • (welcome to callback hell ?)! • functional programming is really needed! • Infrastructure is not mature yet.! • reactive-mongo, reactive-postgres,! • but we have no reactivity suport in jdbc!
  • 32. Server: reactivity Other computation models:! • Actors [Erlang, Scala Akka]! • Channels [Go, Closure core.async]! • Language reactive extensions! • [RxNet, RxJava, RxScala]
  • 33. Web architecture: overview of techniques ❖ Can’t say that we have some ‘Canonical ideal architecture’.! ❖ Non-ideal techniques are still interesting.! ❖ Invention/Reinvention cycle => ! ❖ Hope we will see something new! ❖ Take care
  • 34. Web architecture: overview of techniques Thanks for attention.! ! Ruslan Shevchenko, <ruslan@shevchenko.kiev.ua>! https://github.com/rssh! @rssh1! //this talk was bought to you by GoSave: http://www.gosave.com ;)!