Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マイクロサービス時代のワークフローシステムについて

Masatsugu Matsushita
October 26, 2024
230

 マイクロサービス時代のワークフローシステムについて

JJUG CCC 2024 Fall用のプレゼン

Masatsugu Matsushita

October 26, 2024
Tweet

Transcript

  1. ワークフローシステムとは? " もともと1 回限りのバッチパイプラインが継続的に結果を更新しなけ ればならないというビジネス上の要求に対応しきれなくたってしまっ ている... こうしたニーズに直面したに直面したGoogle は2003 年にWorkflow と

    いうシステムを開発したました。これは継続的な処理を大規模に行え るようにしたものです。" 『SRE サイトリラアビリティエンジニアリング』 25 章 データ処理のパイプライン 4
  2. 海外でのプロダクトの誕生 Temporal Uber で開発されたCadence をfork してビジネス化 Temporal のCTO はuber の前はAWS

    のStep Function の前身AWS Flow のエンジニア Thoutworks Tech Radar でも言及 Temporal のサービスはGo で書かれている。 worker はgo のほか、Java やNode.js やpython で記述可能 8
  3. Temporal のWorkflow 様々な言語のSDK で記述。 workflow とtask(Temporal の中ではActivity) を全てコードで記述 // Workflow

    interface @WorkflowInterface public interface YourWorkflow { @WorkflowMethod String yourWFMethod(Arguments args); } 10
  4. Conductor Netflix で開発されたデータパイプラインOSS 。独立してorkes 社 がビジネス化。 Conductor をベースにしたデータ処理基盤maestro をNetflix が最

    近公開 Spring Boot ベースで記述 worker はJava だけではなく、Go やPhthon 、Clojure などでも 実装可能 11
  5. Java Worker Worker インタフェースを実装する。 public class SampleJavaWorker implements Worker {

    private final String taskDefName; public SampleJavaWorker(String taskDefName) { this.taskDefName = taskDefName; } @Override public String getTaskDefName() { return taskDefName; } } 22
  6. Java Worker Worker インタフェースを実装する。 //続き @Override public TaskResult execute(Task task)

    { System.out.println(task.getInputData()); TaskResult result = new TaskResult(task); result.setStatus(TaskResult.Status.COMPLETED); return result; } } 23
  7. polling の設定と開始 main メソッドなどに記述する TaskClient taskClient = new TaskClient(); taskClient.setRootURI("http://localhost:8080/api/");

    Worker worker1 = new SampleJavaWorker("task_1"); Worker worker2 = new SampleJavaWorker("task_2"); Worker worker3 = new SampleJavaWorker("sample.task1"); // Create TaskRunnerConfigurer TaskRunnerConfigurer configurer = new TaskRunnerConfigurer.Builder (taskClient, List.of(worker1, worker2,worker3)) .withThreadCount(3) .build(); configurer.init(); 24