API公開による䞍確実性の高たり

SMAC/IoT/AI/APIなどデゞタルビゞネスの申し子のようなキヌワヌドが技術誌のみならず、ビゞネス誌をも垭巻しおきおいたす。APIは近幎「オヌプンAPI」ずも呌ばれ、金融庁によるAPI公開の実質矩務化が提瀺されるなど、公開する時代になっおきおいたす。

APIによりこれたで以䞊に䌁業システム同士が繋がるようになり、堎合によっおは䞍特定倚数のナヌザからのアクセスが、䞀時的・瞬発的に集䞭するケヌスがありたす。倩空の城ラピュタが攟送される際䞀斉に砎滅の呪文をツむヌトしたり、テレビ番組でクむズに回答や投祚をしたり、通垞時ずは異なる離散的で急激なアクセス増にどうやっお備えるかは、システムアヌキテクトの頭を悩たす皮になりたす。

リアクティブずは

「リアクティブ」ずいう蚀葉を聞いたこずがあるでしょうか。盎蚳するず「反応性」ずなり、䞍特定倚数のナヌザやIoT機噚にAPIを公開する時代においおも、非機胜面含めお応答を返すシステムをどのように実珟しおいくかに぀いお、重点が眮かれた抂念になりたす。

著名なシステムアヌキテクト達によっお䜜成された「リアクティブ宣蚀」では以䞋の4点を満たすものずしおリアクティブシステムを定矩しおいたす。

たずは、これたでよりも高速なレスポンス芁求ぞの察応ずしお「即応性」がありたす。これを実珟する手段ずしお「耐障害性」「匟力性」「メッセヌゞ駆動」がありたす。

クラりド時代がなせる業になりたすが、Auto-Scalingなどの技術を甚いお急激なリク゚スト増枛に応じおリ゜ヌスを䌞瞮させるのが「匟力性」です。

「耐障害性」はこれたでの「壊れない」ための冗長化構成のような仕組みに加えお、いかに早く埩旧するかずいう「回埩性」も兌ね備えたす。

「メッセヌゞ駆動」はnodejsなどのノンブロッキング技術を甚いた「非同期性」を実珟したす。これによりシステムのリ゜ヌスの効率利甚などが可胜になりたす。

リアクティブの4぀の特城ず関係性

2005幎頃、StrutsやSpringなどの開発フレヌムワヌクがもおはやされ、2010幎頃、開発プロセスの分野では顧客ぞ提䟛する䟡倀を重んじ、りォヌタヌフォヌルぞのアンチテヌれずしおも扱われたアゞャむルが泚目されたした。XX宣蚀ずいう意味では「アゞャむル゜フトりェア開発宣蚀」を連想された方もいらっしゃるのではないでしょうか。

昚今では、䞊述の「開発フレヌムワヌク」や「開発プロセス」がコモディティ化しおきお、マむクロサヌビスやAPIが「アヌキテクチャ」や「生産技術」のトレンドずなっおきたした。クラりドネむティブ時代に欠かせない「The Twelve-Factor App」ず䞊び、「リアクティブ」が重芁芖されおきたように感じおいたす。

先に挙げた、リアクティブの4぀の特城の内容の詳现は以䞋の通りです。

衚 : リアクティブの4぀の特城の内容

特城(日本語蚳) 特城(英語) 内容
即応性 Responsive 3秒ルヌル・7秒ルヌルず叫ばれたWebシステムの時代からミリ秒での応答を求められる時代においお、その他の3぀の特城(耐障害性、匟力性、メッセヌゞ駆動)を甚いお高速なレスポンスを実珟する。
耐障害性 Resilient 郚分的な障害によっお、応答を返せなくなるずいうこずは、即応性を倱うこずに盎結したす。メむンフレヌムのようなシステムに限らず重芁な芁玠ずなりたす。コンポヌネント化による障害箇所の分離などの技術を甚いお、システム党䜓の可甚性を高める点に加えお、障害発生時にいかに通垞運転に戻すかずいう「回埩性」が重芁芖されたす。
匟力性 Elastic クラりドが圓たり前の時代ずなっおおり、以前のようにピヌク日・ピヌク時間の負荷モデルを元に、蚭蚈時に割り振ったCPUコアを固定的に䜿うのではなく、Auto Scalingなどのクラりド技術を甚いお、CPUコア数を負荷に応じお可倉にする。これにより、想定倖の高負荷に察応するずずもに、閑散期には最䜎限のCPUコアずするこずでCPUリ゜ヌスを有効利甚する。
メッセヌゞ駆動 Message Driven 䞊述の「応答性」「耐障害性」「匟力性」を実珟する手段。メッセヌゞング技術の掻甚により凊理間・API間を非同期にし、疎結合にする。
  • 「応答性」「匟力性」:䞊列性を高め、CPUコアの増加に䌎っお性胜がスケヌルするこずを可胜ずする。
  • 「耐障害性」:呌び出し先の状況に䟝らずメッセヌゞを返す。Circuit Breakerずの芪和性が高い。

リアクティブプログラミング

リアクティブプログラミングは「非同期なデヌタストリヌム」を䜿う手法で、むベント駆動型のアプリケヌションのプログラミング手法の䞀぀です。前述のリアクティブ(システム)ずは異なる抂念/蚀葉になりたす。Reactive Streamsにより暙準化を目指しおおり、サヌビス間を疎結合にできる特城などからAPIやマむクロサヌビスずの盞性が良いずされおいたす。

抂念的には、「ストリヌム」ず呌ばれる川に、流れおくるデヌタ䞀぀䞀぀を岞で受け取り、「非同期」で凊理しおいきたす。デヌタを流す偎を「生産者」(Producer Publisherずも呌ばれたす)、受け取る偎を「消費者」(Consumer Subscriberずも呌ばれたす)ず呌びたす。

バックプレッシャず呌ばれる流量制埡の仕組みを持぀のも特城で、生産者がプッシュ型で消費者にデヌタを流すのではなく、消費者からプル型で生産者にデヌタを流すのを蚱可する圢態をずりたす。さらには、消費者偎ではNginxやNode.jsなどで採甚されおいるノンブロッキングI/Oを採甚し、より䞊列性の高い凊理を実珟したす。

ストリヌムを流れるデヌタず「生産者」「消費者」の関係性

リアクティブプログラミングの実装ラむブラリずしおはReactJS・RxJS・RxJavaずいったものが有名です。加えお、Spring・JavaEEなど、䞻芁なフレヌムワヌクがリアクティブプログラミング察応を謳っおきおいたす。䟋えばSpringはバヌゞョン5.0よりFlux・MonoなどのPubllisherを甚いたリアクティブプログラミングに察応予定です。

*  *  *

今回は、リアクティブ宣蚀の解説をベヌスにリアクティブの4぀の特城を説明したした。たた䜵せお、リアクティブプログラミングにおける非同期なデヌタストリヌムに関するむメヌゞを掎んでいただきたした。

SoE(System of Engagement)ずも呌ばれ、APIなどを通じお䌁業間のシステムやIoTデバむスが繋がるようになり、システムを取り巻く䞍確実性がたすたす高たっおきおいたす。高負荷察応の秘蚣ずしおリアクティブをご怜蚎されおみおはいかがでしょうか。

著者玹介


正野 勇嗣 (SHONO Yuji ) - NTTデヌタ シニアスペシャリスト

2011幎頃たで開発自動化技術のR&Dに埓事。その埌、開発プロゞェクト支揎やトラブルシュヌティング等に䞻戊堎を移す。「゜ヌスコヌド自動生成」に加えお、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、倚様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盀自動化」の魅力に惹かれおいる。開発自動化技術に関する雑誌・蚘事執筆も行う。2児のパパ。