みなさんこんにちは、クン兄さんです。 長い間更新していませんでした。ここ数週間、体調がよくありません。重度の胃炎と頻脈の症状があります。私は何度か病院に行きました。ひどい時は心臓にとても不快感があり、胸が締め付けられて息切れし、死んでしまうような気がしました。時々一晩中よく眠れないこともありました。皆様には健康に気をつけていただくようアドバイスしたいと思います。夜更かしなど、身体を傷めるような愚かなことはしないでください。お体に気をつけて! 新年前後で0から1へのクラウドジャーニーを完了しました。多くの落とし穴に遭遇し、貴重な経験をたくさん積み重ねたので、ここにまとめました。誰もがこれを読んで恩恵を受けると信じています。 まず、今回のクラウド移行の背景についてお話しします。事業開始後、事業はグループから分離されましたが、システムはグループ内で共有されていました。システムの共有は大したことではありませんでしたが、グループは以前とは様変わりし、コアスタッフのほとんどが退職したため、一部のコアシステムが不安定になりました。リバース プロキシ レイヤーがダウンしたにもかかわらず、誰も修復しなかったためにトランザクション全体がゼロになってしまうという重大な事故もありました。そこで、システムとグループを完全に分離することにしました。グループシステムは以前 Tencent Cloud を使用してクラウドに移行されていたため、私たちも Tencent Cloud を使用し、ネットワークの相互運用性を実現し、移行するシステムのイメージの一部を共有できるようにしました。また、Tencent Cloud のツールを使用してデータの増分/完全移行を実行し、移行コストを削減することもできます。 クラウドサービスとは何ですか?現在、クラウド コンピューティングは業界で認知されたトレンドです。Alibaba Cloud や Tencent Cloud などのクラウド ベンダーが、基本的に大手メーカーのシステムに必要なすべての側面をカバーする幅広いツールを提供しているためです。信じられませんか?大手メーカーの基本的なシステムアーキテクチャを見てみましょう。 完全かつ運用可能なシステムには、DNS 解決、CDN サービス、アクセス レイヤー、ミドルウェア、ストレージ レイヤー、APM などを提供する必要があることがわかります。クラウドにはこれらすべてのツールがあり、基本的にワンクリックで展開できます。ここに 2 つの簡単な例を示します。
上記は単なる 2 つの簡単な例です。実際、Tencent Cloud は、MySQL、ES、MQ などのコンポーネントに対してワンクリック生成操作も提供しており、関連する監視およびアラーム メカニズムも備えているため、運用および保守コストが大幅に削減されます。これらのツールを使用する唯一の欠点は次のとおりです。 しかし、次のようなコストを管理する手段もいくつかあります。
データ移行以前のシステムはグループで共有されていたため、独立させる必要があり、独立した構成センター、独立した Redis、独立した MQ、独立したデータベースが必要です...これらすべてを一夜にして達成することはできず、スムーズなデータ移行を実現することが必要であることは明らかです。具体的な操作は以下のとおりです。
java - jar ターゲット/ zkcopy .jar --source サーバー:ポート/パス --target サーバー:ポート/パス Redis の移行: 別の Redis インスタンス (ホストが異なるだけ) を作成し、元の Redis (グループ Redis) が書き込まれた後に AOP を使用して新しい Redis に書き込みます。基本的に、Redis データの移行が完了するまでには約 1 週間かかります。疑似コードは次のとおりです。 翻訳者
Ansible 入門クラウド上には、Redis などのミドルウェアに素早くアクセスしたり、DB やその他のデータを素早く移行したりできるサービスが数多くありますが、これらとは別に、クラウド サービスが基本的に提供できるものは、他に何もする必要がないことを意味するものではありません。次に、この記事の焦点であるプロジェクト展開のアーキテクチャ設計について説明します。たとえば、Java プロジェクトを実行する場合は、まずそれをコンパイルしてパッケージ化 (jar パッケージを生成) する必要があります。パッケージ化して公開した後は、実行中のサービスをすぐに中断することはできません。エレガントなシャットダウン方法でサービスを停止し、新しいパッケージを展開する必要があります。デプロイ後に問題が見つかった場合は、ロールバックする必要があります。これらの手順を手動で実行するのは明らかに非現実的です。最善の方法は、スクリプトに記述して、ワンクリックで展開することです。ただし、サービスには複数のマシンが存在する場合があります。 1 つずつログインして、対応するデプロイメント スクリプトを手動でトリガーする必要がありますか?明らかに、これは非現実的です。より合理的な方法は、まずこれらのデプロイメント手順をすべてスクリプトの形式で記述し、次にバッチデプロイメントをサポートする自動運用および保守ツールを使用してデプロイメントすることです。調査の結果、Ansibleを選択しました。 Ansbile とは何ですか? また、その利点は何ですか? Ansible は、ssh プロトコル接続を使用するだけで、バッチシステム構成、バッチプログラム展開、バッチコマンド実行などの機能を実現できるシンプルな運用保守自動化ツールです。 ansbile には次のような利点があります。
Ansibleは上記のような特徴から急速に普及し、運用・保守に必須のツールとも言えるようになりました。上の写真は Ansible のミニマリストバージョンです。アーキテクチャを少し拡張してみましょう。 実行フローは以下のとおりです。
全て: 上図では、10.100.1.4 と 10.100.1.5 は同じサービス operator_center に属しています。このサービスを公開する場合は、サービス名 operator_center (以下で説明) を指定するだけです。
Ansible には強力な機能を備えたコア モジュールが多数あります。基本的にカスタマイズする必要はありません。たとえば、クラウド移行にはコア モジュールのみを使用しました。一般的なモジュールをいくつか見てみましょう。
一般的なプロジェクトは、展開する前に構築(またはパッケージ化、この 2 つの概念に大きな違いはありません)する必要があることはわかっています。たとえば、Java プロジェクトは Jar ファイルにパッケージ化してからデプロイ (Jar パッケージを実行) する必要があります。フロントエンド プロジェクトも、デプロイする前にパッケージ化する必要があります (たとえば、複数の js ファイルを 1 つにマージして、リクエストを減らし、パフォーマンスを向上させることができます。たとえば、SCSS または less を使用して CSS を記述する場合、これも CSS ファイルにコンパイルしてマージする必要があります)。そこで疑問なのは、パッケージング操作を製造機械で直接実行できるかどうかです。答えは明らかに「ノー」です。主な理由は次の 2 つです。
デプロイメントアーキテクチャ設計要約すると、パッケージング作業を行うには専任のパッケージ担当者が必要です。パッケージャーがパッケージ化された後、対応するパッケージを運用マシンに送信し、デプロイメント スクリプトを実行します。アーキテクチャ モデルは次のとおりです。 このようにして、梱包担当者はすべての重労働を引き受けます。パッケージ化後、Ansible は fetch モジュールを通じてこれらの jar パッケージをローカルにプルし、push モジュールを通じてサービス クラスター内のすべてのマシンに jar パッケージをプッシュしてから、比較的軽量なデプロイメント スクリプトを実行します。 Ansible 関連の概念を多数紹介した後でも、まだ混乱しているかもしれません。次に、Ansible の機能について誰もがより包括的に理解できるように、Ansible を使用して、設計したパッケージ化とデプロイメントの手順を実行する方法を見てみましょう。 サンプルスクリプトを一つずつ紹介しましょう。3つのファイルがあります。 1.production-hosts.yaml ファイル: 上で説明したホスト インベントリ。 #production -ホスト.yaml 2. パッケージ プレイブック: java-build.yaml; # java - .yamlをビルドする 3. プレイブックをデプロイする: java-deploy.yaml; # java - .yamlをデプロイする 上記の 3 つのファイルでは、次のようにパッケージ化とデプロイメントの操作プレイブックをそれぞれ実行するだけです。 ansible - playbook - i production - hosts .yaml java - build .yaml # パッケージャー内のパッケージ Ansible のコア モジュールを使用する限り、パッケージ化とデプロイメントの要件を満たすことができることがわかります。実行プロセスは上記の名前で表示され、デプロイメントプロセスは次のように表示されます。 プロセス展開プロセス全体が非常に明確であることがわかります。 便宜上、上記のスクリプトではパッケージ化と展開のいくつかの手順のみを簡単に紹介しています。実際には、ロールバックなどの操作も考慮する必要があります。本記事の主眼ではないのでここでは紹介しません。 話題から外れた話をしましょうさまざまなクラウドベンダーが提供するツールは、実に広範囲にわたっており、使いやすいものです。ほぼすべての開発者がDevOps(開発と運用・保守)業務を担えるため、将来的に開発業務が置き換えられるのではないかという懸念があります。特に運用とメンテナンスが心配です。以前、運用・保守を担当している友人が、クラウドベンダーのツールはあまりにも使いやすいので、自分の仕事が奪われるのではないかと心配していると言っていました。実際、結局のところ、考えられるすべての運用および保守作業は基本的に 1 回のクリックで実行でき、データベースやミドルウェアなどの領域にも「浸食」されています。かつて、データベース チームのリーダーがクラウド移行に反対し、クラウド移行の多くのデメリットを指摘しましたが、クラウド移行のトレンドは止められず、いつか失業してしまうのではないかと心配していると個人的にも言っていました。 ある読者が次のような質問をしました。 私の答えは、クラウド ベンダーは実際にこのような非常に成熟したソリューションを提供しており、基本的に 1 回のクリックで生成できるため、この読者の魂を探る質問が生まれたということです。 多くの人がこの疑問を抱いていると思います。私の意見としては、クラウド サービス プロバイダーはツールのみを提供しますが、これらのツールを有効活用するには、依然として私たちが制御する必要があるため、次の提案をします。 開発者がより高いレベルに進みたい場合、しっかりとした理論的基礎と実践的な経験を習得する必要があります。それはまるで竜を倒す剣を与えているようなものです。深い内面の強さがなければ、それを使いこなし、うまく使いこなせるでしょうか? この記事はWeChatの公式アカウント「Ma Hai」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合は、Mahai公式アカウントまでご連絡ください。 |
<<: クラウド コンピューティングはヘルスケアにおいてどのような役割を果たすのでしょうか?
11月はインターネットが活況を呈している。アップルは24日未明に新製品を発表し、マイクロソフトは26...
著者はTo BでByteDanceの具体的な行動、レイアウトロジック、業界への影響について説明してい...
タイトルを見て、「Ahrefs? バックリンクやキーワードランキングをチェックするだけのツールじゃな...
かつて、非常に優れたショッピングガイドのウェブサイトが目の前にありましたが、私はそれを大切にしません...
中国の電子商取引のリーダーとして、アリババは自社の発展の機会を正確に把握できるだけでなく、利用可能な...
O2O は、正式名称を Online to Offline といい、オンラインからオフラインへのイン...
馬華騰新浪科技は9月11日午前、2012年中国インターネット大会が北京で開催されたと報じた。テンセン...
SEO 3.0 時代では、すべてのウェブマスターがユーザー エクスペリエンスの真の意味を理解している...
1.顧客が自発的にあなたのところに来るようにします。実際、企業にとって最大の難しさは、顧客をいかに見...
インターネット業界の発展により、基本的にあらゆる分野に独自の競合相手が存在します。小さな会社として始...
純粋なオンラインマーケティング(またはSEO)の観点から見ると、「円周率は本当に3.14ですか?教科...
半年前に、「中国の SEO 担当者にはさまざまなレベルがありますが、あなたはどのカテゴリに属しますか...
2013 年の SEO 市場において、最も有望な「黄金の指」は Taobao Affiliate で...
先週、Github で最も人気のあるプロジェクトは、最近バージョン 2.0 に更新された自然言語処理...
678cdn は主にアジアで CDN サービスを運営しています。デフォルトで高速ノードと大規模な帯域...