yuitaso / sunrise

1 stars 0 forks source link

前半講義の記録 #11

Open pei0804 opened 7 years ago

pei0804 commented 7 years ago

IP

reviveログイン
153.120.92.233/revive/www/admin/index.php
ユーザ sunrise-admin パス xxxxxxx
サーバ
root xxxxxxx
demouser xxxxxxxxxxxxxx
ssh root@153.120.92.233
ssh root@133.242.53.153
MySQL
root xxxxxx
demouser xxxxxxxxx
DB groupwork
http://153.120.92.233//ad_1.html

Misson2

デベロッパーツールを用いて/ad_1.htmlに表示する際にどのようなリクエストがあるか確認しましょう (ぺい)

バナー表示の画面のHTTPリクエスト

GET 304 Not Modified
http://153.120.92.233//ad_1.html

GET 304 Not Modified
http://153.120.83.131/revive/www/delivery/asyncjs.php

GET 200 OK
http://153.120.83.131/revive/www/delivery/asyncspc.php?zones=1&prefix=revive-0-&loc=http%3A%2F%2F153.120.92.233%2F%2Fad_1.html

GET 200 OK
http://153.120.83.131/revive/www/delivery/lg.php?bannerid=1&campaignid=1&zoneid=1&loc=http%3A%2F%2F153.120.92.233%2F%2Fad_1.html&cb=5f9a04e1e9

GET 200 OK
http://153.120.83.131/revive/www/images/046fec30699207a354b8bb103f9d8ace.png

MySQLにあるテーブルrv_data_bkt_mのcreative_id、zone_idはどのテーブルのIDか確認しましょう (ぺい)

mysql -u root -p
HOW DATABASES;
use groupwork;
show tables;

SELECT * FROM rv_data_bkt_m;
SELECT * FROM creative_id;
SELECT * FROM zone_id;

MySQLにあるテーブルrv_data_bkt_mのcountは何をトリガーにカウントアップされるか確認しましょう (シム)


mysql> SELECT * FROM rv_data_bkt_m;
+---------------------+-------------+---------+-------+
| interval_start      | creative_id | zone_id | count |
+---------------------+-------------+---------+-------+
| 2016-11-26 03:00:00 |           0 |       1 |     7 |
| 2016-11-26 03:00:00 |           1 |       1 |     4 |
+---------------------+-------------+---------+-------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM rv_data_bkt_m;
+---------------------+-------------+---------+-------+
| interval_start      | creative_id | zone_id | count |
+---------------------+-------------+---------+-------+
| 2016-11-26 03:00:00 |           0 |       1 |     7 |
| 2016-11-26 03:00:00 |           1 |       1 |     5 |
+---------------------+-------------+---------+-------+
2 rows in set (0.00 sec)

結果:webサイトアクセスするとcountが上昇 考察:バナー広告が表示されるとcountがインクリメント

追加で広告主、キャンペーン、バナー、Webサイト、ゾーンなどを追加してみましょう (こけっこっこ) ERR_BLOCKED_BY_CLIENTが出た理由はadblock.

チュートリアル以外の機能についても調べてみましょう(誰か)

Mission3

siegeで-cの値を増減させ限界性能を調査しましょう

600台くらいから100%じゃなくなりはじめる.

例1:siege -c 630 -f siege.txt
Lifting the server siege...
Transactions:               6847 hits
Availability:             100.00 %
Elapsed time:               6.53 secs
Data transferred:          16.56 MB
Response time:              0.23 secs
Transaction rate:        1048.55 trans/sec
Throughput:             2.54 MB/sec
Concurrency:              244.64
Successful transactions:        7154
Failed transactions:               0
Longest transaction:            3.06
Shortest transaction:           0.00

例2:siege -c 680 -f siege.txt
Transactions:               5683 hits
Availability:              95.43 %
Elapsed time:               4.50 secs
Data transferred:          12.51 MB
Response time:              0.16 secs
Transaction rate:        1262.89 trans/sec
Throughput:             2.78 MB/sec
Concurrency:              199.75
Successful transactions:        5923
Failed transactions:             272
Longest transaction:            1.55
Shortest transaction:           0.00

限界性能に達するボトルネック箇所を特定しましょう

i/O系がボトルネックになっている
Mysql書き込み(lg.php)やpngファイル取得(voyageロゴ)

Readも時間がかかっている.
タイムアウトがどこかで決められていて,それを超えるとLOST?

500エラーの理由
・サーバの負荷
・メモリの使用量オーバー

siege -c 1000 -f siege.txt | grep 500
HTTP/1.1 500     1.87 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     2.82 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     2.83 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     3.46 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     2.84 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     2.85 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     2.82 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     2.88 secs:     186 bytes ==> GET  /ad_1.html
HTTP/1.1 500     2.88 secs:     186 bytes ==> GET  /ad_1.html

複数の広告主、キャンペーンなど追加しsiegeで負荷を掛けてみましょう

広告主を一人増やしてみた.合わせてキャンペーンも増設

siege -c 630 -f siege.txt

Lifting the server siege...
Transactions:               8622 hits
Availability:              98.18 %
Elapsed time:               7.16 secs
Data transferred:          19.95 MB
Response time:              0.13 secs
Transaction rate:        1204.19 trans/sec
Throughput:             2.79 MB/sec
Concurrency:              154.36
Successful transactions:        9100
Failed transactions:             160
Longest transaction:            1.29
Shortest transaction:           0.00

一応もう一度.
Lifting the server siege...
Transactions:               8937 hits
Availability:              99.71 %
Elapsed time:               8.18 secs
Data transferred:          21.04 MB
Response time:              0.21 secs
Transaction rate:        1092.54 trans/sec
Throughput:             2.57 MB/sec
Concurrency:              231.74
Successful transactions:        9239
Failed transactions:              26
Longest transaction:            3.12
Shortest transaction:           0.00

Mission4

2Core 2GB max_connections=100 広告主1つ

siege aborted due to excessive socket failure; you
can change the failure threshold in $HOME/.siegerc

Transactions:              18228 hits
Availability:              94.65 %
Elapsed time:              17.65 secs
Data transferred:          38.93 MB
Response time:              0.24 secs
Transaction rate:        1032.75 trans/sec
Throughput:             2.21 MB/sec
Concurrency:              245.34
Successful transactions:       18228
Failed transactions:            1030
Longest transaction:            3.13
Shortest transaction:           0.00

2Core 2GB max_connections=1000 広告主1つ

siege aborted due to excessive socket failure; you
can change the failure threshold in $HOME/.siegerc

Transactions:              33773 hits
Availability:              97.03 %
Elapsed time:              29.73 secs
Data transferred:          73.72 MB
Response time:              0.26 secs
Transaction rate:        1135.99 trans/sec
Throughput:             2.48 MB/sec
Concurrency:              291.78
Successful transactions:       33773
Failed transactions:            1035
Longest transaction:            4.17
Shortest transaction:           0.00

2Core 2GB max_connections=1000 広告主2つ

Transactions:               331008 hits
Availability:               100.00 %
Elapsed time:               386.27 secs
Data transferred:           737.11 MB
Response time:                  0.08 secs
Transaction rate:           856.93 trans/sec
Throughput:                     1.91 MB/sec
Concurrency:                65.64
Successful transactions:    331079
Failed transactions:            0
Longest transaction:            2.16
Shortest transaction:           0.00

単一広告主

4Core 4GB max_connections=100

Transactions:              36268 hits
Availability:              98.39 %
Elapsed time:              25.69 secs
Data transferred:          80.05 MB
Response time:              0.14 secs
Transaction rate:        1411.76 trans/sec
Throughput:             3.12 MB/sec
Concurrency:              192.32
Successful transactions:       36895
Failed transactions:             593
Longest transaction:            3.11
Shortest transaction:           0.00

4Core 4GB max_connections=1000

Transactions:              24276 hits
Availability:              98.69 %
Elapsed time:              31.99 secs
Data transferred:          51.15 MB
Response time:              0.12 secs
Transaction rate:         758.86 trans/sec
Throughput:             1.60 MB/sec
Concurrency:               90.85
Successful transactions:       24276
Failed transactions:             321
Longest transaction:            7.02
Shortest transaction:           0.00

複数広告主(2つ)の場合

4Core 4GB max_connections=100

$ siege -c 1000 -f siege.txt 
Transactions:              14427 hits
Availability:              96.79 %
Elapsed time:              12.03 secs
Data transferred:          32.62 MB
Response time:              0.35 secs
Transaction rate:        1199.25 trans/sec
Throughput:             2.71 MB/sec
Concurrency:              415.79
Successful transactions:       15045
Failed transactions:             479
Longest transaction:            3.16
Shortest transaction:           0.00

4Core 4GB max_connections=1000

Transactions:              10042 hits
Availability:              99.10 %
Elapsed time:               9.13 secs
Data transferred:          24.07 MB
Response time:              0.21 secs
Transaction rate:        1099.89 trans/sec
Throughput:             2.64 MB/sec
Concurrency:              227.79
Successful transactions:       10506
Failed transactions:              91
Longest transaction:            3.08
Shortest transaction:           0.00

4000アクセスしたら

余裕で落ちた。 最後一人になったから,2000でもきついかも.

結論

mysql session数増やすと、(メモリ)負荷がphpよりもmysqlのが重くなった。

スケールアウト

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9c:a3:ba:27:00:98 brd ff:ff:ff:ff:ff:ff
    inet 153.120.92.233/24 brd 153.120.92.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe27:98/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9c:a3:ba:21:7a:d6 brd ff:ff:ff:ff:ff:ff

MACアドレス:9c:a3:ba:21:7a:d6
IPアドレス:153.120.92.233

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=xxx.xxx.xxx.xxx
# IPADDR=153.120.92.233
HWADDR=9c:a3:ba:21:7a:d6
# HWADDR=xxxxxxxxx
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes

AP vi /home/demouser/public/revive/var/xxx.conf.php

 [database]
type=mysqli
#host=localhost
host=133.242.52.98 // 相手のDB
socket=
port=3306
username=demouser
password=demopass
name=groupwork
persistent=
mysql4_compatibility=1
protocol=tcp
compress=
ssl=
capath=
ca=

DB

 mysql > GRANT USAGE ON *.* TO 'demouser'@'%' IDENTIFIED BY PASSWORD 
'*F0938B2F776FE968C18CA5DF2ADA84CB322BE47F';
mysql > GRANT ALL PRIVILEGES ON `groupwork`.* TO 'demouser'@'%';
# firewall-cmd --permanent --add-port=3306/tcp
# firewall-cmd --reload

AWSとかが流行った理由

自動でスケールアップしてくれるからAWSは楽なのでは、アクセスが安定しないサービスでは対応が楽ちん。 また、どれくらいアクセスが来るのか分からないような新サービスなどなどにも使える。 オンプレだと、最初に用意したものから、スケールアップするのに時間がかかる。また、スケールダウンも同じこと。

サービスによってオンプレ、クラウドの管理費用が変わってくる。

オンプレに掛かりそうな費用

スケールアウトする場合

スケールアップする場合