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 をすぐに使い果たした後、別のベクトル類似性検索ソリューションを探し始めた。
その結果
ベクトル類似性検索ソリューションの比較
ベクトル類似性検索ソリューション](https://zilliz.com/learn/vector-similarity-search)は数多くあり、その多くはオープンソースです。プロジェクトによって状況は異なりますが、ほとんどのユーザーは、大規模な設定を必要とする単純なライブラリよりも、非構造化データ処理および分析のために構築されたベクトルデータベース を活用する方が有益です。以下では、一般的なベクトル類似検索ソリューションを比較し、トレンドマイクロが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プラグインのアーキテクチャ図です:
Elasticsearchプラグインのアーキテクチャ図](https://assets.zilliz.com/1_3ce4e516c3.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+アリババクラウド|900|20|1|1 | ミルバス|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つのThash値と1つのユニークなSha256値を持つことができます。
Sha256値はAPKを区別するためだけに使用され、Thash値はベクトルの類似性検索に使用されます。類似した APK は同じ Thash 値を持つが、異なる Sha256 値を持つことがある。
トレンドマイクロは、不正なコードを含むAPKを検出するために、類似したThash値と対応するSha256値を検索する独自のシステムを開発しました。トレンドマイクロは、Thash値から変換された膨大なベクトルデータセットに対して、瞬時にベクトルの類似性検索を行うためにMilvusを採用しました。類似検索が実行された後、対応するSha256値がMySQLで照会されます。Redisキャッシュレイヤーもアーキテクチャに追加され、Thash値をSha256値にマッピングすることで、クエリ時間を大幅に短縮している。
以下は、トレンドマイクロのモバイルセキュリティシステムのアーキテクチャ図である。
トレンドマイクロモバイルセキュリティのアーキテクチャ図](https://assets.zilliz.com/image_20210118_022039_ae824b663c.png)
適切な距離メトリックを選択することで、ベクトルの分類とクラスタリングのパフォーマンスを向上させることができます。次の表に、バイナリベクトルで動作する 距離メトリック と対応するインデックスを示します。
| 距離メトリクス** | インデックス・タイプ | |
|---|---|---|
| - Jaccard - Tanimoto - Hamming | - FLAT - IVF_FLAT | . |
| スーパーストラクチャー - サブストラクチャー - FLAT |
2値ベクトルに対する距離メトリクスとインデックス..
*バイナリ・ベクトルの距離メトリックとインデックス。
トレンドマイクロは、Thash値をバイナリベクトルに変換し、Milvusに保存します。このシナリオでは、トレンドマイクロはハミング距離を使用してベクトルを比較します。
Milvusは間もなく文字列ベクトルIDをサポートし、整数IDを文字列形式で対応する名前にマッピングする必要がなくなります。これにより、Redisのキャッシュレイヤーが不要になり、システムアーキテクチャが嵩張らなくなる。
トレンドマイクロはクラウドベースのソリューションを採用しており、多くのタスクをKubernetes上にデプロイしています。高可用性を実現するために、トレンドマイクロはPythonで開発されたMilvusクラスタのシャーディングミドルウェアであるMishardsを使用しています。
MilvusにおけるMishardsアーキテクチャ](https://assets.zilliz.com/image_20210118_022104_3001950ee8.png)
トレンドマイクロでは、すべてのベクトルを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ミリ秒以下であることを示しています。
Milvus上に構築されたThash検索サービスのクエリーレイテンシ
挿入も速い。300万個の192次元ベクトルを挿入するのに約10秒かかります。Milvusの支援により、システム性能はトレンドマイクロが設定した性能基準を満たすことができた。
他人事ではない
- GitHub](https://github.com/milvus-io/milvus/)でMilvusを見つけるか、貢献する。
- Slack](https://join.slack.com/t/milvusio/shared_invite/zt-e0u4qu3k-bI2GDNys3ZqX1YCJ9OM~GQ)でコミュニティと交流しましょう。
- Twitter](https://twitter.com/milvusio)でつながりましょう。
読み続けて

1 Table = 1000 Words? Foundation Models for Tabular Data
TableGPT2 automates tabular data insights, overcoming schema variability, while Milvus accelerates vector search for efficient, scalable decision-making.

DeepRAG: Thinking to Retrieval Step by Step for Large Language Models
Discover DeepRAG, an advanced retrieval-augmented generation (RAG) model that improves LLM accuracy by retrieving only essential data through step-by-step reasoning.

Vector Databases vs. NoSQL Databases
Use a vector database for AI-powered similarity search; use NoSQL databases for flexibility, scalability, and diverse non-relational data storage needs.



