Artık bir kullanım senaryosunu tamamlamak için çeşitli uygulamaların kendi görevlerini üstlendiği karmaşık ve dağıtılmış bir sistem, bunun yanı sıra günümüzde bir sistem aynı varlıktan olmayan başka bir sistem de gerektiriyor, örneğin bir e-ticaret zaten bağlı bir ödeme sistemi gerektiriyor bankaya ( Payment Gateway), uygulamalar arasındaki iletişim, şimdiye kadar 3 türün olduğu bir sistem tasarlamada da bir endişe kaynağıdır:
3. Senkronize ve Asenkron kombinasyonlar, örneğin, bir sipariş oluştuğunda, önce stok kalemleri senkronize olarak azaltılmalıdır, daha sonra yeni bir sipariş varsa yeni bir sipariş servisi mesaj yoluna bir olay gönderir (sadece bir örnek, daha fazla olabilir). karmaşık)
Bir önceki kısa açıklamadan sonra, bu sefer mikroservisler üzerindeki uygulamalar/hizmetler ve/veya gRPC kullanan dağıtık sistemler arasındaki iletişim için sıklıkla kullanılan RPC'den bahsetmek istiyorum.
Kısaca RPC, bir uygulamanın diğer uygulamalardan servisleri, işlevleri veya alt rutinleri çağırabileceği bir iletişim protokolüdür. bir uygulamanın başka bir uygulamadan bir işlevi çağırdığını ve belirtilen dönüş verilerini aldığını söylersem.
gRPC
gRPC https://grpc.io/ , google tarafından geliştirilen ve şu anda CNCF (Cloud Native Computing Foundation) inkübasyonunda olan bir RPC Çerçevesidir. gRPC, RPC'yi uygulamamızı kolaylaştırır. Birkaç iletişim türü vardır:
Tam kaynak koduna ihtiyacınız varsa, ona şu adresten erişebilirsiniz:
Bu deneyde hazırlanması gerekenler şunlardır:
Bir API Sözleşmesi gibi, önce bir prototip oluşturmamız gerekiyor. Bu protofile, protoc derleyicisi tarafından kod üretimi yapmak için kullanılacaktır, işte ihtiyacımız olan protofile (koddaki açıklamalarda).
hizmette, akış türleri ile karıştırma dahil birçok yöntem oluşturabiliriz. ama bu deneyde sadece bir tanesi yeterli.
Go kullanarak yaptığımız ödeme hizmetleri için. ilk adım, projeyi aşağı yukarı şu şekilde go mod ile kurmaktır:
daha önce oluşturulan proto dosyasını protofile klasörüne kopyalayın. sonra bir sonraki adım kod üretimi için bir komut oluşturmaktır, burada bir kabuk betiği .sh dosyası kullanacağız
kod üretimi yapmadan önce Go eklentisini şu komutla yüklememiz gerekiyor:
$ go install google.golang.org/protobuf/cmd/[email protected] $ go install google.golang.org/grpc/cmd/[email protected] $ export PATH="$PATH:$(go env GOPATH)/bin"
bundan sonra kod üretimi yapabiliriz:
$ cd protofile $ sh genproto.sh paymentpb payment_service.proto
kurulmamış birçok bağımlılık olacaktır, bu nedenle kod başarıyla oluşturulduktan sonra şu komutu çalıştırın:
$ go mod tidy
Ardından, ödeme hizmeti kullanım durumunu ele almak için hizmet klasöründe/modülünde bir PaymentService yapısı ve bir yöntem oluştururuz:
ve sonuncusu ana pakette bir gRPC sunucusu oluşturmaktır. bu projede cmd klasöründe oluşturulacak:
ve nihayet bu ödeme uygulamasını çalıştırabiliriz.
$ go run .
Bu yıl (2022) postacı gRPC testi (beta) özelliğini yayınladı, postacınızın güncellendiğinden emin olun.
Ardından gRPC test ekranı açılacaktır, daha sonra daha önce oluşturduğumuz prototipi kullanabiliriz.
postacı, protokol dosyasında bulunan yöntemleri otomatik olarak listeleyecektir. çünkü oluşturulan prototipte sadece bir yöntem vardır:
bir istekte bulunmak için önce iletiyi protofilemizdeki Request mesaj tipinin tanımına göre dolduracağız, postacı yansıtma özelliği sağlıyor bu yüzden ctrl+boşluk tuşlarına basıyoruz, ihtiyacımız olan mesaj şu şekilde (postacı için JSON gösterimini kullanır istek ve yanıt verileri) düğmesine tıkladıktan sonra sonuçları çağırın:
Bu deneydeki servis siparişi NodeJS TyeScript kullanılarak oluşturulacaktır. Statik ve Güçlü Yazma için daha iyi olduğu için TypeScript kullanmayı tercih ederim.
Birincisi kurulum projesi, işte bağımlılıkları kurmak ve tsc ve jest'i yapılandırmak için kullanılabilecek package.json ve tsconfig.jon ve jest.config.js.
klasör yapısı aşağıdaki gibidir:
sonra proje kökünde çalıştırın:
$ npm install $ npm run start
$ npm install -g grpc-tools $ npm i -g grpc_tools_node_protoc_ts
sonra kod oluşturmayı çalıştırın:
$ sh genproto.sh paymentpb payment_service.proto
Ardından, varlıklar klasöründe Ürün varlığı için bir sınıf oluşturun:
Ardından, ödeme hizmetleri uygulamasında kullanım senaryosu sırasını ve yöntemin çağrılmasını işlemek için hizmet klasöründe bir hizmet siparişi oluştururuz:
tüm ihtiyaçlar artık bir test yapabilir, çünkü ilki birim testi (jest) kullanmayı deneyecektir. dosyalar oluşturun:
düğüm modülünde, modül @grpc/grpc-js'ye hareket ederken, kod geninin sonuçlarının grpc modülüne aktarıldığı bir hata olacaktır. düzeltmek için, kod oluşturma sonucundan import grpc'yi @grpc/grpc-js olarak değiştirin:
./build/payment_service_grpc_pb.js dosyasında:
./paymentpb/payment_service_grpc_pb.d.ts dosyasında:
ardından testi çalıştırın:
$ npm run test
Ödeme hizmeti uygulamasında günlüğü görebiliriz, bir istek aldı:
Tamamlandı!!!
Daha sonra sistem dışından erişilebilecek bir API oluşturacağız.Bu durumda, web uygulamasındaki kullanıcının bir sipariş verdiğini varsayalım, web uygulaması bir api çağrısı yapacak, ancak sadece örnek için basit bir versiyon yapacağız. API çağrısı.
proje kökündeki index.ts dosyasında aşağıdaki dosyayı oluşturun. ekspres kullanacağız:
sonra çalıştırın ve bitiş noktasını çağırmayı deneyin:
$ npm run start $ curl -X POST 'http://localhost:5000/order'
Evet, bu, hizmetler arasındaki tekli gRPC uygulama deneyinin bir parçasıdır. Bir akış türü veya hatta muhtemelen bir sonraki makalede yazacağım bir Bidi akışı oluşturmaya çalışırsanız daha ilginç olacaktır.
Okuduğunuz için teşekkürler, umarım faydalı olur.
2021'de hizmet verdiğiniz müşteriler ve onlara anlattığınız hikayeler hakkında bildiğiniz her şeyi yeniden düşünmenizi tavsiye ediyorum. Geri adım atmak.
Amerikalı koşucu Athing Mu, profesyonel kariyerinde ilk kez 800 metrelik bir yarışı kaybedebilirmiş gibi görünüyordu. Mu, tipik olarak, az kol hareketi ve görünüşte az enerji içeren benzersiz ve zahmetsiz bir adımla yarışlarına hükmeder.
İnsanlar sanata çekilir. On yıldan fazla bir süredir araştırmacılar, izleme sanatının sağlığımız ve esenliğimiz üzerindeki olumlu etkisini araştırıyorlar.
Bu ay tüm yeni abonelerimize ve yazarlarımıza sıcak bir karşılama; sürülerinizde ortaya çıkıyorsunuz ve bunun için size teşekkür ediyoruz. Burada harika bir topluluk oluşturuyoruz ve yorumlarınızı ve makalelerinizi okumak harika.
"Tren kazası" kelimesinden nefret ediyorum. İnsanlar kendi ahlaki pusulalarında teselli bulur ve bunu yaparken kendilerini yargıda bulunurken bulurlar.
Angular uygulamanızın bazı bölümlerinin neden hala yavaş olduğunu merak ediyor musunuz? Bu makale, uygulama performansınızı nasıl artırabileceğinizi size gösterecek. Angular uygulamalarınızı gecikmeli ve yavaş buluyor ancak bunları nasıl geliştireceğiniz konusunda hiçbir fikriniz yok mu? Uygulamanızın performansını artırmanın yaklaşık 5 yolunu öğrenmek için doğrudan bu makaleye dalalım.