-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
パフォーマンス向上・負荷軽減のための対応を行う #185
Comments
ちなみに https://web.dev/measure/ でチェックするとPerformanceの項目が良くないのですが、これは海外のDecidimインスタンスでも同様の傾向があるようでした。 |
@takahashim
一旦、上記のみでstagingで試してみましょうか?ゆくゆくは、ログイン状態を判定して、未ログインの場合はキャッシュするとかもためしてみる感じで。 Cloud forntは何度か設定したことがあるので、出来ると思います。 |
@komtaki ありがとうございます!一度ステージングで試してみたいです。 |
stagingでeb本体にcloud forntを入れました。http2有効化、logはs3のバケットに流してます。
方針確認させてください。 👍 s3の方にもサブドメ適応させて、もう一つcloud frontをたてて上記のassetsと同じようにキャッシュ設定するイメージであってますか?具体的なイメージがあれば教えてもらえると助かります。:bow: |
10日以上経ちますが問題なさそうなので、ebの方だけ先に本番にも同様に設定してもよろしいでしょうか? お手すきの際に、こちら確認いただければ幸いです。:bow:
|
@komtaki また、今回行った具体的な操作など教えていただければ幸いです。
|
ありがとうございます。 cloud formationのMRにコメントを頂いていますが、あちらのテンプレートをベースにリソースを作成しています。
流れとしては、下記の4つやりました。
ROUTE53の設定もcloud formationにするか迷いましたが、提供する都市が増える可能性は高そうなのでいったん見送りました。 本番に入れる際には、SSL証明書以外の作業を同様にやる感じですね。albのサブドメは、production-alb-origin.diycities.jpとかで考えています。
DNSの浸透で切り替わるので、瞬断とかはないです。stagingを見た感じ影響はないかと。
|
なるほどです! と言うことは、今後productionでドメインを増やす際に同様の作業が必要ということですね。
こちら進めていただいて構わないと思います! また、#212 こちらstgで問題ないようであればマージして検証してもいいかと思いますがどうでしょうか? |
承知しました。タイミングを見てebだけ先に設定しちゃいます。 現状の設定で問題なさそうなので、MR #212 もdraft外しました。:bow: |
ドメインの設定で2点、確認したいことがあります。:bow:
|
@komtaki
こちら僕の方で把握できていない情報になるので、次回打ち合わせ時に聞いて回答させていただきます! |
@ayuki-joto ↑何か進展ありましたでしょうか? 👀
|
下記で問題なさそうに見えたので、本番用のcloud frontを作成しました。 お手数ですが、最終確認をお願いします。
|
@komtaki ありがとうございます! |
こちら問題にないことを確認しました! また今後は,diycities.jpではなく,makeour.cityのドメインで運用するようになるのでこちらの対応も相談したいです! |
承知しました。では段階的に対応しますね。
どうなっているのかよくわかってないので、適当なことしか言えませんが。AWSの別プロジェクトという意味でしたら、そちらでも同じテンプレートでcloud frontを作成するのが良いかと思います。 |
こちら完了しました。来週あたりタイミングをみて、DNSをcloud frontに切り替えます。 |
ちなみにこちらはどんな感じで進んでるんですか?切り替わり時期とか。AWSの別プロジェクトということは、全て作り直しているのでしょうか?私もawsの権限もらった方がいいですかね? 🤔 |
@komtaki makeour.cityドメインに関してですが,今後作られるものをmakeour.cityドメインで運用をするという方針です! |
@ayuki-joto せっかく作り直すなら、VPCとかも根本的に見直してる感じですかね?RDS作成時しか対応できなさそうなDB暗号化のisuue #179もあがってましたし。 いつから運用にのる予定ですか? ↓構成とかがわからないのでざっくりした対応方法ですが、基本この流れでいけると思います。 |
@komtaki 安定稼働して問題ないと判断した際には今のmatestrの環境の方にマージしてdbを入れ替えて対応する予定です! |
Cloud Frontを通さないなら、その |
@komtaki @ |
特に心当たりはないです。作業もしてないですし。今は特に問題はなさそうですね。 https://rules-2121.diycities.jp/ 可能性としては、サーバー高負荷でElastic beanstalkのレスポンスが遅かったとかですかね? |
こちら10日からたびたび発生してるようで...ちなみにtimeoutに関してはnginxのものが適用されるのでしょうか? |
timeoutはCloud Frontのデフォルト値の10sです。 wafはブロックしてないので、ログ出してないです。一応ダッシュボードから、総リクエスト数やルールごとの脅威検知数は見れます。ただ、その画面だとwafを通った後に見えるので関係なさそうです。 Cloud Frontのログは全てs3にあるので、詳しい時間とかがわかればそちらから調べられると思います。そのうちathenaとかで見れるようにしたいのですが、現状gzipで細かく分かれたファイルなのでかなり探しづらい気がします。 https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/http-502-bad-gateway.html |
なるほど! ただ今回の問題に関しては502のエラーなのでまたtimeoutとは別かもしれませんね...
なるほど!ダメもとで漁ってみます!! |
失礼しました。接続タイムアウトは10sでしたが、レスポンスタイムアウト(オリジンからのレスポンスを待つ時間)は30sになってました。:sweat_drops: 個人的にはインフラまわりをいじってないので、Elastic Beanstalkの問題だと思うんです。
なんとかCloud Frontのキャッシュに載せられないですかね?正直ログインしてない時とか全部キャッシュに載せてもいい気がするんですが、使えそうなheaderとかcookieが見つからず。Cache-controlヘッダーとかついているものの、どこまで使えるのか |
athenaでcloud frontのログをSELECTできるようにしました。 9月10日ではなく導入時から502出てますね。以前から話題になってるdebatesばかりです。
テーブル作成DDLは下記ほぼそのままです。:eyes: |
@komtaki また, #223 の対応で、本番の環境をproductionから、production-v0-23-5に切り替える方法でデプロイしたのですが、こちらをgithub actionsで対応させる際には、 decidim-cfj/.github/workflows/deploy.yml Lines 33 to 34 in a8cef90
この部分を書き換えるだけでいいのでしょうか? |
以前言ったようにECSに乗せ換えるくらいしか思いつかないです。elasticbeanstalkのworker環境とかでは代替できないので、elastic beanstalkの限界ですね。ほかにもヘルスチェックに失敗したときに、再起動しなかったり今の構成は課題がありますね。
良いと思います。 |
んーーー...なるほど、どこかのタイミングでecsでの管理に切り替えるとかは検討する必要があるかもしれませんね... |
ECS Fargateだったら、管理コストは今と大して変わらないと思います。本職でECS運用してます。大きく上げられるメリデメは下記ですが、個人的にはメリットが上回ると思います。
もちろん移行コストは多少はかかります。ただElastic beanstalkにデプロイするdocker-composeが、ほぼそのままECSのデプロイに使えます。またECRやパラメーターストアもそのまま使えるので、作業は.ebextensionsを書き直すくらいでそこまで多くないです。 AWS WAFの導入が終われば検討してもいいかなと思ってます。 |
sshはできないにしても、ECS Execでログインできればそれで事足りるんではないかと思いますが、どんなもんでしょうか(そもそも私はログインしないのでアレですが…) |
ECS Execがあれば十分だと思いますね。ec2のメンテナンスはしないですし、コンテナの外で作業することは基本ないので。 |
@komtaki それと、cloud frontの件ですが、現状のルール?展での展示が終わっていないので、timeout問題が本質的に解決できていない可能性があります! |
180sは無理です。1か月前にも言った通り、最大60sまでです。 |
@komtaki |
@ayuki-joto 本番、stagingともに60s変更しました。 |
カスタマーサポート上げれば、時間は伸ばせる可能性があります。ただ接続時間をのばすせば実行に時間のかかるリクエストが増えたときに、コネクションが切れずコネクションが増加しさらなる負荷上昇につながります。 180という数字がどうやって計算されたのか知らないですが、過度にタイムアウトを伸ばすのはよくないと思います。 |
以前はたまに遅いトランザクションがあったので伸ばしたいという話になっていたかと思うのですが、その後アプリ側も改善し、最近(ここ1週間)では長くてもほとんど20秒前後で済むようになっているので(1件だけ履歴を直接見てるやつで極端に遅いのがありましたが、これは諦めた方が良さそう)、とりあえず60sで様子を見るでよさそうです。 |
改善詳細 / Details of Improvement
#62 に関連して、アクセスが増えると負荷が大きくなるようなのと、全般的に重そうなので、Decidim固有の対処はさておき一般的なパフォーマンス向上のための対応を行うと改善されるかもしれません。
すぐに思いつくのは以下の2点です。
期待する見せ方・挙動 / Expected behavior
とにかくEBのインスタンスに不要なアクセスが来ないようにしたいところです。
対象インスタンス / Instances
The text was updated successfully, but these errors were encountered: