우수한 소프트웨어와 실용적인 튜토리얼
웹사이트 오프로드를 위한 Cloudflare Workers 사용
사용 방법 클라우드플레어 근로자들부하 분산, Cloudflare Workers 웹사이트 트래픽 분산 구성, 클라우드플레어 워커스 负载均衡代码示例, 중량 기반 트래픽 분배 구현, Cloudflare Workers 성능 모니터링 및 최적화!
Cloudflare Workers는 Cloudflare의 엣지 네트워크에서 사용자 지정 코드를 실행할 수 있는 강력한 서버 측 JavaScript 런타임입니다. Cloudflare Workers를 사용하면 웹사이트 트래픽을 유연하게 관리하고, 트래픽 분산 및 부하 분산을 구현할 수 있습니다. 이 글에서는 Cloudflare Workers를 사용하여웹사이트 우회로드, 웹사이트 안정성 및 성능을 개선합니다.
1. Cloudflare Worker 생성
- 등록하고 로그인하세요: 먼저 Cloudflare 공식 웹사이트에 등록하고 계정에 로그인해야 합니다.
- 작업자 생성: Cloudflare 대시보드에서 "Workers" 옵션을 선택하고 "서비스 만들기" 버튼을 클릭하세요. Worker 이름을 지정하고 서비스를 생성하세요.
- 코드 작성: Cloudflare의 온라인 편집기에서 Worker 코드를 작성하거나 로컬 개발 환경을 사용하여 개발하고 Cloudflare에 배포할 수 있습니다.
2. 기본 부하 분산 구현
부하 분산 코드 작성: Worker 코드에서 JavaScript를 사용하여 기본적인 부하 분산을 구현할 수 있습니다. 다음은 트래픽을 여러 서버로 분산하는 간단한 예제 코드입니다.
const 백엔드 = [ 'https://backend1.example.com', 'https://backend2.example.com', 'https://backend3.example.com' ]; addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); 비동기 함수 handleRequest(요청) { const url = 새 URL(request.url); const 백엔드 = 백엔드[Math.floor(Math.random() * BACKENDS.length)]; url.호스트 이름 = 새 URL(백엔드).호스트 이름; fetch(url.toString(), 요청)를 반환합니다. }
이 코드 조각은 요청을 무작위로 분산합니다.
백엔드
배열 내의 다양한 백엔드 서버.라우팅 규칙 구성: Cloudflare Workers 구성 페이지에서 생성된 Worker를 어떤 요청에서 사용해야 하는지 지정하는 라우팅 규칙을 설정합니다. 경로, 호스트 이름 또는 기타 요청 속성을 기반으로 이러한 규칙을 구성할 수 있습니다.
3. 가중치 기반 부하 분산 구현
가중치 설정: 특정 가중치에 따라 트래픽을 분산하려면 위 코드를 수정하고 가중치를 사용하여 요청 분산을 결정할 수 있습니다. 다음은 예시입니다.
const 백엔드 = [ { url: 'https://backend1.example.com', 가중치: 1 }, { url: 'https://backend2.example.com', 가중치: 3 }, { url: 'https://backend3.example.com', 가중치: 1 } ]; addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); 비동기 함수 handleRequest(요청) { const url = 새 URL(request.url); const 백엔드 = getWeightedBackend(); url.호스트 이름 = 새 URL(backend.url).호스트 이름; fetch(url.toString(), request)를 반환합니다. } getWeightedBackend() 함수 { let totalWeight = BACKENDS.reduce((sum, backend) => sum + backend.weight, 0); let random = Math.random() * totalWeight; (BACKENDS의 백엔드를 위해) { if (random < backend.weight) { return backend; } random -= backend.weight; } }
이 코드는 지정된 가중치에 따라 백엔드 서버를 선택하여 트래픽의 가중 분산을 달성합니다.
4. 모니터링 및 최적화
- 근로자 성과 모니터링: Cloudflare의 분석 도구를 사용하면 요청 응답 시간, 오류율 등을 포함한 Worker 성능을 모니터링할 수 있습니다. 이 데이터는 부하 분산 전략을 조정하여 성능을 최적화하는 데 도움이 될 수 있습니다.
- 코드 최적화: 모니터링 결과에 따라 Worker 코드를 최적화하여 효율적이고 안정적인 부하 분산을 보장합니다.
5. 테스트 및 배포
- 테스트 작업자: 배포하기 전에 Cloudflare의 테스트 도구를 사용하여 Worker의 기능을 테스트하여 예상대로 작동하는지 확인하세요.
- 프로덕션 환경에 배포: 테스트를 통과한 후 작업자를 프로덕션 환경에 배포하고 트래픽 상황에 따라 조정합니다.
Cloudflare Workers 실습 튜토리얼
Cloudflare 플랫폼에서 도메인 이름을 호스팅한 후, Cloudflare Workers를 사용하여 웹사이트 도메인 이름의 부하를 분산합니다.
자원을 전환하기 위한 몇 가지 전략은 다음과 같습니다.
- DNS 라운드 로빈
- 오픈소스 플랫폼 Nginx, Apache 등
- 주요 클라우드 공급업체 등이 제공하는 로드 로더 서비스
- 씨엔디
처음에는 Cloudflare 플랫폼의 스마트 DNS 서비스를 사용해 보고 싶었지만, 유료(월 $5)가 필요했습니다. 그래서 Cloudflare Workers를 통해 사용해 보기로 했습니다.
Cloudflare 계정에 가입하세요
- 가다 클라우드플레어 계정을 등록하고 CF에 도메인 이름을 호스팅하세요
- CNAME 레코드를 추가하면
a.aaa.com
A 서버 IP로 확인 - A 레코드를 추가하면
b.aaa.com
서버 B IP로 확인 - 완전 엄격 모드의 SSL/TLS
- (해야 하다) DNS 레코드에서 프록시 활성화(Xiaoju Cloud)
근로자 생성
- 작업자 및 페이지로 이동
- 선택하다
신청서를 작성하세요
- 다음 코드를 붙여넣으세요
addEventListener('fetch', event => {event.respondWith(handleRequest(event.request)) }) // 폴링 대상 서비스 const TARGETS = [ 'a.aaa.com', 'b.aaa.com' ] async function handleRequest(request) {const url = new URL(request.url) url.hostname = getRandomServer() return await fetch(url, request) } // 매시간 다른 대상을 전환합니다. function getServerEveryHour() {const d = new Date() const h = d.getHours() return TARGETS[h%TARGETS.length] } // 매번 무작위 대상(대상 간에 교차 도메인이 있는지 주의하세요) function getRandomServer() {return TARGETS[Math.floor(Math.random() * TARGETS.length)] }
- 저장하고 배포하세요
근로자 사용
- 새로 생성된 Worker를 보고 세부 정보 페이지에서 트리거를 선택하세요.
- 라우팅 중인터페이스 클릭경로 추가
- 경로: 선택 사항
aaa.com
와일드카드를 사용할 수 있습니다.특정 가시적 - 방금 만든 영역을 선택하세요.
aaa.com
- 경로: 선택 사항
확인하다
방금 만든 Workers 구성 페이지의 오른쪽 상단 모서리를 클릭하면 JavaScript 코드를 편집, 디버깅하고 미리 볼 수 있습니다.
이 코드를 수정하여 전환이 효과적인지 확인하세요.
// 폴링 대상 서비스 const TARGETS = [ 'a.aaa.com', 'b.aaa.com' ]
페이지를 새로 고치면 가끔 a.aaa.com으로 로드되는 것을 볼 수 있는데, 이는 구성이 효과적이라는 것을 의미합니다!