1 / 29

Erlang Web Scalable & Reliable web framework

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

papina
Download Presentation

Erlang Web Scalable & Reliable web framework

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Erlang WebScalable & Reliable web framework • ErlLounge, Kraków • Lipiec 2009 • (wersja rozszerzona dla czytelników off-line;))

  2. Dziś • Dlaczego? • Kto? • Co? • Jak? • Co dalej? • Jak zacząć?

  3. 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)

  4. Kto? • ETC • SourceForge • BitBucket

  5. Jak to działa? • Przetwarzanie requestu z serwera HTTP • Przetwarzanie danych • Rozwijanie dynamicznych danych w templatach (za pomocą wpart’ów lub DTL)

  6. OUT IN

  7. 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}.

  8. 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>

  9. 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"/>

  10. 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

  11. 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)

  12. 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.

  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]), • {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) • 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>

  15. Formularze • Reprezentacja typów I formularzy za pomocą recordów • article.hrl • -record(article, { • id, • text, • hide • }). • -record(article_types, { • id = {integer, […]}, • title = {string, […]}, • hide = {enum, […]} • }). templates/article.html <wpart:form type="article" action="/article/create" />

  16. 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>

  17. 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"}.

  18. Distribution • Front End • HTTP server • Dispatcher • Cache tables • Static content • Back End • Invalidator • Controllers • Templates • Database

  19. 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)

  20. Memcached through merle Inets server Tsung (HTTP 1.1 connections) 1000 pages / sec Stress testing • Erlang Web cache • Inets server • Tsung (HTTP 1.1 connections) • 1500 pages / sec

  21. 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

  22. Przykłady • erlang-consulting.com

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

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

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

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

  27. Zasoby • Projekt:http://www.erlang-web.org(przykładowe tworzenie aplikacji krok po kroku) • Wiki:http://wiki.erlang-web.org • Ropozytoriumhttp://bitbucket.org/etc/erlang-web

  28. Pytania

  29. Więcej ->http://www.erlang-web.org • Dziękuję

More Related