Docstoc

ppt - The Erlang Web

Document Sample
ppt - The Erlang Web Powered By Docstoc
					            Erlang Web
Scalable & Reliable web framework

          ErlLounge, Kraków
              Lipiec 2009

          (wersja rozszerzona dla czytelników off-line;))
                  Dziś

•   Dlaczego?

•   Kto?

•   Co?

•   Jak?

•   Co dalej?

•   Jak zacząć?
                                    Dlaczego?

•   Naturalny frontend dla systemów napisanych w Erlang/OTP

•   Wsparcie dla skalowalności w każdej warstwie:
    •   HTTP servers: Yaws and INETS…

    •   Cache i dystrybucja sesji

    •   Databases: Mnesia, CouchDB…

•   Zarządzanie kodem (Buildability, Integrity)
    •   Paradygmat MVC

    •   Nie ma Erlanga w templatach HTML

•   Rozszerzalność (plugins)
               Kto?




•ETC
•SourceForge
•BitBucket
                          Jak to działa?

•   Przetwarzanie requestu z
    serwera HTTP

•   Przetwarzanie danych

•   Rozwijanie dynamicznych
    danych w templatach    (za pomocą

    wpart’ów lub DTL)
OUT   IN
                                           OUT

•    Dispatcher
       – Przyjazne URL na bazie regexp’ów
•    Controllers, Docroot, Templates
       – Dostępne za pomocą reguł dispatchera


    {rodzaj, URL pattern, {moduł, funkcja}}.
{dynamic, "^/index.html$", {main, home}}.

     {dynamic, delegate, "^/user", "config/dispatcher/user.conf"}.

     {static, "^/about$", "about.html"}.

     {static, "^style.css$", enoent}.
                                       OUT

•   Templates
     – Zgodne z XHTML
     – Budowane przez wtpl
•   Wparts
     – Dynamiczne znaczniki
•   Wtypes
     – Formatowanie wg. typu

     <wpart:list select="map" as=”user_age" list=”all_users">
       <p><wpart:lookup key=”user_age" format=”integer"/></p>
     </wpart:list>
                                        OUT

•   Form builder
     – Generowane na podstawie typów
•   Caching
     – Binarna postać stron
•   i18n
     – Tłumaczenia
     – Wiele języków
     config/languages/pl.conf file: {"pass", "Hasło"}.
     template: <wpart:lang key="pass"/>
                                          IN

•   Request dictionary & sesja
     – Podręczna pamięć o długości życia requestu

     wpart:fget("post", "form_input"),
     wpart:fget("session", "username"),


     wpart:fset("node", node())
      And then in your template: <wpart:lookup key="node" format="atom"/>


• Wtypes
   - automatyczna walidacja
                              IN

•   Dataflow

    - Funkcyjne szeregowanie przetwarzania requestu

•   Annotations
    – Meta opis dataflow’u
•   Distribution
    – Dwupoziomowa architektura – każdy z poziomów
      rozproszony horyzontalnie
•   e-Components
    – Mechanizm rozszerzeń i wtyczek (paypal, e_backup)
                            Annotations

•   Meta-language kontrolowania realizacji requestu

•   Definiują funkcje przed i po właściwym kontrolerze
     – Autoryzacja
     – Walidacja danych wejsciowych
•   Przykładowe zastosowania po zwroceniu tokenu dla servera
     – Invalidacja zawartości cache
     – Asynchroniczne (względem requestu) operacje np. na dysku lub w
       logach.
                                    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]),
  {proceed, ControllerArgs}.

                                                  -module(controller).
                                                  -export([my_fun/0]).
                                                  […]

                                                  ?LOGME("Calling my_fun").
                                                  my_fun() ->
                                                    wpart:fget("post", "id"),
                                                    […]
                    Budowanie formularzy

•   Forularze z defaultowymi wartosciami (edycja)

•   Szkielet formularza oparty na:

    •   HTML table - <table><tr><th/><td/>

    •   Paragraph - <p id="…"><label><span>

    •   List - <ul><li><label><span>

    •   Div - <div id="…”><label><span>
                                  Formularze

•   Reprezentacja typów I formularzy za pomocą recordów

article.hrl                             templates/article.html

-record(article, {                      <wpart:form type="article"
       id,                                action="/article/create" />
       text,
       hide
      }).

-record(article_types, {
         id = {integer, […]},
         title = {string, […]},
         hide = {enum, […]}
        }).
                                            Caching

•    Caching – realizacja kontrolera, action caching
    {dynamic, "^/blog/list", {blog, list}, [{cache, persistent]}.

•    Cache – strony statyczne
    {static, "^/faq$", "doc/faq.html", [{cache, normal}]}.

•    Cache – template scope
<wpart:cache id="left_menu" groups="menus" type="persistent">
    SOME CONTENT
</wpart:cache>
                               Cache - Invalidacja

•   regexp

•   Precyzyjne działanie za pomocą anotacji

?INVALIDATE(["^/blog/list"]).
update_blog() ->
  [update your database here...]

    {template, "blog.html"}.



?INVALIDATE_GROUPS(["menus"]).
update_menu() ->
  [update your database here...]

    {template, "blog.html"}.
                          Distribution

•   Front End
     –   HTTP server
     –   Dispatcher
     –   Cache tables
     –   Static content
•   Back End
     –   Invalidator
     –   Controllers
     –   Templates
     –   Database
                          Stress testing

•   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
     –   INETS 5.0.12 or Yaws 1.80
     –   Mnesia as database
     –   dispatcher, template inheritance
     –   Erlang Web cache or memcached (through merle)
                        Stress testing

•   Erlang Web cache               •   Memcached through merle
•   Inets server                   •   Inets server
•   Tsung (HTTP 1.1 connections)   •   Tsung (HTTP 1.1 connections)
         – 1500 pages / sec                 – 1000 pages / sec
                              Plugins

•   bin/e_component.erl list - lists all the e_components
•   bin/e_component.erl search Keyword
•   bin/e_component.erl details Name
•   bin/e_component.erl install Name
•   bin/e_component.erl path Path install Name
                        Przykłady

•   erlang-consulting.com
                        Przykłady

•   erlang-consulting.com
•   umbria-rentals.com
                        Przykłady

•   erlang-consulting.com
•   umbria-rentals.com
•   protest-project.eu
                        Przykłady

•   erlang-consulting.com
•   umbria-rentals.com
•   protest-project.eu
•   erlang-web.org
                        Przykłady

•   erlang-consulting.com
•   umbria-rentals.com
•   protest-project.eu
•   erlang-web.org
•   erlang-factory.com
                           Zasoby


•   Projekt:
    http://www.erlang-web.org    (przykładowe tworzenie aplikacji krok po kroku)




•   Wiki:
    http://wiki.erlang-web.org

•   Ropozytorium
    http://bitbucket.org/etc/erlang-web
Pytania
Dziękuję
         Więcej ->
http://www.erlang-web.org

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:5
posted:4/26/2010
language:Polish
pages:29