Both sides previous revisionPrevious revisionNext revision | Previous revision |
concurrency_and_parallelism [2021/04/12 06:23] – [Java] Executor ledyx | concurrency_and_parallelism [2022/10/28 16:00] (current) – [Scale Cube] U → Y 오타 수정 ledyx |
---|
* X axis scailing : 복제. 서버 앞에 Load Balencer를 설정하여 Traffic 분산, 높은 가용성 제공. Monolithic system에서 많이 사용하는 스케일링 방법. | * X axis scailing : 복제. 서버 앞에 Load Balencer를 설정하여 Traffic 분산, 높은 가용성 제공. Monolithic system에서 많이 사용하는 스케일링 방법. |
* 단점 : 기능 수정시 전체 애플리케이션을 새로 배포해야 한다. 그리고 자체적인 스케일링 프로파일을 가질 수 없음. (처리량에 따라 가변적일 수 없음.) 그렇기에 자원(CPU, RAM)은 다다익선이어야 함. | * 단점 : 기능 수정시 전체 애플리케이션을 새로 배포해야 한다. 그리고 자체적인 스케일링 프로파일을 가질 수 없음. (처리량에 따라 가변적일 수 없음.) 그렇기에 자원(CPU, RAM)은 다다익선이어야 함. |
* U axis scailing : 분할. 기능별로 애플리케이션 배포. | * Y axis scailing : 분할. 기능별로 애플리케이션 배포. |
* 단점 : 잘못된 MSA 선택은 복잡도 증가. | * 단점 : 잘못된 MSA 선택은 복잡도 증가. |
* Z axis scailing : 복제 + 분할. 같은 서비스 컴포넌트를 모든 서버에 복제하지만, 각 서버는 **일부 데이터만**을 다룬다. 일반적으로 **Sharding**으로 알려짐. 대표적인 예시가 In-memory caching (like Redis) | * Z axis scailing : 복제 + 분할. 같은 서비스 컴포넌트를 모든 서버에 복제하지만, 각 서버는 **일부 데이터만**을 다룬다. 일반적으로 **Sharding**으로 알려짐. 대표적인 예시가 In-memory caching (like Redis) |
| |
=== Java === | === Java === |
| |
| * Runnable : return 값이 없음 |
| * Callable<T> : return 값이 있음. Future와 함께 사용. |
| |
==== Executor ==== | ==== Executor ==== |
* Future<?> submit(Runnable task) | * Future<?> submit(Runnable task) |
* <T> Future<T> submit(Runnable task, T result) | * <T> Future<T> submit(Runnable task, T result) |
| |
| ====== ScheduledExecutorService ====== |
| |
| https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/package-summary.html |
| |
| ====== ForkJoinPool ====== |
| |
| https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/package-summary.html |
| |
| Fork/Join 작업을 수행하는 Thread Pool. workstealing 알고리즘 사용하여 유휴 Task를 훔쳐와서 작업. |
| |
| 구현해야 하는 Task는 두 가지. 두 클래스 모두 Future 의 자식. |
| |
| * [[https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RecursiveTask.html|RecursiveTask<T>]] : T compute() 구현 필요. T를 return. |
| * [[https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RecursiveAction.html|RecursiveAction]] : return 값 없음. 즉, Join 작업 필요 없음. |
| |
| |
| |
| ==== Future ==== |
| |
| https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html |
| |
| 작업 완료 여부를 확인, 대기, 조회 |
| |
| ===== CompletableFuture ===== |
| |
| https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html |
| |
| Future의 조합(상호 연동)이 필요할 때 사용 |
| |
| |
=== Scala === | === Scala === |
| |
| ==== Futures and Promises ==== |
| |
| https://docs.scala-lang.org/overviews/core/futures.html |
| |
== 용어 == | == 용어 == |