1분 이내에 글로벌 방송 서비스 구축
This article was originally published at my personal blog toonk.io
이번 주말에 Stackpath와 작업 부하 테두리 계산 기능을 다시 보기로 했습니다.이것은 비교적 새로운 기능인데, 사실 나는 wrote about it in Feb 2109 그것이 방금 발표되었다고 생각한다.나는 잠재력에 대해 매우 열정적이었던 것을 기억하지만, 당시에 부족했던 것들도 관찰했다.지금, 1년 반이 지났는데, 이 문제들은 대부분 이미 해결된 것 같으니, 우리 한번 봅시다!
나는 이 블로그에 작은 프레젠테이션 영상을 추가하기로 결정했다.
다음은 전체 설정의 5분 프레젠테이션입니다.이 영상들은 새롭고 실험적이기 때문에 마음에 드시면 저에게 알려주세요.
프레젠테이션: 1분 이내에 글로벌 방송 서비스 구축
작업량
Stackpath는 서버 없이 두 가지 유형의 워크로드, VM 및 컨테이너 기반 배포를 지원합니다.둘 다 API와 Terraform을 사용하여 구성할 수 있습니다.Terraform은 인프라 즉 코드 도구입니다.Terraform으로 의도를 지정한 다음 적용하면 잘 시작할 수 있습니다.저는 Terraform의 충실한 팬이기 때문에 테스트에서 사용할 것입니다.
Stackpath의 가장 멋진 점 중 하나는 VM과 용기 서비스에 Anycast에 대한 지원이 내장되어 있다는 것이다.나는 이 기능과 용기 서비스를 사용하여 이 고가용, 낮은 지연의 웹 서비스를 구축할 것이다.이것은 매우 간단합니다. 제 github here 에서 보십시오.
Docker 설정
컨테이너 서비스를 사용하려면 Docker 컨테이너를 만들어서 사용해야 합니다.이것은 나의 것이다 Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY ./mywebserver.py .
EXPOSE 8000
ENV PYTHONUNBUFFERED 1
CMD [ "python", "./mywebserver.py" ]
mywebserver.py 프로그램은 호스트 이름 환경 변수를 출력하는 간단한 웹 서비스입니다.이것은 우리가 테스트를 시작할 때 어느 노드가 우리의 요청에 서비스를 제공하고 있는지 확인하는 데 도움을 줄 것이다.
내가 용기를 구축한 후에 그것을 내 Dockerhub repo 에 업로드하면 Stackpath에서 그것을 추출할 수 있다.
지형
이제terraform을 사용하여 우리의 인프라 시설을 정의할 때가 되었다.관련 코드는 my github here 에서 찾을 수 있습니다.나는 몇 가지 부분을 중점적으로 소개할 것이다.
17줄에서 우리는 새로운 작업 부하를 정의하기 시작했다. 나는 이 작업 부하를 위해 선택 방송 IP를 요청하고 있다.이것은 Stackpath가 내 워크로드(나중에 정의됨)의 모든 노드에서 ECMP(로드 밸런싱)를 수행한다는 것을 의미합니다.
resource “stackpath_compute_workload” “my-anycast-workload” {
name = “my-anycast-workload”
slug = “my-anycast-workload”
annotations = {
# request an anycast IP
“anycast.platform.stackpath.net” = “true”
}
31줄에서 우리는 작업 부하의 유형을 정의했는데 이 예에서 하나의 용기이다.그 중 일부로서, 우리는 정확한 포트를 열고 있습니다. 제 예시에서는python 서비스의 포트 8000입니다.
container {
# Name that should be given to the container
name = "app"
port {
name = "web"
port = 8000
protocol = "TCP"
enable_implicit_network_policy = true
}
다음으로, 배포할 컨테이너를 정의합니다(Dockerhub에서).
# image to use for the container
image = "atoonk/pythonweb:latest"
참고 자료 부분에서 우리는 용기 규범을 정의했다.나의 예에서, 나는 작은 규격, CPU 코어와 2Gram을 사용할 것이다.
resources {
requests = {
"cpu" = "1"
"memory" = "2Gi"
}
}
이제 데이터 센터마다 얼마나 많은 용기가 필요하고 어떤 데이터 센터에서 이 서비스를 실행하고자 하는지 정의하는 섹션에 들어갑니다.
다음 예제에서 우리는 각 데이터 센터에 세 개의 용기를 배치하여 자동 확장의 일부분으로 네 개로 증가할 수 있다.우리는 시애틀과 달라스에 이 기능을 배치하고 있다.
target {
name = "global"
min_replicas = 3
max_replicas = 4
scale_settings {
metrics {
metric = "cpu"
# Scale up when CPU averages 50%.
average_utilization = 50
}
}
# Deploy these instances to Dallas and Seattle
deployment_scope = "cityCode"
selector {
key = "cityCode"
operator = "in"
values = [
"DFW", "SEA"
]
}
}
서비스 제기할 때가 됐어.
지금 우리는 이미 terraform으로 우리의 의도를 정의했으니, 제기할 때가 되었다.올바른 방법:
terraform init
terraform plan
terraform apply
다음에 용기가 나타날 것입니다. 우리의anycastedpython 서비스가 사용할 수 있습니다.용기가 상당히 빨리 나타나기 때문에, 당신은 1분 안에 두 데이터 센터의 모든 6개의 용기를 시작하고 실행해야 합니다.
부하 균형을 테스트하다.
나는 이미 시애틀과 달라스에 이 서비스를 배치했다. 나의 본사는 캐나다 밴쿠버에 있기 때문에, 나는 시애틀 데이터 센터를 방문할 수 있기를 바란다. 왜냐하면 그곳은 나와 가장 가까운 데이터 센터이기 때문이다.
$ for i in `seq 1 10`; do curl 185.85.196.41:8000 ; done
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
위의 결과에 의하면 나는 확실히 시애틀 데이터 센터를 방문했다. 나의 요청은 시애틀의 세 가지 실례에서 부하 균형을 얻었고 모든 것이 예정대로 진행되었다.
문간에서 나는 용기마다 일지를 볼 수 있다
어쨌든
my test last year with Stackpath에 비해 큰 발전을 이루었다.이제 지형 서류 하나만 있으면 이 모든 것을 완성할 수 있으니 대단하다.이것은 사람을 흥분시키는 것이다. 너는 1분 안에 완전 선택 방송 서비스를 제기할 수 있다. 단지 하나의 명령만 있을 뿐이다.
Terraform 파일의 복사 수를 변경하면 필요할 때 쉽게 배치를 늘리고 줄일 수 있습니다.
본고에서 우리는 용기 서비스만 연구했지만 가상 기기에서도 이렇게 할 수 있다. 나의githubrepo도 하나의 예가 있다.
마지막으로 프레젠테이션 녹화를 검사하는 것을 잊지 마세요. 더 많은 동영상 내용을 보고 싶으면 저에게 알려주세요.
Reference
이 문제에 관하여(1분 이내에 글로벌 방송 서비스 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/atoonk/building-a-global-anycast-service-in-under-a-minute-2d9b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
컨테이너 서비스를 사용하려면 Docker 컨테이너를 만들어서 사용해야 합니다.이것은 나의 것이다 Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY ./mywebserver.py .
EXPOSE 8000
ENV PYTHONUNBUFFERED 1
CMD [ "python", "./mywebserver.py" ]
mywebserver.py 프로그램은 호스트 이름 환경 변수를 출력하는 간단한 웹 서비스입니다.이것은 우리가 테스트를 시작할 때 어느 노드가 우리의 요청에 서비스를 제공하고 있는지 확인하는 데 도움을 줄 것이다.내가 용기를 구축한 후에 그것을 내 Dockerhub repo 에 업로드하면 Stackpath에서 그것을 추출할 수 있다.
지형
이제terraform을 사용하여 우리의 인프라 시설을 정의할 때가 되었다.관련 코드는 my github here 에서 찾을 수 있습니다.나는 몇 가지 부분을 중점적으로 소개할 것이다.
17줄에서 우리는 새로운 작업 부하를 정의하기 시작했다. 나는 이 작업 부하를 위해 선택 방송 IP를 요청하고 있다.이것은 Stackpath가 내 워크로드(나중에 정의됨)의 모든 노드에서 ECMP(로드 밸런싱)를 수행한다는 것을 의미합니다.
resource “stackpath_compute_workload” “my-anycast-workload” {
name = “my-anycast-workload”
slug = “my-anycast-workload”
annotations = {
# request an anycast IP
“anycast.platform.stackpath.net” = “true”
}
31줄에서 우리는 작업 부하의 유형을 정의했는데 이 예에서 하나의 용기이다.그 중 일부로서, 우리는 정확한 포트를 열고 있습니다. 제 예시에서는python 서비스의 포트 8000입니다.
container {
# Name that should be given to the container
name = "app"
port {
name = "web"
port = 8000
protocol = "TCP"
enable_implicit_network_policy = true
}
다음으로, 배포할 컨테이너를 정의합니다(Dockerhub에서).
# image to use for the container
image = "atoonk/pythonweb:latest"
참고 자료 부분에서 우리는 용기 규범을 정의했다.나의 예에서, 나는 작은 규격, CPU 코어와 2Gram을 사용할 것이다.
resources {
requests = {
"cpu" = "1"
"memory" = "2Gi"
}
}
이제 데이터 센터마다 얼마나 많은 용기가 필요하고 어떤 데이터 센터에서 이 서비스를 실행하고자 하는지 정의하는 섹션에 들어갑니다.
다음 예제에서 우리는 각 데이터 센터에 세 개의 용기를 배치하여 자동 확장의 일부분으로 네 개로 증가할 수 있다.우리는 시애틀과 달라스에 이 기능을 배치하고 있다.
target {
name = "global"
min_replicas = 3
max_replicas = 4
scale_settings {
metrics {
metric = "cpu"
# Scale up when CPU averages 50%.
average_utilization = 50
}
}
# Deploy these instances to Dallas and Seattle
deployment_scope = "cityCode"
selector {
key = "cityCode"
operator = "in"
values = [
"DFW", "SEA"
]
}
}
서비스 제기할 때가 됐어.
지금 우리는 이미 terraform으로 우리의 의도를 정의했으니, 제기할 때가 되었다.올바른 방법:
terraform init
terraform plan
terraform apply
다음에 용기가 나타날 것입니다. 우리의anycastedpython 서비스가 사용할 수 있습니다.용기가 상당히 빨리 나타나기 때문에, 당신은 1분 안에 두 데이터 센터의 모든 6개의 용기를 시작하고 실행해야 합니다.
부하 균형을 테스트하다.
나는 이미 시애틀과 달라스에 이 서비스를 배치했다. 나의 본사는 캐나다 밴쿠버에 있기 때문에, 나는 시애틀 데이터 센터를 방문할 수 있기를 바란다. 왜냐하면 그곳은 나와 가장 가까운 데이터 센터이기 때문이다.
$ for i in `seq 1 10`; do curl 185.85.196.41:8000 ; done
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
위의 결과에 의하면 나는 확실히 시애틀 데이터 센터를 방문했다. 나의 요청은 시애틀의 세 가지 실례에서 부하 균형을 얻었고 모든 것이 예정대로 진행되었다.
문간에서 나는 용기마다 일지를 볼 수 있다
어쨌든
my test last year with Stackpath에 비해 큰 발전을 이루었다.이제 지형 서류 하나만 있으면 이 모든 것을 완성할 수 있으니 대단하다.이것은 사람을 흥분시키는 것이다. 너는 1분 안에 완전 선택 방송 서비스를 제기할 수 있다. 단지 하나의 명령만 있을 뿐이다.
Terraform 파일의 복사 수를 변경하면 필요할 때 쉽게 배치를 늘리고 줄일 수 있습니다.
본고에서 우리는 용기 서비스만 연구했지만 가상 기기에서도 이렇게 할 수 있다. 나의githubrepo도 하나의 예가 있다.
마지막으로 프레젠테이션 녹화를 검사하는 것을 잊지 마세요. 더 많은 동영상 내용을 보고 싶으면 저에게 알려주세요.
Reference
이 문제에 관하여(1분 이내에 글로벌 방송 서비스 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/atoonk/building-a-global-anycast-service-in-under-a-minute-2d9b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
resource “stackpath_compute_workload” “my-anycast-workload” {
name = “my-anycast-workload”
slug = “my-anycast-workload”
annotations = {
# request an anycast IP
“anycast.platform.stackpath.net” = “true”
}
container {
# Name that should be given to the container
name = "app"
port {
name = "web"
port = 8000
protocol = "TCP"
enable_implicit_network_policy = true
}
# image to use for the container
image = "atoonk/pythonweb:latest"
resources {
requests = {
"cpu" = "1"
"memory" = "2Gi"
}
}
target {
name = "global"
min_replicas = 3
max_replicas = 4
scale_settings {
metrics {
metric = "cpu"
# Scale up when CPU averages 50%.
average_utilization = 50
}
}
# Deploy these instances to Dallas and Seattle
deployment_scope = "cityCode"
selector {
key = "cityCode"
operator = "in"
values = [
"DFW", "SEA"
]
}
}
지금 우리는 이미 terraform으로 우리의 의도를 정의했으니, 제기할 때가 되었다.올바른 방법:
terraform init
terraform plan
terraform apply
다음에 용기가 나타날 것입니다. 우리의anycastedpython 서비스가 사용할 수 있습니다.용기가 상당히 빨리 나타나기 때문에, 당신은 1분 안에 두 데이터 센터의 모든 6개의 용기를 시작하고 실행해야 합니다.부하 균형을 테스트하다.
나는 이미 시애틀과 달라스에 이 서비스를 배치했다. 나의 본사는 캐나다 밴쿠버에 있기 때문에, 나는 시애틀 데이터 센터를 방문할 수 있기를 바란다. 왜냐하면 그곳은 나와 가장 가까운 데이터 센터이기 때문이다.
$ for i in `seq 1 10`; do curl 185.85.196.41:8000 ; done
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
위의 결과에 의하면 나는 확실히 시애틀 데이터 센터를 방문했다. 나의 요청은 시애틀의 세 가지 실례에서 부하 균형을 얻었고 모든 것이 예정대로 진행되었다.
문간에서 나는 용기마다 일지를 볼 수 있다
어쨌든
my test last year with Stackpath에 비해 큰 발전을 이루었다.이제 지형 서류 하나만 있으면 이 모든 것을 완성할 수 있으니 대단하다.이것은 사람을 흥분시키는 것이다. 너는 1분 안에 완전 선택 방송 서비스를 제기할 수 있다. 단지 하나의 명령만 있을 뿐이다.
Terraform 파일의 복사 수를 변경하면 필요할 때 쉽게 배치를 늘리고 줄일 수 있습니다.
본고에서 우리는 용기 서비스만 연구했지만 가상 기기에서도 이렇게 할 수 있다. 나의githubrepo도 하나의 예가 있다.
마지막으로 프레젠테이션 녹화를 검사하는 것을 잊지 마세요. 더 많은 동영상 내용을 보고 싶으면 저에게 알려주세요.
Reference
이 문제에 관하여(1분 이내에 글로벌 방송 서비스 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/atoonk/building-a-global-anycast-service-in-under-a-minute-2d9b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ for i in `seq 1 10`; do curl 185.85.196.41:8000 ; done
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-1
my-anycast-workload-global-sea-2
my-anycast-workload-global-sea-0
my test last year with Stackpath에 비해 큰 발전을 이루었다.이제 지형 서류 하나만 있으면 이 모든 것을 완성할 수 있으니 대단하다.이것은 사람을 흥분시키는 것이다. 너는 1분 안에 완전 선택 방송 서비스를 제기할 수 있다. 단지 하나의 명령만 있을 뿐이다.
Terraform 파일의 복사 수를 변경하면 필요할 때 쉽게 배치를 늘리고 줄일 수 있습니다.
본고에서 우리는 용기 서비스만 연구했지만 가상 기기에서도 이렇게 할 수 있다. 나의githubrepo도 하나의 예가 있다.
마지막으로 프레젠테이션 녹화를 검사하는 것을 잊지 마세요. 더 많은 동영상 내용을 보고 싶으면 저에게 알려주세요.
Reference
이 문제에 관하여(1분 이내에 글로벌 방송 서비스 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/atoonk/building-a-global-anycast-service-in-under-a-minute-2d9b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)