この記事はWeChatの公開アカウント「Coding Disney」から転載したもので、著者はChen Yiです。記事の転載についてはCoding Disney公式アカウントまでご連絡ください。 ビッグデータの時代では、高い同時実行性、高い可用性、マイクロサービス システム設計の理解を備えた人材が強く求められています。バックエンド開発に従事したい場合、JD の説明で最も一般的な要件は、いわゆる「高同時実行」システム開発の経験です。しかし、市場には「高同時実行性」と「高可用性」を直接ターゲットにしたチュートリアルがないことがわかりました。見つかる情報は、多くの場合、ほんの数語であったり、混乱を招く理論を説明しているものであったりします。しかし、技術の習得は実践から生まれなければなりません。長い間探していたのですが、マイクロサービスをベースにした高並列システムの開発を実践できるインストラクターが非常に少ないことがわかりました。したがって、私は自分の学習と実践経験に基づいて、特に分散システム設計の理論と技術を理解し習得するための具体的な実践を重視しながら、この技術を皆さんと共有したいと考えています。 いわゆる「マイクロサービス」には魔法のようなものは何もありません。もともと集約していたモジュールを、サーバープログラムの存在に基づいて複数の独立した形式に分解するだけです。開発したバックエンドシステムが、ログ、ストレージ、ビジネスロジック、アルゴリズムロジックなどのモジュールに分割されているとします。以前は、これらのモジュールが 1 つに集約され、複雑で大規模なアプリケーションが形成されていました。 このアプローチには多くの問題があります。 1 つ目は、モジュールをあまりに多く組み合わせると、モジュール間にさまざまな論理的な結合があるためにシステム設計が複雑になりすぎて、時間の経過とともにシステムの開発と保守がますます困難になることです。 2つ目は、システムがますます脆弱になっていることです。モジュールの 1 つがエラーを送信したりクラッシュしたりすると、システム全体が崩壊する可能性があります。 3 つ目は、スケーラビリティが強くなく、ハードウェアの性能向上によってシステムが対応する拡張を実現することが難しいことです。 高い同時実行性と高可用性を実現するための基本的な考え方は、モジュールを分解して独立したサーバー プログラムにすることです。モジュールはメッセージを送信することで相互に連携します。 このモデルの利点は次のとおりです。1. モジュールは分離されており、1 つのモジュールに問題が発生してもシステム全体にほとんど影響はありません。 2. スケーラビリティと高可用性。異なるサーバーにモジュールを展開できます。トラフィックが増加した場合は、サーバーの数を増やすだけで、システムの応答性を同様に拡張できます。 3. 堅牢性が向上します。複数のモジュールをバックアップできるため、1 つのモジュールに問題が発生した場合、要求を他の同様のモジュールにリダイレクトすることができ、システムの信頼性が大幅に向上します。 もちろん、いかなる利益にもそれに応じた代償が伴います。分散システムの設計と開発には、元の集約システムよりもはるかに多くの困難が伴います。たとえば、負荷分散、サービス検出、モジュールネゴシエーション、コンセンサスなどです。分散アルゴリズムはこれらの問題の解決を重視しますが、理論は常に抽象的で理解するのが困難です。高可用性と高同時実行性を備えたシステムを実装できない場合、いくら理論を読んでも混乱してしまいます。したがって、実践を通じて理論を理解し、習得する必要があります。まず、最も単純なサービスであるログ サービスから始めます。実装にはGOを使用します。 まず、go_distributed_system という名前のルート ディレクトリを作成します。以降のすべてのサービス モジュールはこのディレクトリに実装されます。次にサブディレクトリ proglog を作成します。入力後、サブディレクトリ internal/server/ を作成します。ここでは、ログ サービスの論理モジュールを実装します。まず、internal/server の下で初期化コマンドを実行します。
ここで開発されたモジュールは他のモジュールから参照されるため、mod ファイルを作成する必要があります。まず、ログ システムに必要な基礎データ構造を完成させ、log.go ファイルを作成する必要があります。対応するコードは次のとおりです。
ログ サービスは、ログの読み取りおよび書き込み要求を http サーバー プログラムの形式で受信するため、複数の読み取りまたは書き込み要求が同時に実行されるため、レコード配列に対して排他操作を実行する必要があります。したがって、レコード配列の各読み取りの前に、ミューテックス ロックを使用してロックを取得します。これにより、複数の読み取りおよび書き込み要求を同時に受信したときに、サービスがデータの一貫性を損なうことを防ぐことができます。 すべてのログの読み取りおよび書き込み要求は http POST および GET の形式で開始され、データは json にカプセル化されるため、以下の http サーバー オブジェクトを作成し、新しいファイル http.go を作成し、次のコードを完成させます。
上記のコードは、「分散」と「マイクロサービス」の特徴を示しています。対応する機能コードは別のサーバーの形で実行され、ネットワークを介してサービス要求を受信します。これは「分散型」に相当します。それぞれの独立したモジュールは、「マイクロサービス」に対応する特定のタスクのみを完了します。この方法は、異なるマシン上で同時に実行できるため、「スケーラビリティ」を実現します。 同時に、サービスは http サーバーの形式で存在するため、サービス要求と戻りも Http 形式である必要があり、データは Json でカプセル化されます。同時に実装されるロジックは非常にシンプルです。ログ書き込み要求がある場合、要求をレコード構造に解析し、キューの末尾に追加します。ログの読み取り要求があった場合、クライアントから送信された読み取りオフセットを取得し、対応するレコードを取り出して JSON 形式にカプセル化し、顧客に返します。 サーバーコードが完成したら、サーバーを実行する必要があります。モジュール化を実現するために、サーバーの起動を別の場所に配置しました。 proglog ルート ディレクトリに cmd/server を作成し、そこに main.go を追加します。
同時に、internal/server の下のモジュールを参照するには、go mod init cmd/server を使用して cmd/server の下で初期化し、go.mod ファイルに次の行を追加する必要があります。
次に、go mod tidy コマンドを実行して、ローカル モジュールが指定されたディレクトリ変換に従ってモジュールを参照するようにします。最後に、go run main.go を使用してログ サービスを開始します。ここで、サーバーの可用性をテストする必要があります。また、ディレクトリ内にserver_test.goを作成し、テストコードを記述します。基本的なロジックは、サーバーにログ書き込み要求を送信し、次に読み取り要求を送信して、読み取られたデータが書き込んだデータと一致しているかどうかを比較することです。コードは次のとおりです。
上記のコードが完成したら、go test を使用して実行します。結果は以下のようになります。 結果から、テストが合格したことがわかります。つまり、ログ サービスに書き込み要求を送信しても、読み取り要求を送信しても、得られる結果は期待どおりになります。要約すると、このセクションでは、JSON ベースの http 書き込み要求と読み取り要求を受信できるシンプルな JSON/HTTP ログ サービスを設計しました。今後はgPRC技術をベースにしたマイクロサービス開発技術についても学習していきます。 コードを取得する https://github.com/wycl16514/golang_distribute_system_log_service.git |
<<: Techo Hubテクノロジーツアー北京駅がオープン、多くの専門家が「デジタル金融イノベーションと実践」の饗宴に参加
>>: 企業向けマルチクラウドコンピューティングのメリットとデメリット
2018年マイクロソフトテクノロジー&エコシステムカンファレンス(マイクロソフトテックサミット201...
ビッグデータは良いものであり、またビッグデータは悪いものです。メイクは良いことであり、メイクは悪いこ...
背景情報: Ce氏——Ceenの「世界名靴淘宝」プロモーションコンテストの特別審査員昇格コンテストの...
世界的に有名なクラウド サーバー (VPS) プロバイダーである Vultr は、2 月 26 日に...
1. ウェブサイトのキーワードをホームページでランク付けしたいのですが、どうすればよいですか?チーム...
クラウド コンピューティングは、世界的な業界大手に多大なメリットをもたらす一方で、このテクノロジーは...
コミュニティ ウェブサイトは、その名前が示すように、インターネット上の小さなコミュニティです。例えば...
これは、2つのインターネット金融大手によるカーブでの競争ゲームです。中央銀行はタイミングよく介入し、...
hmbcloudはアメリカの企業(中国系アメリカ人が経営)で、cn2 giaとIPLCのハイエンドラ...
サイトの最適化プロセスにおけるキーワードの役割については、誰もがよくご存知だと思います。しかし、SE...
契約交渉を成功させる鍵は準備であることは周知の事実ですが、SaaS の更新には独自の課題が伴います。...
10月14日、テンセントクラウド初の5Gエッジコンピューティングセンターが正式に一般公開されました。...
yourserver はラトビアの VPS 販売業者です。設立年は明らかではありません (このサイト...
デジタル変革の加速により、より多くのユーザーが必要なコンピューティング リソースを入手できるようにな...
【Ebrun Power Networkニュース】4月17日、情報筋はEbrun Power Net...