問題タブ [downtime]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - シングル ページ アプリケーション (SPA) のゼロ ダウンタイム/Blue-Green デプロイ
昨日、チームと一緒に、シングル ページ アプリケーションをサポートするためにゼロ ダウンタイム デプロイを使用する可能性について話し合っていました。
それについて話し合っているうちに、1 つのエッジ ケースを特定しました。ユーザーがブラウザにページをロードすると、ページをリロードするまでメモリから削除できません。つまり、ユーザーがページをロードして Web サイトで作業を開始した場合 (たとえば、私が今行っているように長い記事を入力し始めた場合)、ページをリロードするまで、更新されたバージョンを受け取ることができません。
ユーザーのブラウザに古いバージョンのアプリケーションが表示されるという事実は無視できますが、以下に示す 2 つの点があります。
- スパを提供するために使用される HTTP Api に重大な変更を導入した場合、ユーザーは記事を保存できなくなったり (データ損失!)、他のバックエンド関連のアクションを実行したときに他のエラーを受け取ったりする可能性があります。
- ユーザーが SPA をリロードせずに新しいページに移動すると、次のページのテンプレートまたは外部の古いコンテナーと互換性のないコントロールのテンプレートを受け取ることができます。マークアップやアプリケーション ロジックの破損につながる可能性があります。
- ユーザーが記事を入力している途中である可能性があるため、ユーザーに再ログインを強制することはできません。これは単に悪い UX です。
これらすべての点を考慮に入れると、次の解決策を提案できます。
- ユーザー 1 は、SPA の v1 をブラウザーにロードします。
- 認証トークンとともに、バージョン情報がブラウザーに送信されます (たとえば、JWT を使用)。
- アプリケーションの v2 バージョンをデプロイしたいと考えています。v2 バージョンをスピンアップしますが、v1 を無効にしません。
- ユーザー 2 は、SPA の v2 を自分のブラウザーに読み込みます
- ユーザー 1 は、SPA の次のページに移動します。ロード バランサーはトークンのバージョン情報をチェックし、ユーザー 1 のトラフィックを v1 サーバーにルーティングします。
- ユーザー 2 は、同じ方法で v2 にルーティングされます。
- ユーザー 1 がアプリをログアウトし、ブラウザーを閉じます。
- ユーザー 1 は再度ログインします。今回は v2 を受け取ります。
- v1 アプリケーションが長時間トラフィックを受信しないと、破棄されます。
ただし、このアプローチでは、2 つ以上の複数のバージョンを有効にすることができます (たとえば、ユーザーが 1 日か 2 日オンラインでいる場合)。これは、最後のユーザーがログアウトするまで、データベースを新しいスキーマに移行できないことを意味します (Facebook などのサイトでどのように機能するかをイメージしてください)。複数のバージョンを使用することは問題ではありませんが、Docker や Rancher などのツールを使用すると簡単に行うことができます。
また、ステップ 7 では、ユーザーはページをリロードするか、ブラウザーを閉じる必要があります。そうしないと、ユーザーはまだ v1 で作業しているため、次のバージョンに強制することはできません。
私が持っている質問は、シングル ページ アプリケーションのゼロ ダウンタイム/Blue-Green デプロイを行うためにどのようなアプローチを使用するかということです。
特に既存の「ブルー」クライアント アプリケーションに関して、トラフィックを「グリーン」バージョンに切り替えるときに、アプリケーションの「ブルー」バージョンの有効期間をどのように管理しますか。
これらの問題を解決しましたか、他の解決策を知っていますか?
cassandra - ゼロ ダウンタイムの Cassandra/DataStax 移行の実現
DataStax クラスターに移行しようとしている Cassandra クラスター (3 つのノード、すべてのノードが AWS にデプロイされている) があります。これらのノードを自分で管理するのをやめる時が来ました。
複数のプロデューサーとコンシューマーがいて、一日中、Cassandra クラスターに対してデータの読み取り/書き込みを行っています。アプリ/サービス/プロキシを Cassandra クラスターの前に配置してから、スイッチをきれいに切り替えて、すべての読み取り/書き込みが Cassandra との間で DataStax に行われるようにするオプションはありません。そのため、一度に 1 つずつテーブルを移行するクリーンな方法はありません。また、データのすべてのプロデューサー/コンシューマーのダウンタイムをゼロ (またはほぼゼロ) にしようとしています。厳しい要件の 1 つは、移行に損失が発生しないことです。データ紛失なし!
ここでの最善の戦略は、次の 4 つのステップのプロセスであると考えています。
- どういうわけか、DataStax を Cassandra クラスターのレプリカとして構成し、DataStax へのストリーミング レプリケーションを効果的に作成します。
- DataStax が Cassandra の他のノードに完全に「追いついた」場合、プロデューサーは現在の Cassandra クラスターに書き込みを続けますが、コンシューマー/リーダーは DataStax にカットオーバーします (つまり、DataStax に接続するように再構成してから再起動します)。 )。ダウンタイムがゼロではありませんが、単純な再起動でおそらく生きていけるでしょう。(繰り返しますが、ゼロ ダウンタイム ソリューションが非常に好まれます。 )
- プロデューサーを DataStax に切り替えます。繰り返しになりますが、ダウンタイムはほぼゼロです。これには、プロデューサーが DataStax を指すように再構成する必要があり、その後、新しい構成を取得するために再起動が必要になるためです。ゼロ ダウンタイム ソリューションが優先されます。
- 「古い」Cassandraクラスターからのレプリケーション トラフィックがゼロになると、DataStax以外のノードがDataStaxに書き込む必要がある「新しい」情報がなくなります。それらのノードを火で殺します。
このソリューションは、私が思いつくことができる最も侵襲性が低く、ダウンタイムがゼロに最も近いソリューションですが、いくつかのことを前提としています。
- おそらく、DataStax をレプリケートできる余分なノードのように扱うことは不可能です (はい/いいえ? )
- おそらく、Cassandra および/または DataStax には、このソリューションよりも優れた移行を処理できる、私が知らない魔法の機能/機能がいくつかあります。または、これをより適切に処理できるサードパーティ (理想的にはオープンソース) のツールがあるかもしれません。
- 「古い」CassandraノードからDataStaxへのレプリケーション「トラフィック」を監視する方法がわかりません。安全にシャットダウンして古いノードを強制終了する前に、これを行う方法を知る必要があります (繰り返しますが、データを失うことはありません)。
この戦略が (1) 実行可能/実行可能であり、(2) 最適であるかどうか疑問に思っていると思います。また、Cassandra/DataStax エコシステムに、これを改善するために活用できる機能/ツールがあれば (より速く、ダウンタイムなしで)。
sql-server - SSRS SQL Server 2012 更新によるアップタイム/ダウンタイム生産バッチ レポート
SSRS
viaを使用して別のレポートに取り組んでいVisual Studio 2010
ます。私は SQL の新人ですが、数週間が経つにつれて物事が理にかなっています。
目的は、SQL サーバー データベースから取得したBatch up time / downtime
計算結果を表示するレポートを作成することです。timestamps
タイムスタンプは、日付/時刻の入力として表されます。例: 2018-02-09 14:43:29.193
.
データベースでタイム スタンプをトリガーするために満たす必要がある 4 つのイベント ID の 1 ~ 4 があります。各バッチには、独自の 3 桁の整数 ID があります。
の違いは、
私は限られた知識でこのレポートで最善を尽くしました。レポートでは、レポートの日付を選択するためのパラメーターを作成し、ユーザーにバッチ ID とバッチ 1 ~ 4 イベントを選択するように求めましたが、よくわかりません。計算フィールドに取り組む方法。
以下はSQLコードです。
私はピボットテーブルについて読んでいて、これが計算されたup / downtime
.
再度、感謝します