Social Icons

2PCなしの分散トランザクション: ホテル予約システムにおける補償ワークフロー

問題: ホテル予約における分散トランザクション ホテル予約システムを基本的なコンポーネントに分解してみましょう: * 予約サービス: 部屋の空き状況と予約を管理 * 支払いサービス: 支払いを処理 * 通知サービス: 確認メールを送信 * ロイヤルティサービス: 顧客のポイントを更新 さて、顧客が部屋を予約するシナリオを想像してみてください。私たちは以下を行う必要があります: 1. 部屋の空き状況を確認し、予約する 2. 支払いを処理する 3. 確認メールを送信する 4. 顧客のロイヤルティポイントを更新する 簡単に聞こえますよね?でも、そう簡単ではありません。支払いが失敗した場合、または通知サービスがダウンしている場合はどうなるでしょうか?これが分散トランザクションの世界で、マーフィーの法則が常に働いています。 サガの登場: 分散トランザクションの無名のヒーロー サガは、各トランザクションが単一のサービス内でデータを更新する一連のローカルトランザクションです。ステップが失敗した場合、サガは前のステップで行われた変更を元に戻す補償トランザクションを実行し...

8日前
3 分で読む

形式手法: 非同期ワークフローを堅牢にする秘密の武器

要約: フォーマルメソッド = 非同期のスーパーパワー フォーマルメソッドは、もはや学術論文や博士論文だけのものではありません。実用的なツールとして、次のことに役立ちます: * 非同期ワークフローが正しいことを証明する(本当に!) * 厄介な並行性のバグを事前に発見する * システムが崩壊しないことを知って安心して眠る なぜフォーマルメソッド?非同期は難しいから 正直に言うと、非同期プログラミングは猫を追いかけながらチェーンソーを操るようなものです。強力ですが、微妙なバグの温床でもあり、人生の選択を疑わせることもあります。そこで登場するのがフォーマルメソッドです。これは数学的な猫使いとチェーンソー使いのようなものです。 フォーマルメソッドを使うと、次のことが可能になります: * 複雑な非同期の動作をモデル化する * デッドロックのないことやライブネスなどの特性を検証する * ワークフローが正しく動作することを数学的に証明する フォーマルメソッドのツールボックス ここで言うのは、古い定理証明器のことではありません。現代のフォーマルメソッドツールは驚くほど開...

9日前
4 分で読む

次世代認証: FIDO2とWebAuthn - バックエンドセキュリティを革新するダイナミックデュオ

認証は、単純なパスワードの時代から大きく進化してきました。少し過去を振り返ってみましょう: * パスワード: "Welcome123" (顔を覆う) * 二要素認証: "コードをどうぞ。早く入力して、消える前に!" * 生体認証: "あなたの顔がパスポートです"(文字通り) * FIDO2とWebAuthn: "ちょっと見てて" FIDO2とWebAuthnは、パーティーに遅れてやってきたけど、すぐに主役になったクールな存在です。私たちの生活を楽にし、システムをより安全にするために登場しました。でも、彼らはどのようにその魔法を実現しているのでしょうか? FIDO2: オリジナルよりも優れた続編 FIDO2は、WebAuthnとCTAP(クライアントから認証器へのプロトコル)を含む認証標準の総称です。...

9日前
3 分で読む

100GbpsマイクロサービスのためのLinuxカーネルチューニング: ビーストを解き放つ

要約 以下の重要な領域を最適化します: * NICオフロード技術 * TCP_QUICKACKで遅延を削減 * net.core.rmem_maxの調整 * SO_BUSY_POLLでCPU効率を向上 * 遅延スパイクを最小限に抑える戦略 スピードの必要性: なぜ100Gbpsなのか? 詳細に入る前に、なぜ100Gbpsが必要なのかを考えてみましょう。高頻度取引の世界では、毎マイクロ秒が重要です。これは単なる自慢話ではなく、数百万ドルを稼ぐか、すべてを失うかの違いです。 しかし、100Gbpsのスループットを達成し維持することは、単にハードウェアを増やすだけではありません。既存のインフラから最大限のパフォーマンスを引き出すためにシステムを微調整することが重要です。ここでカーネルの調整が役立ちます。 NICオフロード: ハードウェアに重労働を任せる まず最初に、NICオフロードを活用していない場合、パフォーマンスを無駄にしています。現代のNICは、CPUを圧迫する多くのネットワーク関連のタスクを処理できます。現在のオフロード設定を確認する方法は次のとおりです:...

10日前
3 分で読む

暗号化パターン: 保存中および転送中のデータを保護する

おめでとうございます!暗号化パターンの世界に足を踏み入れましたね。デジタルの世界では、私たちは皆、データを守る秘密のエージェントです。暗号化パターンの魅力的な世界に飛び込み、ハードドライブで休んでいるデータやインターネットを駆け巡るデータがどのように安全に保たれているかを見てみましょう。 要約 * 保存データの暗号化は、保存された情報を保護します * 転送中のデータの暗号化は、移動中の情報を保護します * 各パターンには独自の使用ケースと実装の課題があります * パターンを組み合わせることで、強力なセキュリティ戦略が生まれます 保存データの暗号化: 眠れる巨人 保存データは眠れる巨人のようなものです。どこにも行かないけれど、保護が必要です。ここで保存データの暗号化が登場します。これは、日記を金庫にしまうデジタル版のようなものです。 主な特徴: * デバイスやデータベースに保存されたデータを保護します * 対称暗号アルゴリズムを使用します(AESが人気です) * 鍵管理が重要です(鍵を失うとデータも失います) Pythonでcryptographyライブ...

10日前
4 分で読む

サーバーレスにおける関数合成: Durable Entitiesで長時間実行ワークフローをオーケストレーションする

サーバーレスプロジェクトに没頭していると、まるでコーディングのスーパーヒーローになった気分です。しかし突然、長時間実行されるワークフローのオーケストレーションという難題に直面します。関数が「最終的一貫性」と言うよりも早く散らばり始め、サーバーレスが本当に正しい選択だったのか疑問に思うかもしれません。心配しないでください、開発者の皆さん!今日は、サーバーレスでの関数の構成について、秘密の武器である「耐久エンティティ」を使って探っていきます。 要約 サーバーレスアーキテクチャにおける耐久エンティティは、状態を維持し、複雑で長時間実行されるワークフローを効率的にオーケストレーションすることを可能にします。これにより、従来のサーバーレス関数のステートレスな性質を克服し、関数を一貫した管理可能なプロセスに組み合わせる方法を提供します。 サーバーレスの難題 サーバーレスコンピューティングは、アプリケーションの構築とデプロイの方法を革命的に変えました。スケーラブルでコスト効率が高く、インフラの管理ではなくコードを書くことに集中できます。しかし、状態管理を必要とする長時間実行されるプロセス...

11日前
4 分で読む

Rustの型システム: 簡単に並行性を制御する

要約 Rustの型システムは、ファントム型や線形型を用いることで、コンパイル時にスレッドセーフを保証できます。これにより、ArcやMutexのようなランタイム同期プリミティブを使う必要がなくなることが多いです。このアプローチは、ゼロコストの抽象化を活用して、安全性とパフォーマンスを両立させます。 問題: ランタイムのオーバーヘッドと認知負荷 解決策に入る前に、なぜこの問題に取り組むのかを考えてみましょう。従来の並行処理モデルは、ランタイム同期プリミティブに大きく依存しています: * 排他的アクセスのためのMutex * 共有所有権のためのアトミック参照カウント * 並行読み取りのためのリードライトロック これらのツールは強力ですが、以下のような欠点があります: 1. ランタイムのオーバーヘッド: 各ロック取得やアトミック操作が積み重なります。 2. 認知負荷: 何が共有されているかを追跡するのは精神的に負担です。 3. デッドロックの可能性: 多くのロックを扱うほど、ミスをしやすくなります。 しかし、これらの複雑さの一部をコンパイル時に移行し、コンパイラに任...

11日前
4 分で読む

分散システムにおける高度なエラー伝播メカニズム: カスタムフォールトトレランスレイヤーの構築

このディープダイブでは、エラー伝播の高度なメカニズムに取り組みます。最も厄介なエラーを処理できるカスタムのフォールトトレランスレイヤーを構築し、分散システムを壊れやすいスマートフォンの世界でノキア3310のように頑丈に保つ方法を探ります。 エラー伝播の難題 解決策に飛び込む前に、問題を理解するための時間を取りましょう。分散システムでは、エラーはおしゃべりな隣人のようなもので、すぐに広がり、放置すると大騒ぎを引き起こす可能性があります。 次のシナリオを考えてみましょう: # サービスA def process_order(order_id): try: user = get_user_info(order_id) items = get_order_items(order_id) payment = process_payment(user, items)...

12日前
4 分で読む

本番環境でのイベントソーシング: 在庫混乱の警告的な物語

まずは、なぜ私たちがイベントソーシングに惹かれたのかを思い出してみましょう: * 完全な監査履歴?チェック。 * 過去の状態を再構築する能力?チェック。 * ドメインモデルを進化させる柔軟性?チェック。 * スケーラビリティとパフォーマンスの利点?ダブルチェック。 すべてがあまりにも良すぎるように聞こえました。ネタバレ注意:その通りでした。 セットアップ:私たちの在庫管理システム 私たちのシステムは、複数の倉庫にわたる何百万ものSKUを処理するように設計されていました。イベントソーシングを選んだのは、すべての在庫移動、価格変更、アイテム属性の更新の正確な履歴を維持するためです。イベントストアが真実の源であり、プロジェクションが迅速なクエリのための現在の状態を提供していました。 以下は、私たちのイベント構造の簡略版です: { "eventId": "e123456-7890-abcd-ef12-34567890abcd", "eventType": "StockAdded&...

12日前
4 分で読む

CockroachDBにおける並行性モデル: シリアライズ可能なスナップショット分離の層を剥がす

CockroachDBは、分散ノード間で一貫性を維持するためにSerializable Snapshot Isolationを使用しています。タイムスタンプの順序付け、書き込みインテント、巧妙な競合処理を活用して、トランザクションが直列に実行されたかのように振る舞うことを保証します。まるでデータのタイムトラベルのようです! 舞台裏の仕組み:タイムスタンプの順序付け CockroachDBのSSI実装の中心には、タイムスタンプの順序付けがあります。これは、デリカウンターで各トランザクションにユニークなチケットを渡すようなもので、冷肉の代わりにデータの一貫性を提供しています。 その仕組みは次のとおりです: * 各トランザクションは開始時にスタートタイムスタンプを取得します。 * 読み取り操作はこのタイムスタンプを使用して、データベースの一貫したスナップショットを確認します。 * 書き込み操作は、適用準備が整ったときにコミットタイムスタンプを割り当てられます。 さらに、CockroachDBはHLC(ハイブリッド論理クロック)という巧妙なトリックを使用して、これらのタイムス...

13日前
4 分で読む

Rustでのマルチスレッド活用: バックエンドサービスのための高度な並行パターン

Rustの所有権モデルと恐れない並行性は、堅牢で高性能なバックエンドサービスを構築するための強力なツールです。今回は、ワークスティーリング、アクターモデル、ロックフリーのデータ構造といった高度なパターンを探求し、並行プログラミングのスキルを次のレベルに引き上げます。 なぜRustで並行バックエンドサービスを構築するのか? 詳細に入る前に、Rustがバックエンド開発者に人気の理由を簡単に振り返りましょう: * ゼロコストの抽象化 * ガベージコレクションなしのメモリ安全性 * 恐れない並行性 * 驚異的な高速性能 Rustのファンクラブの話はこれくらいにして、さっそく高度な並行パターンに取り組んでみましょう! 1. ワークスティーリング: スレッドプールのロビンフッド ワークスティーリングは、決して怠けない勤勉なエルフのチームのようなものです。あるスレッドがタスクを終えると、忙しい隣人のところに行って、彼らの作業を「借りて」きます。大義のためなら、盗みではありませんよね? 以下は、crossbeamクレートを使った簡単な実装例です: use crossbea...

14日前
4 分で読む

大規模なKubernetesポッドセキュリティ: OPAとFalcoでSELinuxプロファイルを強制

セキュリティの三銃士: SELinux、OPA、Falco 詳細に入る前に、私たちのセキュリティチームを紹介しましょう: * SELinux: 長年の経験を持つ厳格なセキュリティガード。 * OPA: 新しいポリシー執行者。 * Falco: 鋭い目を持つランタイムセキュリティモニター。 これらが揃えば、どんなハッカーも二の足を踏むことでしょう。 舞台設定: Kubernetesのプレイグラウンド まずはシンプルなKubernetesデプロイメントから始めましょう: apiVersion: apps/v1 kind: Deployment metadata: name: super-secure-app spec: replicas: 3 selector: matchLabels: app: super-secure-app template: metadata: labels: app:...

14日前
3 分で読む

Linuxネットワークスタックのバイパス: DPDKとRustでユーザースペースTCP/IPスタックを作成する

なぜカーネルをバイパスするのか? Linuxカーネルのネットワークスタックは、多様なプロトコルとユースケースを処理する技術の結晶です。しかし、一部の高性能アプリケーションにとっては、過剰な場合があります。必要なのはスイスアーミーナイフではなく、レーザービームのようなものです。 TCP/IPスタックをユーザースペースに移すことで、次のことが可能になります: * カーネルとユーザースペース間のコンテキストスイッチを排除 * ポーリングを使用して割り込みを回避 * スタックを特定のニーズに合わせて調整 * メモリ割り当てとパケット処理を細かく制御 DPDKの登場:スピードの悪魔 Data Plane Development Kit (DPDK)は、この性能戦争における秘密兵器です。DPDKは、ユーザースペースでの高速パケット処理のためのライブラリとドライバのセットです。カーネルをバイパスし、ネットワークインターフェースカード(NIC)への直接アクセスを提供します。 使用するDPDKの主な機能: * ポールモードドライバ(PMD):割り込みにさようなら! * 巨大ペ...

15日前
4 分で読む

マルチクラスターCassandra: トゥームストーンの獣を飼いならす

まず最初に: トゥームストーンとは何で、なぜそれが問題を引き起こしているのでしょうか? トゥームストーンは、Cassandraが削除されたデータを示す方法です。データがすべてのレプリカで確実に削除されるようにするための小さな墓石のようなものです。 理論的には素晴らしいですよね? しかし実際には、トゥームストーンは独身男性の部屋の床に積み上がる洗濯物のように、すぐに溜まってしまいます。これにより以下の問題が発生します: * 読み取り遅延の増加 * SSTableの肥大化 * 圧縮プロセスの遅延 * 全体的なパフォーマンスの低下 さらに、マルチクラスターのセットアップやGDPR準拠を考慮すると、これらの問題はクレジットカードの利息のように急速に増大します。 TimeWindowCompactionの登場 TimeWindowCompactionは、Cassandraクラスターを整理整頓するためのMarie Kondoのようなものです。時間枠に基づいてSSTableを整理します。以下のように機能します: 1. SSTableが時間枠(例: 毎時、毎日)にグループ化さ...

15日前
2 分で読む

内部PKIのためのセキュアな証明書トランスペアレンシーログ: KafkaとTrillianを用いたRFC 6962の実装

Kafkaをメッセージキューとして、Trillianを追記専用のMerkleツリーとして使用し、内部PKIのための証明書トランスペアレンシーログシステムを構築します。このセットアップにより、証明書の発行を効率的に監査し、不正発行された証明書を検出し、ゴシップベースの一貫性チェックを行うことができます。 なぜ内部CTログが必要なのか? 技術的な詳細に入る前に、なぜ内部PKIのためにCTログを実装する必要があるのかを考えてみましょう。 * 不正な証明書発行の検出 * 内部ポリシーへの準拠の確保 * インシデント対応能力の向上 * 全体的なセキュリティ体制の強化 内部CAに対する「信頼するが検証する」アプローチと考えてください。CAを信頼しつつも、その正直さを保ちたいのです。 構築要素: KafkaとTrillian 内部CTログシステムを実装するために、以下の2つの強力なツールを使用します。 1. Apache Kafka Kafkaはメッセージキューとして機能し、証明書データの高スループットな取り込みを処理します。これは証明書のためのコンベアベルトのようなも...

16日前
5 分で読む

私たちのコミュニティに参加 👋

Suddo.jp — テクノロジーニュース、ITコース、チュートリアル、プログラミング のフルメンバーシップを解除し、限定コンテンツの広範なコレクションを探索してください。

今すぐサインアップ、いつでもキャンセル可能

プランを見る