ç§ãã¡ãç§»åããŠããèšç»ãæãåºããŸãããïŒ
1éšãæè¡çãªã¿ã¹ã¯ãšãœãªã¥ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã決å®ããgolangã§ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã
ããŒã2ïŒããªãã¯ä»ããã«ããŸãïŒãã¢ããªã±ãŒã·ã§ã³ãæ¬çªç°å¢ã«ãªãªãŒã¹ããã¹ã±ãŒã©ãã«ã«ããŠè² è·ããã¹ãããŸãã
ããŒã3ãã¡ãã»ãŒãžããã¡ã€ã«ã§ã¯ãªããããã¡ã«ä¿åããå¿ èŠãããçç±ãçè§£ããkafkaãrabbitmqãããã³yandexãã¥ãŒãµãŒãã¹ãæ¯èŒããŠã¿ãŸãããã
ããŒã4ã Clickhouseã¯ã©ã¹ã¿ãŒãå±éããããã®ãããã¡ãŒããããŒã¿ã転éããã¹ããªãŒãã³ã°ãäœæããããŒã¿ã¬ã³ãºã§èŠèŠåãèšå®ããŸãã
ããŒã5ãã€ã³ãã©ã¹ãã©ã¯ãã£å šäœãé©åãªåœ¢ã«ããŸããããgitlabciã䜿çšããŠci / cdãæ§æããconsulãšprometheusã䜿çšããŠç£èŠãšãµãŒãã¹æ€åºãæ¥ç¶ããŸãã
ããŠãç§ãã¡ã®ã¿ã¹ã¯ã«ç§»ããŸãããã
ç§ãã¡ã¯çç£ã«æ³šãã§ããŸã
ã§ã¯ããŒã1ãæã ã¯ãã¢ããªã±ãŒã·ã§ã³ãçµã¿ç«ãŠãããããã¹ããããŸãå±éã®ããã®æºåãã§ããŠããã©ã€ããŒãã³ã³ããã¬ãžã¹ããªã«ç»åãã¢ããããŒãããŸããã
äžè¬ã«ãæ¬¡ã®æé ã¯ã»ãŒæçœã§ããä»®æ³ãã·ã³ãäœæããããŒããã©ã³ãµãŒãèšå®ããã¯ã©ãŠããã¬ã¢ãžã®ãããã·ã«DNSåãç»é²ããŸããããããç§ã¯ãã®ãªãã·ã§ã³ãç§ãã¡ã®å§èšæ¡ä»¶ãšå³å¯ã«äžèŽããªãããšãæããŠããŸããè² è·ãå¢å ããå Žåã«ãµãŒãã¹ãæ¡åŒµããèŠæ±ãåŠçã§ããªãå£ããããŒãããµãŒãã¹ããç Žæ£ã§ããããã«ããããšèããŠããŸãã
ã¹ã±ãŒãªã³ã°ã«ã¯ãã³ã³ãã¥ãŒãã£ã³ã°ã¯ã©ãŠãã§äœ¿çšå¯èœãªã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒãã䜿çšããŸãããã³ãã¬ãŒãããä»®æ³ãã·ã³ãäœæãããã«ã¹ãã§ãã¯ã䜿çšããŠãããã®å¯çšæ§ãç£èŠããè² è·ãå¢å ããå Žåã«ããŒãã®æ°ãèªåçã«å¢ããããšãã§ããŸãã詳现ã¯ãã¡ãã
質åã¯1ã€ã ãã§ããä»®æ³ãã·ã³ã«äœ¿çšãããã³ãã¬ãŒãã¯ã©ãã§ããããã¡ãããlinuxãã€ã³ã¹ããŒã«ããŠæ§æããã€ã¡ãŒãžãäœæããŠãYandex.Cloudã®ã€ã¡ãŒãžã¹ãã¬ãŒãžã«ã¢ããããŒãããããšãã§ããŸããããããç§ãã¡ã«ãšã£ãŠãããã¯é·ãå°é£ãªæ ã§ããä»®æ³ãã·ã³ã®äœææã«äœ¿çšã§ããããŸããŸãªã€ã¡ãŒãžã確èªããŠãããšãã«ãè峿·±ãã€ã³ã¹ã¿ã³ã¹ã§ããã³ã³ãããŒæé©åã€ã¡ãŒãžïŒhttps://cloud.yandex.ru/docs/cos/concepts/ïŒã«åºããããŸãããããã«ããããããã¯ãŒã¯ã¢ãŒããã¹ãã§åäžã®ããã«ãŒã³ã³ãããå®è¡ã§ããŸããã€ãŸããä»®æ³ãã·ã³ãäœæããå Žåãã³ã³ããã«æé©åãããã€ã¡ãŒãžã®ãããæ¬¡ã®ä»æ§ã瀺ãããŸãã
spec:
containers:
- name: api
image: vozerov/events-api:v1
command:
- /app/app
args:
- -kafka=kafka.ru-central1.internal:9092
securityContext:
privileged: false
tty: false
stdin: false
restartPolicy: Always
ãããŠãä»®æ³ãã·ã³ãèµ·åããåŸããã®ã³ã³ããã¯ããŠã³ããŒããããããŒã«ã«ã§èµ·åãããŸãã
ãã®ã¹ããŒã ã¯éåžžã«è峿·±ããã®ã§ãã
- cpuã®äœ¿çšçã60ïŒ ãè¶ ãããšãèªåã¹ã±ãŒãªã³ã°ã䜿çšããŠã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒããäœæããŸãã
- ãã³ãã¬ãŒããšããŠãDockerã³ã³ãããèµ·åããããã®ã³ã³ããæé©åã€ã¡ãŒãžãšãã©ã¡ãŒã¿ã䜿çšããŠä»®æ³ãã·ã³ãæå®ããŸãã
- ããŒããã©ã³ãµãŒãäœæããŸããããŒããã©ã³ãµãŒã¯ã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒãã確èªããä»®æ³ãã·ã³ã远å ãŸãã¯åé€ãããšãã«èªåçã«æŽæ°ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ãã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒããšããŠãããã©ã³ãµãŒèªäœã«ãã£ãŠãç£èŠãããŸããããã«ãããã¢ã¯ã»ã¹ã§ããªãä»®æ³ãã·ã³ã®ãã©ã³ã¹ã厩ããŸãã
èšç»ã®ããã ïŒ
terraformã䜿çšããŠã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒããäœæããŠã¿ãŸãããã説æå šäœã¯instance-group.tfã«ãããèŠç¹ã«ã€ããŠã³ã¡ã³ãããŸãã
- ãµãŒãã¹ã¢ã«ãŠã³ãIDã¯ãä»®æ³ãã·ã³ã®äœæãšåé€ã«äœ¿çšãããŸããã¡ãªã¿ã«ãäœæããå¿
èŠããããŸãã
service_account_id = yandex_iam_service_account.instances.id - spec.yml, , . registry , - â docker hub. , â
metadata = { docker-container-declaration = file("spec.yml") ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}" } - service account id, container optimized image, container registry . registry , :
service_account_id = yandex_iam_service_account.docker.id - Scale policy. :
autoscale { initialsize = 3 measurementduration = 60 cpuutilizationtarget = 60 minzonesize = 1 maxsize = 6 warmupduration = 60 stabilizationduration = 180 }
. â fixed_scale , auth_scale.
:
initial size â ;
measurement_duration â ;
cpu_utilization_target â , ;
min_zone_size â â , ;
max_size â ;
warmup_duration â , , ;
stabilization_duration â â , .
. 3 (initial_size), (min_zone_size). cpu (measurement_duration). 60% (cpu_utilization_target), , (max_size). 60 (warmup_duration), cpu. 120 (stabilization_duration), 60% (cpu_utilization_target).
â https://cloud.yandex.ru/docs/compute/concepts/instance-groups/policies#auto-scale-policy - Allocation policy. , , â .
allocationpolicy { zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"] } - :
deploy_policy { maxunavailable = 1 maxcreating = 1 maxexpansion = 1 maxdeleting = 1 }
max_creating â ;
max_deleting â ;
max_expansion â ;
max_unavailable â RUNNING, ;
â https://cloud.yandex.ru/docs/compute/concepts/instance-groups/policies#deploy-policy - :
load_balancer { target_group_name = "events-api-tg" }
ã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒããäœæãããšãã«ãããŒããã©ã³ãµãŒã®ã¿ãŒã²ããã°ã«ãŒããäœæããããšãã§ããŸããé¢é£ããä»®æ³ãã·ã³ã察象ãšããŸããåé€ãããå ŽåãããŒãã¯ãã©ã³ã·ã³ã°ããåé€ãããäœææã«ãç¶æ ãã§ãã¯ã«åæ ŒããåŸã«ãã©ã³ã·ã³ã°ã«è¿œå ãããŸãã
ãã¹ãŠãåºæ¬çãªããã§ããã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒããå®éã«ã¯ã°ã«ãŒãèªäœã®ãµãŒãã¹ã¢ã«ãŠã³ããäœæããŸãããã
vozerov@mba:~/events/terraform (master *) $ terraform apply -target yandex_iam_service_account.instances -target yandex_resourcemanager_folder_iam_binding.editor
... skipped ...
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
vozerov@mba:~/events/terraform (master *) $ terraform apply -target yandex_compute_instance_group.events_api_ig
... skipped ...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
ã°ã«ãŒããäœæãããŸãã-衚瀺ããã³ç¢ºèªã§ããŸãïŒ
vozerov@mba:~/events/terraform (master *) $ yc compute instance-group list
+----------------------+---------------+------+
| ID | NAME | SIZE |
+----------------------+---------------+------+
| cl1s2tu8siei464pv1pn | events-api-ig | 3 |
+----------------------+---------------+------+
vozerov@mba:~/events/terraform (master *) $ yc compute instance list
+----------------------+---------------------------+---------------+---------+----------------+-------------+
| ID | NAME | ZONE ID | STATUS | EXTERNAL IP | INTERNAL IP |
+----------------------+---------------------------+---------------+---------+----------------+-------------+
| ef3huodj8g4gc6afl0jg | cl1s2tu8siei464pv1pn-ocih | ru-central1-c | RUNNING | 130.193.44.106 | 172.16.3.3 |
| epdli4s24on2ceel46sr | cl1s2tu8siei464pv1pn-ipym | ru-central1-b | RUNNING | 84.201.164.196 | 172.16.2.31 |
| fhmf37k03oobgu9jmd7p | kafka | ru-central1-a | RUNNING | 84.201.173.41 | 172.16.1.31 |
| fhmh4la5dj0m82ihoskd | cl1s2tu8siei464pv1pn-ahuj | ru-central1-a | RUNNING | 130.193.37.94 | 172.16.1.37 |
| fhmr401mknb8omfnlrc0 | monitoring | ru-central1-a | RUNNING | 84.201.159.71 | 172.16.1.14 |
| fhmt9pl1i8sf7ga6flgp | build | ru-central1-a | RUNNING | 84.201.132.3 | 172.16.1.26 |
+----------------------+---------------------------+---------------+---------+----------------+-------------+
vozerov@mba:~/events/terraform (master *) $
æ²ãã£ãååã®3ã€ã®ããŒããç§ãã¡ã®ã°ã«ãŒãã§ããã¢ããªã±ãŒã·ã§ã³ãå©çšå¯èœã§ããããšã確èªããŸãã
vozerov@mba:~/events/terraform (master *) $ curl -D - -s http://130.193.44.106:8080/status
HTTP/1.1 200 OK
Date: Mon, 13 Apr 2020 16:32:04 GMT
Content-Length: 3
Content-Type: text/plain; charset=utf-8
ok
vozerov@mba:~/events/terraform (master *) $ curl -D - -s http://84.201.164.196:8080/status
HTTP/1.1 200 OK
Date: Mon, 13 Apr 2020 16:32:09 GMT
Content-Length: 3
Content-Type: text/plain; charset=utf-8
ok
vozerov@mba:~/events/terraform (master *) $ curl -D - -s http://130.193.37.94:8080/status
HTTP/1.1 200 OK
Date: Mon, 13 Apr 2020 16:32:15 GMT
Content-Length: 3
Content-Type: text/plain; charset=utf-8
ok
vozerov@mba:~/events/terraform (master *) $
ã¡ãªã¿ã«ãubuntuãã°ã€ã³ã§ä»®æ³ãã·ã³ã«ã¢ã¯ã»ã¹ããŠãã³ã³ãããã°ãšãã®èµ·åæ¹æ³ã確èªã§ããŸãã
ãªã¯ãšã¹ããéä¿¡ã§ãããã©ã³ãµãŒã®ã¿ãŒã²ããã°ã«ãŒããäœæãããŠããŸãã
vozerov@mba:~/events/terraform (master *) $ yc load-balancer target-group list
+----------------------+---------------+---------------------+-------------+--------------+
| ID | NAME | CREATED | REGION ID | TARGET COUNT |
+----------------------+---------------+---------------------+-------------+--------------+
| b7rhh6d4assoqrvqfr9g | events-api-tg | 2020-04-13 16:23:53 | ru-central1 | 3 |
+----------------------+---------------+---------------------+-------------+--------------+
vozerov@mba:~/events/terraform (master *) $
ãã§ã«ãã©ã³ãµãŒãäœæããŠãããã«ãã©ãã£ãã¯ãéä¿¡ããŠã¿ãŸãããïŒãã®ããã»ã¹ã¯ãload-balancer.tfã®éèŠãªãã€ã³ãã§èª¬æãããŠããŸãã
- ãã©ã³ãµãŒããªãã¹ã³ããå€éšããŒããšãä»®æ³ãã·ã³ã«èŠæ±ãéä¿¡ããããŒãã瀺ããŸããå€éšã¢ãã¬ã¹ã®ã¿ã€ãã瀺ããŸã-ipv4ãçŸæç¹ã§ã¯ãããŒããã©ã³ãµãŒã¯ãã©ã³ã¹ããŒãã¬ãã«ã§åäœãããããtcp / udpæ¥ç¶ã®ãã©ã³ã¹ãåãããšããã§ããŸããããã®ãããç¬èªã®ä»®æ³ãã·ã³ããŸãã¯httpsãåŠçã§ããå€éšãµãŒãã¹ïŒcloudflareãªã©ïŒã®ããããã§sslããã蟌ãå¿
èŠããããŸãã
listener { name = "events-api-listener" port = 80 target_port = 8080 external_address_spec { ipversion = "ipv4" } } healthcheck { name = "http" http_options { port = 8080 path = "/status" } }
ãã«ã¹ãã§ãã¯ãããã§ã¯ãããŒãããã§ãã¯ããããã®ãã©ã¡ãŒã¿ãŒãæå®ããŸããããŒã8080ã®http url / statusã§ãã§ãã¯ããŸãããã§ãã¯ã倱æãããšããã·ã³ã®ãã©ã³ã¹ã厩ããŸãã
ããŒããã©ã³ãµãŒã®è©³çް-cloud.yandex.ru/docs/load-balancer/conceptsãè峿·±ãããšã«ããã©ã³ãµãŒã§DDOSä¿è·ãµãŒãã¹ã«æ¥ç¶ã§ããŸãããã®åŸããã§ã«ã¯ãªãŒã³ã¢ããããããã©ãã£ãã¯ããµãŒããŒã«éä¿¡ãããŸãã
ç§ãã¡ã¯äœæããŸãïŒ
vozerov@mba:~/events/terraform (master *) $ terraform apply -target yandex_lb_network_load_balancer.events_api_lb
... skipped ...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
äœæãããã©ã³ãµãŒã®IPãåãåºããäœæ¥ããã¹ãããŸãã
vozerov@mba:~/events/terraform (master *) $ yc load-balancer network-load-balancer get events-api-lb
id:
folder_id:
created_at: "2020-04-13T16:34:28Z"
name: events-api-lb
region_id: ru-central1
status: ACTIVE
type: EXTERNAL
listeners:
- name: events-api-listener
address: 130.193.37.103
port: "80"
protocol: TCP
target_port: "8080"
attached_target_groups:
- target_group_id:
health_checks:
- name: http
interval: 2s
timeout: 1s
unhealthy_threshold: "2"
healthy_threshold: "2"
http_options:
port: "8080"
path: /status
ããã§ãã¡ãã»ãŒãžãæ®ãããšãã§ããŸãã
vozerov@mba:~/events/terraform (master *) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://130.193.37.103/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 16:42:57 GMT
Content-Length: 41
{"status":"ok","partition":0,"Offset":1}
vozerov@mba:~/events/terraform (master *) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://130.193.37.103/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 16:42:58 GMT
Content-Length: 41
{"status":"ok","partition":0,"Offset":2}
vozerov@mba:~/events/terraform (master *) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://130.193.37.103/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 16:43:00 GMT
Content-Length: 41
{"status":"ok","partition":0,"Offset":3}
vozerov@mba:~/events/terraform (master *) $
çŽ æŽãããããã¹ãŠãæ©èœããŸããhttpsçµç±ã§å©çšã§ããããã«ãæåŸã®ä»äžãã¯1ã€ã ãã§ããcloudflareããããã·ã«æ¥ç¶ããŸããã¯ã©ãŠããã¬ã¢ãªãã§è¡ãããšã«ããå Žåã¯ããã®ã¹ããããã¹ãããã§ããŸãã
vozerov@mba:~/events/terraform (master *) $ terraform apply -target cloudflare_record.events
... skipped ...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
HTTPSãä»ãããã¹ãïŒ
vozerov@mba:~/events/terraform (master *) $ curl -D - -s -X POST -d '{"key1":"data1"}' https://events.kis.im/post
HTTP/2 200
date: Mon, 13 Apr 2020 16:45:01 GMT
content-type: application/json
content-length: 41
set-cookie: __cfduid=d7583eb5f791cd3c1bdd7ce2940c8a7981586796301; expires=Wed, 13-May-20 16:45:01 GMT; path=/; domain=.kis.im; HttpOnly; SameSite=Lax
cf-cache-status: DYNAMIC
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 5836a7b1bb037b2b-DME
{"status":"ok","partition":0,"Offset":5}
vozerov@mba:~/events/terraform (master *) $
ãã¹ãŠãããããæ©èœããŠããŸãã
è² è·ã®ãã¹ã
ããããæãè峿·±ãã¹ããããæ®ã£ãŠããŸããããšãã°ããµãŒãã¹ã®è² è·ãã¹ããå®è¡ããŠããã€ãã®æ°å€ãååŸããããšã§ããããšãã°ã1ã€ã®èŠæ±ã®åŠçæéã®95ããŒã»ã³ãã§ããããŒãã°ã«ãŒãã®èªåã¹ã±ãŒãªã³ã°ããã¹ãããã®ãããã§ãããã
ãã¹ããéå§ããåã«ã1ã€ã®ç°¡åãªããšãè¡ã䟡å€ããããŸããã¢ããªã±ãŒã·ã§ã³ããŒããprometheusã«è¿œå ããŠãèŠæ±ã®æ°ãš1ã€ã®èŠæ±ã®åŠçæéã远跡ããŸãããŸã ãµãŒãã¹æ€åºã远å ããŠããªãããïŒãã®ã·ãªãŒãºã®èšäº5ã§è¿œå ããŸãïŒãç£èŠãµãŒããŒã«static_configsãæžã蟌ãã ãã§ãã ycèšç®ã€ã³ã¹ã¿ã³ã¹ãªã¹ãããæšæºçãªæ¹æ³ã§ãã®IPãèŠã€ããŠãããæ¬¡ã®èšå®ã/etc/prometheus/prometheus.ymlã«è¿œå ã§ããŸãã
- job_name: api
metrics_path: /metrics
static_configs:
- targets:
- 172.16.3.3:8080
- 172.16.2.31:8080
- 172.16.1.37:8080
ãã·ã³ã®IPã¢ãã¬ã¹ã¯ãycã³ã³ãã¥ãŒãã£ã³ã°ã€ã³ã¹ã¿ã³ã¹ãªã¹ãããååŸããããšãã§ããŸãã systemctl restart prometheusã䜿çšããŠprometheusãåèµ·åããããŒã9090ïŒ84.201.159.71:9090ïŒã§äœ¿çšå¯èœãªWebã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã¯ã»ã¹ããŠãããŒããæ£åžžã«ããŒãªã³ã°ãããŠããããšã確èªããŸãã
grafanaãã©ã«ããŒããgrafanaã«ããã·ã¥ããŒãã远å ããŸããããããŒã3000ïŒ84.201.159.71:3000ïŒã§ããŠãŒã¶ãŒå/ãã¹ã¯ãŒã-admin / Passwordã䜿çšããŠGrafanaã«ã¢ã¯ã»ã¹ããŸããæ¬¡ã«ãããŒã«ã«ããã¡ããŠã¹ã远å ããããã·ã¥ããŒããã€ã³ããŒãããŸããå®éããã®æç¹ã§æºåã¯å®äºããŠããŸããã€ã³ã¹ããŒã«æã«ãªã¯ãšã¹ããã¹ããŒã§ããŸãã
ãã¹ãã«ã¯ãoverload.yandex.netã®ãã©ã°ã€ã³ãšãšãã«yandexã¿ã³ã¯ïŒhttps://yandex.ru/dev/tank/ïŒã䜿çšããŸããããã«ãããã¿ã³ã¯ãåä¿¡ããããŒã¿ãèŠèŠåã§ããŸããäœæ¥ããå¿ èŠããããã®ã¯ãã¹ãŠãå ã®gitãªããžããªã®loadãã©ã«ãã«ãããŸãã
ããã«ãããã®ã«ã€ããŠå°ãïŒ
- token.txt-overload.yandex.netããã®APIããŒãæã€ãã¡ã€ã«-ãµãŒãã¹ã«ç»é²ããããšã§ååŸã§ããŸãã
- load.yml-ã¿ã³ã¯ã®æ§æãã¡ã€ã«ããã¹ãçšã®ãã¡ã€ã³ããããŸã-events.kis.imãrpsããŒãã¿ã€ããããã³3åéã®1ç§ããã15,000ã®èŠæ±æ°ã
- data-ammo.txt圢åŒã§æ§æãçæããããã®ç¹å¥ãªãã¡ã€ã«ããã®äžã«ããªã¯ãšã¹ãã®ã¿ã€ããURLãçµ±èšã衚瀺ããããã®ã°ã«ãŒããããã³éä¿¡ããå¿ èŠã®ããå®éã®ããŒã¿ãèšè¿°ããŸãã
- makeammo.py-ããŒã¿ãã¡ã€ã«ããammo.txtãã¡ã€ã«ãçæããããã®ã¹ã¯ãªãããã¹ã¯ãªããã®è©³çް-yandextank.readthedocs.io/en/latest/ammo_generators.html
- ammo.txt-ãªã¯ãšã¹ãã®éä¿¡ã«äœ¿çšãããçµæã®ammoãã¡ã€ã«ã
ãã¹ãã®ããã«ãYandex.Cloudã®å€éšã«ããä»®æ³ãã·ã³ãïŒãã¹ãŠãå ¬å¹³ã«ãªãããã«ïŒååŸãããã®ããã®DNSã¬ã³ãŒããload.kis.imã«äœæããŸãããhttps://hub.docker.com/r/direvius/yandex-tank/ã®ç»åã䜿çšããŠã¿ã³ã¯ãèµ·åããã®ã§ãããã§ããã«ãŒã転ãããŸããã
ããŠãå§ããŸãããããã©ã«ãããµãŒããŒã«ã³ããŒããããŒã¯ã³ã远å ããŠãã¿ã³ã¯ãèµ·åããŸãã
vozerov@mba:~/events (master *) $ rsync -av load/ cloud-user@load.kis.im:load/
... skipped ...
sent 2195 bytes received 136 bytes 1554.00 bytes/sec
total size is 1810 speedup is 0.78
vozerov@mba:~/events (master *) $ ssh load.kis.im -l cloud-user
cloud-user@load:~$ cd load/
cloud-user@load:~/load$ echo "TOKEN" > token.txt
cloud-user@load:~/load$ sudo docker run -v $(pwd):/var/loadtest --net host --rm -it direvius/yandex-tank -c load.yaml ammo.txt
No handlers could be found for logger "netort.resource"
17:25:25 [INFO] New test id 2020-04-13_17-25-25.355490
17:25:25 [INFO] Logging handler <logging.StreamHandler object at 0x7f209a266850> added
17:25:25 [INFO] Logging handler <logging.StreamHandler object at 0x7f209a20aa50> added
17:25:25 [INFO] Created a folder for the test. /var/loadtest/logs/2020-04-13_17-25-25.355490
17:25:25 [INFO] Configuring plugins...
17:25:25 [INFO] Loading plugins...
17:25:25 [INFO] Testing connection to resolved address 104.27.164.45 and port 80
17:25:25 [INFO] Resolved events.kis.im into 104.27.164.45:80
17:25:25 [INFO] Configuring StepperWrapper...
17:25:25 [INFO] Making stpd-file: /var/loadtest/ammo.stpd
17:25:25 [INFO] Default ammo type ('phantom') used, use 'phantom.ammo_type' option to override it
... skipped ...
ããã ãã§ããããã»ã¹ã¯å®è¡äžã§ããã³ã³ãœãŒã«ã§ã¯ã次ã®ãã
ã«ãªããŸããããã»ã¹ãå®äºããã®ãåŸ ã£ãŠãå¿çæéãèŠæ±ã®æ°ããããŠãã¡ãããä»®æ³ãã·ã³ã®ã°ã«ãŒãã®èªåã¹ã±ãŒãªã³ã°ãç£èŠããŠããŸãã Webã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠä»®æ³ãã·ã³ã®ã°ã«ãŒããç£èŠã§ããŸããä»®æ³ãã·ã³ã®ã°ã«ãŒãã®èšå®ã«ã¯ã[ç£èŠ]ã¿ãããããŸãã
ã芧ã®ãšãããããŒãã¯CPUã®50ïŒ ãŸã§ãããŒããããªãã£ããããèªåã¹ã±ãŒãªã³ã°ãã¹ããç¹°ãè¿ãå¿ èŠããããŸãããšãããããGrafanaã§ã®ãªã¯ãšã¹ãã®åŠçæéãèŠãŠã¿ãŸãããã
ãªã¯ãšã¹ãã®æ°ïŒããŒããããçŽ3000ïŒã¯ã10,000ãŸã§å°ãããŒããããŸããã§ãããå¿çæéã¯åã°ããŸã-ãªã¯ãšã¹ãããšã«çŽ11ããªç§ãç®ç«ã€ã®ã¯172.16.1.37ã ãã§ããªã¯ãšã¹ããåŠçããæéã¯ååã§ãããããããããè«ççã§ããã¡ãã»ãŒãžãæ ŒçŽããkafkaãšåãru-central1-ã¢ãã€ã©ããªãã£ãŒãŸãŒã³ã«ãããŸãã
ã¡ãªã¿ã«ãæåã®èµ·åã«é¢ããã¬ããŒãã¯ããªã³ã¯https://overload.yandex.net/265967ã§å ¥æã§ããŸãã
ããã§ã¯ããã£ãšæ¥œãããã¹ããå®è¡ããŸããããinstancesïŒ2000ãã©ã¡ãŒã¿ã远å ããŠã1ç§ããã15,000ãªã¯ãšã¹ããååŸãããã¹ãæéã10åã«å¢ãããŸããçµæã®ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
overload:
enabled: true
package: yandextank.plugins.DataUploader
token_file: "token.txt"
phantom:
address: 130.193.37.103
load_profile:
load_type: rps
schedule: const(15000, 10m)
instances: 2000
console:
enabled: true
telegraf:
enabled: false
æ³šææ·±ãèªè ã¯ãç§ãã¢ãã¬ã¹ããã©ã³ãµãŒã®IPã«å€æŽããããšã«æ°ä»ãã§ããã-ããã¯ãcloudflareã1ã€ã®IPããã®èšå€§ãªæ°ã®èŠæ±ã«å¯ŸããŠç§ããããã¯ãå§ãããšããäºå®ã«ãããã®ã§ããYandex.Cloudãã©ã³ãµãŒã«çŽæ¥ã¿ã³ã¯ãã»ããããå¿ èŠããããŸãããèµ·ååŸã次ã®å³ã確èªã§ããŸã
ãCPU䜿çšçãå¢å ããã¹ã±ãžã¥ãŒã©ãŒã¯ãŸãŒã³Bã®ããŒãæ°ãå¢ããããšã決å®ããŸãããããã¯ãã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒããã°ã§ç¢ºèªã§ããŸãã
vozerov@mba:~/events/load (master *) $ yc compute instance-group list-logs events-api-ig
2020-04-13 18:26:47 cl1s2tu8siei464pv1pn-ejok.ru-central1.internal 1m AWAITING_WARMUP_DURATION -> RUNNING_ACTUAL
2020-04-13 18:25:47 cl1s2tu8siei464pv1pn-ejok.ru-central1.internal 37s OPENING_TRAFFIC -> AWAITING_WARMUP_DURATION
2020-04-13 18:25:09 cl1s2tu8siei464pv1pn-ejok.ru-central1.internal 43s CREATING_INSTANCE -> OPENING_TRAFFIC
2020-04-13 18:24:26 cl1s2tu8siei464pv1pn-ejok.ru-central1.internal 6s DELETED -> CREATING_INSTANCE
2020-04-13 18:24:19 cl1s2tu8siei464pv1pn-ozix.ru-central1.internal 0s PREPARING_RESOURCES -> DELETED
2020-04-13 18:24:19 cl1s2tu8siei464pv1pn-ejok.ru-central1.internal 0s PREPARING_RESOURCES -> DELETED
2020-04-13 18:24:15 Target allocation changed in accordance with auto scale policy in zone ru-central1-a: 1 -> 2
2020-04-13 18:24:15 Target allocation changed in accordance with auto scale policy in zone ru-central1-b: 1 -> 2
... skipped ...
2020-04-13 16:23:57 Balancer target group b7rhh6d4assoqrvqfr9g created
2020-04-13 16:23:43 Going to create balancer target group
ã¹ã±ãžã¥ãŒã©ãŒãä»ã®ãŸãŒã³ã®ãµãŒããŒã®æ°ãå¢ããããšã決å®ããŸããããå€éšIPã¢ãã¬ã¹ã®å¶éã䜿ãæãããŸãã:)ã¡ãªã¿ã«ãã¯ã©ãŒã¿ãšå¿ èŠãªå€ãæå®ããŠããã¯ãã«ã«ãµããŒãã«ãªã¯ãšã¹ãããããšã§ãµãŒããŒãå¢ããããšãã§ããŸãã
çµè«
èšäºã¯ç°¡åã§ã¯ãããŸããã§ãã-éãšæ å ±ã®éã®äž¡æ¹ã§ãããããç§ãã¡ã¯æãå°é£ãªæ®µéãçµãŠã次ã®ããšãè¡ããŸããã
- ç£èŠãškafkaãäžããŸããã
- , .
- load balancerâ cloudflare ssl .
次åã¯ãrabbitmq / kafka / yandexãã¥ãŒãµãŒãã¹ãæ¯èŒããŠãã¹ãããŠã¿ãŸãããã
ä¹ããæåŸ ïŒ
-ç§ãã¡ã¯ãYandexã®ã¯ã©ãŠãäžã§æ¯ç§äžã®èŠæ±ãåãå ¥ããïŒ*ãã®ææã¯REBRAINïŒYandex.CloudãªãŒãã³ã¯ãŒã¯ã·ã§ããã®ãããªé²ç»ã§ããhttps://youtu.be/cZLezUm0ekE
ããªãããªã³ã©ã€ã³ã«ãã®ãããªã€ãã³ãã«åºåžãããªã¢ã«ã¿ã€ã ã§è³ªåãããããšã«èå³ãããå Žåã«æ¥ç¶ããã«ã¯ãREBRAINã«ãããã£ãã«DevOpsã
ãã®ãããªã€ãã³ããéå¬ããæ©äŒãäžããŠãããYandex.Cloudã«ç¹ã«æè¬ããŸããããããžã®ãªã³ã¯
ã¯ã©ãŠããžã®ç§»è¡ãå¿ èŠãªå ŽåããŸãã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã€ããŠè³ªåãããå Žåã¯ãé æ ®ãªããªã¯ãšã¹ããæ®ããŠãã ããã
PSç§ãã¡ã¯æã«2åã®ç¡æç£æ»ãè¡ã£ãŠããŸããããããããªãã®ãããžã§ã¯ãã¯ãã®äžã«å«ãŸããã§ãããã