この記事は、大規模な分散 Web サイト アーキテクチャの学習に関する技術的な概要です。高性能、高可用性、スケーラビリティ、拡張性に優れた分散 Web サイトの構築について概要を説明し、アーキテクチャのリファレンスを提供します。 記事の一部は読書メモであり、一部は個人的な経験の要約であり、大規模な分散型 Web サイト アーキテクチャの参考価値が高いです。 大規模分散型ウェブサイトアーキテクチャ技術 大規模ウェブサイトの特徴
大規模ウェブサイトのアーキテクチャ目標 大規模 Web サイトのアーキテクチャ上の目標は次のとおりです。
大規模ウェブサイトアーキテクチャモデル 上の図は、大規模な Web サイトのアーキテクチャ モデルを示しています。
高性能アーキテクチャ 高性能アーキテクチャはユーザー中心であり、高速な Web アクセス エクスペリエンスを提供します。主なパラメータには、応答時間の短縮、同時処理能力の向上、スループットの向上、パフォーマンス パラメータの安定性などがあります。 フロントエンド最適化、ブラウザ最適化、アプリケーション層最適化、コード層最適化、ストレージ層最適化に分けられます。
高可用性アーキテクチャ 大規模な Web サイトは、いつでもアクセス可能であり、外部サービスを正常に提供できる必要があります。大規模 Web サイトの複雑さ、分散性、安価なサーバー、オープンソース データベース、オペレーティング システムなどの特性により、高可用性を確保することは非常に困難であり、Web サイトの障害は避けられません。 可用性をどのように向上させるかは、早急に取り組む必要がある問題です。まず、アーキテクチャレベルから検討し、計画時に可用性を考慮する必要があります。 業界では一般的に、可用性の指標を表すために複数の 9 が使用されます。たとえば、4 つの 9 (99.99) は、1 年間に許容される非可用性時間が 53 分であることを意味します。 異なるレイヤーでは異なる戦略が使用されます。一般的に、高可用性の問題を解決するには、冗長バックアップとフェイルオーバーが使用されます。
スケーラブルなアーキテクチャ スケーラビリティとは、元のアーキテクチャ設計を変更せずにハードウェア (サーバー) を追加/削減することでシステムの処理能力を増減することを指します。
スケーラブルなアーキテクチャ 機能モジュールは簡単に追加/削除できるため、コード/モジュール レベルで優れたスケーラビリティが実現します。
セキュリティアーキテクチャ 既知の問題に対する効果的な解決策を用意し、未知または潜在的な問題に対する発見および防御メカニズムを確立します。セキュリティの問題に関しては、まずセキュリティ意識を高め、ポリシーレベルと組織レベルで保護を提供するための効果的なセキュリティメカニズムを確立する必要があります。 たとえば、サーバーのパスワードは漏洩してはならず、パスワードは毎月更新する必要があり、3 回以内に同じパスワードを繰り返すことはできません。毎週のセキュリティスキャンなど 制度化された形での安全保障体制の構築を強化する。同時に、安全に関するあらゆる側面に注意を払う必要があります。 インフラストラクチャ セキュリティ、アプリケーション システム セキュリティ、データ機密性セキュリティなど、セキュリティの問題は無視できません。
ウイルスやバックドアを防止します。ファイアウォール ポリシーを設定し、DDOS 防御システムを確立し、攻撃検出システムを使用し、サブネットの分離を実行します。
クロスサイト スクリプティング攻撃 (XSS)、インジェクション攻撃、クロスサイト リクエスト フォージェリ (CSRF)、エラー メッセージ、HTML コメント、ファイルのアップロード、パス トラバーサルなどを防ぎます。 また、Web アプリケーション ファイアウォール (ModSecurity など) を使用して、セキュリティ脆弱性スキャンやその他の対策を実行し、アプリケーション レベルのセキュリティを強化することもできます。
一般的に使用される暗号化および復号化アルゴリズム (一方向ハッシュ暗号化 [MD5、SHA]、対称暗号化 [DES、3DES、RC])、非対称暗号化 [RSA] など。 敏捷性 ウェブサイトのアーキテクチャ設計と運用・保守管理は、変化に適応し、高いスケーラビリティと拡張性を提供する必要があります。急速なビジネス発展、高トラフィックアクセスの急増などの要件に便利に対応します。 上記で紹介したアーキテクチャ要素に加えて、アジャイル管理とアジャイル開発の考え方も導入する必要があります。ビジネス、製品、テクノロジー、運用と保守を統合し、ニーズに適応して迅速に対応します。 大規模アーキテクチャの例 上記では 7 層の論理アーキテクチャを採用しています。
(実際の使用では、オフラインデータとリアルタイムデータは、ビジネス要件に応じて分類および処理され、アプリケーション層またはサービス層で使用するために異なるデータベースに保存されます) 大規模電子商取引サイトのシステムアーキテクチャの進化 成熟した大規模ウェブサイト(Taobao、Tmall、Tencent など)のシステム アーキテクチャは、最初から完全な高性能、高可用性、高スケーラビリティなどの機能を考慮して設計されたわけではありません。利用者数の増加や業務機能の拡大とともに、徐々に進化・改善されていきました。 このプロセスの中で、開発モデル、技術アーキテクチャ、設計アイデアは大きく変化しました。技術スタッフも、数人から部門、さらには製品ラインにまで成長しました。 したがって、成熟したシステム アーキテクチャは、ビジネスの拡大に合わせて徐々に改善されるものであり、一夜にして達成できるものではありません。ビジネス特性の異なるシステムには、それぞれ独自の焦点が置かれます。 たとえば、Taobao では膨大な量の商品情報の検索、注文、支払いを解決する必要があります。テンセントは数億人のユーザーに対するリアルタイムのメッセージ伝送の問題を解決する必要があります。 Baidu は膨大な量の検索リクエストを処理する必要があります。 それぞれに独自のビジネス特性と異なるシステム アーキテクチャがあります。それにもかかわらず、これらのさまざまな Web サイトのコンテキスト間で共通のテクノロジーを見つけることもできます。 これらの技術と方法は、大規模な Web サイト システムのアーキテクチャで広く使用されています。以下では、大規模Webサイトのシステムの進化の過程を紹介しながら、これらの技術や手法について紹介します。 初期のウェブサイトアーキテクチャ 元のアーキテクチャでは、次に示すように、アプリケーション、データベース、およびファイルはすべて 1 つのサーバーに展開されていました。 アプリケーション、データ、ファイルの分離 ビジネスが拡大するにつれて、1 台のサーバーではパフォーマンス要件を満たせなくなるため、アプリケーション、データベース、ファイルを別々のサーバーに展開し、サーバーの目的に応じて異なるハードウェアを構成することで、最高のパフォーマンス効果を実現します。 キャッシュでウェブサイトのパフォーマンスを向上させる ハードウェアを通じてパフォーマンスを最適化すると同時に、ソフトウェアを通じてパフォーマンスも最適化します。ほとんどの Web サイト システムでは、システム パフォーマンスを向上させるためにキャッシュ テクノロジが使用されています。 キャッシュが使用される主な理由は、ホット データの存在です。ほとんどの Web サイト訪問は 28 の原則に従います (つまり、アクセス要求の 80% は最終的にデータの 20% に該当します)。そのため、ホット データをキャッシュしてこのデータへのアクセス パスを減らし、ユーザー エクスペリエンスを向上させることができます。 キャッシュを実装する一般的な方法は、ローカル キャッシュと分散キャッシュです。もちろんCDNやリバースプロキシなどもございます。 ローカル キャッシュは、その名前が示すように、アプリケーション サーバー上でデータをローカルにキャッシュします。メモリまたはファイルに保存できます。 OSCache はよく使用されるローカル キャッシュ コンポーネントです。 ローカルキャッシュの特徴は高速であることです。しかし、ローカルスペースが限られているため、キャッシュされるデータの量も限られています。 分散キャッシュの特徴は、膨大な量のデータをキャッシュでき、拡張が非常に簡単なことです。ポータルサイトでよく使われます。理論上、その速度はローカル キャッシュほど速くはありません。一般的に使用される分散キャッシュは Memcached と Redis です。 クラスタリングを使用したアプリケーション サーバーのパフォーマンスの向上 ウェブサイトへの入り口として、アプリケーション サーバーは大量のリクエストを処理します。多くの場合、アプリケーション サーバー クラスターを通じてリクエストの数を共有します。 負荷分散サーバーは、アプリケーション サーバーの前に配置され、ユーザー要求をスケジュールし、分散戦略に従って複数のアプリケーション サーバー ノードに要求を分散します。 一般的に使用される負荷分散技術のハードウェアには、比較的高価な F5 が含まれ、ソフトウェアには LVS、Nginx、HAProxy が含まれます。 LVS は 4 層の負荷分散であり、ターゲット アドレスとポートに基づいて内部サーバーを選択します。 Nginx と HAProxy は 7 層の負荷分散であり、メッセージの内容に基づいて内部サーバーを選択できます。 したがって、LVS 配布パスは Nginx や HAProxy よりも優れており、パフォーマンスも高くなります。一方、Nginx と HAProxy は、動的および静的な分離 (リクエスト メッセージの特性に基づいて静的リソース サーバーまたはアプリケーション サーバーを選択する) に使用されるなど、より構成可能です。 データベースの読み取り/書き込み分離とデータベースおよびテーブルのシャーディング ユーザー数が増えると、データベースが最大のボトルネックになります。データベースのパフォーマンスを向上させる一般的な方法は、読み取りと書き込みの分離を実行し、データベースとテーブルを分割することです。読み取り書き込み分離は、その名の通り、データベースを読み取りデータベースと書き込みデータベースに分割し、マスタースレーブ機能を通じてデータの同期を実現します。 データベースとテーブルのシャーディングは、水平シャーディングと垂直シャーディングに分けられます。水平シャーディングは、ユーザー テーブルなどのデータベース内の特に大きなテーブルを分割するプロセスです。 垂直セグメンテーションは、ユーザービジネスと製品ビジネスに関連するテーブルを異なるデータベースに配置するなど、異なるビジネスに基づいています。 CDNとリバースプロキシを使用してウェブサイトのパフォーマンスを向上させる サーバーがすべて成都のコンピューター室に配備されている場合、四川省のユーザーのアクセスは速くなりますが、北京のユーザーのアクセスは遅くなります。 これは、四川省と北京市がそれぞれ中国電信と中国聯通の異なる開発地域に属しているためです。北京のユーザーは、成都のサーバーにアクセスするために相互接続ルーターを経由するより長い経路を経由する必要があり、戻り経路も同じであるため、データの転送時間は比較的長くなります。 この場合、問題を解決するために CDN がよく使用されます。 CDN はデータ コンテンツをオペレーターのコンピューター ルームにキャッシュします。ユーザーがデータにアクセスすると、まず最も近いオペレータからデータを取得するため、ネットワーク アクセス パスが大幅に短縮されます。よりプロフェッショナルな CDN オペレーターとしては、ChinaCache や Wangsu などがあります。 リバース プロキシは、Web サイトのコンピューター ルームに展開されます。ユーザー リクエストが到着すると、まずリバース プロキシ サーバーにアクセスし、キャッシュされたデータをユーザーに返します。 キャッシュされたデータがない場合、アプリケーション サーバーは引き続きデータを取得するためにアクセスされるため、データ取得のコストが削減されます。リバースプロキシには Squid や Nginx などがあります。 分散ファイルシステムの使用 ユーザー数が日々増加し、業務量が増大し、生成されるファイル数も増えるにつれ、単一のファイルサーバーでは需要を満たすことができなくなります。このとき、分散ファイルシステムのサポートが必要になります。一般的に使用される分散ファイルシステムには、GFS、HDFS、TFS などがあります。 NoSQLと検索エンジンの使用 膨大なデータのクエリと分析には、NoSQL データベースと検索エンジンを使用して、より優れたパフォーマンスを実現します。すべてのデータをリレーショナル データベースに保存する必要はありません。 一般的に使用される NoSQL には MongoDB、HBase、Redis などがあり、検索エンジンには Lucene、Solr、Elasticsearch などがあります。 アプリケーションサーバーをビジネスに分割 ビジネスがさらに拡大するにつれて、アプリケーションは非常に肥大化します。このとき、Baidu がニュース、Web ページ、画像などのビジネスに分割されているように、アプリケーションをビジネスに分割する必要があります。 各ビジネス アプリケーションは、比較的独立したビジネス操作を担当します。企業はメッセージを通じて、またはデータベースを共有することでコミュニケーションをとります。 分散サービスの構築 この時点で、各ビジネス アプリケーションは、ユーザー サービス、注文サービス、支払いサービス、セキュリティ サービスなどのいくつかの基本的なビジネス サービスを使用することが分かりました。これらのサービスは、各ビジネス アプリケーションをサポートする基本要素です。 これらのサービスを抽出し、ステップバイステップのサービス フレームワークを使用して分散サービスを構築します。 AlibabaのDubboは良い選択です。 電子商取引のアーキテクチャを示す図 大規模電子商取引ウェブサイトのアーキテクチャ事例 電子商取引ケースを使用する理由 現在、分散型大規模 Web サイトには主にいくつかの種類があります。
大規模なポータルには通常ニュース情報が含まれており、CDN、静的化、その他の方法を使用して最適化できます。 Kaixin.com やその他のポータルはよりインタラクティブであり、より多くの NoSQL や分散キャッシュを導入し、高性能な通信フレームワークを使用する可能性があります。 電子商取引ウェブサイトには、上記 2 つのカテゴリの特徴があります。たとえば、製品の詳細には CDN を使用できますが、静的であり、高いインタラクティブ性には NoSQL などのテクノロジの使用が必要です。そこで、私たちは分析のケースとして電子商取引のウェブサイトを使用します。 電子商取引ウェブサイトの要件 顧客のニーズ:
顧客は顧客です。彼らは具体的に何が欲しいのかは言わないけれど、欲しいものだけは伝えます。顧客のニーズを導き、探求しなければならないことがよくあります。幸いなことに、明確な参考ウェブサイトが提供されています。 したがって、次のステップは、業界と参考ウェブサイトを組み合わせて多くの分析を行い、顧客にソリューションを提供することです。 要件機能マトリックス これは、ユースケース図またはモジュール図 (要件リスト) を使用して要件を記述する、要件管理に対する従来のアプローチです。 そうすると、非常に重要な要件(非機能要件)が見落とされてしまうことが多いため、要件を記述するには要件機能マトリックスを使用することをお勧めします。 この電子商取引ウェブサイトの需要マトリックスは次のとおりです。 主要なウェブサイトのアーキテクチャ 通常、Web サイトは、アプリケーションを展開するためのサーバー、データベースを展開するためのサーバー、NFS ファイル システムを展開するためのサーバーの 3 台から始まります。 これはここ数年間のより伝統的な慣習でした。会員数が 10 万人を超え、垂直的な衣服デザインポータルと大量の写真が掲載されている Web サイトを見たことがあります。 アプリケーション、データベース、およびイメージ ストレージを展開するためにサーバーが使用されました。次に示すように、パフォーマンスの問題が多数あります。 しかし、現在主流のウェブサイトのアーキテクチャは大きな変化を遂げています。一般的に、クラスタリングは高可用性設計に使用されます。 少なくとも次のようになります: クラスターを使用してアプリケーション サーバーに冗長性を提供し、高可用性を実現します。 (負荷分散デバイスはアプリケーションと一緒に導入できます) データのバックアップと高可用性を実現するには、データベース マスター/スレーブ モードを使用します。 システム容量の推定 推定手順:
顧客のニーズによると、ユーザー数は 3 ~ 5 年で登録ユーザー数 1,000 万人に達し、1 秒あたりの同時ユーザー数は次のように推定されます。
数学をちゃんと勉強しなかったことを後悔していますか? ! (上記の計算が間違っているかどうかはわかりません、笑) サーバーの見積もり: (Tomcat サーバーを例に挙げます) 1 つの Web サーバーは 1 秒あたり 300 回の同時計算をサポートします。通常、約 10 台のサーバーが必要です。 [tomcat のデフォルト設定は 150] であり、ピーク時には 30 台のサーバーが必要になります。 容量の見積もり: 70/90 ルール システム CPU は通常 70% 前後で維持され、ピーク時には 90% に達しますが、リソースが無駄にならず、比較的安定しています。メモリ、IOも同様です。 上記の見積りは参考値であり、サーバー構成、ビジネス ロジックの複雑さなどが影響します。 CPU、ハードディスク、ネットワークなどはここでは評価されなくなりました。 ウェブサイトのアーキテクチャ分析 上記の推定に基づいて、いくつかの疑問が生じます。
大規模な Web サイトでは、通常、次のアーキテクチャ最適化を行う必要があります (最適化はアーキテクチャ設計時に考慮する必要があり、通常はアーキテクチャ/コード レベルで解決されます。チューニングは主に、JVM チューニングなどの単純なパラメータの調整です。チューニングに大量のコード変更が含まれる場合は、チューニングではなくリファクタリングです)。
ウェブサイトアーキテクチャの最適化 事業分割 業務属性に応じて垂直に分割され、商品サブシステム、ショッピングサブシステム、決済サブシステム、コメントサブシステム、顧客サービスサブシステム、インターフェースサブシステム(購買・販売・在庫管理やテキストメッセージなどの外部システムとの接続用)に分かれています。 ビジネス サブシステムに応じて、レベル定義は次のように分けられます。
ビジネス分割の役割: サブシステムへのアップグレードは、モジュール間の結合とスケーラビリティの問題を解決するために専門家が専門的な作業を行うことで、専用のチームまたは部門によって管理できます。各サブシステムは個別に展開され、集中展開によって 1 つのアプリケーションがクラッシュし、すべてのアプリケーションが使用できなくなるという問題が回避されます。 レベル定義機能: トラフィックバーストが発生したときに主要なアプリケーションを保護し、段階的な劣化を実現するために使用されます。重要なアプリケーションが影響を受けないように保護します。 分割後のアーキテクチャ図: リファレンス展開ソリューション 2: 上図のように、各アプリケーションは個別に展開され、コアシステムと非コアシステムは組み合わせて展開されます。 アプリケーション クラスタの展開 (分散、クラスタ、負荷分散) 分散展開: ビジネスを分割した後にアプリケーションを個別に展開し、アプリケーションは RPC を介して直接リモートで通信します。 クラスターの展開: 電子商取引 Web サイトの高可用性要件を満たすには、クラスター展開のために各アプリケーションを少なくとも 2 台のサーバーに展開する必要があります。 負荷分散: 高可用性システムには必須です。一般的なアプリケーションは負荷分散によって高可用性を実現し、分散サービスは組み込みの負荷分散によって高可用性を実現し、リレーショナル データベースはマスター/スレーブ モードによって高可用性を実現します。 クラスター展開後のアーキテクチャ図: マルチレベルキャッシュ キャッシュは一般に、保存場所に応じて、ローカル キャッシュと分散キャッシュの 2 つのカテゴリに分類されます。このケースでは、二次キャッシュ方式を使用してキャッシュを設計します。 第 1 レベル キャッシュはローカル キャッシュであり、第 2 レベル キャッシュは分散キャッシュです。 (ページキャッシュ、フラグメントキャッシュなど、より細かい区分もあります) 第 1 レベルのキャッシュは、データ ディクショナリ、よく使用されるホット データ、およびその他の基本的に不変/定期的に変更される情報をキャッシュし、第 2 レベルのキャッシュは必要なすべてのキャッシュをキャッシュします。 第 1 レベル キャッシュの有効期限が切れているか使用できない場合は、第 2 レベル キャッシュのデータにアクセスします。第 2 レベル キャッシュが利用できない場合は、データベースにアクセスします。 キャッシュ比率は通常 1:4 なので、キャッシュの使用を検討できます。 (理論的には1:2で十分です): ビジネス特性に応じて、次のキャッシュ有効期限ポリシーを使用できます。
シングル サインオン (分散セッション) システムを複数のサブシステムに分割し、個別に展開すると、セッション管理の問題が避けられません。一般的には、セッション同期、Cookie、分散セッション方式を使用できます。電子商取引の Web サイトでは通常、分散セッション実装が使用されます。 さらに、分散セッションに基づいて完全なシングル サインオンまたはアカウント管理システムを確立できます。 プロセスは上記のように説明されています:
Cache ミドルウェアと組み合わせると、分散セッションはセッションを非常にうまくシミュレートできます。 データベース クラスター (読み取りと書き込みの分離、データベースとテーブルの分離) 大規模な Web サイトでは、膨大な量のデータを保存する必要があります。大規模なデータストレージ、高可用性、高パフォーマンスを実現するために、冗長システム設計が一般的に使用されます。一般的には、読み取りと書き込みの分離とデータベースとテーブルのシャーディングの 2 つの方法があります。 読み取りと書き込みの分離: 一般的に、読み取り率が書き込み率よりもはるかに大きいシナリオを解決します。 1 つのマスターと 1 つのバックアップ、1 つのマスターと複数のバックアップ、または複数のマスターと複数のバックアップを使用できます。 このケースでは、上図に示すように、データベースとテーブルのシャーディングと、ビジネス分割に基づく読み取り/書き込み分離を組み合わせています。
関連するミドルウェアについては、Cobar (Ali、現在はメンテナンスされていません)、TDDL (Ali)、Atlas (Qihoo 360)、および MyCat を参照してください。 データベースとテーブルのシャーディング後のシーケンスの問題、JOIN、トランザクションの問題について、データベースとテーブルのシャーディングのトピック共有で紹介します。 サービス指向 複数のサブシステムに共通する機能/モジュールを抽出し、パブリックサービスとして使用します。たとえば、この場合のメンバーシップ サブシステムは、パブリック サービスとして抽出できます。 メッセージキュー メッセージ キューは、サブシステム/モジュール間の結合を解決し、非同期、高可用性、高性能のシステムを実現します。これは分散システムの標準機能です。 この場合、メッセージキューは主にショッピングと配信で使用されます。
現在、最も一般的に使用されるMQには、アクティブMQ、ウサギMQ、ゼロMQ、MS MQなどが含まれます。特定のビジネスシナリオに基づいて1つを選択する必要があります。ウサギMQを研究することをお勧めします。 その他のアーキテクチャ(テクノロジー) 上記で紹介したビジネス分割、アプリケーションクラスタリング、マルチレベルのキャッシュ、シングルサインオン、データベースクラスタリング、サービス指向、およびメッセージキューに加えて、CDN、逆プロキシ、分散ファイルシステム、ビッグデータ処理、その他のシステムもあります。 アーキテクチャの概要 大規模なWebサイトのアーキテクチャは、ビジネスのニーズに応じて常に改善されており、さまざまなビジネス特性に基づいて特定の設計と考慮事項が行われます。 この記事では、通常の大規模なWebサイトに関係するテクノロジーと方法の一部のみについて説明しています。すべての人にインスピレーションを与えることができることを願っています。 著者:Rotten Pigskin はじめに:Java、分散アーキテクチャ、マイクロサービスアーキテクチャ、データベースに熟練したGoogleなどの外国企業で10年以上の実務経験があり、現在、より高いレベルに突入することを望んでいるビッグデータとブロックチェーンを研究しています。 |
<<: ビッグデータ分析とクラウドテクノロジーが融合した場合、どのように連携できるのでしょうか?
>>: 詳細な分析 | Alibaba Cloud の障害により 1 時間にわたるパニックが発生: 私たちは 0.1% なのでしょうか?
1. タオバオと天猫の売上高は9年間で1兆元を超え、成長の鈍化は避けられないこれまでオンラインショッ...
LBXUは現在、「ダブルイレブンホットセール」イベントを推進しており、同時に、米国から新しく発売され...
Pacificrack では現在、年間、2 年、3 年払いに限定した VPS の 25% 割引プロモ...
序文この共有は、次の重要なポイントから始まります。時代: 時代の傾向と全体的な方向性を理解することに...
クラウド コンピューティングとクラウド ネイティブ テクノロジーの発展に伴い、主要なクラウド コンピ...
iPhone 6は約束通り中国本土には入らなかったが、最近、iPhone 6に関する議論や進展が国内...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス最近、ウェブマスター界隈...
v.ps は現在、米国にニューヨーク、シアトル、サンノゼの 3 つのデータセンターを持っています。z...
最近、海雲捷訊はテンセントの戦略的投資による大規模な資金調達のニュースを発表しました。これは、Boy...
単純にSEO受注の観点から言えば、SEOサイクルを正確に見積もるのはかなり面倒な作業です。現在有名な...
ロサンゼルス データセンターの10Gbps 帯域幅と無制限トラフィックを備えた専用サーバーである S...
クラウドベースのデータおよび分析ソリューションを提供する世界有数のプロバイダーである Teradat...
godaddy からわずか 12 ドルで、PayPal、クレジットカード、Alipay をサポートす...
国内外の貿易電子商取引は急速に発展しており、インターネットに依存する電子商取引企業もウェブサイトに大...
Google は 4 月 24 日にペンギン アルゴリズムのアップデートを発表し、多くのウェブサイト...