Tencent cloud SCF (출처 : https://www.tencentcloud.com/products/scf )

 

 

이 글에서는 Tencent cloud의 serverless 서비스인 SCF와 API Explorer에서 제공하는

OCR API를 이용해서 아주 간단한 OCR 로직을 구현하는 방법을 소개한다. 

 

준비물

1) Tencent cloud SCF (AWS lambda와 같은 서버리스 서비스)
2) Tencent cloud OCR API
3) Tencent cloud COS _(AWS S3의 역할을 할 오브젝트 스토리지 서비스)

 

아키텍처

COS를 트리거로 하는 기본적인 SCF 함수 아키텍처

 

 

구현할 로직의 간단한 아키텍처를 그려보면 위와 같다.

1) 유저가 COS 버킷에 텍스트 추출이 필요한 이미지 파일을 업로드 하면,
2) COS Bucket 업로드 이벤트를 트리거로 하여 SCF 함수가 실행되고
3) SCF 함수에서는 OCR API를 호출하고 결과값을 JSON으로 리턴받아 다른 COS 버킷에 txt 파일로 업로드한다.

 

이렇게 되면 유저는 COS 버킷에 이미지를 업로드 하고 곧바로 다른 버킷에서 OCR 추출결과를 확인하게 된다.

 

 SCF에서는 COS GET/POST/PUT 이벤트 외에도 LB, API Gateway, Kafka 등 다양한 방식의 트리거 방식을 지원하지만 COS를 선택한 이유는 서버 기반 애플리케이션 구축을 하지 않기 위함이기도 하고 COS Browser라는 훌륭한 GUI 툴을 통해 일반 사용자들에게 간단히 결과물을 체험가능하게 하기 때문이다.

 

 물론 마지막 단계에서 전달받은 JSON 결과 값을 DB에 저장해서 활용해도된다.

 

재료탐색

 OCR테스트에 일반적으로 사용되는 영수증, 신분증 등의 물건을 시료로 활용하면 가장 좋지만 텍스트의 위치만 고정되어 있다면 어떤 것도 상관 없으니 준비하도록 한다. 이 글에서는 특정 브랜드의 캐릭터 스티커를 사용한다.

 

내 뱃살과 맞바꾼 것들..

 

API Explorer

Tencent cloud API Explorer에 있는 API 사용에 앞서 먼저 Tencent cloud 콘솔에서 해당 Tencent cloud 계정의

API KEY (SecretID, SecretKey) 를 발급 받는다.

 

Tencent cloud API Explorer

 

 

API KEY 발급이 완료되면, API Explorer 에서 Optical Character Recognition -> GeneralBasicOCR 을 클릭하면 예시코드가 나오는데  편한 언어를 선택하면된다. (이 글은 nodejs 기준으로 한다.) 코드를 살펴보면 tencentcloud-sdk-nodejs-intl-en이라는 npm 모듈을 설치해야함을 알 수 있다.

 

 

뒤에 나오겠지만 COS 관련 모듈인 cos-nodejs-sdk-v5도 설치가 필요하므로 런타임 대상 디렉토리에 해당 패키지들을 설치한다.

 

COS 버킷 생성

Tencent cloud COS 콘솔에서 새 Bucket을 생성한다.

 

이때 시료의 이미지를 업로드 받을 Bucket 1개, OCR 분석 후 텍스트 값이 리턴될 Bucket 1개, 이렇게 총 2개의 Bucket을 생성한다. (Access Permission의 경우 Public Read/Write로 설정하였으나 필요에 따라 ACL 설정을 하도록 한다.)

 

SCF

SCF console에서 SCF함수를 생성한다.

 

 

다음은 콘솔의 Serverless Cloud Function 항목으로 이동하여 SCF 함수를 생성 한다.

Function type은 Event-triggered function으로 한다.

 

코드 Submitting method의 경우 로컬에서 작성 후 압축해서 올려도 되고 온라인에디터에서 직접 작성해도 되지만

일단 어떤 경우든 초기 함수 생성 시 에는 Online editing 을 선택하는 것이 편리하다.

 

 

 

SCF 생성 후 생성된 SCF를 클릭하여 Trigger management 를 보면 트리거를 생성할 수 있다. 이때 Trigger method : COS trigger , 트리거 대상이 될 버킷은 방금 생성한 버킷 중 이미지가 업로드 될 버킷을 선택하면 된다.

 

코드작성

SCF 코드는

1) OCR API와 COS 모듈을 호출하고 
2) 업로드된 이미지 메타데이터에서 imageUrl파라미터를 추출하여 OCR API 엔드포인트로 전송
3) 리턴 값을 두 번째 버킷으로 전달하는 3단계로 작성한다.

 

이때, OCR 결과 값 중 "DetectedText" 값만 전달하도록 한다.

 

작성한 전체 소스코드는 아래와 같다. 

//텐센트 클라우드 모듈 호출
const tencentcloud = require("tencentcloud-sdk-nodejs-intl-en");
const COS = require("cos-nodejs-sdk-v5");

//API Explorer의 예시코드 참고 (텐클 console)
const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;
const OcrClient = tencentcloud.ocr.v20181119.Client;
const models = tencentcloud.ocr.v20181119.Models;

// 발급받은 API KEY 정보를 입력
const cosClient = new COS({
    SecretId: "IKIDAEA0mU6hEi3LXZRBpMnHhBTp4XXXXXX", // COS Secret ID
    SecretKey: "c8hHuYBtjsgMAnR9xrjyAKc3dXXXXXXX" // COS Secret Key
});

// SCF
exports.main_handler = async (event, context) => {
   
    const secretId = "IKIDAEA0mU6hEi3LXZRBpMnHhBTp4XXXXXX";
    const secretKey = "c8hHuYBtjsgMAnR9xrjyAKc3dXXXXXXX";


    let cred = new Credential(secretId, secretKey);

    
    let httpProfile = new HttpProfile();
    httpProfile.endpoint = "ocr.tencentcloudapi.com";
  
    let clientProfile = new ClientProfile();
    clientProfile.httpProfile = httpProfile;
  
    let client = new OcrClient(cred, "ap-seoul", clientProfile);

    // 메타데이터에서 이미지 파일명 추출
    const record = event["Records"][0];
    const imageUrl = decodeURIComponent(record["cos"]["cosObject"]["url"]);

    // OCR 요청객체생성
    let req = new models.GeneralBasicOCRRequest();
    let params = `{"ImageUrl": "${imageUrl}"}`;
    req.from_json_string(params);

    // OCR 요청실행
    return new Promise((resolve, reject) => {
        client.GeneralBasicOCR(req, function(err, response) {
            if (err) {
                console.error("에러 :", err);
                reject(err);
                return;
            }
            console.log("결과 값:", response.to_json_string());
            const ocrResult = JSON.parse(response.to_json_string());
            const detectedTexts = ocrResult.TextDetections.map(detection => detection.DetectedText).join('\n');
            
            // 결과값 중복 방지를 위한 처리, 띠부띠부씰을 여러 장을 연속으로 찍을 때 결과 값이 한 장만 나오는 것을 방지
            const timestamp = new Date().getTime();
            const fileName = `his-name-is-${timestamp}.txt`;
            const fileContent = Buffer.from(detectedTexts);

            // OCR 결과를 COS 버킷에 업로드
            cosClient.putObject({
                Bucket: 'pocketmon-name-1316520384', 
                Region: 'ap-seoul', 
                Key: fileName, 
                Body: fileContent,
            }, function(err, data) {
                if (err) {
                    console.error("에러2:", err);
                    reject(err);
                } else {
                    console.log("성공:", data);
                    resolve(data);
                }
            });
        });
    });
};

 

작성한 소스코드를 포함한 아티팩트를 압축하여 SCF에 업로드하고 배포한다.

 

 

테스트 (COS Browser)

아름다운 UI를 가진 COS Browser

 

다양한 COS 업로드 방식이 있지만 서문에 말했듯이 이번에는 COS의 GUI툴인 COS Browser를 이용해 본다.

 

COS Browser을 다운로드 하고 API KEY를 입력하여 로그인 후 이미지 업로드 버킷에 스티커 이미지를 업로드 한 뒤

두 번째 버킷에 추출된 OCR 결과 값이 텍스트 파일 형태(.txt) 로 전달되는지 확인한다. 로직에 문제가 있는 경우 콘솔의 SCF 메뉴에서 로그를 확인하도록 한다.

 

대표적인 오류로 아래와 같은 타임아웃 오류가 있는데,

START RequestId: 25c20b87-4237-45f6-9904-4912a7fb2ddbInit 
Report RequestId: 25c20b87-4237-45f6-9904-4912a7fb2ddb 
Coldstart: 762ms (PullCode: 0ms InitRuntime: 138ms InitFunction: 624ms) 
Memory: 128MB MemUsage: 117.24MBERROR 
RequestId: 25c20b87-4237-45f6-9904-4912a7fb2ddb 
Result: Invoking task timed out after 3 secondsEND 
RequestId: 25c20b87-4237-45f6-9904-4912a7fb2ddbReport 
RequestId: 25c20b87-4237-45f6-9904-4912a7fb2ddb Duration: 3000ms 
Memory: 128MB MemUsage: 119.32MB

 

이는 SCF 기본 타임아웃 설정이 OCR 판독 시간보다 짧게 설정되어서 발생되는 오류로, 

Function management의 Execution timeout period의 값을 10초 정도로 설정해주면 된다.

 

이제 테스트 대상 이미지를

성공적으로 업로드된 촬영 이미지

COS Browser에 업로드하고

추출된 텍스트 값

두 번째 버킷을 확인한다.

파일이 성공적으로 전송된 것을 확인하고 파일을 열어보면

 

캐릭터의 이미지와 꽤 어울리는 이름을 확인할 수 있다.

 

마치며

기존 AWS의 S3와 Lambda를 사용해 본 유저라면 EventTrigger를 활용한 서버리스 구현이 매우 간편하고 경제적인 솔루션이란 걸 잘 알고 있을 것이다. 이처럼 Tencent cloud에서도 S3와 Lambda와 같은 퍼포먼스를 내는 COSSCF가 있으니 서버리스 아키텍쳐 구현에 활용해도 좋을 것 같다. 하지만, COS에서 이미지 업로드 시 OCR을 추출하는 기능을 이미 제공하고 있으므로😂.. 이 글은 SCFCOS를 한 번 경험해본 것에 의미를 두는게 좋다.

 

 

 

 

 

 

 

Analysis

고객사는 다양한 스마트 홈 기기와 솔루션을 개발, 판매하는 회사로 장애 발생에 즉각적으로 대처하여 연속적인 서비스 운영을 보장받길 원합니다. 따라서 텐센트클라우드를 이용하여 DR을 고려한 multi-region 설계를 제공해야 합니다. 두 리전 간의 네트워크 연결 방식은 peering connection을 채택하였고 고객사의 예산 상황에 따라 조정할 수 있습니다. 또한 DNSPod과 CLB를 통해 Global load balancing을 구현하고 DNSPod의 라운드로빈 기반 라우팅 세팅으로 메인 리전 - 서브 리전 간의 트래픽 라우팅을 관리합니다.

 

Architecture Blueprint

1) VPC 설정: 고객사는 텐센트 클라우드의 두 개의 리전을 사용하여 서비스를 운영합니다. 
이를 통해 재해 발생 시 데이터 손실을 방지하고 서비스 연속성을 유지할 수 있습니다.

2) DNSPod 및 CLB설정 (global load balancing): 모든 외부 트래픽은 DNSPod의 라운드로빈 알고리즘을 통해 
VPC A로 우선적으로 라우팅하여 주 리전의 가용성을 최대화하고, 정상적인 운영 시 모든 트래픽을 처리하도록 합니다.

 

위와 같이 DNSPod 콘솔에서 Weight 값을 설정하여 라우팅 방식을 조정합니다. 

이 사례에서는 주 리전의 Weight 를 100, 서브 리전의 Weight를 0으로 설정하였습니다.

3) CLB 및 Auto Scaling: 리전A로 들어온 트래픽은 CLB를 통해 웹서버 및 애플리케이션 서버 그룹에 분산되며, 
트래픽 양에 따라 Auto Scaling 서비스가 스케일 아웃을 자동으로 진행합니다.

4) 데이터베이스 연결: 서버그룹은 필요에 따라 프라이빗 서브넷에 위치한 TencentDB와 연결됩니다. 
사례에서는 MySQL을 사용하였지만 고객사 요구사항에 따라 적합한 TencentDB를 선택합니다. 
이 데이터베이스는 스마트홈 기기의 상태, 사용자 설정, 이벤트 로그 등을 저장합니다.

5) 리전 간 동기화: 두 리전 간의 VPC는 Peering connection으로 연결되어 있으며, 필요에 따라 텐센트클라우드를
통한 추가적인 동기화 방식을 제안할 수 있습니다. 이는 주 리전에 장애가 발생했을 때, 서브 리전에서 빠르게 서비스를 
복구할 수 있도록 합니다.

6) DB 동기화: 리전 간의 데이터베이스 동기화는 DTS를 통해 이루어집니다.  이는 주 리전의 데이터베이스 변경사항을
실시간으로 보조 리전의 데이터베이스에 복제하여 데이터 일관성과 가용성을 보장합니다.

 

Overall

해당 아키텍처는 스마트홈 솔루션 제공업체의 필요와 텐센트 클라우드의 서비스를 통합하여 설계되었습니다.
DNSPod, CLB, Auto Scaling, Tencent DB, 그리고 VPC Peering connection을 포함한 복제 및 동기화 메커니즘을 통해, 서비스의 신뢰성과 가용성을 최대화하면서 재해 발생 시 신속한 복구를 가능하게 합니다.

특히, DTS를 활용한 리전 간 DB 동기화 전략은 데이터 일관성을 보장하며, 전 세계 사용자에게 끊김 없는 서비스를 제공합니다. 고객사는 Tencent cloud를 통해 사용자에게 서비스의 시작부터 확장까지 비용 효율적이면서도 안정적인 경험을 제공할 수 있습니다.

 

Products we used

- CVM : https://www.tencentcloud.com/products/cvm

- CLB : https://www.tencentcloud.com/products/clb

- TencentDB for MySQL : https://www.tencentcloud.com/products/cdb

- Auto-scaling : https://www.tencentcloud.com/products/as

- DTS : https://www.tencentcloud.com/products/dts

- Peering connection : https://www.tencentcloud.com/products/pc

- DNSPod : https://www.dnspod.com/

Analysis

고객사는 IoT기반 전기차 관리 애플리케이션을 제작하는 업체입니다. 고객사의 클라우드 기반 애플리케이션은 사용자에게 개인화된 운전 및 차량 관리 경험을 제공합니다. 고객사는 애플리케이션을 통한 사용자의 요청을 static/dynamic 으로 구분하여 효율적인 방식으로 제공하길 원합니다. AWS Cloudfront와 S3의 사용도 고려하고 있는 고객사의 아슬아슬한 현재 상황에서 깔끔한 설계로 그들의 마음을 휘어잡을 필요가 있습니다.

 

Architecture Blueprint

1) 애플리케이션의 사용자 규모를 고려하였을 때, VPC 생성은 1개의 리전과 2개의 서로 다른 가용영역 내에서 진행합니다.

2) 서버의 종류와 제공하는 목적에 따라 CVM 을 서브넷에 분리구성하고, Auto-scaling  그룹을 설정합니다.

3) TDSQL-C 의 엔진은 MySQL을 사용합니다. 이때 해당 리전이 multi-AZ를 지원하는지 사전에 확인해야합니다. (일부 리전은 자원 보유 현황이나 정책에 따라 일시적으로 단일 AZ만 지원할 수 있으니 확인 후 필요 시 벤더에 문의합니다.)
서로 다른 가용영역에 마스터-슬레이브 구성을 설정합니다.장애 발생 시 TDSQL-C 의 Intra-region disaster recovery
기능으로 비즈니스 트래픽을 슬레이브 노드로 즉시 라우팅 합니다.

4) 데이터베이스 백업 파일과 시스템 로그는 COS 에 적재하도록 구성 합니다.

5) 유저의 static contents 요청 시, EdgeOne 에서 COS 를 먼저 탐색하고 요청 컨텐츠가 존재하면 바로 제공하고,
캐시미스가 일어나면 COS 에서 origin-pull을 수행합니다.

6) 유저의 dynaminc contents 요청 시, 외부 CLB 를 통해 서로 다른 가용영역에 노드를 배분하고 3-tier 설계를 통과하여
최종적으로 유저에게 컨텐츠를 리턴합니다.

Overall

이 IoT기반 전기차 관리 애플리케이션 아키텍처는, 고객사의 요구에 따라 텐센트클라우드의 CLB Auto-Scaling을 활용한 트래픽 분산 메커니즘을 통해 설계되어 사용자에게 맞춤형 전기차 운행 및 관리 경험을 제공합니다. 애플리케이션은 높은 가용성을 보장하는 동시에 장애 발생 시 자동으로 생산 환경을 재해 복구 환경으로 전환함으로써 비즈니스 연속성을 유지할 수 있게 됩니다. 또한, 정적 및 동적 컨텐츠 처리에 대한 효율적인 접근 방식은 사용자 경험을 최적화하며, 리소스 활용의 극대화를 통해 비용 효율성도 확보할 수 있습니다. 

 

Products we used

- CVM : https://www.tencentcloud.com/products/cvm

- EdgeOne : https://www.tencentcloud.com/products/teo

- CLB : https://www.tencentcloud.com/products/clb

- Auto Scaling  : https://www.tencentcloud.com/products/clb

- COS : https://www.tencentcloud.com/products/cos

- TDSQL-C : https://console.tencentcloud.com/cynosdb

 

 

Analysis

고객사는 애견호텔 애플리케이션을 운영하는 업체입니다. 최근 비즈니스의 확장에 따라 애견미용, 애견용품, 오프라인 매장 운영 등 여러 도메인이 추가되어 기존 모놀리직 아키텍쳐에 한계를 느끼고 있습니다. 마이크로서비스로의 전환 시 텐센트클라우드의 완전 관리형 쿠버네티스를 사용하여 관련 운영 단계에서 발생하는 리소스 사용을 최소화 하고자 합니다.

 

Architecture Blueprint

1) 네트워크 구성은 1개의 VPC와 3개의 서로 다른 가용영역으로 설정합니다.

2) TKE 클러스터를 생성합니다. 이때 고객사의 비즈니스 규모에 맞게 Cluster Specification 은 L20로 세팅합니다. 해당 옵션은 최대 20개의 노드와 600개의 파드를 지원합니다.

3) CVM 을 워커노드로 하는 Node Pool 을 생성합니다. 고객사 애플리케이션에 맞는 설정으로 워크로드를 배포합니다. 
추후 컨테이너 이미지 관리 및 배포 시에 TCR(Tencent Container Registry)을 사용할 수 있습니다.
또한 텐센트 클라우드에서는 기존 사용하던 CVM 인스턴스 노드를 불러와 Node Pool에 추가할 수 있으므로 고객사의 일부 기존 인스턴스를 활용합니다. (클러스터와 같은 VPC내의 자원에만 한정됩니다.)

4) TKE는 또한 쿠버네티스의 CA 기능을 기반으로 한 Node pool 오토 스케일링을 지원합니다. 추후 고객사의 사업 확장에 따라 고려할 수 있도록 솔루션을 제안하도록 합니다.

5) 생성된 TKE 클러스터는 외부 네트워크와의 요청을 Ingress Controller를 통해 처리하도록 합니다.
TKE 콘솔 Add-on management 메뉴에서 원클릭으로 NginxIngress를 설치한 후, 라우팅 설정 페이지에서 배포합니다.

6) 데이터베이스는 TencentDB의 상품들을 사용하였습니다. multi-az 구성을 통해 고가용성을 높이고 고객사에 필요에 따라 추후 read-only 복제본을 여러 가용영역에 구성할 수 있습니다.

7) 서비스 운영에 사용할 COS의 경우, TKE에서 클러스터 생성 시 혹은 생성 이후 Add-on management 메뉴에서 COS-CSI plug-in을 활성화 할 수 있습니다. 이를 통해 COS 버킷을 TKE 클러스터의 컨테이너가 엑세스 가능한 볼륨으로 제공합니다.

 

Overall

마이크로서비스 구축을 고민하는 기업이라면 자체적으로 쿠버네티스를 관리, 운영 하는 것도 좋은 방법 중에 하나이지만 Tencent cloud의 TKE와 같은 관리형 서비스를 사용하여 개발팀의 관리포인트를 줄이면서도 높은 안정성과 성능을 갖춘 워크로드를 구축하는 것도 기업 입장에서 충분히 고려해볼만한 선택입니다.

 

Products we used

- CVM : https://www.tencentcloud.com/products/cvm

- CLB : https://www.tencentcloud.com/products/clb

- TKE : https://www.tencentcloud.com/products/tke

- TCR : https://www.tencentcloud.com/products/tcr

- DNSPod : https://www.dnspod.com

- TencentDB for Redis : https://www.tencentcloud.com/products/crs

- TencentDB for MySQL : https://www.tencentcloud.com/products/cdb

- TencentDB for MongoDB : https://www.tencentcloud.com/products/mongodb

 

 

Analysis

고객사는 혁신적인 실시간 오디오 스트리밍 플랫폼을 개발하는 스타트업으로, 사용자들이 언제 어디서나 DJ가 되어 자신만의 이야기를 전 세계와 공유할 수 있는 공간을 제공합니다. 스마트폰 하나로 누구나 쉽게 접근할 수 있으며, 다양한 장르의 오디오 콘텐츠를 제작하고 청취할 수 있습니다. 그러나 최근 사용자 기반의 급속한 성장과 글로벌 시장으로의 확장에 따라, 고객사는 높은 가용성, 확장성, 그리고 글로벌 리치를 지원할 수 있는 향상된 클라우드 솔루션을 원하고 있습니다.

 

Architecture Blueprint

1) 유저는 DJ(스피커)와 청취자로 구분합니다. DJ의 채팅방 개설요청은 CLB를 통해 분산되어 API서버로 도달합니다. 

2) CVM 내부의 API서버는 DJ의 요청을 받아 채팅 서버에 채팅방을 개설하도록 지시하고
동시에 라이브 스트리밍 방송 정보를 TencentDB for MySQLTencentDB for MongoDB에 저장합니다. 
이 데이터베이스들은 사용자 데이터와 방송 정보관리를 담당합니다.

3) 청취자의 특정 방송청취 요청은 CLB  → API서버를 통해 DB에서 방송정보를 검색하고 
청취자에게 스트리밍 서버의 위치와 채팅방 정보를 제공합니다.

 4) 청취자는 Tencent cloud EdgeOne의  CDN 가속을 통해 라이브 스트리밍 컨텐츠에 접근합니다. (CVM(web))
Tencent cloud EdgeOne의 CDN 기능은 전 세계에 분산된 노드를 사용하여 컨텐츠를 캐싱하여 청취자의 지리적 위치와
근접한 위치에서 컨텐츠를 제공하여 낮은 레이턴시를 보장합니다.

5) DJ를 통해 업로드된 오디오 파일과 이미지는 COS에 저장합니다. 이미지 파일의 경우,  
Tencent cloud IMS(Image Moderation System)의 API를 통해 불건전한 이미지는 사전검열됩니다.
(COS를 트리거로 하는 SCF를 통해 API를 호출합니다.)

 

Overall

본  Tencent cloud 아키텍처는 고객사 플랫폼의 요구 사항과 텐센트 클라우드의 강력한 서비스를 결합하여, 청취자와 DJ 모두에게 뛰어난 스트리밍 경험을 제공합니다. 또한 CLB, CVM , TencentDB, EdgeOne COS 등의 텐센트 클라우드 리소스를 통한 실시간 오디오 스트리밍과 이미지 검열 시스템의 도입은 서비스의 시작부터 확장까지 비용 효율적이면서도 끊김 없는 경험을 보장합니다.
고객사의 사례와 달리 스트리밍 서비스가 아직 개발 전이거나 라이브 서비스 개발에 부담을 느끼고 있는 고객사의 경우라면 Tencent cloud 의 cPaaS 상품인 TRTC CSS등을 활용하여 손쉽게 라이브스트리밍 서비스를 구축하도록 제안할 수 있습니다.

Products we used

- CVM : https://www.tencentcloud.com/products/cvm

- EdgeOne : https://www.tencentcloud.com/products/teo

- CLB : https://www.tencentcloud.com/products/clb

- TencentDB for MySQL : https://www.tencentcloud.com/products/cdb

- TencentDB for MongoDB :  https://www.tencentcloud.com/products/mongodb

- COS : https://www.tencentcloud.com/products/cos

- SCF : https://www.tencentcloud.com/products/scf

- IMS :  https://www.tencentcloud.com/products/ims

- API Gateway : https://www.tencentcloud.com/products/apigateway

 

 

Analysis

고객사는 온라인 교육 플랫폼을 운영하는 스타트업으로 , 다양한 분야의 인터넷 강의를 제공하며, 강의 저장 스트리밍을 위한 설계가 필요한 상황입니다. 또한 시험기간에 트래픽이 몰리는 경향이 있으므로 이에 따른 대비와 인터넷 강의 동영상 과제 제출물을 저장하고 관리하는 스토리지 시스템이 요구됩니다.

 

Architecture Blueprint

1) 고객사의 규모에 맞게 서로 다른 두 가용영역에 일반적인 3-tier 아키텍쳐를 채택합니다.
2) 서버의 기능에 따라 Auto-Scaling 그룹을 구성합니다.
3) 수강생의 요청트래픽은 DNSPod의 라우팅을 거쳐 Anti-DDos를 통과하여 클렌징 과정을 거칩니다.
4) 첫 번째 CLB에 의해 분산된 로드는 CVM에 도달하여 static 강의컨텐츠에 대한 요청을 처리하고
두 번째 로드밸런서를 통과하여 WAS 그룹에서 데이터베이스와 통신합니다.
(고객사에서 RDBMS를 선호함에 따라 TencentDB for MySQL를 사용)
5) 수강과정에서 발생하는 수강생의 과제 제출물은 CFS를 통해 관리하고, 생성되는 시스템로그와 파일들은 COS에 저장합니다.
6) 수강생의 COS를 통한 컨텐츠 제공 시 CDN 혹은 EdgeOne를 통해 캐싱하여. 빠르고 안정적인 접근성을 보장합니다.

 

Overall

본 Tencent cloud 아키텍쳐는 고객사의 비지니스 초기 단계에서부터 장기적인 성장까지 다양한 시나리오를 고려하도록 설계되었습니다. 초기에는 보수적으로 시작하여 시스템과 사용자 기반의 성장에 따라 점진적으로 확장하는 전략을 채택합니다. 이를 통해 비용 효율성을 유지하면서 사용자 경험을 최적화할 수 있습니다.

 

Products we used

- CVM : https://www.tencentcloud.com/products/cvm

- EdgeOne : https://www.tencentcloud.com/products/teo

- DNSPod : https://www.dnspod.com/

- Anto-DDos : https://www.tencentcloud.com/products/ddos-pro

- CLB : https://www.tencentcloud.com/products/clb

- Auto-Scaling : https://www.tencentcloud.com/products/as

- TencentDB for MySQL : https://www.tencentcloud.com/products/cdb

 - COS : https://www.tencentcloud.com/products/cos

- CFS : https://www.tencentcloud.com/products/cfs

 

 

 

+ Recent posts