vert.x 를 활용한 분산서버 개발하기

70
vert.x활용한 대용량 트래픽 처리위한 분산 서버 개발하기 (vert.x & scalable architecture) 김요한 [email protected]

description

vert.x 그리고 scalable architecture

Transcript of vert.x 를 활용한 분산서버 개발하기

2. 1. ! ! !- Event Looping ! - JVM vert.x !!2. ! !- / !!3. ! !- Consistent Hashing, Sharding, Proxy, MessageQueue ..! 3. 1. ! ! !- Event Looping ! - JVM vert.x 4. 1. Question ?! ?! ?! ? 5. 1. Answer background on the C10K problem! Event Looping! None Blocking I/O! Fault Tolerant! Scalability (Scala-Out)! ...... 6. Shifting from !Threading to Asynchronous 7. 8. Apache HTTP Server v2.4 ideally suited for Cloud environments. They include:! ! Improved performance (lower resource utilization and better concurrency)! Reduced memory usage! Asyncronous I/O support! Dynamic reverse proxy configuration!Asynchronous I/O supportPerformance on par, or better, than pure event-driven Web servers! More granular timeout and rate/resource limiting capability! More finely-tuned caching support, tailored for high traffic servers and proxies.http://blogs.apache.org/foundation/entry/the_apache_software_foundation_celebrates 9. Java IOStream oriented Blocking IO Reading data from a blocking stream. 10. Java NIOBuffer oriented Non blocking IO Selectors Reading data from a channel until all needed data is in buffer. http://tutorials.jenkov.com/java-nio/nio-vs-io.html 11. many modularity paradigms 12. 13. -Main.class! library1.jar! library2.jar! library3.jarJAR Library ClassLoader 14. EventBus (vert.x)Module 1Module 2Module 3- Module1.class! - library1.jar! - library2.jar- Module2.class! - library1.jar! - library2.jar- Module2.class! - library1.jar! - library2.jarClassLoaderClassLoaderClassLoader 15. Polyglot or Multilingual 16. Components + Scripts = Applications see John Ousterhout, IEEE Computer, March 98http://www.stanford.edu/~ouster/cgi-bin/papers/scripting.pdf 17. Shift from Apache to Node.js 18. JVM VERT.X basedJVM 19. JVM VERT.X import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; public class Server extends Verticle {JAVA 7 public void start() { vertx.createHttpServer().requestHandler(new Handler() { public void handle(HttpServerRequest req) { String file = req.path().equals("/") ? "index.html" : req.path(); req.response().sendFile("webroot/" + file); } }).listen(8080); } } > vertx run Server.java 20. JVM VERT.X import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; public class Server extends Verticle {JAVA 7 public void start() {!vertx.createHttpServer().requestHandler(new Handler() { public void handle(HttpServerRequest req) { vertx.createHttpServer().requestHandler(new Handler()public void= handle(HttpServerRequest req) { String file req.path().equals("/") ? "index.html" : req.path(); req.response().sendFile("webroot/" + file); } }).listen(8080); } } > vertx run Server.java{ 21. JVM VERT.X import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; public class Server extends Verticle {JAVA 8 public void start() {!vertx.createHttpServer().requestHandler( (HttpServerRequest req) -> { vertx.createHttpServer().requestHandler((HttpServerRequest{String file = req.path().equals("/") ? "index.html" : req.path(); req.response().sendFile("webroot/" + file); }).listen(8080); } } > vertx run Server.javareq) -> { 22. JVM VERT.X import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; public class Server extends Verticle {JAVA 8 public void start() { vertx.createHttpServer().requestHandler( (HttpServerRequest req) -> { String file = req.path().equals("/") ? "index.html" : req.path(); req.response().sendFile("webroot/" + file); }).listen(8080); } } > vertx run Server.java 23. JVM VERT.X vert.x instanceVerticleVerticleWorker VerticleWorker Verticle 24. JVM VERT.X vert.x instanceVerticleVerticleWorker VerticleEventBusWorker Verticle 25. JVM VERT.X EventBus eb = vertx.eventBus();Handler myHandler = new Handler() { public voidvert.x instance handle(Message message) { System.out.println("I received a message " + message.body); } }; !Worker// EventBus Verticle Verticle Verticle eb.registerHandler("test.address", myHandler);EventBus // EventBus eb.send("test.address", "hello world");Worker Verticle 26. EventBusWorker VerticleWorker VerticleVerticlevert.x instanceVerticleWorker VerticleWorker VerticleVerticleVerticleJVM VERT.X vert.x instance 27. EventBusWorker VerticleWorker VerticleVerticlevert.x instanceVerticleWorker VerticleWorker VerticleVerticleVerticleJVM VERT.X vert.x instance 28. JVM VERT.X http://vertx.io 29. JVM VERT.X http://vertx.ioDistributed Event Bus 30. JVM VERT.X http://vertx.ioWebSockets and SockJS! support for real-time server-push applications. 31. JVM VERT.X http://vertx.ioembedded ! as a library in your existing Java applications 32. JVM VERT.X http://vertx.iomodule system! components into modules for encapsulation and reuse 33. JVM VERT.X http://vertx.ioMaven archetype Gradle template Auto-redeploy 34. JVM VERT.X 34 http://www.techempower.com/benchmarks/ 35. JVM VERT.X http://nodyn.io/ 36. 2. ! !- / 37. - http://stalk.io 38. - http://example.com/samplePage.html 39. - http:// /.htmlChat Server Chat Server (vert.x sockJS) Chat Server (vert.x sockJS) Chat Server (vert.x sockJS) (vert.x sockJS) KEY : / 40. - http:// /.html Chat Server Chat Server Chat Server Chat Server. . .!Session ! 41. - http:// /.html Restful Server Publish Subscribe. . .!Socket Server 42. - http:// /.html Restful Server Restful Server Restful Server Restful Server Restful Server Restful Server HAProxy Restful ServerRestful Server. . .!Socket Server 43. - http:// /.html Restful Server Restful Server Restful Server Restful Server Subscribe Publish Socket Server Socket ServerSocket ServerSocket Server Restful Server Restful Server Restful Server Socket Server. . .! 44. - http:// /.html Restful Server Restful Server Restful Server Restful Server Subscribe Publish Socket Server Socket ServerSocket ServerSocket Server Restful Server Restful Server Restful Server Socket Server. . .! 45. - /Hash ( input )192.168.219.1:8080 192.168.219.2:8080 192.168.219.3:8080 192.168.219.4:8080192.168.219.3:8080 46. - http:// /.html Restful Server Restful Server Restful Server Restful ServerHash() PublishHash() Subscribe Restful Server Restful Server Socket Server Restful Server Socket Server Socket Server Socket Server. . .! Hash() 47. - http:// /.html Restful Server Restful Server Restful Server Restful ServerHash() Publish Subscribe Restful Server Restful Server Socket Server Restful Server Socket Server Socket Server Socket Server. . .! 48. - http:// /.html Restful Server Restful Server Restful Server Restful ServerHash() Publish Subscribe Restful Server Restful Server Socket Server Socket Server Socket Server Socket Server. . .! 49. - vert.x modulesStartup & HTTP conguration Module ModuleSocket ModuleDistributedNode Manager ModuleMessage Queue Modulevert.x event bus A instance in JVMhttps://github.com/stalk-io 50. - Restful ServerStartup & HTTP conguration Module ModuleSocket ModuleDistributedNode Manager ModuleMessage Queue Modulevert.x event bus A instance in JVMhttps://github.com/stalk-io 51. - Socket ServerStartup & HTTP conguration Module ModuleSocket ModuleDistributedNode Manager ModuleMessage Queue Modulevert.x event bus A instance in JVMhttps://github.com/stalk-io 52. 3. ! !- Consistent Hashing, Sharding, Proxy, MessageQueue .. 53. - Consistent Hashing Service