Creating polyglot and scalable applications on the jvm using Vert.x

  • Published on
    10-May-2015

  • View
    2.062

  • Download
    10

Embed Size (px)

DESCRIPTION

In this presentation I show the basic vert.x options for creating polyglot applications that scale on the JVM. Later on the live presentation will also be published. It will be in Dutch though.

Transcript

<ul><li>1.Creating Polyglot and ScalableApplications on the JVM with Vert.xJettro Coenradie@gridshoredinsdag 30 oktober 12The buttery represents the lightweight scalable architecture</li></ul> <p>2. http://maps.google.comdinsdag 30 oktober 12Does this territory look familiar? 3. http://maps.google.comdinsdag 30 oktober 12Tripoint of countries: The netherlands, Germany and BelgiumPeople here speak multiple languages and are therefore Polyglot 4. Polyglot applications http://maps.google.comdinsdag 30 oktober 12- Polyglot applications is not about writing them in Dutch, German and French- Discuss combining multiple jvm languages in one application 5. JDBC, ReectionJIT Compiler, Collections frameworkHotspot JVM, JNDIReg Exp, NIO, XML parsingGenerics, Varargs, enumsScripting Language Support Dynamic languages on JVM 1 1.1 1.2 1.3 1.4 56 71996 1997 1998 20002002 2004 20062011dinsdag 30 oktober 12The history of the JVM and the introduction of Dynamic languages on the JVM and theimportance for a polyglot application on the JVM. 6. Polyglot applications on the JVMdinsdag 30 oktober 12Now the JVM supports creating Polyglot applications. 7. C10K Problem http://www.tumblr.com/tagged/rockconcert?before=1346635427dinsdag 30 oktober 12C10k problemThe crowd becomes to big for your platform 8. http://en.wikipedia.org/wiki/C10k_problemdinsdag 30 oktober 12Wikipedia page about the C10K problem showing the main characteristics of availablesolutions: event-driven, non-blocking and asynchronous 9. Scalable applications on the JVMdinsdag 30 oktober 12Some of the mentioned solutions run on the JVM and the JVM is the right tools for the jobwhen you want to create non-blocking, event-driven, asynchronous applications. 10. Vert.xNettyJRubyGroovyRhinoJythonHazelcast @timfoxdinsdag 30 oktober 12Introduction of vertx, the creator and the main technologies used. 11. Polyglot application platformJavaScriptdinsdag 30 oktober 12The available languages for vert.x and the languages for which support is being created. 12. Scalable: Blocking to non-blockingdinsdag 30 oktober 12Blocking has the risk that the CPU is doing nothing while a thread is waiting for inputNon-blocking: can use the CPU more effectively if there is something to do, it does not fallasleep 13. Easily Concurrentdinsdag 30 oktober 12- We can use the multiple cores of a machine within one JVM- Easy concurrency due to thread bound modules and verticles =&gt; No Locking- Synchronous calling of a request handler. Therefore no concurrency issues. 14. Vert.x Components Event Loop 1Background Pool VerticleVerticleWorker WorkerCore ServicesEvent Bus ModuleModuleModule Event Loop 2dinsdag 30 oktober 12Go through all the different components of Vert.x 15. Vert.x CoreEvent Loop 1Background Pool Must be implemented by all languagesVerticle Verticle WorkerWorker Core Core services must be called directServices Example ServicesEvent Bus TCP/SSL, HTTP/HTTPS, WebSockets, ModuleModuleModule Logging, SockJS and moreEvent Loop 2dinsdag 30 oktober 12Core services must be called directly, no need for sending messages 16. VerticleBackground Pool Unit of deployment in Vert.xEvent Loop 1Verticle Verticle WorkerWorker Core Can contain other scriptsServices Can contain libraries Event Bus Can start other verticlesModuleModuleModuleEvent Loop 2dinsdag 30 oktober 12- Demo basic verticle 17. Module Background Pool Modules communicate using messages Event Loop 1 VerticleVerticleWorker WorkerCore A public module repositoryServices https://github.com/vert-x/vertx-mods/Event Bus tree/gh-pages/mods ModuleModuleModule Event Loop 2dinsdag 30 oktober 12 18. Worker VerticleBackground Pool For tasks that require blockingEvent Loop 1Verticle Verticle WorkerWorker Core For tasks that take a lot of computation Services Uses thread of the background pool Event Bus They are never executed by more than one ModuleModuleModule threadEvent Loop 2dinsdag 30 oktober 12 19. Verticle or Module Background Pool Verticle is easy to use Event Loop 1 VerticleVerticleWorker WorkerCore Verticle needs to be congured with its Services classpath when runningEvent Bus A module is a package of vert.x stu complete with dependencies. ModuleModuleModule Event Loop 2dinsdag 30 oktober 12 20. Communicating between modules Send messages over the Event bus Vert.x will automatically convert messages between modules Java JsonObject Groovy MapRuby HashJavaScriptObject PythonHashdinsdag 30 oktober 12Messages can contain contain raw types, but JSON is recommended to be used forinformation sending using messages. 21. ThreadsEvent loop Amount equals number of cores Verticles/modules are assigned to an event loopBackground Pool A thread pool for worker verticles Actions can block or take longer CPU timedinsdag 30 oktober 12 22. Demo: Ofce eventsEvent Loop 1Background PoolBackupApp CoreServicesEvent Bus MongoInvitationsWebsite NoticationsPersistorEvent Loop 2Event Loop 1 https://github.com/jettro/vertx-samples/tree/master/ofce-eventsdinsdag 30 oktober 12The office events demo is available on github. It is used to show modules, verticles andworker verticles in different languages. 23. Module layout Module naming: prex.-v mod.json scripts or classes lib/ - libraries required by the moduledinsdag 30 oktober 12mod.json is the conguration for the module containing the main item, worker or not andsome other options. 24. Conguration Pass conguration when deploying a verticle or module Use a json object json is used according the language as discussed beforedinsdag 30 oktober 12 25. Events Publish/Subscribe Peer-to-Peer Replying to messages Distributed event-busdinsdag 30 oktober 12More info about event usage in Vert.x 26. Logging Default uses java utils logging Use other logging framework: log4j for example /bin/vertx DEFAULT_JVM_OPTS="-Dorg.vertx.logger-delegate-factory-class- name=org.vertx.java.core.logging.impl.Log4jLogDelegateFactory" Add the library to the vertx lib folder Create a log4j.properties ledinsdag 30 oktober 12 27. There is more Shared data Embedded mode Clustered modedinsdag 30 oktober 12 28. More info Vert.x Tim Fox@timfox Jettro http://vertx.io Downloads andCoenradie documentation http://groups.google.com/group/vertx@jettroCoenradie https://github.com/jettro/vertx- samples/ ofce-events@gridshorehttp://www.linkedin.com/in/jettrohttp://www.gridshore.nlhttp://www.trifork.nlhttps://github.com/jettro/dinsdag 30 oktober 12 29. Questions ?? Rock ?? Concert by Rod Stewart with 3.500.000 visitorsdinsdag 30 oktober 12Now we can scale our rock concert to around 3.5 million users. </p>