Technology Radar vol.23(2020年10月版)を読む
Technology RadarのVol. 23(Oct. 2020)を読んだので、気になった項目をまとめて、感想を記録しておく。
ここしばらく、Kubernetesの勉強をしているので以下は触ってみる予定。
- Helm: Kubernetesのためのパッケージマネージャー
- Kustomizeは、Kubernetesマニフェストファイルを管理およびカスタマイズするためのツール
- Kialiは、Istioでデプロイされたサービスのネットワークを観察および制御するためのグラフィカルユーザーインターフェース
他に、そのうち触ってみたいものは以下の通り。
- Bokehは、ブラウザでJavaScript経由でレンダリングされる、科学プロットおよびデータ視覚化のためのPythonの主要なライブラリの1つ
- ShellCheckはシェルスクリプトのリンター
- gossmは、Session Managerの使用をさらに便利にするオープンソースのCLIツール
- single-spa は、単一のフロントエンドアプリケーションに複数のマイクロフロントエンドを統合するための JavaScript フレームワーク
- Babylon.js はTypeScript で書かれたWeb ベースの VR ソリューション
その他に気になったものを以下に取り上げる。
Techniques
Dependency drift fitness function(依存関係ドリフト・フィットネス関数)
[Adopt]
進化型アーキテクチャによって導入されたフィットネス関数(進化計算から借用)は、アプリケーションやアーキテクチャが望ましい特性から客観的に逸脱していないかを知らせる実行可能な関数です。これらは基本的に、リリースパイプラインに組み込むことができるテストです。アプリケーションの主要な特性の1つは、他のライブラリ、API、または環境コンポーネントへの依存関係の鮮度です。依存関係ドリフト・フィットネス関数はこれを追跡し、更新が必要な古くなった依存関係を警告します。DependabotやSnykなど、依存関係のドリフトを検出するツールの数が増え、成熟するにつれて、依存関係ドリフト・フィットネス関数をソフトウェアリリースプロセスに簡単に組み込み、アプリケーションの依存関係を最新の状態に保つためのタイムリーなアクションをとることができます。
Security policy as code(コードとしてのセキュリティポリシー)
[Adopt]
テクノロジーランドスケープがより複雑になるにつれて、セキュリティなどの懸念事項には、より多くの自動化とエンジニアリングプラクティスが必要です。システムを構築する際には、システムを脅威や混乱から保護するためのルールと手順であるセキュリティポリシーを考慮に入れる必要があります。例えば、アクセス制御ポリシーは、誰がどのサービスやリソースにどのような状況下でアクセスできるかを定義し、強制します。対照的に、ネットワークセキュリティポリシーは、特定のサービスへのトラフィックレートを動的に制限できます。私たちのチームのいくつかは、セキュリティポリシーをコードとして扱うことで素晴らしい経験をしています。「コードとして」と言う場合、これらのセキュリティポリシーをファイルに記述するだけでなく、コードをバージョン管理下に置く、パイプラインに自動検証を導入する、環境に自動的にデプロイする、パフォーマンスを観察および監視するなどのプラクティスを適用することも意味します。私たちの経験と、コードとしてのセキュリティポリシーの実践をサポートする柔軟なポリシー定義および強制メカニズムを提供するOpen Policy AgentやIstioなどのプラットフォームを含む既存のツールの成熟度に基づいて、このテクニックを環境で使用することを強くお勧めします。
Declarative data pipeline definition(宣言的なデータパイプライン定義)
[Trial]
多くのデータパイプラインは、PythonまたはScalaで書かれた、多かれ少なかれ命令的な大きなスクリプトで定義されています。スクリプトには、個々のステップのロジックと、ステップを連鎖させるコードが含まれています。Seleniumテストで同様の状況に直面したとき、開発者はページオブジェクトパターンを発見し、その後、多くのビヘイビア駆動開発(BDD)フレームワークがステップ定義とその構成の間の分割を実装しました。一部のチームは現在、同じ考え方をデータエンジニアリングに取り入れることを実験しています。別個の宣言的なデータパイプライン定義(おそらくYAMLで記述)には、ステップの宣言とシーケンスのみが含まれます。入力データセットと出力データセットを記述しますが、より複雑なロジックが必要な場合はスクリプトを参照します。A La Modeは、パイプラインを定義するためにDSLアプローチを採用する比較的新しいツールですが、YAMLで定義された有向非巡回グラフ(DAG)をAirflowタスクスケジュールに変換するツールであるairflow-declarativeが、この分野で最も勢いがあるようです。
Diagrams as code(コードとしての図)
[Trial]
ソフトウェアアーキテクチャやその他の図をコードとして作成できるツールがますます増えています。これらのツールをより重い代替手段よりも使用することには、簡単なバージョン管理や多くのソースからDSLを生成できる能力など、利点があります。この分野で私たちが気に入っているツールには、Diagrams、Structurizr DSL、AsciiDoctor Diagram、そしてWebSequenceDiagrams、PlantUML、由緒あるGraphvizなどの定番ツールが含まれます。今日では独自のSVGを生成することもかなり簡単なので、独自のツールを迅速に作成することも除外しないでください。例えば、私たちの著者の一人は、SVGを迅速に作成するために小さなRubyスクリプトを作成しました
Event interception(イベントインターセプション)
[Trial]
より多くの企業がレガシーシステムから移行するにつれて、これらのシステムからデータを取得するメカニズムとして、変更データキャプチャ(CDC)の代替案を強調する価値があると感じています。マーティン・ファウラーは2004年にイベントインターセプションについて説明しました。現代的な用語では、システムへのイングレスでリクエストをフォークして、徐々に代替システムを構築できるようにすることを意味します。これはしばしばイベントやメッセージをコピーすることによって行われますが、HTTPリクエストをフォークすることも同様に有効です。例としては、POSシステムからのイベントをメインフレームに書き込む前にフォークすることや、支払いトランザクションをコアバンキングシステムに書き込む前にフォークすることが挙げられます。どちらもレガシーシステムの一部を徐々に置き換えることにつながります。テクニックとして、CDCを使用した事後処理で状態変化を再作成しようとするのではなく、ソースから状態変化を取得することは見過ごされてきたと感じています。そのため、このレーダー号でそれを強調しています。
感想: CDCの代替が求められている。
Zero trust architecture(ゼロトラストアーキテクチャ)
[Trial]
コンピューティングとデータの構造が企業内で変化し続ける一方で(モノリシックアプリケーションからマイクロサービスへ、集中型データレイクからデータメッシュへ、オンプレミスホスティングからポリクラウドへ、接続デバイスの増加とともに)、企業資産を保護するためのアプローチはほとんど変わっておらず、ネットワーク境界への重い依存と信頼が続いています。組織は、企業の仮想的な壁を強化し、プライベートリンクやファイアウォール構成を使用し、もはや今日の現実に対応していない静的で面倒なセキュリティプロセスを置き換えることによって、資産を保護するために多額の投資を続けています。この継続的な傾向により、ゼロトラストアーキテクチャ(ZTA)を再び強調する必要性を感じました。ZTAは、セキュリティアーキテクチャと戦略におけるパラダイムシフトです。ネットワーク境界はもはや安全な境界を表しておらず、物理的またはネットワーク上の場所のみに基づいてユーザーまたはサービスに暗黙の信頼を与えるべきではないという仮定に基づいています。ZTAの側面を実装するために利用可能なリソース、ツール、プラットフォームの数は増え続けており、以下が含まれます:最小権限の原則と可能な限りきめ細かく基づいたコードとしてのポリシーの強制、脅威の継続的な監視と自動化された緩和策。サービスメッシュを使用したアプリケーションからサービスへ、およびサービスからサービスへのセキュリティ制御の強制。バイナリの出所を確認するためのバイナリアテステーションの実装。従来の暗号化に加えてセキュアエンクレーブを含めて、データのセキュリティの3つの柱(転送中、保存中、メモリ内)を強制する。このトピックの紹介については、NIST ZTA出版物とGoogleのBeyondProdに関するホワイトペーパーを参照してください。
Platform
なし
Tools
Airflow
Adopt
Airflowは、データ処理パイプラインのための、オープンソースのワークフロー管理ツールとして、私たちにとって最も広く使われており、お気に入りのツールです
Dependabot
Adopt
依存関係を最新の状態に保つための利用可能なツールの中で、Dependabotは堅実なデフォルトの選択肢だと私たちは考えています。DependabotとGitHubの連携はスムーズで、依存関係を最新バージョンに更新するためのプルリクエストを自動的に送信してくれます。
Helm
Adopt
HelmはKubernetesのためのパッケージマネージャーです。公式Chartsリポジトリで管理されている、厳選されたKubernetesアプリケーションのリポジトリが付属しています
Bokeh
Trial
Bokehは、ブラウザでJavaScript経由でレンダリングされる、科学プロットおよびデータ視覚化のためのPythonの主要なライブラリの1つです。デスクトップツールが静的画像を作成するのに対し、このようなツールは、既存のデータセットを操作するためのスタンドアロン分析アプリケーションを簡単に構築できます
Dash
Trial
このRadar版では、エンドユーザーがデータを視覚化し、操作するのに役立つWebアプリケーションを作成するためのいくつかの新しいツールを紹介しています。これらはD3のような単純な視覚化ライブラリ以上のものです。代わりに、既存のデータセットを操作するためのスタンドアロン分析アプリケーションを構築するのに必要な労力を削減します。PlotlyのDashは、Pythonでリッチ機能の分析アプリケーションを作成するため、データサイエンティストの間で人気が高まっています。Dashは、ShinyがRの上に位置するように、Pythonデータライブラリを拡張します。これらのアプリケーションは、ダッシュボードと呼ばれることもありますが、可能な機能の範囲は、その用語が示唆するよりもはるかに広範です。Dashは、このクラスの別のツールであるStreamlitとは異なり、スケーラブルで本番対応のアプリケーションを構築するのに特に適しています。Tableauのようなローコードまたはノーコードソリューションが提供できるよりも、より洗練された分析をビジネスユーザーに提示する必要がある場合は、Dashの使用を検討してください。
jscodeshift
Trial
大規模なJavaScriptコードベースの維持は決して簡単ではありませんが、互換性のない変更を移行する際には特に困難です。リファクタリング機能を備えたIDEは、単純なシナリオでは役立つかもしれません。しかし、コードベースが広く依存されているライブラリである場合、互換性のない変更を行うたびに、一連のクライアントコードベースを調べて適切な更新を行う必要があります。これは人間の監視を必要とし、手動で行う必要があります。jscodeshiftは、JavaScriptおよびTypeScriptをリファクタリングするためのツールキットであり、この痛みを軽減するのに役立ちます。コードを抽象構文木(AST)に解析し、さまざまな変換(例えば、既存のコンポーネントにプロパティを追加、名前変更、削除)で木を操作するためのAPIを提供し、その木を最終的なソースコードとしてエクスポートします。
Kustomize
Trial
Kustomizeは、Kubernetesマニフェストファイルを管理およびカスタマイズするためのツールです。これは、異なる環境に適用する前に、ベースとなるKubernetesリソースを選択してパッチを適用できます。
Pitest
Trial
伝統的なテスト手法は、本番コードが期待通りに機能しているかどうかの評価に焦点を当てています。しかし、テストコードに不完全または無用なアサーションを導入し、偽りの安心感を生み出す間違いを犯す可能性があります。ここで変異テストが登場します。これはテスト自体の品質を評価し、気づきにくいエッジケースを見つけます。Pitest。
Sentry
Trial
Sentryは、エラーレポートに焦点を当てたクロスプラットフォームのアプリケーション監視ツールです。
ShellCheck
Trial
インフラストラクチャ分野のツールは大幅に改善されましたが、場合によってはシェルスクリプトを作成するのが理にかなっています。もちろん、シェルスクリプトの構文は難解としか言いようがなく、最近はシェルスクリプトを書く機会が少なくなったため、シェルスクリプトのリンターであるShellCheckを気に入っています
Flagger
Trial
サービスメッシュとAPIゲートウェイは、すべて同じAPIインターフェースを実装するさまざまなマイクロサービスにトラフィックをルーティングする便利な方法を提供します。Flaggerは、この機能を使用して、新しいバージョンのサービスにルーティングされるトラフィックの部分を動的に調整します。これは、カナリアリリースまたはブルー/グリーンデプロイメントの一般的な手法です。Flaggerは、さまざまな人気のあるプロキシ(EnvoyやKongを含む)と連携して機能し、サービスへのリクエストを段階的に増やし、ロードに関するメトリクスを報告することで、新しいリリースに関する迅速なフィードバックを提供します。
gossm
Trial
AWS上のサーバーインスタンスに接続する場合、直接接続ではなく踏み台ホスト経由で行うことが推奨されます。ただし、その目的のためだけに踏み台ホストをプロビジョニングするのは煩雑な場合があり、そのためAWS Systems ManagerのSession Managerは、サーバーにさらに快適に接続するためのトンネリングを提供します。gossmは、Session Managerの使用をさらに便利にするオープンソースのCLIツールです。
Kiali
Trial
コンテナ化されたマイクロサービスのコレクションをデプロイするためにサービスメッシュの使用が増加していることを考えると、このアーキテクチャスタイルに関連する管理タスクを自動化および簡素化するツールが登場することが予想されます。Kialiはそのようなツールの1つです。Kialiは、Istioでデプロイされたサービスのネットワークを観察および制御するためのグラフィカルユーザーインターフェースを提供します。
Languages & Frameworks
single-spa
Trial
single-spa は、単一のフロントエンドアプリケーションに複数のマイクロフロントエンドを統合するための JavaScript フレームワークです。私たちはマイクロフロントエンドの無秩序(micro frontend anarchy)を避けるよう助言していますが、single-spa はまさにそれをサポートしています。
XState
Trial
私たちは以前にもいくつかの状態管理ライブラリを Radar で紹介しましたが、XState は少し異なるアプローチをとります。これは、有限状態マシンを作成し、それらをステートチャートとして視覚化するためのシンプルな JavaScript および TypeScript フレームワークです。これは、より人気のあるリアクティブ JavaScript フレームワーク(Vue.js、Ember.js、React.js、RxJS)と統合し、有限状態マシンの W3C 標準に基づいています。もう1つの注目すべき機能は、マシン定義のシリアライゼーションです。
Babylon.js
Assess
数年前にゲーム以外の分野での VR について書いたとき、VR ソリューションがゲーム以外の分野でどれだけ早く、どの程度見られるようになるかについては予測しませんでした。振り返ってみると、関心と採用は確かに増えましたが、普及は私たちの一部が予想していたよりも遅かったです。理由の1つはツールかもしれません。Unity と Unreal は、VR アプリケーション開発のための非常に成熟した有能なエンジンです。私たちは Godot も取り上げました。ただし、これらのエンジンはほとんどの Web およびエンタープライズチームが慣れ親しんでいるものとはかなり異なります。探求を続ける中で、Web ベースの VR ソリューションが大幅に進歩したことに気づき、Babylon.js で肯定的な経験をしました。TypeScript で書かれ、ブラウザでアプリケーションをレンダリングする Babylon.js は、多くの開発チームに馴染みのある体験を提供します。
Discussion