Tum HTTP bağlantıları eşit oluşturulmaz. Golang doğal olarak HTTP / 2'yi desteklese de, HTTP / 2 aktarımı istemci tarafından ayarlanmalı ve sunucu da HTTP / 2'yi desteklemelidir. GRPC'ye gecmeden once, istemci bağlantıları icin hala HTTP / 1.1 kullanıyorduk. Performans kazanımları icin HTTP / 2'ye gecebilirdik, ancak yerel protobuf sıkıştırmasının ve kullanılabilirlik değişikliklerinin bazı faydalarını kaybedecektik.

HTTP / 1.1'de bulunan en iyi secenek ardışık duzendir. Ardışık duzen, isteklerin bir bağlantıyı paylaşabilmesine rağmen, ondeki istek tamamlanana kadar birbiri ardına sıraya girmeleri gerektiği anlamına gelir. Bağlantı coklama kullanarak HTTP / 2 iyileştirilmiş ardışık duzen. Coğullama, aynı bağlantı uzerinden ve aynı anda birden fazla isteğin gonderilmesine izin verir.

HTTP REST API'leri, istek ve yanıt bicimleri icin genellikle JSON kullanır. Protobuf, kayıt sırasında istemci ve sunucu tarafından kabul edilen standart bir şemaya sahip olduğu icin, gRPC'nin yerel istek / yanıt formatıdır. Ek olarak, protobuf'un serileştirme hızları nedeniyle JSON'dan onemli olcude daha hızlı olduğu bilinmektedir. Dizustu bilgisayarımda bazı kriterler calıştırdım, kaynak kodu burada bulunabilir .

Gorduğunuz gibi, protobuf kucuk, orta ve buyuk veri boyutlarında daha iyi performans gosterir. İşlem başına daha hızlıdır, sıralamadan sonra daha kucuktur ve girdi boyutuna gore iyi olceklenir. Bu, cok buyuk veri kumelerini ayıklarken daha da fark edilir hale gelir. Protobuf, 96.4ns / op alır, ancak JSON, 22647ns / op alır, bu da zamanda 235X azalma! Buyuk DNS bolgeleri icin bu verimlilik, API'mizdeki kayıt değişikliğinden ucta hizmet vermeye gecmemiz icin gecen surede buyuk bir fark yaratır.

HTTP / 2 ve protobuf'un faydalarını birleştirmek, uygulamamızın bakış acısından neredeyse hicbir performans değişikliği gostermedi. Bunun nedeni, bolmelerimizin zaten birbirine cok yakın olması ve bağlantı surelerimizin zaten cok duşuk olmasıdır. Ek olarak, gRPC cağrılarımızın coğu, farkın ihmal edilebilir olduğu kucuk miktarlarda veri ile yapılır. Fark ettiğimiz bir şey - muhtemelen HTTP / 2'nin coğullamasıyla ilgili - yeni oluşturulan / duzenlenen / silinen kayıtları kenara yazarken daha yuksek verimlilikti. Gecikme artışlarımız hem genlik hem de frekansta duştu.