>백엔드 개발 >Golang >Golang API 요청 성능 개선

Golang API 요청 성능 개선

PHPz
PHPz원래의
2024-08-20 18:38:07599검색

Improving Golang API request performance

프로젝트

저는 최근 암호화폐 거래소 통합 서비스 작업을 시작했습니다. 기본적으로 저는 다양한 거래소에 요청을 보내고 환율을 비교합니다. 이 작업은 가능한 한 빨리 이루어져야 합니다. 이번 게시물에서는 성능을 크게 향상시키기 위해 제가 적용한 몇 가지 조정 사항을 보여드리겠습니다.

그러나 나는 전문가(특히 go 전문가)가 아니며 단지 내 개인 프로젝트에서 찾은 결과를 공유하고 있다는 점을 명심하세요.

개량

런타임 개선이 가장 큰 순으로 개선되었습니다.

1. 고루틴 사용

모든 Go 프로그램에서 고루틴은 속도를 위해 필수적입니다. 제가 이룬 가장 큰 향상은 요청을 동시에 보내는 것이었습니다. 12개의 서로 다른 교환을 수행해야 하기 때문에 이러한 요청을 동시에 보내면 런타임이 약 24초에서 단 ~3초로 단축되었습니다.

고루틴은 놀랍고 사용하기 매우 쉽습니다. 가능하면 이를 포함해야 합니다. 하지만 항상 데이터 경합을 조심하세요

2. JSON 라이브러리 업그레이드

encoding/json을 github.com/json-iterator/go.jsoniter로 교체했습니다. 표준 라이브러리를 즉시 대체할 수 있는 빠른 JSON 처리 라이브러리이므로 코드를 변경할 필요가 없었습니다. , 그냥 도서관 스위치일 뿐입니다.

벤치마크 결과

성능 향상을 측정하기 위해 인코딩/json과 jsoniter를 비교하는 몇 가지 벤치마크를 실행했습니다. 결과 요약은 다음과 같습니다.

goos: linux
goarch: amd64
pkg: apiSpeedImprove
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkEncodingJSON-12 140383 7381 ns/op
BenchmarkJSONIter-12 974605 1217 ns/op
PASS
ok apiSpeedImprove 3.216s

그래서 jsoniter는 표준 라이브러리보다 약 6배 빠릅니다.

3. HTTP 핸들러 재사용

요청마다 새 핸들러를 만드는 대신 HTTP 핸들러를 재사용하기 시작했습니다. 핸들러를 한 번 설정하고 재사용함으로써 각 요청에 대해 새 핸들러를 만드는 오버헤드를 줄였습니다.

벤치마크 결과

다음은 재사용된 핸들러와 각 요청에 대한 새 핸들러 생성을 비교한 벤치마크 결과입니다.

goos: linux
goarch: amd64
pkg: apiSpeedImprove/httpReuse
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkReusedHandler-12 2179 505189 ns/op
BenchmarkNewHandlerPerRequest-12 2341 507525 ns/op
PASS
ok apiSpeedImprove/httpReuse 7.270s

HTTP 핸들러를 재사용하면 각 요청에 대해 새 핸들러를 만드는 것보다 성능이 약간 향상됩니다.

결론

이러한 조정을 통해 모든 정보를 수집하는 데 걸리는 시간을 처음 24초에서 약 2초로 단축할 수 있었습니다. 꽤 탄탄한 개선!

제 벤치마크 코드에 관심이 있으시면 여기에서 확인하실 수 있습니다

이 게시물이 마음에 드셨고 제 작업을 후원하고 싶으시다면 여기에 기부하실 수 있습니다.

위 내용은 Golang API 요청 성능 개선의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.