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

5,982 views

Published on

vert.x 그리고 scalable architecture

Published in: Technology
0 Comments
44 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,982
On SlideShare
0
From Embeds
0
Number of Embeds
137
Actions
Shares
0
Downloads
85
Comments
0
Likes
44
Embeds 0
No embeds

No notes for slide

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

  1. 1. vert.x를 활용한 ! 대용량 트래픽 처리를 위한! 분산 서버 개발하기! ! (vert.x & scalable architecture) 김요한 yohany@gmail.com
  2. 2. 1. 개발 패러다임의 변화! ! ! - 비동기 Event Looping 서버의 특징! - JVM 기반 vert.x 특징! ! 2. 분산 서버 설계 하기! ! - 대용량 트래픽 처리 / 체팅 서비스 서버 개발 사례! ! 3. 분산 서버 설계시 알아야 할 것들! ! - Consistent Hashing, Sharding, Proxy, MessageQueue ..!
  3. 3. 1. 개발 패러다임의 변화! ! ! - 비동기 Event Looping 서버의 특징! - JVM 기반 vert.x 특징
  4. 4. 1. 개발 패러다임의 변화 Question 원하는 만큼 확장할 수 있나요 ?! 대용량 트래픽을 처리 할 수 있나요 ?! 기능 추가를 얼마나 빨리 할 수 있나요 ?! 쉽고 빨리 개발할 수 있나요 ?
  5. 5. 1. 개발 패러다임의 변화 Answer background on the C10K problem! Event Looping! None Blocking I/O! Fault Tolerant! Scalability (Scala-Out)! ......
  6. 6. 비동기 서버의 특징 Shifting from ! Threading to Asynchronous
  7. 7. 비동기 서버의 특징
  8. 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 support Performance 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. 9. 비동기 서버의 특징 Java IO Stream oriented Blocking IO Reading data from a blocking stream.
  10. 10. 비동기 서버의 특징 Java NIO Buffer 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. 11. 비동기 서버의 특징 many modularity paradigms
  12. 12. 비동기 서버의 특징
  13. 13. 비동기 서버의 특징 - Main.class! library1.jar! library2.jar! library3.jar JAR Library ClassLoader
  14. 14. 비동기 서버의 특징 EventBus (vert.x) Module 1 Module 2 Module 3 - Module1.class! - library1.jar! - library2.jar - Module2.class! - library1.jar! - library2.jar - Module2.class! - library1.jar! - library2.jar ClassLoader ClassLoader ClassLoader
  15. 15. 비동기 서버의 특징 Polyglot or Multilingual
  16. 16. 비동기 서버의 특징 “ Components + Scripts = Applications ” see John Ousterhout, IEEE Computer, March ’98 http://www.stanford.edu/~ouster/cgi-bin/papers/scripting.pdf
  17. 17. 비동기 서버의 특징 “ Shift from Apache to Node.js ”
  18. 18. JVM 기반 VERT.X 특징 based JVM
  19. 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<HttpServerRequest>() { 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. 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<HttpServerRequest>() { 
 public void handle(HttpServerRequest req) { vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() 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. 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.java req) -> {

  22. 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. 23. JVM 기반 VERT.X 특징 vert.x instance Verticle Verticle Worker
 Verticle Worker
 Verticle
  24. 24. JVM 기반 VERT.X 특징 vert.x instance Verticle Verticle Worker
 Verticle EventBus Worker
 Verticle
  25. 25. JVM 기반 VERT.X 특징 
 EventBus eb = vertx.eventBus(); Handler<Message> myHandler = new Handler<Message>() { 
 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. 26. EventBus Worker
 Verticle Worker
 Verticle Verticle vert.x instance Verticle Worker
 Verticle Worker
 Verticle Verticle Verticle JVM 기반 VERT.X 특징 vert.x instance
  27. 27. EventBus Worker
 Verticle Worker
 Verticle Verticle vert.x instance Verticle Worker
 Verticle Worker
 Verticle Verticle Verticle JVM 기반 VERT.X 특징 vert.x instance
  28. 28. JVM 기반 VERT.X 특징 http://vertx.io
  29. 29. JVM 기반 VERT.X 특징 http://vertx.io Distributed Event Bus
  30. 30. JVM 기반 VERT.X 특징 http://vertx.io WebSockets and SockJS! support for real-time server-push applications.
  31. 31. JVM 기반 VERT.X 특징 http://vertx.io embedded ! as a library in your existing Java applications
  32. 32. JVM 기반 VERT.X 특징 http://vertx.io module system! components into modules for encapsulation and reuse
  33. 33. JVM 기반 VERT.X 특징 http://vertx.io Maven archetype
 Gradle template
 Auto-redeploy
  34. 34. JVM 기반 VERT.X 특징 34 http://www.techempower.com/benchmarks/
  35. 35. JVM 기반 VERT.X 특징 http://nodyn.io/
  36. 36. 2. 분산 서버 설계 하기! ! - 대용량 트래픽 처리 / 체팅 서비스 서버 개발 사례
  37. 37. - 분산 체팅서비스 구축하기 사례 http://stalk.io <script src="http://www.stalk.io/stalk.js"></script> <script language="javascript"> STALK.init(); </script>
  38. 38. - 분산 체팅서비스 구축하기 사례 http://example.com/samplePage.html 체팅방 키
  39. 39. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Chat Server
 Chat Server
 (vert.x sockJS) Chat Server
 (vert.x sockJS) Chat Server
 (vert.x sockJS) (vert.x sockJS) 천승희 도문준 체팅방 KEY : 노량진수산시장/개불
  40. 40. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Chat Server Chat Server Chat Server 천승희 Chat Server . . .! “Session 정보 공유하기” 문제 ! 도문준
  41. 41. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Restful Server Publish 도문준 천승희 Subscribe . . .! Socket Server 김요한
  42. 42. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Restful Server Restful Server Restful Server Restful Server Restful Server Restful Server HAProxy 천승희 Restful Server 도문준 Restful Server . . .! Socket Server 김요한
  43. 43. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Restful Server Restful Server Restful Server Restful Server Subscribe Publish 천승희 Socket Server Socket Server 도문준 Socket Server 도문준 Socket Server Restful Server Restful Server Restful Server Socket Server . . .! 김요한 김요한
  44. 44. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Restful Server Restful Server Restful Server Restful Server Subscribe Publish 천승희 Socket Server Socket Server 도문준 Socket Server 도문준 Socket Server Restful Server Restful Server Restful Server Socket Server . . .! 김요한 김요한
  45. 45. - 분산 체팅서비스 구축하기 사례 노량진수산시장/개불 Hash ( input ) 192.168.219.1:8080
 192.168.219.2:8080
 192.168.219.3:8080
 192.168.219.4:8080 192.168.219.3:8080
  46. 46. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Restful Server Restful Server Restful Server Restful Server Hash() Publish Hash() 도문준 천승희 Subscribe Restful Server Restful Server Socket Server Restful Server Socket Server Socket Server Socket Server . . .! Hash() 김요한
  47. 47. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Restful Server Restful Server Restful Server Restful Server Hash() Publish 도문준 천승희 Subscribe Restful Server Restful Server Socket Server Restful Server Socket Server Socket Server Socket Server . . .! 김요한
  48. 48. - 분산 체팅서비스 구축하기 사례 http://노량진수산시장 /개불.html Restful Server Restful Server Restful Server Restful Server Hash() Publish 도문준 천승희 Subscribe Restful Server Restful Server Socket Server Socket Server Socket Server Socket Server . . .! 김요한
  49. 49. - 분산 체팅서비스 구축하기 사례 vert.x modules Startup & HTTP configuration Module Module Socket Module Distributed Node Manager Module Message Queue Module vert.x event bus A instance in JVM https://github.com/stalk-io
  50. 50. - 분산 체팅서비스 구축하기 사례 Restful Server Startup & HTTP configuration Module Module Socket Module Distributed Node Manager Module Message Queue Module vert.x event bus A instance in JVM https://github.com/stalk-io
  51. 51. - 분산 체팅서비스 구축하기 사례 Socket Server Startup & HTTP configuration Module Module Socket Module Distributed Node Manager Module Message Queue Module vert.x event bus A instance in JVM https://github.com/stalk-io
  52. 52. 3. 분산 서버 설계시 알아야 할 것들! ! - Consistent Hashing, Sharding, Proxy, MessageQueue ..
  53. 53. - Consistent Hashing Service

×