Milvusと作る トレンドマイクロのためにリアルタイムでAndroidウイルスを検出する
サイバーセキュリティは、個人と企業の両方にとって依然として根強い脅威であり、2020年には86%の企業でデータプライバシーに関する懸念が高まり、消費者のわずか23%が自分の個人データが非常に安全であると考えています。マルウェアが着実に遍在し、巧妙化する中、脅威検知へのプロアクティブなアプローチが不可欠となっています。トレンドマイクロは、ハイブリッドクラウドセキュリティ、ネットワーク防御、中小企業向けセキュリティ、エンドポイントセキュリティのグローバルリーダーです。同社は、Android端末をウイルスから保護するために、Google PlayストアのAPK(Android Application Package)と既知のマルウェアのデータベースを比較するモバイルアプリ「Trend Micro Mobile Security」を構築した。このウイルス検出システムは次のように動作する:
- Google Playストアの外部APK(Androidアプリケーション・パッケージ)がクロールされる。
- 既知のマルウェアはベクターに変換され、milvusに保存される。
- 新しいAPKもベクターに変換され、類似性検索を使用してマルウェアデータベースと比較されます。
- APKベクターがマルウェアベクターのいずれかと類似している場合、このアプリはウイルスとその脅威レベルに関する詳細情報をユーザーに提供する。
このシステムを機能させるためには、膨大なベクターデータセットに対して非常に効率的な類似性検索をリアルタイムで実行する必要がある。当初、トレンドマイクロはMySQLを使用していた。しかし、同社のビジネスが拡大するにつれ、データベースに保存される悪質なコードを含むAPKの数も増えていった。同社のアルゴリズムチームは、MySQLをすぐに使いこなせなくなったため、別のベクトル類似性検索ソリューションを探し始めた。
ベクトル類似検索ソリューションの比較
ベクトル類似性検索ソリューションは数多くあり、その多くはオープンソースである。プロジェクトによって状況は異なりますが、ほとんどのユーザは、大規模な設定を必要とする単純なライブラリよりも、非構造化データ処理や分析のために構築されたベクトルデータベースを活用する方が有益です。以下では、一般的なベクトル類似検索ソリューションを比較し、トレンドマイクロがmilvusを選択した理由を説明します。
Faiss
FaissはFacebook AI Researchによって開発されたライブラリで、高密度ベクトルの効率的な類似性検索とクラスタリングを可能にします。Faissのアルゴリズムは、あらゆるサイズのベクトルをセットで検索する。FaissはC++で書かれ、Python/numpy用のラッパーがあり、IndexFlatL2、IndexFlatIP、HNSW、IVFを含む多くのインデックスをサポートしている。
Faissは非常に便利なツールですが、限界があります。基本的なアルゴリズム・ライブラリとしてのみ機能し、ベクトル・データセットを管理するためのデータベースではない。さらに、ほとんどのクラウドベースのサービスの主要機能である、分散バージョン、モニタリングサービス、SDK、高可用性も提供していない。
Faissと他のANN検索ライブラリをベースにしたプラグイン
Faiss、NMSLIB、その他のANN検索ライブラリの上に構築されたプラグインがいくつかあり、それらは、それらを動かす基礎となるツールの基本的な機能を強化するように設計されている。Elasticsearch (ES) は Lucene ライブラリをベースとした検索エンジンで、そのようなプラグインが多数存在する。以下はESプラグインのアーキテクチャ図です:
1.png
分散システムのサポートが組み込まれていることは、ESソリューションの大きな利点です。コードを記述する必要がないため、開発者の時間と企業のコストを削減できる。ESプラグインは技術的に高度で、普及している。ElasticsearchはQueryDSL(ドメイン固有言語)を提供しており、これはJSONに基づいてクエリを定義し、簡単に把握することができます。ESサービスのフルセットにより、ベクトル/テキスト検索とスカラーデータのフィルタリングを同時に行うことが可能。
Amazon、Alibaba、Neteaseは、現在ベクトル類似検索のためにElasticsearchプラグインに依存しているいくつかの大手ハイテク企業である。このソリューションの主な欠点は、メモリ消費量の多さとパフォーマンスチューニングのサポートがないことだ。対照的に、JD.comは Vearchと呼ばれるFaissをベースにした独自の分散ソリューションを開発した。しかし、Vearchはまだインキュベーション段階のプロジェクトであり、オープンソースのコミュニティは比較的活発ではない。
Milvus
Milvusは Zillizによって作られたオープンソースのベクターデータベースである。非常に柔軟で、信頼性が高く、高速である。Faiss、NMSLIB、Annoyなど、広く採用されている複数のインデックスライブラリをカプセル化することで、Milvusは直感的なAPIの包括的なセットを提供し、開発者はシナリオに応じて理想的なインデックスタイプを選択することができる。また、分散ソリューションやモニタリングサービスも提供している。Milvusは非常に活発なオープンソースコミュニティを持ち、Githubでは5.5K以上のスターを獲得している。
Milvusは競合に勝る
我々は、上記の様々なベクトル類似性検索ソリューションの様々なテスト結果をまとめた。以下の比較表でわかるように、Milvusは10億個の128次元ベクトルからなるデータセットでテストされたにもかかわらず、競合他社よりも大幅に高速であった。
エンジン | パフォーマンス (ms) | データセットサイズ (百万) |
---|---|---|
ES | 600 | 1 |
ES + Alibaba Cloud | 900 | 20 |
Milvus | 27 | 1000+ |
SPTAG | 良くない | |
ES + nmslib, faiss | 90 | 150 |
ベクトル類似検索ソリューションの比較。
各ソリューションの長所と短所を比較検討した結果、トレンドマイクロはベクトル検索モデルにMilvusを採用した。億単位の膨大なデータセットに対して卓越したパフォーマンスを発揮するMilvusを、リアルタイムのベクトル類似検索を必要とするモバイルセキュリティサービスに採用した理由は明らかだ。
リアルタイムウイルス検出のためのシステム設計
トレンドマイクロのMySQLデータベースには1,000万以上の悪意のあるAPKが保存されており、毎日10万件の新しいAPKが追加されている。このシステムは、APKファイルのさまざまなコンポーネントのTash値を抽出して計算し、Sha256アルゴリズムを使ってバイナリファイルに変換し、APKを他と区別する256ビットのSha256値を生成することで動作します。Sha256値はAPKファイルによって異なるため、1つのAPKは1つのTash値と1つのユニークなSha256値を持つことができます。
Sha256値はAPKを区別するためだけに使用され、Thash値はベクトルの類似性検索に使用されます。類似した APK は同じ Thash 値を持つが、異なる Sha256 値を持つ可能性がある。
トレンドマイクロは、不正なコードを含むAPKを検出するために、類似したThash値と対応するSha256値を検索する独自のシステムを開発しました。トレンドマイクロはMilvusを採用し、Tash値から変換された膨大なベクトルデータセットに対して瞬時にベクトルの類似性検索を実施しました。類似検索が実行された後、対応するSha256値がMySQLで照会されます。Redisキャッシュレイヤーもアーキテクチャに追加され、Thash値をSha256値にマッピングすることで、クエリ時間を大幅に短縮している。
以下は、トレンドマイクロのモバイルセキュリティシステムのアーキテクチャ図です。
image-20210118-022039.png
適切な距離メトリックを選択することで、ベクトルの分類とクラスタリングのパフォーマンスが向上します。次の表に、バイナリベクトルで動作する距離メトリックと対応するインデックスを示します。
距離メトリクス | インデックスの種類 |
---|---|
- Jaccard - Tanimoto - Hamming | - flat - ivf_flat |
- 超構造 - 部分構造 | フラット |
バイナリベクトル用の距離メトリックとインデックス。
トレンドマイクロは、Thash値をバイナリベクトルに変換し、Milvusに保存します。このシナリオでは、トレンドマイクロはハミング距離を使用してベクトルを比較しています。
Milvusは間もなく文字列ベクトルIDをサポートし、整数IDを文字列形式で対応する名前にマッピングする必要がなくなります。これにより、Redisのキャッシュレイヤーが不要になり、システムアーキテクチャが嵩張らなくなる。
トレンドマイクロはクラウドベースのソリューションを採用し、多くのタスクをKubernetes上にデプロイしている。高可用性を実現するために、トレンドマイクロはPythonで開発されたMilvusクラスタのシャーディングミドルウェアであるMishardsを使用しています。

トレンドマイクロでは、AWSが提供するEFS(Elastic File System)にすべてのベクトルを格納することで、ストレージと距離計算を分離している。このやり方は業界ではポピュラーなトレンドだ。Kubernetesを使用して複数の読み取りノードを起動し、これらの読み取りノードでLoadBalancerサービスを開発して高可用性を確保しています。
データの一貫性を維持するため、Mishardsは1つの書き込みノードだけをサポートしている。しかし、複数の書き込みノードをサポートするmilvusの分散バージョンは、今後数ヶ月で利用可能になる予定です。
監視およびアラート機能
MilvusはPrometheus上に構築された監視システムと互換性があり、時系列分析のためのオープンソースプラットフォームであるGrafanaを使用して、様々なパフォーマンスメトリクスを可視化します。
Prometheusは以下のメトリクスを監視・保存します:
- 挿入速度、クエリー速度、Milvus稼働時間などのMilvusパフォーマンスメトリクス。
- CPU/GPU使用率、ネットワーク・トラフィック、ディスク・アクセス速度などのシステム・パフォーマンス・メトリクス。
- データサイズ、総ファイル数などのハードウェアストレージメトリクス。
モニタリングとアラートシステムは以下のように動作します:
- Milvusクライアントは、カスタマイズされたメトリクスデータをPushgatewayにプッシュします。
- Pushgatewayは、短命で刹那的なメトリクス・データがPrometheusに安全に送信されるようにします。
- PrometheusはPushgatewayからデータをプルし続けます。
- アラートマネージャーは、異なるメトリクスに対してアラートのしきい値を設定し、電子メールまたはメッセージを通じてアラームを発生させます。
システムパフォーマンス
Milvus上に構築されたThashSearchサービスが開始されてから数ヶ月が経過した。以下のグラフは、エンド・ツー・エンドのクエリーレイテンシーが95ミリ秒以下であることを示しています。
image-20210118-022116.png
挿入も速い。300万個の192次元ベクトルを挿入するのに約10秒かかる。Milvusの支援により、システム性能はトレンドマイクロが設定した性能基準を満たすことができた。
他人事ではない
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word