"SKYLOGIQ" The moon can't shine on its own.
フラッグシッププラクティス

Rust移行

書かれた言語のままでは信頼できなくなったシステムを、稼働させたままRustへ移行します。

要請

メモリ安全性への要請

2024年2月、ホワイトハウス国家サイバー長官室(Office of the National Cyber Director)は、CISA、NSA、同盟国の機関によるガイダンスを受けて、テクノロジー業界にメモリ安全な言語の採用を呼びかけました。政府や重要インフラの調達の枠組みでは、メモリ安全性のロードマップを求める動きが始まっています。方向性はすでに定まりました。PHP、C++、Java、Node、Pythonで書かれた大規模なシステムを運用するすべての組織にとっての問題は、移行を自らのスケジュールで計画するのか、他者のスケジュールで強いられるのかです。

ダウンタイムゼロ

ダウンタイムなしで移行する方法

gateway1つのスイッチ、数秒で切り戻し可能
legacy::servicePHP · Node · Java · C++ · Python
rust::serviceミラーされたトラフィック
parity::verify本番トラフィックで old == new
cut_over()その後に廃止
  1. システムのマッピング。

    すべてのサービス、依存関係、データフロー、利用側を文書化します。多くの組織が、存在を忘れていたシステムを発見します。

  2. 順序付け。

    サービスをリスク、価値、結合度で順位付けします。最初の移行対象は、手法を実証するために選びます。華々しさのためではありません。

  3. ストラングラーパターン。

    新しいRustサービスを既存サービスの横に配置し、ミラーされたトラフィックを受け取らせ、その結果を自動的に比較します。

  4. 一致の検証。

    移行を先に進めるのは、新旧が実際の本番トラフィックで一致したときだけです。必要なだけ時間をかけます。

  5. 1サービスずつの切り替え。

    トラフィックは、数秒で元に戻せるスイッチを介してRustへ移ります。

  6. 廃止と引き継ぎ。

    旧サービスを退役させ、文書を完成させ、貴社のチームは新サービスについてのトレーニングを終えた状態になります。

移行元 → 移行先

移行に適したもの

  • PHPのモノリス(Laravel、Symfony、レガシー)を、APIゲートウェイの背後にあるRustサービスへ
  • スループットやメモリに問題を抱えるNode.jsサービス
  • ライセンス、メモリ、レイテンシのコストが構造的な問題になっているJavaやC#のサービス
  • メモリ安全性に関するインシデントの履歴があるCやC++のコンポーネント
  • Python自体がボトルネックになっているPythonのデータ処理・推論パイプライン
率直さ

クライアントに率直に伝えていること

すべてを移行すべきではありません。

経理部門の4人が使うレポートツールはPHPのままにします。貴社の売上を扱う決済経路はそうはいきません。その議論を行うのが、2週目に作成するシステムマップです。そしてそれは、この案件で最も価値のある文書になります。

事業を動かすシステムは、同様のシステムを運用してきた人が構築すべきです。

The moon can't shine on its own.