データ サイエンティストとして、業界のトップ ナレッジ グラフをまとめ、技術専門家と共有して、ビッグ データの知識を真にインターネットの生産性に変換したいと考えています。ビッグ データは、人工知能、クラウド コンピューティング、モノのインターネット、ブロックチェーンなどのテクノロジとますます統合され、世界で最もホットな戦略テクノロジになり、ビッグ データ実践者に巨大な開発チャンスをもたらすと同時に、ビッグ データ エンジニアに高いスキル要件基準を提示しています。ビッグデータは、膨大、多様、高速、不安定といった特徴を持っています。ビッグデータプラットフォームの構築要件に当てはめると、大量データ収集、並列保存、柔軟な転送、効率的な呼び出し、インテリジェント分析などの一般的なPaaSサービス機能だけでなく、さまざまな新しいSaaSアプリケーションを迅速にインキュベートする機能も必要です。 この目標を達成するには、アーキテクチャ設計が少なくとも次の 3 つの全体的な技術要件を満たす必要があります。 まず、分散型ビッグデータプラットフォームの基本的なデータサービス機能の構築を最優先にすべきです。 PBレベルのデータ操作機能をサポートするクラウドプラットフォームアーキテクチャを計画し、古典的な設計原則と設計パターンのアーキテクチャの美しさを適用し、業界の主流の分散技術の本質を吸収し、主流のプラットフォームサービスモデルから現代のマイクロアーキテクチャへの進化を深く探求します。 2 つ目は、システム アーキテクチャ設計とマイクロサービス構築のアイデアをチームに提供し、多次元アーキテクチャのブループリントを継続的に作成し、チームのコラボレーションを促進することです。 3つ目は、ビッグデータフルスタックテクノロジーシステムをめぐる実際のプロジェクト運用におけるさまざまな問題を解決し、主流の技術仕様と設計標準を策定し、プラットフォームのコアコンポーネントを通じて新しいビジネスを迅速に反復することです。設計要件の観点から、ビッグデータプラットフォームサービスの全体的な設計は、包括的、グローバル、バランスのとれた主要な技術要件を満たす必要があります。国内外の優れたアーキテクチャとソリューションのエッセンスを包括的に抽出できるだけでなく、分散技術の根底にある設計思想を理解する必要があります。上流と下流の技術エコシステムとビジネスの統合の設計プロセスをグローバルに理解するだけでなく、システム機能とパフォーマンスの問題を簡単に処理できなければなりません。新しい技術の導入と古いシステムの改造のコスト見積もりを比較検討できるだけでなく、運用チームが新しい技術を簡単に習得できるようにする必要があります。
システムの全体的な技術能力に基づいて、ビッグデータの高同時収集サービス、柔軟な配信サービス、高度にスケーラブルな大規模ストレージサービス、高同時大規模ストレージサービス、高信頼性大規模ストレージサービス、カスタム移行サービス、機械学習に基づくインテリジェント分析サービス、Sparkエコシステムに基づくリアルタイムコンピューティングサービスなど、IoTビッグデータプラットフォームの8つの一般的なマイクロサービスが提案されています。具体的な要件は次のとおりです。 高同時実行コレクションサービス:
柔軟な配信サービス:
高度にスケーラブルな大容量ストレージ サービス:
高度に同時実行可能な大規模ストレージ サービス:
信頼性の高い大容量ストレージサービス:
Spark エコシステムに基づくリアルタイム コンピューティング サービス:
機械学習に基づくインテリジェント分析サービス:
カスタム移行サービス:
01高同時実行コレクションマイクロサービス ユーザー数が1000倍、データ量が1万倍に増加する状況で、IoTビッグデータが比較的短期間でプラットフォームに取り込まれるようにするにはどうすればよいでしょうか。ユーザー数の増加に対応して、指定された時間内に収集を完了するにはどうすればよいでしょうか。ハードウェア機器の処理能力に加えて、コア要件は、データをより速くプラットフォームに収束させることです。具体的な考慮事項は次のとおりです。 さまざまなメーカー、モバイル デバイスの種類、伝送プロトコルから業界データを収集するニーズを満たします。インターフェース設計では、さまざまなデバイスや伝送プロトコルに合わせて完全に設計することができ、これは「分割統治」戦略を借用することになります。「分割統治」とは、特定の「分解」方法に従って複雑なアルゴリズムの問題をいくつかの同等の小さな部分に分割し、それらを1つずつ解決して、各部分の解決策をそれぞれ見つけ、各部分の解決策を組み合わせて全体の問題の解決策を作成することです。この単純なアイデアは、技術設計にも完全に適しており、ソフトウェアアーキテクチャ設計とモジュール設計は、分割統治の具体的な表現です。戦略モデルは、このアイデアを集中的に具体化したものです。戦略パターンは共通のインターフェースを定義し、さまざまなアルゴリズムがさまざまな方法でこのインターフェースを実装します。 高い同時実行要件を満たします。高い信頼性と高い同時実行性のデータ処理を実現し、エンドツーエンドのデータ転送遅延を効果的に削減し、ユーザーエクスペリエンスを向上させるには、メッセージキュー、キャッシュ、分散処理、クラスター、負荷分散などのコアテクノロジーを使用する必要があります。 「食料を敵に頼る」という発想を借りる。 「敵に頼って食う」の本質は、敵から奪い、敵を倒し、戦争を利用して戦争を支え、ダイナミックに共存することです。敵の優位性を活用して自らを発展させ、リソースを統合するというよく言われることは、この考えを凝縮して反映したものです。正式な商用システムでは、パケット損失なしで低遅延を実現するために、高性能ミドルウェアを使用してデータを並列処理する必要があります。当社では、複数のデバイスや伝送プロトコル (HTTP、TCP、UDP) からのデータ アクセスをサポートし、1 秒あたり数万の同時接続のデータ アクセス ニーズを満たすことができる商用 Mina 負荷分散テクノロジ フレームワークを使用しています。上記のコア需要分析と技術的位置付けに基づいて、サードパーティのミドルウェアと設計パターンを使用してパーソナライズされたサービスを実装し、インターフェイスの集中化、スケーラビリティ、柔軟性などの問題を解決できます。MinaのSocket NIOテクノロジーの魅力により、高並行性データインターフェイスIOFilterAdapterをデシリアライズエンコードに適応させ、高並行性データインターフェイスIOHandlerAdapterをビジネス処理に適応させることができます。 02 マイクロサービスの柔軟な転送 柔軟な転送機能の全体的な設計には、インターフェースとメッセージ ミドルウェアの両方を考慮する必要があります。メッセージ ミドルウェアは、大規模なユーザー規模のメッセージの同時実行をサポートでき、モノのインターネット、車両のインターネット、モバイル アプリ、インタラクティブなライブ ブロードキャストなどの分野に適しています。適用シナリオは次のとおりです。
主流のメッセージミドルウェアには、Kafka、RabbitMQ、RocketMQ などがあります。これらのパフォーマンスを比較してみましょう。Kafka は、Apache*** プロジェクトに属するオープンソースの分散パブリッシュサブスクライブメッセージシステムです。主な特徴は、Pull モードに基づいてメッセージの消費を処理し、高いスループットを追求することです。主にログの収集と送信に使用されます。バージョン 0.8 以降、レプリケーションはサポートされていますが、トランザクションはサポートされていません。メッセージの重複、損失、エラーに関する厳格な要件はなく、大量のデータを生成するインターネット サービスのデータ収集サービスに適しています。RabbitMQ は、Erlang 言語で開発されたオープン ソースのメッセージ キュー システムであり、AMQP プロトコルに基づいて実装されています。 AMQP の主な機能は、メッセージの方向、キュー、ルーティング (ポイントツーポイントおよびパブリッシュ/サブスクライブを含む)、信頼性、およびセキュリティです。 AMQP プロトコルは、データの一貫性、安定性、信頼性が非常に高く、パフォーマンスとスループットが二次的なシナリオのエンタープライズ システムで使用されます。 RocketMQ は、Java で開発された Alibaba のオープンソース メッセージ ミドルウェアです。高スループット、高可用性という特徴があり、大規模な分散システム アプリケーションに適しています。 RocketMQの設計コンセプトはKafkaから派生したものですが、Kafkaのコピーではありません。メッセージの信頼性の高い伝送とトランザクション性を最適化します。現在、Alibabaグループでは、トランザクション、リチャージ、ストリームコンピューティング、メッセージプッシュ、ログストリーミング処理、binglog配信などのシナリオで広く使用されています。上記のサービスの利点の比較に基づいて、第 3 章では最も主流の ActiveMQ メッセージ ミドルウェアを使用してデータ転送を処理し、第 6 章では分散 Kafka を使用してデータ転送を実装します。 03 拡張性に優れた大規模ストレージサービス 高いスケーラビリティは、ビッグデータ処理の中核要件の 1 つです。実際の業務では、ユーザー数が 100 万人未満で、データ量が TB レベル以内の場合、MySQL データベースの使用を選択することがよくあります。柔軟性があり、成熟したオープンソースの MySQL データベースは、スタートアップにとって最適な選択肢です。システムの柔軟性と拡張性を高めるために垂直テーブルを使用すること、頻繁に使用されるデータを 1 つのデータ テーブルに配置すること、フィールドを柔軟に変更できるように辞書テーブル モデルを実装すること、内容が頻繁に変更されるデータ オブジェクトには可能な限り JSON 形式を使用することを検討します。有名な OpenMRS システムは、MySQL データベースにカスタム テーブルを実装し、医師がテーブルを柔軟にカスタマイズして独自の臨床試験データを収集できるようにし、ユーザーが自分の食事情報を毎日記録できるようにします。このような設計により、アプリケーション シナリオの普遍性を実現できます。私たちは、OpenMRS のコアアイデアを活用して、MySQL に基づく小規模 IoT ビッグデータ モデルを構築します。適用シナリオは、患者が複数の病院を訪れ、身体検査を受け、さまざまな生理学的指標を記録するというものです。アプリケーションシナリオに基づいてデータモデルを構築します。患者テーブルは患者テーブルとして、病院テーブルは場所テーブルとして、身体検査は遭遇テーブルとして、測定は観察テーブルとして、身体検査タイプの説明は概念テーブルとして構築されます。 5 つのテーブルのマルチテーブル関連付けは、ユニバーサルでスケーラブルなデータ モデルを実装するために使用されます。これについては、第 3 章で詳しく説明します。 もう一つの高度にスケーラブルなインターフェース実装は、Restful アーキテクチャです。 Restful インターフェースは、安全なオープン プラットフォームの主流のインターフェース スタイルです。一般的なアプリケーション システムでは、セッションを使用してログインしたユーザー情報を保存および検証しますが、ビッグ データ プラットフォームのオープン インターフェース サービスのリソース要求では、トークンを使用してログインしたユーザー情報を検証します。セッションは主にセッション情報を維持するために使用されます。ユーザー セッションの有効性を維持するために Cookie がクライアントに保存されますが、トークンはログインしたユーザーの ID 認証にのみ使用されます。したがって、モバイル端末でトークンを使用する方が、セッションを使用するよりも簡単で安全です。 Restful アーキテクチャは、統一インターフェースの原則に従います。統一インターフェースには、事前定義された操作の限定されたセットが含まれます。リソースに関係なく、同じインターフェースを使用してリソースにアクセスします。インターフェースは、事前に定義された主流の標準 Get/Put/Delete/Post 操作などを使用する必要があります。これについては第3章で詳しく説明します。 04 高い同時実行性、大規模なストレージサービス MongoDB は、垂直産業アプリケーションに適したオープンソース データベースであり、高同時実行ストレージとクエリに最適なデータベースです。 MongoDB はエンタープライズ ビジネスのスケーラビリティを高めます。MongoDB を使用して新しいアプリケーションを作成することで、チームは開発効率を向上させることができます。 リレーショナル モデルとドキュメント モデルの違いを詳しく分析してみましょう。リレーショナル モデルは、データ オブジェクトを対応するテーブルに保存し、使用時に必要に応じて取得します。たとえば、身体検査データモデルの設計では、ユーザー管理情報にはユーザーの名前、住所、連絡先情報などが含まれます。 3 番目のパラダイムでは、連絡先情報を別のテーブルに保存し、ユーザー情報を表示するときに関連付けを通じて必要な情報を取得します。ただし、MongoDB のドキュメント モデルでは、ストレージ ユニットはドキュメントであり、配列とネストされたドキュメントをサポートできます。このドキュメントには、連絡先情報を含む、ユーザーに関連するすべての個人情報をカバーできます。リレーショナル データベースの連想機能はまさに開発のボトルネックであり、特にユーザー データが PB レベルに達すると、パフォーマンスと効率が急激に低下します。 MongoDB を使用して、効率的なドキュメント データ ストレージ モデルを設計します。まず、埋め込みを検討し、同じタイプのデータを埋め込みドキュメントに配置します。埋め込まれたドキュメントとオブジェクトは、1 対 1 のマッピング関係を持つことができます。たとえば、マップは埋め込まれたドキュメントを保存できます。複数のテーブルが関連付けられている場合は、メイン テーブルに ID 値を保存して別のテーブルの ID 値を参照し、データを 2 つのコレクションに保存することで複数テーブルの関連付けを実装できます。現在、MongoDB 4.0 以降では、マルチドキュメント トランザクション処理がサポートされています。 私たちは、AngularJS フレームワークを使用して、高並行呼び出しシステムを設計します。データ呼び出しといえば、JQuery フレームワークが思い浮かびます。JQuery フレームワークの設計思想は、静的ページに基づいて DOM 要素操作を実行することです。データ呼び出し用の最も成熟した主流フレームワークの 1 つは AngularJS フレームワークであり、これは CRUD ベースの Web アプリケーション システムに特に適しています。 Web 開発者の経験要件を簡素化すると同時に、Web 自体をより強力にします。 AngularJS は DOM 要素の操作を Directive で実装しており、一般的に DOM 操作コードを直接記述することはほとんどありません。モデルを監視している限り、モデルが変更されると View も変更されます。 AngularJS フレームワークでは、UI は HTML 宣言型の方法で構築する必要があることを強調しており、データとロジックはフレームワークによって提供されるメカニズムによって自動的に一致およびバインドされます。 AngularJS には設計上の多くの利点があり、その中核となるのは、データ推論、依存性注入、自動双方向データバインディング、セマンティック タグなどです。依存性注入の考え方は、フロントエンドとバックエンドの分離やプロジェクト構造の合理的なモジュール編成を含む階層的な分離を実現し、開発者がそれぞれの特定のロジック自体にさらに集中できるようにすることで、開発をスピードアップし、システム品質を向上させます。その本質は双方向バインディングであり、インターフェースの操作をリアルタイムでデータに反映し、データの変更をインターフェースにリアルタイムで表示できることを意味します。データモデル Model とビュー View は両方ともメモリマッピング $Scope にバインドされます。 以下は私が設計したAngularJSプロジェクトフレームワークです。これはあらゆる業務システムに適用でき、第4章の身体検査レポートのビジュアル表示で詳しく説明されています。 MVC の 3 層フレームワークを構築するには、まず単一ページのビュー レイヤー Main.html を作成し、次にモデル レイヤー Service.js を作成し、最後にコントロール レイヤー App.js を作成します。App.js には複数のモジュールの JS ファイルと Html ファイルが含まれており、完全な AngularJS MVC フレームワークが構築されます。 05 信頼性の高い大容量ストレージサービス 信頼性の高い大容量ストレージは、ビッグデータ処理の中核要件の 1 つです。実際の業務では、異なる時間粒度を持つマルチモーダルな業界データの統一された効率的な大規模なストレージを実現し、簡単に拡張可能なオフラインコンピューティングとバッチ処理アーキテクチャを提供することが必要になることが多く、たとえば、Hadoop や Spark などのビッグデータストレージとコンピューティングソリューションを導入する必要があります。高信頼性の大量データ ストレージの全体的な設計には、主流の Hadoop アーキテクチャを組み込む必要があります。Hadoop クラスターは、ユーザーが簡単に構築して使用できる分散コンピューティング プラットフォームです。ユーザーは、Hadoop 上で大量のデータを処理するアプリケーションを開発して実行できます。次のような利点があります。 高い信頼性。 Hadoop の列にデータを保存および処理する機能は信頼できます。 Hadoop はノード間でデータを動的に移動でき、各ノードの動的なバランスを確保できるため、処理速度が非常に速くなります。 高いスケーラビリティ。 Hadoop は、利用可能な列クラスター間でデータを分散し、コンピューティング タスクを完了します。列クラスターは、数千のノードに簡単に拡張できます。 高いフォールトトレランス。 Hadoop はデータの複数のコピーを自動的に保存し、失敗したタスクを自動的に再割り当てできます。 主流の HBase アーキテクチャは、大規模データ ストレージの柔軟な設計に組み込む必要があります。構造化ストレージに適した、信頼性が高く、高性能で、列指向のスケーラブルな分散ストレージシステムです。最下層に Hadoop の HDFS を採用し、HBase 技術を使用して安価な PCServer 上に大規模な構造化ストレージ クラスターを構築できます。そのため、HBase はビッグデータ ストレージ ソリューションで広く使用されています。アプリケーション シナリオの観点から見ると、HBase はルーズ データを保存するため、アプリケーション内のデータ テーブルの各行の構造が異なる場合は、HBase を使用するのが最適です。HBase の列は動的に追加でき、列が空の場合はデータは保存されないため、フィールドを頻繁に追加する必要があり、ほとんどのフィールドが NULL 値である場合は、HBase を検討できます。 HBase は Rowkey に基づいて効率的なクエリを提供できるため、すべてのデータに同じ主キー Rowkey が設定されます。具体的な実装については第 6 章を参照してください。 06 リアルタイムコンピューティングサービス リアルタイム コンピューティングの全体的な設計では、Spark エコシステムのテクノロジ フレームワークを考慮する必要があります。 Spark は、分散データセットをローカル コレクション オブジェクトと同じくらい簡単に操作できるオブジェクト指向の機能的プログラミング言語である Scala で実装されています (Scala は Actor と呼ばれる並列モデルを提供します)。 Spark には、実行速度が速く、使いやすさと汎用性に優れているという利点があります。 Spark は MapReduce の考え方に基づいて開発されており、分散並列コンピューティングの利点を継承し、MapReduce の明らかな欠陥を改善しています。具体的な利点は次のように分析されます。 Spark は中間データをメモリに保存し、反復操作をより効率的にします。 MapReduce の計算結果はディスクに書き込んで保存する必要があり、全体的な速度に必然的に影響します。Spark は DAG グラフの分散並列コンピューティング プログラミング フレームワークをサポートしており、反復処理中のデータの書き込む回数を減らし、処理効率を向上させます。 Spark は耐障害性が非常に高いです。 Spark は、一連のノードに分散された読み取り専用オブジェクトのコレクションである Resilient Distributed Dataset (RDD) の抽象化を導入します。これらのコレクションは回復力があり、データセットの一部が失われた場合でも、その「系統」に基づいて再構築できます。さらに、RDD 計算中に CheckPoint を通じてフォールト トレランスを実現できます。 Spark は汎用です。 Spark は、Hadoop が提供する Map と Reduce の 2 つの操作に基づいて、多くの種類のデータ セット操作を提供します。これらは、変換とアクションの 2 つのカテゴリに大まかに分類できます。変換には、Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、oin、Cogroup、MapValues、Sort、PartionBy、Count が含まれます。アクションには、Collect、Reduce、Lookup、Save が含まれます。 強力な SparkMLlib 機械学習ライブラリは、機械学習のエンジニアリング実践を簡素化し、より大規模な拡張を容易にするように設計されています。 MLlib は、分類、回帰、クラスタリング、協調フィルタリング、次元削減などの一般的な学習アルゴリズムとツール、および低レベルの最適化プリミティブと高レベルのパイプライン API で構成されています。具体的な実装については第 6 章を参照してください。 07 機械学習に基づくインテリジェント分析サービス インテリジェント分析サービスの全体的な設計では、Spark MLlib ツールを考慮する必要があります。現在主流のモデリング言語には、R、Weka、Mahout、Spark などがあります。それらの起源と応用シナリオを分析してみましょう。 R は、多数の機械学習アルゴリズムをカプセル化した数学言語ですが、スタンドアロン言語であり、大量のデータを適切に処理することはできません。 Weka は R 言語に似ています。Weka には、フォーマットされたデータ変換に関連するさまざまなタスクを処理できる、最適化された多数の機械学習およびデータ分析アルゴリズムが含まれています。唯一の欠点は、大量のメモリを必要とする大規模なデータの処理でボトルネックが発生することです。 Mahout は、大量のデータを同時に処理する機能を持つ Hadoop の機械学習ライブラリです。主なプログラミング モデルは MapReduce です。しかし、MapReduce ベースの機械学習では、反復処理の繰り返し中に大量のディスク IO が発生します。つまり、この計算の結果を次の反復の入力として使用する必要があります。このプロセスでは、中間結果をディスクに保存し、次の計算中に再度読み取るしかありません。これは、反復が頻繁に行われるアルゴリズムにとって、明らかに致命的なパフォーマンスのボトルネックとなります。そのため、計算効率は非常に低くなります。現在、Mahout は MapReduce アルゴリズムの更新を停止し、Spark に移行しました。さらに、Mahout と Spark ML は互いに競合するものではありません。Mahout は MLlib の補足です。 MLlib は、関連するテストやデータ ジェネレーターを含む、一般的に使用される機械学習アルゴリズムの Spark 実装ライブラリです。 Spark は、多くの機械学習アルゴリズムの特性に沿った反復ジョブをサポートするように設計されています。ロジスティック回帰の場合、Spark は Hadoop よりも 100 倍以上高速です。 Spark MLlib はインメモリ コンピューティングに基づいており、反復コンピューティングに適しています。さらに、Spark は大量のデータに基づく機械学習ライブラリを提供します。これは、一般的に使用される機械学習アルゴリズムの分散実装を提供します。エンジニアは、Spark の基礎知識と、機械学習アルゴリズムの原理とメソッド内の関連パラメータの意味を理解するだけで済みます。対応する API を呼び出すだけで、大量のデータに基づく機械学習プロセスを簡単に実装できます。具体的な実装については第 8 章を参照してください。 08 カスタム移行サービス データ移行機能の全体的な設計では、Sqoop フレームワークを考慮する必要があります。 Sqoop は、Hadoop とリレーショナル データベース間でデータを転送するための主流のツールです。リレーショナル データベース (MySQL、Oracle、Postgres など) から Hadoop の HDFS にデータをインポートしたり、HDFS データをリレーショナル データベースにインポートしたりできます。 ETL ツールとして、メタデータ モデルを使用してデータ型を決定し、データ ソースから Hadoop にデータが転送されるときに型安全なデータ処理を保証します。 Sqoop フレームワークは、大規模なデータ バッチ転送用に設計でき、データ セットを分割して各ブロックを処理する Hadoop タスクを作成できます。具体的な実装については第 9 章を参照してください。 [この記事は、51CTO コラムニスト「Mobile Labs」によるオリジナル記事です。転載については、元の著者にお問い合わせください。] この著者の他の記事を読むにはここをクリックしてください |
<<: 人工知能、自動化、そして仕事の未来: 答えが必要な 10 の質問!
>>: AI専門家バターフィールド氏:33カ国が統一AI標準を採用
最近、中国サイバースペース管理局、工業情報化部、公安部、国家市場監督管理総局は共同で「インターネット...
[51CTO.com クイック翻訳]画像セグメンテーションは、画像内のオブジェクトの境界と領域を決定...
[[339878]]この記事はWeChatパブリックアカウント「Backend Technology...
世界中の政府は、AI技術革命に直面しても既存の法律、規制、枠組みが引き続き有効であることを保証し、新...
翻訳者 |李睿レビュー | Chonglou OpenAI が立ち上げた GPT は現在、世界で最も...
現代社会では、情報の伝達やコミュニケーションはもはや単一のモードに限定されなくなりました。私たちは、...
コードの移行と言語の変換は困難で費用のかかる作業です。オーストラリア連邦銀行は、プラットフォームを ...
PAI-ChatLearn は、Alibaba Cloud Machine Learning Pl...
進化し続けるテクノロジーの世界において、OM5 光ファイバー ケーブルは革新的なソリューションとして...