본문 바로가기

전체 글

(16)
gRPC - Context and Error Handling Context context의 주요 기능중 하나는 deadline을 통한 timeout 설정이 가능하다는 것입니다. MSA 환경에서는 client의 요청이 다수의 gRPC 요청이 필요한 상황이 많기 때문에 gRPC에서는 context 기능을 지원하고 있습니다. deadline은 요청이 생성할 때, 설정되고 서비스들 전반적으로 사용될 수 있습니다. 다음은 gRPC에서 deadline을 설정하고 사용하는 예제입니다. func (cl *Client) login() { ctx, cancel := context.WithTimeout(context.Background(), time.Second) // 1 second deadline defer cancel() // (1) r, err := cl.ChatTaskCli..
Level Compressed Trie lc-trie는 학부시절 네트워크 시간에 배운 longest prefix matching(이하 lpm) 을 효율적으로 하기 위해 만들어진 알고리즘입니다. 네트워크에서 lpm은 서브넷팅된 IP 대역대를 prefix에 따라 다음 hop을 탐색하기 위해 사용됩니다. 이런 lpm을 효율적으로 수행하기 위해서 고안된 lc-trie는 커널에서도 lpm을 위해 사용되는 자료구조입니다. 위 그림은 일반적인 이진트리로 특히 0,1 비트로 이루어진 IP주소를 탐색하기 용이한 자료구조입니다. 루트에서 시작하여 하나의 비트씩 비교하며 노드를 탐색하여 prefix 더 이상 진행하지 못하면 해당 노드의 next 값을 반환합니다. 오른쪽 트리는 path를 compress를 수행한 구조입니다. patricia trie라고 합니다. ..
Online 알고리즘 (2) - Deterministic Online Algorithms (1) 지난번 온라인 알고리즘의 포스팅에서 간략하게 온라인 알고리즘을 설명했다면, 이번 포스팅에서는 Minimization 문제인 maskespan problem의 솔루션 중의 하나인 Graham’s greedy makespan algorithm를 분석해보도록 하겠습니다. 우선 들어가기에 앞서 determinisic online 알고리즘 문제를 정의하는 하나의 템플릿을 소개하겠습니다. request-answer game은 determinisic online 알고리즘을 정형화하는 일종의 템플릿입니다. 정의는 간단합니다. 온라인 알고리즘은 연속된 요청(request)를 σ = σ(1), . . . , σ(m) 받습니다. 이 요청들은 순서가 있으며, σ(t)의 요청을 받았을 때, σ(t ′ ) ,t ′ > t를 알지..
Online 알고리즘 (1) - Online Algorithm 하루 24시간 1년 365일 요청을 받아 프로세스들을 진행하고 있는 서버가 존재합니다. 서버는 지속적으로 프로세스를 실행시키기 위한 시간, 컴퓨팅 자원등 프로세스에 대한 정보를 요청으로 받아 서버내의 자원을 분배하여 프로세스를 실행시켜야 합니다. 이 때, 우리는 어떠한 전략, 알고리즘을 이용하여 자원을 분배해야 할까요? Online 알고리즘은 위와 같은 문제를 효과적으로 풀기 위한 알고리즘입니다. Online 알고리즘에서의 Online의 의미는 '입력을 순차적으로 받으면서 진행하며 돌이킬 수 없는 결정을 하는 것' 을 나타내며, 우리가 흔히 알고있는 인터넷 온라인과는 이론적으로 아무 관련이 없습니다. Online의 반대말은 Offline이며 의미는 '모든 입력을 시작부터 끝까지 알고 있는 상태로 결정을 ..
Rate Limiting Algorithm (Leaky Bucket) 실제 많은 서비스에서 인프라의 availability를 위해 단위 시간안에 수많은 요청이 들어오는 걸 방지하는 로직은 필수적이다. 예를 들면, 카카오톡으로 메시지를 보낼 때, 순간적으로 많은 메시지를 보내면 나오는 경고문이나, 하루에 1000건 이상 request를 받지 않는 서비스 등 다양한 방법에서 사용한다. 이는 인프라의 availability에 직접적인 관여를 하는 클라우드 환경에서도 필수적인 요소인데, 대게는 네트워크 트래픽을 컨트롤 하는 데 있어서 많은 연관을 가지고 있다. 이러한 Rate Limiting Algorithm에는 여러가지 기법들이 존재하지만 이번에는 leaky bucket 알고리즘을 다룰 것이다. Leaky Bucket Algorithm leaky bucket 알고리즘은 물 새는..
gRPC - Interceptor Interceptor gRPC 어플리케이션을 구성할 때, 서버에서나 클라이언트에서나 remote 함수들을 실행하기에 앞서 실행해야하는 여러가지 로직들이 존재할 것이다. gRPC에서는 interceptor라 불리는 로깅이나 인증, 측정등을 위해 RPC 실행전에 선점할 수 있는 기능이 있다. 모든 언어에서 지원하지는 않으니 주의할 것. 예시로는 Go, Java가 있으니 둘은 당연히 지원된다. gRPC는 2가지 타입의 interceptor로 분화된다. 이는 RPC 타입과 같다. unary interceptor와 stream interceptor. server-side와 client-side로 나뉘어서 알아보자 Server-side interceptor interceptor는 하나 혹은 2개 이상으로 구성될 수..
GRPC로 이미지 파일 보내기 개발을 하던 와중에 grpc를 통해서 클라이언트에서 이미지를 업로드하면 HTTP API를 요청을 처리하는 서버에서 이미지 파일을 받고 또 다시 이미지 파일을 다른 service에 보내야 하는 경우가 생겼다. 사실 프론트에서 바로 해당 서비스로 바로 업로드를 하거나 최종에는 스토리지에 저장을 하는 것이므로 바로 스토리지에 올려도 되지만 실시간으로 작성하는 게시판의 기능을 위한 서비스고 다른 아키텍처와의 트레이드 오프가 체감이 안되서 그냥 경험삼아 위의 루트로 업로드하는 방식을 택했다. 그럼 본론으로 syntax = "proto3"; package pb; import "article.proto"; service image_task { rpc UploadImage (ImageUploadRequest) retu..
Sorting Algorithm for Hardware Acceleration Sorting이란? 순서가 없는 value들을 특정 order(Numerical order, Lexicographical order 등)들을 기준으로 자료를 재배열 하는 것을 의미한다. clustering / searching / scheduling / network / calculation / simulation 등등 탐색에 기반을 둔 모든 task를 수행하는 데 많은 리소스를 절약할 수 있다. 소팅 알고리즘은 exchange, selection, insertion, merge, distribution, concurrent, hybrid 등으로 분류할 수 있다. 이번 발표에서는 정리해 볼 소팅 알고리즘 heap: 온라인 환경에서 sram/dram에서 stream data 연산에 효율적인 internal..