반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

DevOps Tasks

AWS Lambda 에 go routine, channel 적용으로 실행 속도 대폭 개선 본문

GO

AWS Lambda 에 go routine, channel 적용으로 실행 속도 대폭 개선

데밥스 2024. 1. 6. 01:31
728x90
반응형

 

 

AWS Lambda 와 Go 를 적용하기 전 Lambda에 를 최대 효율로 사용하는 방법에 대해서 알면 도움이 된다.

 

AWS Lambda 를 100% 활용하기

Lambda는 AWS에서 제공하는 Serverless 컴퓨팅 플랫폼이다. Serverless 란, 서버가 없다는 것이 아닌 개발자가 서버의 존재를 신경 쓸 필요가 없다는 뜻이다. 서버가 잘 돌아가고 있는지, 서버 수 및 스펙

rldnjsdlsi.tistory.com


AWS Lambda로 간단한 Proxy 서버를 구성한다.

대용량 트래픽에도 대응하기 위해 Go Routine으로 동시성을 높이고

Routine 간의 데이터 교환을 Go Channel 로 허용하여 동시작업이 제한된 방식으로 실행한다.

또한, Performance 비교로 실행 속도 또한 개선하였다.

 


Go Routine

 

goroutine

 

Go Routine 은 Go 런타임에 의해 관리되는 Go의 경량 Thread 이다.

기존 Thread 보다 더 효율적이므로 개발자는 무거운 Thread의 오버헤드 없이 동시 작업을 쉽게 실행할 수 있다.

 


 

Go Channel

 

Go Channel

 

채널은 Go Routine 이 실행을 통신하고 동기화하는 방법을 제공한다.

이는 Go Routine 간의 안전한 데이터 교환을 허용하여 동시 작업이 제어된 방식으로 실행되도록 보장한다.

Go Routine 끼리 메시지를 전달할 수 있는 메세지 큐이고 간단하게 Routine 간의 통신 채널이라고 보면 된다.

 


 

Apply Routines, Channel

 

for hostPattern, dir := range hostToDirectory {

    if strings.Contains(hostHeader, hostPattern) {
        directory = dir
        break
    }
}

 

적용 전에는 hostPattern과 일치하는 패턴을 찾기 위해서 맵을 순차적으로 반복했다.

 

ch := make(chan string, len(hostToDirectory))
var wg sync.WaitGroup

for hostPattern, dir := range hostToDirectory {
    wg.Add(1)
    go processHostPattern(hostHeader, hostPattern, dir, ch, &wg)
}

go func() {
    wg.Wait()
    close(ch)
}()

directory := <-ch

 

go processHostPattern을 사용해서 각 패턴에 대한 Routine을 생성한다.

sync.WaitGroup Channel을 닫기 전 모든 Routine 이 완료될 때까지 기다린다.

ch 동시 처리를 패턴 수로 제한하하기 위해 버퍼링 된 Channel 생성한다.

일치하는 디렉터리는 각 Routine에서 Channel로 전송된다.

반응형

 

동시성

 

Go Routine을 사용하면 작업을 동시에 실행할 수 있어 대용량 트래픽  시나리오에서 성능이 향상되므로 적합하다고 볼 수 있다.

 

자원 효율성

Go Routine 은 기존 Thread 보다 가볍기 때문에 시스템 리소스를 효율적으로 사용할 수 있다.

 

동기화

채널은 경쟁 조건을 피하면서 Go Routine 이 실행을 통신하고 동기화할 수 있는 안전한 방법을 제공한다.

 

확장성

이 방식은 호스트 패턴 수가 증가함에 따라 확장되므로 시스템이 더 많은 수의 요청을 효율적으로 처리할 수 있다.

전반적으로 Go Routine과 Channel 을 적용하면 동시성 요구 사항이 높은 시나리오에서 코드의 성능과 확장성을 크게 향상할 수 있다.

그러나 다양한 운영 시나리오에서 올바른 동작을 보장하려면 코드를 신중하게 설계하고 테스트하는 것이 중요할 것이다.

728x90

 

Performance Results

 

Go Routine 과 Go Channel 적용 전 후 실행 속도를 비교해 본다.

 

Before applying map lookup, Go Routine, and Go Channel

DurationInMS AVG

2.321 ms


 

After applying map lookup, Go Routine, and Go Channel

DurationInMS AVG

1.137 ms


 

적용 전후를 비교해 보면 Invocations는 증가했지만 Duration은 현저히 감소했다.

 

 

Go Routine과 Go Channel 적용 후 50.9 % 의 실행 속도 개선 효과!

728x90
반응형

'GO' 카테고리의 다른 글

AWS Lambda 와 Golang base64 Encoding 적용하기  (0) 2024.01.11
Go 란?  (0) 2023.12.26