GCP - gksrlfw/study GitHub Wiki

Cloud Function

ꡬ쑰

aws lambda κ΅¬μ‘°μž…λ‹ˆλ‹€.

Front Env Invoke

동기, 비동기 ν˜ΈμΆœμ„ λͺ¨λ‘ κ΄€μž₯ν•©λ‹ˆλ‹€.

Counting Service

μ‚¬μš©μžκ°€ μ–Όλ§ˆλ‚˜ λ§Žμ€ API μš”μ²­μ„ ν•˜λŠ”μ§€ λͺ¨λ‹ˆν„°λ§ν•˜κ³  κ²½μš°μ— λ”°λΌμ„œ μ„œλΉ„μŠ€λ₯Ό μ œν•œν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

Worker

고객 ν•¨μˆ˜(μ½”λ“œ)κ°€ μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰λ˜λŠ” μ‹€μ œ μ»¨ν…Œμ΄λ„ˆ ν™˜κ²½μœΌλ‘œ, OS, Host system 등을 κ°–κ³  μžˆλŠ” ν˜ΈμŠ€νŠΈμ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€. λ…λ¦½λ˜μ–΄μžˆλŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

Worker Manager

μ‹€μ œ μ»¨ν…Œμ΄λ„ˆμ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κ³  API μš”μ²­μ„ κ°€μš©κ°€λŠ₯ν•œ μ»¨ν…Œμ΄λ„ˆλ‘œ μ€‘κ³„ν•©λ‹ˆλ‹€.

μ›Œμ»€ λ§€λ‹ˆμ €κ°€ λ™μž‘μ„ μ€‘μ§€ν•˜λ©΄ μ–΄λ– ν•œ μš”μ²­λ„ μ›Œμ»€μ—κ²Œ 갈 수 μ—†μœΌλ―€λ‘œ μ—¬λŸ¬κ°œμ˜ μ›Œμ»€ λ§€λ‹ˆμ €κ°€ μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Placement Service

Worker 에 sandbox ꡬ성을 μžμ› ν™œμš©λ₯ μ΄ λ†’κ³  고객 μ„œλΉ„μŠ€ 영ν–₯이 없도둝 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

κΈ°λŠ₯

Load balancing

image

κ°€μš© μ˜μ—­μœΌλ‘œ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•΄μ€λ‹ˆλ‹€.

Auto scaling

image

μ»΄ν“¨νŒ… μžμ›μ„ 효율적으둜 μ‚¬μš©ν•˜κΈ°μœ„ν•΄ ν™•μž₯ 및 μΆ•μ†Œλ₯Ό μžλ™ν™”ν•˜μ—¬ κ΄€λ¦¬ν•΄μ€λ‹ˆλ‹€.

worker manager κ°€ 직접 worker μ—κ²Œ μ€‘κ³„ν•˜λŠ”κ²Œ μ•„λ‹Œ, μ–΄λŠ worker λ₯Ό μ“°λŠ”κ²Œ νš¨μœ¨μ μΈμ§€ placement 에 λ¬Όμ–΄λ΄…λ‹ˆλ‹€.

Handling failures

image

Availability zone 은 λ–¨μ–΄μ ΈμžˆλŠ” μ–΄λ– ν•œ 데이터센터라고 생각할 수 μžˆμŠ΅λ‹ˆλ‹€. region μ•ˆμ— μ–΄λ € κ°€μš©μ˜μ—­μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.

μ›Œμ»€λŠ” ν˜ΈμŠ€νŠΈμ—μ„œ λ™μž‘ν•˜λŠ”λ°, ν•΄λ‹Ή 호슀트의 ν•˜λ“œμ›¨μ–΄κ°€ κ³ μž₯λ‚˜λ”λΌλ„ κ°€μš©μ˜μ—­μ— μžˆλŠ” λ‹€λ₯Έ ν˜ΈμŠ€νŠΈμ—μ„œ λ™μž‘ν•  수 μžˆλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ κ°€μš©μ˜μ—­μ— λ¬Έμ œκ°€ 생기더라도 λ‹€λ₯Έ κ°€μš©μ˜μ—­μ—μ„œ λ™μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Isolation

고객의 μ›Œν¬λ‘œλ“œ(ν•¨μˆ˜ = μ½”λ“œ)λŠ” 항상 λ…λ¦½λœ ν™˜κ²½μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

이슈

이벀트 μž¬μ‹œλ„ 이슈

pub/sub 을 톡해 νŠΈλ¦¬κ±°λ˜λŠ” cloud function 이 μž¬μ‹œλ„λ˜λŠ” ν˜„μƒμ΄ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. (cloud function μž¬μ‹œλ„ μ •μ±… 및 timeout, pub/sub ack μ œν•œμ‹œκ°„ 확인 ν•„μš”)

ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 멱등성은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ°˜λ³΅λ˜λŠ” 이벀트λ₯Ό μ‹λ³„ν•˜κ³  쀑볡, 데이터 손싀 등을 λ°©μ§€ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. 이벀트의 κ³ μœ κ°’μ„ μ‹λ³„ν•˜κ³ , ν•΄λ‹Ή μ΄λ²€νŠΈκ°€ λ‹€μ‹œ 듀어왔을 λ•Œ ν•¨μˆ˜λ₯Ό μ’…λ£Œν•΄μ£Όμ–΄ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (https://aws.amazon.com/ko/premiumsupport/knowledge-center/lambda-function-idempotent/)

cloud function μ—μ„œλŠ” 이벀트 메타데이터 정보λ₯Ό κ°€μ§€κ³  μžˆλŠ” context 객체λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

{
    "eventId": "2924206311060957",
    "timestamp": "2021-08-25T15:12:22.251Z",
    "eventType": "google.pubsub.topic.publish",
    "resource": {
        "service": "pubsub.googleapis.com",
        "name": "projects/projectName/topics/topicName",
        "type": "type.googleapis.com/google.pubsub.v1.PubsubMessage"
    }
}

λ§Œλ“€μ–΄μ Έμžˆλ˜ cloud function 의 λ™μ‹œμ— 싀행될 수 μžˆλŠ” μ΅œλŒ€ μΈμŠ€ν„΄μŠ€μ˜ μˆ˜λŠ” 1000개 μž…λ‹ˆλ‹€. ν•΄λ‹Ή function 에 db λ₯Ό μ—°κ²°ν•˜μ—¬ 이미 μ‹€ν–‰λœ μ΄λ²€νŠΈμΈμ§€ μ‹λ³„ν•˜λŠ” 것은 λΆ€λ‹΄μŠ€λŸ¬μš΄ μž‘μ—…μž…λ‹ˆλ‹€. μ•„λž˜ 두가지 방법을 μ‹œλ„ν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

방법 1. cloud storage 에 ν”Œλž˜κ·Έλ₯Ό 두어 같은 μ΄λ²€νŠΈμ— λŒ€ν•΄ μž¬μ‹œλ„λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.

방법 2. 일반 μ„œλ²„μ— κ΄€λ ¨ API λ₯Ό λ§Œλ“€μ–΄ ν˜ΈμΆœν•˜λŠ” μ‹μœΌλ‘œ 이벀트 ID λ₯Ό κ²€μ¦ν•©λ‹ˆλ‹€.