マイクロサービス

記事数:(8)

IT活用

イベントドリブンで変わるシステムの姿

近ごろの計算機技術の世界では、仕組みの設計方法も常に進歩しています。特に話題になっているのが、出来事を中心にした組み立て方です。これまでの仕組み作りとは違う考え方で仕組みを組み立てることで、変幻自在で拡張しやすい仕組みを作れる見込みがあります。この方法は、仕組みの中で起こる様々な出来事を主軸として、仕組み全体の動きを決めるという革新的なものです。まるで、周りの様子に合わせて機転を利かせて動く人間の知恵を仕組みに取り込んだようです。従来の仕組みでは、あらかじめ決められた手順に従って、順番に処理を進めていく方法が主流でした。例えば、商品の注文処理であれば、注文を受けてから在庫確認、発送、請求といった手順が順番に実行されます。しかし、このような仕組みは、手順が複雑になると変更が難しく、新しい機能を追加する際にも大きな手間がかかってしまいます。また、特定の手順で問題が発生すると、全体の処理が止まってしまうという欠点もありました。出来事を中心にした組み立て方では、それぞれの処理が独立して動作し、特定の出来事が発生した時にだけ必要な処理が実行されます。例えば、注文という出来事が発生すると、在庫確認、発送、請求といった処理がそれぞれ自動的に開始されます。このように、処理を独立させることで、それぞれの処理の変更や追加が容易になり、仕組み全体の柔軟性や拡張性を高めることができます。また、ある処理で問題が発生しても、他の処理に影響を与えることなく、仕組み全体を安定して稼働させることができます。この出来事を中心にした組み立て方は、変化の激しい現代社会において、とても重要な役割を果たすと期待されています。今後、様々な分野での活用が進むことで、より便利で快適な社会の実現に貢献していくことでしょう。
IT活用

イベントソーシング:記録で状態管理

近ごろの計算機技術の進歩によって、色々な仕組みが複雑になっています。仕組みの状態をうまく扱うことも難しくなり、従来の方法では整理するのが大変な場合が増えてきました。そこで、出来事を記録していく「出来事探し」という考え方が注目されています。出来事探しとは、仕組みの中で何かが変わった時に、その変化を出来事として記録に残していく方法です。そして、記録された出来事を順番に見ていくことで、仕組みがどのように変化してきたのか、過去のある時点での状態を再現できるようになります。この方法は、従来の状態管理の方法と比べて多くの良い点があります。例えば、なぜ仕組みの状態が変わったのか、その理由を簡単に追跡することができます。また、過去の状態をいつでも再現できるので、問題が起こった時に原因究明をスムーズに行うことができます。さらに、記録された出来事の情報を使って、将来の予測や分析に役立てることも可能です。例えば、商品の在庫管理で考えてみましょう。従来の方法では、「現在の在庫数」だけを記録しています。もし在庫数が減った場合、その理由が分かりにくくなります。しかし、出来事探しを使うと、「商品が10個売れた」「商品が5個入荷した」といった出来事を記録します。こうすることで、在庫数の変化とその理由が明確になります。また、過去の任意の時点での在庫数を簡単に計算することができます。この記事では、出来事探しの基本的な考え方、メリット、そして実際にどのように活用できるのか、具体的な例を挙げて詳しく説明していきます。これを読めば、出来事探しの仕組みや利点、活用方法を理解し、皆様の仕事に役立てることができるでしょう。
IT活用

マイクロサービスで変わるシステムの姿

マイクロサービスとは、大きな一枚岩のシステムのように全体をまとめて作るのではなく、小さな部品のように独立したサービスをたくさん組み合わせて、ひとつの大きなシステムを作る設計手法のことです。それぞれの小さなサービスは、まるでレゴブロックのように、特定の機能だけを担当します。たとえば、インターネット上で商品を売買するようなサイトを考えてみましょう。商品を探す機能、注文を受け付ける機能、お金のやり取りをする機能など、様々な機能が必要です。従来の作り方では、これらの機能はすべて一つの大きなプログラムの中に含まれていました。しかし、マイクロサービスでは、商品検索、注文管理、決済処理といった具合に、それぞれの機能を独立した小さなサービスとして開発し、それらを連携させることで全体のシステムを構築します。このように、機能ごとに分割して開発することには、様々な利点があります。まず、システム全体が複雑になりすぎることを防ぎ、それぞれのサービスをシンプルに保つことができます。これは、システムの開発や保守を容易にするだけでなく、不具合が発生した場合でも影響範囲を限定し、迅速な復旧を可能にします。また、変更や機能追加も容易になります。例えば、決済方法を変更する場合、従来の方法ではシステム全体に影響する大規模な改修が必要でしたが、マイクロサービスであれば決済サービスだけを修正すれば済むため、開発期間の短縮やコスト削減につながります。さらに、それぞれのサービスを別々のチームが開発できるため、開発作業を並行して進めることができ、開発スピードの向上に貢献します。このように、マイクロサービスは、変化の激しい現代社会のニーズに対応するための、柔軟で効率的なシステム開発手法として、多くの企業で注目を集めています。
IT活用

優れた設計で変わる!システム構造

建造物を建てる際に、設計図が必要不可欠であるように、組織の仕組みや計算機の仕組みを構築する際にも、その構造を念入りに設計することが極めて重要です。この設計こそが、組織や計算機の構造設計であり、いわば建物の骨組みを作る作業にあたります。この骨組みがしっかりとしていなければ、どんなに優れた機能を備えていても、組織全体や計算機全体の仕組みが不安定になってしまう恐れがあります。組織や計算機の構造設計は、組織全体の働きや計算機の全体の性能、安定性、そして将来的な拡張性を左右する重要な要素となります。しっかりとした構造設計は、組織を構成する様々な部署や計算機を構成する様々な部品が、どのように連携し、どのように情報をやり取りするかを明確にすることで、開発の効率向上や運用費用の削減にも繋がります。例えば、組織構造において、各部署の役割分担や情報伝達の経路が不明確であれば、業務の重複や情報の錯綜が発生し、組織全体の効率が低下する可能性があります。計算機の仕組みにおいても、各部品の役割やデータの流れが明確でなければ、処理速度の低下や誤作動を引き起こす可能性があります。構造設計は、組織や計算機開発の初期段階からしっかりと検討する必要があります。初期段階で適切な構造設計を行うことで、後々の修正や変更の手間を大幅に削減し、開発期間の短縮や費用削減を実現することができます。また、将来的な拡張性も考慮した設計を行うことで、組織や計算機の成長に合わせて柔軟に対応することが可能となります。いわば、将来の組織の成長や計算機の進化を見据えた、未来への投資と言えるでしょう。
IT活用

Kubernetesで変わる未来

近頃、様々な応用処理の開発現場で「箱詰め」と呼ばれる技術がよく使われるようになりました。これは、応用処理とそれに必要な部品をまとめて一つの荷物のように扱う手法です。この手法のおかげで、開発中の試験環境から、実際に使う本番環境への移行が円滑になり、環境の違いによる不具合も減らせます。しかし、扱う「箱詰め」の数が増えてくると、管理が難しくなるという問題が出てきます。そこで活躍するのが「クバネティス」です。まるで、たくさんの楽器をまとめる指揮者のように、「箱詰め」技術を使った応用処理の展開、拡大、運用を自動で調整してくれる、まさにまとめ役です。「クバネティス」は複数の「箱詰め」をまとめて管理し、全体を一つのまとまった仕組みとして上手に運用できるようにしてくれます。 これによって、仕組み全体の安定性を高め、必要な時に必要なだけ部品を増やすといった柔軟な対応も可能になります。「クバネティス」を理解する上で重要なのは、「箱詰め」を束ねるだけでなく、全体をうまく調和させる役割も担っている点です。例えば、ある応用処理へのアクセスが急増した場合、「クバネティス」は自動的に「箱詰め」の数を増やし、処理能力を高めます。逆に、アクセスが落ち着いた際には「箱詰め」の数を減らし、無駄な資源の消費を抑えます。さらに、「クバネティス」は、ある「箱詰め」に不具合が生じた場合でも、自動的に正常な「箱詰め」に切り替える機能も備えています。これにより、利用者に影響を与えることなく、仕組み全体の安定稼働を維持できます。このように、「クバネティス」は、複雑な応用処理の運用を自動化し、より効率的で安定性の高い仕組みを実現するための重要な技術です。
IT活用

マイクロサービスで変わるシステム開発

近頃よく耳にする『細かいサービス』とは、大きな仕組みを小さな部品のように分解し、それぞれの部品を独立して作り、動かす方法のことです。それぞれの部品は、限られた役割だけを担い、互いに連携することで、全体として一つの大きな仕組みを作り上げます。これは、従来の一体型の大きな仕組みとは大きく異なります。従来の仕組みは、まるで一つの大きな機械のようでした。一部分に不具合が生じると、全体が停止してしまうこともありました。変更や更新を行う際も、全体への影響を考慮する必要があり、時間も手間もかかっていました。しかし、『細かいサービス』では、それぞれの部品が独立しているため、一部分に変更を加えても、他の部分に影響を与える心配がありません。まるで積み木のように、部品を一つずつ交換したり、追加したりすることが容易になります。この柔軟性によって、開発の速度が格段に向上します。市場のニーズや技術の進歩は目まぐるしいものですが、『細かいサービス』であれば、変化に素早く対応し、競争力を維持することができます。また、それぞれの部品に最適な技術を選ぶことができるため、開発の効率も高まります。それぞれの部品は小さなチームで開発できるので、専門性を高め、質の高い部品を作り上げることができます。さらに、『細かいサービス』は、必要な部品だけを増やすことができるため、無駄な資源を使わずにすみます。従来のように、仕組み全体を増強する必要がないため、費用を抑えながら、必要な部分だけを強化することができます。これは、システムの運用において大きな利点となります。まるで、必要な場所に必要なだけ人員を配置するようなもので、効率的で無駄のない運用を実現できます。
IT活用

Sagaパターン:分散処理の難題を解決

近年の計算機技術の進歩は目覚ましく、仕組作りも大きく変わってきました。一枚岩のような巨大な仕組を作るのではなく、小さな仕組をたくさん作って、それらを連携させる方法が主流になりつつあります。これは、例えるなら、大きな一つの工場ですべてを作るのではなく、小さな工場をたくさん作って、それぞれが得意な部品を作り、最後にそれらを組み合わせて製品を作るようなものです。このような、分散した仕組を連携させる方法は、柔軟性や拡張性が高いという利点があります。しかし、それぞれの小さな仕組が独立して情報を持ち、処理を行うため、全体として情報の整合性を保つことが難しくなります。複数の工場で部品を作り、最後に組み立てることを想像してみてください。ある工場で部品を作るのに失敗したら、他の工場で作った部品はどうなるでしょうか?全体の製品は完成しません。仕組も同じで、複数の仕組にまたがる処理において、すべてが成功するか、すべてが失敗する、といった一貫性を保証することが重要です。この一貫性を保つことは、分散した仕組では容易ではありません。そこで、分散した仕組で情報の整合性を保つ方法として、「物語」を意味する「サガ」と呼ばれる方法が注目されています。サガとは、複雑な処理を小さな手順に分割し、それぞれの小さな手順を独立した仕組で実行することで、全体としての整合性を確保する仕組みです。それぞれの小さな手順は、成功したら次の手順に進み、失敗したら、それまでの手順を巻き戻す処理を行います。全体を小さな手順に分割することで、それぞれの仕組は独立性を保ちつつ、全体としての一貫性を確保できます。これは、各工場で部品を作りながら、同時に他の工場の状態も確認し、問題があればすぐに対応するようなものです。サガを使うことで、柔軟性と拡張性を保ちながら、複雑な処理の整合性を保証できるようになります。この資料では、サガの仕組みや利点、欠点について詳しく説明します。
IT活用

アウトボックスパターンでデータ整合性を確保

近頃は、複数の仕組が協調して動く分散型の仕組みや、小さな仕組を組み合わせる設計手法が広く使われています。このような仕組みでは、情報の正確さを保つことが大きな課題となっています。複数の仕組みがそれぞれ情報を管理していると、どこかで不具合が発生した場合、全体の整合性が取れなくなる危険性があるからです。 例えば、注文処理と在庫管理が別々の仕組みで動いている場合、注文は受け付けたのに在庫の更新が間に合わず、実際には商品がないにも関わらず注文が確定してしまうといった問題が起こりえます。このような問題を防ぐ有効な方法として、「外部の箱」のような仕組みを使う方法があります。これは、「情報の正確さを保つための箱」のようなイメージで、情報を一時的に保管し、確実に処理を進めるための仕組みです。具体的には、情報を記録するためのデータベースの処理単位と、処理の指示を伝えるための伝達手段を組み合わせることで実現します。データベースの処理単位は、一連の操作をまとめて確実に実行するための仕組みです。例えば、銀行の預金口座からお金を引き出して別の口座に振り込む場合、引き出しと振り込みは必ず両方成功するか、両方失敗するかのどちらかになります。片方だけ成功してしまうと、お金が消えてしまうといった問題が発生するため、処理単位を使うことでこのような事態を防ぎます。伝達手段は、処理の指示を確実に伝えるための仕組みです。例えば、注文情報を受け付けたら、在庫管理システムに在庫を減らすように指示を出します。この指示は、伝達手段を通じて確実に在庫管理システムに届けられます。仮に在庫管理システムが一時的に停止していても、伝達手段が指示を保持しておき、復旧後に処理を実行することで、指示が失われることを防ぎます。このように、データベースの処理単位と伝達手段を組み合わせることで、複数の仕組みが連携する複雑な状況でも、情報の正確さを確実に保つことができます。この「外部の箱」のような仕組みは、システムの信頼性を高める上で非常に重要な役割を果たします。