Slide 1

Slide 1 text

カミナシレポートが辿り着いた
         メンテナンスモードのあり方
 株式会社カミナシ エンジニアリングマネージャー           宮本 大嗣

Slide 2

Slide 2 text

アジェンダ 1. カミナシのサービス紹介 2. カミナシレポートのメンテナンスモードのあり方

Slide 3

Slide 3 text

1.カミナシのサービス紹介

Slide 4

Slide 4 text

 日本の就業人口の半分はノンデスク 設備・清掃 旅客・運輸 建設 福祉施設 製造業 スーパー・小売 接客業 飲食店 現場で働く3,100万人が、紙中心で非効率なオペレーションに日々追われています。 プライベートではスマートフォンを使っているのに、職場ではなぜか紙とペン、デジカメを使う必要があるのが現状です。 日本における労働人口の割合 デスク ワーカー ノンデスク ワーカー % % 52 48 ※ 独立行政法人労働政策研究・研修機構「職業別就業者数」より当社算出

Slide 5

Slide 5 text

まだまだ紙が主役  製造現場のリアル

Slide 6

Slide 6 text

◯×チェック表 紙のチェックリスト(ワークフロー) カミナシでデジタル化 ノーコードで現場管理アプリを作ることができる  業務フローをデジタル化する

Slide 7

Slide 7 text

条件分岐 繰り返し 多様なデータ型  ノーコードだけど、痒い所に手が届く

Slide 8

Slide 8 text

2. カミナシレポートの メンテナンスモードのあり方

Slide 9

Slide 9 text

 前提 ■Web(管理者向け)  1日2時間程度利用できないのは事前連絡すれば許容 ■アプリ(現場向け)  24h/365日利用できるのが必須

Slide 10

Slide 10 text

 結論 ■Web(管理者向け)  (メンテナンスモード中)全操作不可とした ■アプリ(現場向け)  (メンテナンスモード中)オフラインモードにて利用可能とした 1. リクエスト失敗&offlineに保存 2. onlineになったら offlineデータupload

Slide 11

Slide 11 text

カミナシ アプリ  インフラ概要 Cloud Front S3 Bucket ELB ECS Cluster Fargate Container ・・ ・ Aurora MySQL

Slide 12

Slide 12 text

カミナシ アプリ  メンテナンスモード中 Cloud Front S3 Bucket ELB ECS Cluster Fargate Container ・・ ・ Aurora MySQL 全HTTPリクエスト を拒否 LogInとオフライン で必要なGET処理 のみ許可

Slide 13

Slide 13 text

カミナシ アプリ  メンテナンスモード中 Cloud Front S3 Bucket ELB ECS Cluster Fargate Container ・・ ・ Aurora MySQL 全HTTPリクエスト を拒否 LogInとオフライン で必要なGET処理 のみ許可 Lambda 許可分以外のHTTPリクエスト が来たらLambdaで事前設定 した内容をレスポンス

Slide 14

Slide 14 text

カミナシ アプリ  メンテナンスモード中 Cloud Front S3 Bucket ELB ECS Cluster Fargate Container ・・ ・ Aurora MySQL 全HTTPリクエスト を拒否 LogInとオフライン で必要なGET処理 のみ許可 メンテナンス画面を 表示 通常操作は出来るが オフラインに作成・更 新dataが貯まる Lambda 許可分以外のHTTPリクエスト が来たらLambdaで事前設定 した内容をレスポンス

Slide 15

Slide 15 text

カミナシ アプリ  メンテナンスモード中 Cloud Front S3 Bucket ELB ECS Cluster Fargate Container ・・ ・ Aurora MySQL LogInとオフライン で必要なGET処理 のみ許可 通常操作は出来るが オフラインに作成・更 新dataが貯まる Lambda 許可分以外のHTTPリクエスト が来たらLambdaで事前設定 した内容をレスポンス メンテナンス画面を 表示 全HTTPリクエスト を拒否

Slide 16

Slide 16 text

 ELBのfixedレスポンスを利用

Slide 17

Slide 17 text

 ELBのfixedレスポンスを利用 check優先順位。1番から順にcheck。 条件に合致しない場合は次の行を check。

Slide 18

Slide 18 text

 ELBのfixedレスポンスを利用 mobile用の許可対象のリクエスト。 1行あたり4つまでしかパス設定できな いため複数行にわたっている

Slide 19

Slide 19 text

 ELBのfixedレスポンスを利用 メンテナンスモード時変更箇所。 「転送先」を事前にLambdaで作成した ターゲットグループに変更。

Slide 20

Slide 20 text

 ターゲットグループ with Lambda

Slide 21

Slide 21 text

 ターゲットグループ with Lambda Web側は、statusコード:503を条件にメンテナンス画面表示 (errorsの文言を表示)

Slide 22

Slide 22 text

 ターゲットグループ with Lambda Web側は、statusコード:503を条件にメンテナンス画面表示 (errorsの文言を表示)

Slide 23

Slide 23 text

 ターゲットグループ with Lambda 環境変数によってメンテナンス画面の文言を自由に変えれるようにしている

Slide 24

Slide 24 text

 メンテナンス画面

Slide 25

Slide 25 text

カミナシ アプリ  メンテナンスモード中 Cloud Front S3 Bucket ELB ECS Cluster Fargate Container ・・ ・ Aurora MySQL 全HTTPリクエスト を拒否 メンテナンス画面を 表示 Lambda 許可分以外のHTTPリクエスト が来たらLambdaで事前設定 した内容をレスポンス 通常操作は出来るが オフラインに作成・更 新dataが貯まる LogInとオフライン で必要なGET処理 のみ許可

Slide 26

Slide 26 text

カミナシ アプリ  メンテナンスモード中 Cloud Front S3 Bucket ELB ECS Cluster Fargate Container ・・ ・ Aurora MySQL 全HTTPリクエスト を拒否 メンテナンス画面を 表示 Lambda 許可分以外のHTTPリクエスト が来たらLambdaで事前設定 した内容をレスポンス 通常操作は出来るが オフラインに作成・更 新dataが貯まる LogInとオフライン で必要なGET処理 のみ許可 MySQLのinnodb オンラインDDL 併用にて対処

Slide 27

Slide 27 text

■データ定義言語(DDL: Data Definition Language) データベースのテーブルなどの作成や削除、各種設定を行う言語 CREATE(テーブル新設)/ALTER(テーブル定義変更)/DROP(テーブル削除)など ■データ操作言語(DML: Data Manipulation Language) 既存テーブルのデータについてCRUDを行う言語 SELECT(検索)/INSERT(追加)/UPDATE(更新)/DELETE(削除)/EXPLAIN(実行計画)など ■トランザクション制御言語(TCL: Transaction Control Language) トランザクションの開始や終了を行う言語 COMMIT(トランザクションを確定)/ROLLBACK(トランザクション取り消し)など ■データ制御言語(DCL: Data Control Language) DMLやDDLの利用に関する許可や禁止を設定するための言語 GRANT(アクセス権付与)/REVOKE(権限破棄)など データベース言語(SQL)体系について

Slide 28

Slide 28 text

・MySQL5.6 から「オンラインDDL」の機能が実装されました。 ・Alter table系処理でテーブル定義の変更中に、SELECT/INSERT/UPDATE/  DELETEに関する処理が継続できるようになりました。 MySQLのinnodbオンラインDDL機能 短時間ならAlter table系処理実行中にサービスからリクエスト来てもOKでは...? メンテ時間は2h前後取っているが、全時間Alter tableを実行するわけではない。  index貼ったりする処理も数分程度。貼った後の検証とかに時間がかかる。

Slide 29

Slide 29 text

・MySQLの公式ページ見ると全Alter table系処理には対応していませんでした (残念) ・以下以外のAlter table系処理なら大丈夫そう  カラムデータ型変更、プライマリーキー削除、パーティション作成/追加/削除 MySQLのinnodbオンラインDDL機能 詳細: https://dev.mysql.com/doc/refman/5.6/ja/innodb-create-index-overview.html 並列DMLを許可が「はい」の 操作なら大丈夫 <参考> Alter table系処理に 「ALGORITHM=INPLACE, LOCK=NONE」 オプションをつけて実行し、 オンラインDDL可能か checkする手法が有名

Slide 30

Slide 30 text

<注意点1> show full processlist して ”Waiting for table metadata lock”が無いかcheck。 <注意点2> MySQLのパラメーターに「innodb_online_alter_log_max_size」がある。 (ALTER TABLE中にINSERTなどの更新情報を一時保管する上限数) このサイズを超えるSQLが発行された場合、ALTER TABLEが失敗するので注意。 MySQLのinnodbオンラインDDL機能

Slide 31

Slide 31 text

本日は深くは言及しませんが...以下実施 1. DBクラスターにレプリケーションDB準備 + Alter table実施 2. 現行DBのBinログを使ってAlter table後のレプリケーション先にレコード復元 3. 新旧DBにて同じ状態にしたら新旧DBを切り替え 検証時にAlter tableが失敗したら

Slide 32

Slide 32 text

・Mobileは24h/365日の操作を可能とするためオフラインモードを準備する ・Webは全操作禁止、Mobileは一部操作を許可し、HTTPリクエストを激減させる ・MySQLのinnodbオンラインDDLを併用する ・(念のため) Alter table系処理の際、show full processlist コマンドを使って、 ”Waiting for table metadata lock”しているものが無いかcheckし万全の対策をとる まとめ

Slide 33

Slide 33 text

アプリエンジニア/SRE 積極採用中