저는 최근 암호화폐 거래소 통합 서비스 작업을 시작했습니다. 기본적으로 저는 다양한 거래소에 요청을 보내고 환율을 비교합니다. 이 작업은 가능한 한 빨리 이루어져야 합니다. 이번 게시물에서는 성능을 크게 향상시키기 위해 제가 적용한 몇 가지 조정 사항을 보여드리겠습니다.
그러나 나는 전문가(특히 go 전문가)가 아니며 단지 내 개인 프로젝트에서 찾은 결과를 공유하고 있다는 점을 명심하세요.
런타임 개선이 가장 큰 순으로 개선되었습니다.
모든 Go 프로그램에서 고루틴은 속도를 위해 필수적입니다. 제가 이룬 가장 큰 향상은 요청을 동시에 보내는 것이었습니다. 12개의 서로 다른 교환을 수행해야 하기 때문에 이러한 요청을 동시에 보내면 런타임이 약 24초에서 단 ~3초로 단축되었습니다.
고루틴은 놀랍고 사용하기 매우 쉽습니다. 가능하면 이를 포함해야 합니다. 하지만 항상 데이터 경합을 조심하세요
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배 빠릅니다.
요청마다 새 핸들러를 만드는 대신 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!