рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рдмрдирд╛рдо рдЬреАрдУ рдХреА рдмрд╣реБрдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рддреБрд▓рдирд╛ рдирд╣реАрдВ рджреЗрдЦреА ред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг ред
рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдЧреЛ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдФрд░ рдордХреНрдЦреА рдкрд░ JSON рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ 8 рднреМрддрд┐рдХ рдХреЛрд░ рдкрд░ 120,000 [# / sec] рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рдореВрд▓ GET рдЕрдиреБрд░реЛрдз рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
- рдпрджрд┐ рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдХреИрд╢ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдорд╛рдиреНрдп рд╣реИ, рддреЛ рд╣рдо рд╕рдВрд░рдЪрдирд╛ рд╕реЗ JSON рдмрдирд╛рддреЗ рд╣реИрдВ
- рдпрджрд┐ рдХреИрд╢ рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмреЛрд▓реНрдЯ рдбреАрдмреА рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдвреВрдВрдврддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╛рдкреНрдд JSON рдкрдврд╝реЗрдВ
- рдпрджрд┐ рдмреЛрд▓реНрдЯ рдбреАрдмреА рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдореЗрдореЛрд░реА рдХреИрд╢ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ
- рдЗрди-рдореЗрдореЛрд░реА рдХреИрд╢ рдХрд╛ рдбреЗрдЯрд╛ рдмрдлрд░ рдЪреИрдирд▓ рдореЗрдВ рдЬрдорд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓рдЧрднрдЧ 10,000 рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдЪрдп рдХреЗ рдмрд╛рдж, рд╡реЗ рдмреЛрд▓реНрдЯ рдбреАрдмреА рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓ рд╕реЗрд╡ рджреНрд╡рд╛рд░рд╛ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
- рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ (рдЕрдкрдбреЗрдЯ / рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ), рддреЛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ pg_notify рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреИрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрдорд╛рдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЗрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рддрд╣рдд, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдмреЗрдВрдЪ GitHub рдХреЗ рдХреЛрдб
рдЕрдкрдбреЗрдЯ 05/06/2020
рдУрд░реЗрдХрд▓ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдерд╛ ред

- рд╕реНрдЯреИрдВрдб рдХреЛ 3 рд╕рд░реНрд╡рд░реЛрдВ - 8 рдХреЛрд░ рдЗрдВрдЯреЗрд▓ (16 рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрд░), 120 рдореЗрдореЛрд░реА (рдЬреАрдмреА), рдУрд░реЗрдХрд▓ рд▓рд┐рдирдХреНрд╕ 7.7 рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- NVMe тАФ 6.4 TB NVMe SSD Storage min 250k IOPS (4k block)
- тАФ 8.2 Network Bandwidth (Gbps)
- PostgreSQL тАФ 16 000 [get/sec], oncurrency 1024, 60 [ms]. Get 360 000 000 . JSON 1800 .
- тАФ 100 000 тАФ 120 000 [get/sec], oncurrency 1024, 2 [ms].
- PostgreSQL тАФ 10 000 [insert/sec].
- 2 4 8 Core, .
- JSON Bolt DB 2 HDD, SSD
- PostgreSQL HDD SDD 100
- Bolt DB SDD HDD 100
- JSON " " 10 PostgreSQL SDD
- тАФ Failed requests Concurrency 16 384
,
тАФ GitHub. 4000 , .
, JSON encoder/decode тАФ JSON 2 .
HTTP Get handler JSON
BenchmarkHandler_DeptGetHandler-2 1000000 41277 ns/op 4845.26 MB/s 10941 B/op 259 allocs/op
HTTP Get handler francoispqt/gojay
BenchmarkHandler_DeptGetHandler-2 1000000 13300 ns/op 15036.97 MB/s 3265 B/op 11 allocs/op
:
- PostgreSQL 11 Windows 10, тАФ 30 .
- тАФ 10 000 000 , 100 000 000 .
- JSON 1500 , 1 10 .
- тАФ core i7-3770 тАФ 4 core (8 thread), 16 , HDD (WD 2.0TB WD2000fyyz), SSD (Intel 530 Series).
- ApacheBench, concurrency level 1 4096, 1 000 000 .
- Windows, .
- RAID . .
:
Concurrency Level , ApacheBench " ".
GET PostgreSQL тАФ HDD ( )
GET PostgreSQL тАФ SSD ( )
GET BOLT DB тАФ HDD (JSON BOLT DB)
GET BOLT DB тАФ SSD (JSON BOLT DB)
GET
Oracle
Oracle 3- :
- VM.DenseIO2.8 тАФ 8 Core Intel (16 virtual core), 120 Memory (GB), Oracle Linux 7.7
- NVMe тАФ 6.4 TB NVMe SSD Storage (1 drives) min 250k IOPS (4k block)
- тАФ 8.2 Network Bandwidth (Gbps)
- тАФ PostgreSQL 12. .
- ApacheBench:
- concurrency level 4 16384
- 10 000 1 000 000 .
- 2 8 ApacheBench ( ab 1 )

GET
- JSON тАФ 1800 . Dept 10 Emp.
- Dept тАФ 33 000 000, Emp тАФ 330 000 000 .
:
- GET PostgreSQL
- GET JSON BBolt ( 74 )
- GET ( map)
.
Requests per second Concurrency.

Time per req. [ms] Concurrency ( ).

99% percentile [ms] Concurrency.

99% percentile [ms] Concurrency ( ).

backend 100 000 [#/sec] BBolt (oncurrency 128).
1600% , 1464%.
/ NVMe 0,02 [ms] (500 000 IOPS).

Benchmark, HTTP Get handler 13300 ns
BenchmarkHandler_DeptGetHandler-2 1000000 13300 ns/op 15036.97 MB/s 3265 B/op 11 allocs/op
ApacheBench, mean тАФ 0.088 ms.
0.088 тАФ 0.013 = 0.055 ms.
тАФ
:
- net/http.(*conn).serve тАФ (61.85%)
- net/http.(*connReader).backgroundRead тАФ (7.04%)
- runtime.gcBgMarkWorker тАФ (18.30%)
HTTP server (61.85%):
- тАФ net/http.(*conn).readRequest тАФ (9.29%). .
- тАФ net/http.(*response).finishRequest тАФ (21.74%). .
- тАФ net/http.(*ServeMux).ServeHTTP тАФ (23.33%).

readRequest, finishRequest backgroundRead (39.66%), IO Windows тАФ internalpoll.(ioSrv).ExecIO тАФ (24.78%).
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рдиреЗрдЯ / http рдХреНрдпрд╛ рд╣реИред (* ServeMux)ред ServeHTTP рд╣реИрдВрдбрд▓рд░ рдиреЗ рдХрд┐рдпрд╛:
- URL рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ - github.com/gorilla/mux.(*Route).Match - (2.29%)
- рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ JSON рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ - github.com/francoispqt/gojay.marshal - (9.92%)
- рдореЗрдореЛрд░реА рдореЗрдВ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ - (4.53%)
