Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałZygfryd Molęda Został zmieniony 10 lat temu
1
Erlang Web Scalable & Reliable web framework ErlLounge, Kraków Lipiec 2009 (wersja rozszerzona dla czytelników off-line;))
2
Dziś Dlaczego? Dlaczego? Kto? Kto? Co? Co? Jak? Jak? Co dalej? Co dalej? Jak zacząć? Jak zacząć?
3
Dlaczego? Naturalny frontend dla systemów napisanych w Erlang/OTP Naturalny frontend dla systemów napisanych w Erlang/OTP Wsparcie dla skalowalności w każdej warstwie: Wsparcie dla skalowalności w każdej warstwie: HTTP servers: Yaws and INETS… HTTP servers: Yaws and INETS… Cache i dystrybucja sesji Cache i dystrybucja sesji Databases: Mnesia, CouchDB… Databases: Mnesia, CouchDB… Zarządzanie kodem (Buildability, Integrity) Zarządzanie kodem (Buildability, Integrity) Paradygmat MVC Paradygmat MVC Nie ma Erlanga w templatach HTML Nie ma Erlanga w templatach HTML Rozszerzalność (plugins) Rozszerzalność (plugins)
4
Kto? ETC ETC SourceForge SourceForge BitBucket BitBucket
5
Jak to działa? Przetwarzanie requestu z serwera HTTP Przetwarzanie requestu z serwera HTTP Przetwarzanie danych Przetwarzanie danych Rozwijanie dynamicznych danych w templatach (za pomocą wpartów lub DTL) Rozwijanie dynamicznych danych w templatach (za pomocą wpartów lub DTL)
6
OUT IN
7
OUT Dispatcher Dispatcher – Przyjazne URL na bazie regexpów Controllers, Docroot, Templates Controllers, Docroot, Templates – Dostępne za pomocą reguł dispatchera {rodzaj, URL pattern, {moduł, funkcja}}. {rodzaj, URL pattern, {moduł, funkcja}}. {dynamic, "^/index.html$", {main, home}}. {dynamic, "^/index.html$", {main, home}}. {dynamic, delegate, "^/user", "config/dispatcher/user.conf"}. {dynamic, delegate, "^/user", "config/dispatcher/user.conf"}. {static, "^/about$", "about.html"}. {static, "^/about$", "about.html"}. {static, "^style.css$", enoent}. {static, "^style.css$", enoent}.
8
OUT Templates Templates – Zgodne z XHTML – Budowane przez wtpl Wparts Wparts – Dynamiczne znaczniki Wtypes Wtypes – Formatowanie wg. typu
9
OUT Form builder Form builder – Generowane na podstawie typów Caching Caching – Binarna postać stron i18n i18n – Tłumaczenia – Wiele języków config/languages/pl.conf file: {"pass", "Hasło"}. template: template:
10
IN Request dictionary & sesja Request dictionary & sesja – Podręczna pamięć o długości życia requestu wpart:fget("post", "form_input"), wpart:fget("post", "form_input"), wpart:fget("session", "username"), wpart:fget("session", "username"), wpart:fset("node", node()) wpart:fset("node", node()) And then in your template: And then in your template: Wtypes Wtypes - automatyczna walidacja
11
IN Dataflow Dataflow - Funkcyjne szeregowanie przetwarzania requestu Annotations Annotations – Meta opis dataflowu Distribution Distribution – Dwupoziomowa architektura – każdy z poziomów rozproszony horyzontalnie e-Components e-Components – Mechanizm rozszerzeń i wtyczek (paypal, e_backup)
12
Annotations Meta-language kontrolowania realizacji requestu Meta-language kontrolowania realizacji requestu Definiują funkcje przed i po właściwym kontrolerze Definiują funkcje przed i po właściwym kontrolerze – Autoryzacja – Walidacja danych wejsciowych Przykładowe zastosowania po zwroceniu tokenu dla servera Przykładowe zastosowania po zwroceniu tokenu dla servera – Invalidacja zawartości cache – Asynchroniczne (względem requestu) operacje np. na dysku lub w logach.
13
Annotations -module(my_utils).-export([logme/4]).-include_lib("eptic/include/e_annotation.hrl").?BEFORE. logme(AnnArgs, Mod, Fun, ControllerArgs) -> io:format("~s~n", [AnnArgs]), io:format("~s~n", [AnnArgs]), {proceed, ControllerArgs}. {proceed, ControllerArgs}. -module(controller). -export([my_fun/0]). […] ?LOGME("Calling my_fun"). my_fun() -> wpart:fget("post", "id"), […]
14
Budowanie formularzy Forularze z defaultowymi wartosciami (edycja) Forularze z defaultowymi wartosciami (edycja) Szkielet formularza oparty na: Szkielet formularza oparty na: HTML table - HTML table - Paragraph - Paragraph - List - List - Div - Div -
15
Formularze Reprezentacja typów I formularzy za pomocą recordów Reprezentacja typów I formularzy za pomocą recordów article.hrl article.hrl -record(article, { id, id, text, text, hide hide }). }). -record(article_types, { id = {integer, […]}, id = {integer, […]}, title = {string, […]}, title = {string, […]}, hide = {enum, […]} hide = {enum, […]} }). }). templates/article.html <wpart:form type="article" action="/article/create" />
16
Caching Caching – realizacja kontrolera, action caching Caching – realizacja kontrolera, action caching {dynamic, "^/blog/list", {blog, list}, [{cache, persistent]}. {dynamic, "^/blog/list", {blog, list}, [{cache, persistent]}. Cache – strony statyczne Cache – strony statyczne {static, "^/faq$", "doc/faq.html", [{cache, normal}]}. {static, "^/faq$", "doc/faq.html", [{cache, normal}]}. Cache – template scope Cache – template scope SOME CONTENT SOME CONTENT</wpart:cache>
17
Cache - Invalidacja regexp regexp Precyzyjne działanie za pomocą anotacji Precyzyjne działanie za pomocą anotacji?INVALIDATE(["^/blog/list"]). update_blog() -> [update your database here...] [update your database here...] {template, "blog.html"}. {template, "blog.html"}.?INVALIDATE_GROUPS(["menus"]). update_menu() -> [update your database here...] [update your database here...] {template, "blog.html"}. {template, "blog.html"}.
18
Distribution Front End Front End – HTTP server – Dispatcher – Cache tables – Static content Back End Back End – Invalidator – Controllers – Templates – Database
19
Stress testing One machine for Erlang Web application and one for Tsung One machine for Erlang Web application and one for Tsung – Intel Core 2 Due 2.4 GHz – 3 GB DDR2 RAM – Erlang R12-5, no hipe – Suse 11 Application implemented with Application implemented with – INETS 5.0.12 or Yaws 1.80 – Mnesia as database – dispatcher, template inheritance – Erlang Web cache or memcached (through merle)
20
Stress testing Erlang Web cache Erlang Web cache Inets server Inets server Tsung (HTTP 1.1 connections) Tsung (HTTP 1.1 connections) – 1500 pages / sec Memcached through merle Memcached through merle Inets server Inets server Tsung (HTTP 1.1 connections) Tsung (HTTP 1.1 connections) – 1000 pages / sec
21
Plugins bin/e_component.erl list - lists all the e_components bin/e_component.erl list - lists all the e_components bin/e_component.erl search Keyword bin/e_component.erl search Keyword bin/e_component.erl details Name bin/e_component.erl details Name bin/e_component.erl install Name bin/e_component.erl install Name bin/e_component.erl path Path install Name bin/e_component.erl path Path install Name
22
Przykłady erlang-consulting.com erlang-consulting.com
23
Przykłady umbria-rentals.com umbria-rentals.com
24
Przykłady erlang-consulting.com erlang-consulting.com umbria-rentals.com umbria-rentals.com protest-project.eu protest-project.eu
25
Przykłady erlang-consulting.com erlang-consulting.com umbria-rentals.com umbria-rentals.com protest-project.eu protest-project.eu erlang-web.org erlang-web.org
26
Przykłady erlang-consulting.com erlang-consulting.com umbria-rentals.com umbria-rentals.com protest-project.eu protest-project.eu erlang-web.org erlang-web.org erlang-factory.com erlang-factory.com
27
Zasoby Projekt: http://www.erlang-web.org (przykładowe tworzenie aplikacji krok po kroku) Projekt: http://www.erlang-web.org (przykładowe tworzenie aplikacji krok po kroku) http://www.erlang-web.org Wiki: http://wiki.erlang-web.org Wiki: http://wiki.erlang-web.org Ropozytorium http://bitbucket.org/etc/erlang-web Ropozytorium http://bitbucket.org/etc/erlang-web
28
Pytania
29
Więcej -> http://www.erlang-web.org Dziękuję
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.