আমার একটি পরিষেবা আছে যা বেশ উচ্চ হারে বার্তা স্থানান্তর করে।
বর্তমানে এটি আক্কা-টিসিপি দ্বারা পরিবেশন করা হয় এবং এটি প্রতি মিনিটে 3.5M বার্তা দেয়। আমি জিআরপিসি চেষ্টা করে দেখার সিদ্ধান্ত নিয়েছি। দুর্ভাগ্যক্রমে এর ফলে অনেক ছোট থ্রুপুট হয়েছিল: প্রতি মিনিটে ~ 500k বার্তা আরও কম।
আপনি দয়া করে এটি কীভাবে অপ্টিমাইজ করবেন তা বলতে পারেন?
আমার সেটআপ
হার্ডওয়্যার : 32 কোর, 24 জিবি হিপ।
grpc সংস্করণ : 1.25.0
বার্তা বিন্যাস এবং শেষ পয়েন্ট
বার্তাটি মূলত একটি বাইনারি ব্লব। ক্লায়েন্ট একই অনুরোধে 100K - 1 এম এবং আরও বার্তা প্রবাহিত করে (অবিচ্ছিন্নভাবে), সার্ভারটি কোনও কিছুর সাথে সাড়া দেয় না, ক্লায়েন্ট কোনও অনির্বাচিত পর্যবেক্ষক ব্যবহার করে
service MyService {
rpc send (stream MyMessage) returns (stream DummyResponse);
}
message MyMessage {
int64 someField = 1;
bytes payload = 2; //not huge
}
message DummyResponse {
}
সমস্যা: আক্কা বাস্তবায়নের তুলনায় বার্তার হার কম। আমি কম সিপিইউ ব্যবহার পর্যবেক্ষণ করি তাই আমার সন্দেহ হয় যে জিপিসি কলটি অন্যথায় কিছু বলার পরেও অভ্যন্তরীণভাবে আটকাচ্ছে। কলিং onNext()
সত্যই তত্ক্ষণাত্ ফিরে আসে না তবে টেবিলে জিসিও রয়েছে।
আমি এই সমস্যাটি প্রশমিত করার জন্য আরও প্রেরককে স্প্যান করার চেষ্টা করেছি কিন্তু খুব বেশি উন্নতি পাই নি।
আমার অনুসন্ধানগুলি Grpc প্রকৃতপক্ষে প্রতিটি বার্তায় একটি 8KB বাইট বাফার বরাদ্দ করে যখন এটি সিরিয়াল করে তোলে। স্ট্যাকট্রেস দেখুন:
java.lang.Thread.State: com.google.common.io.ByteStreams.createBuffer (ByteStreams.java:58) at com.google.common.io.ByteStreams.copy (বাইটস্ট্রিমস.জেভা: ব্লক (অবজেক্ট মনিটরে) 105) io.grpc.intern.MessageFramer.writeToOutputStream (MessageFramer.javaferences74) এ io.grpc.intern.MessageFramer.writeK পরিচিতLengthUncompressed (ম্যাসেজফ্রেমার.জাভা অধিকারসমূহ 30) এ io.grpc.intern.MessageFramer.witter.com Io.grpc.intern.MessageFramer.writPayload (বার্তা ফ্রেম.জভা 1411) এ io.grpc.intern.AbstractStream.writeMessage (AbstractStream.java:53) এ io.grpc.intern.FordingClientstreams.writingMessage (ফরওয়ার্ডক্লিনস্ট্রিম.কম) এ: 168)। java: 37) io.grpc.intern.DelayedStream.writeMessage (বিলম্বিত স্ট্রিম.জভা:252) এ io.grpc.intern এ।Io.grpc.intern.ClientCallImpl.sendMessage (ClientCallImpl.java:457) এ Io.grpc.ForderingClientCall.sendMessage.ConentClice.CenceCCesce7CCCententCall.sendMessage.CoentClia.Cenent.Cenent.Cenent.Cenent.Cenent.Cenent.Cend উপর (ফরওয়ার্ডিং ক্লায়েন্টক্যাল.জভা ৩:37) io.grpc.stub.ClientCalls $ কলটোস্ট্রিমঅবসরবার অ্যাডাপ্টার.অনেক্সট (ক্লায়েন্টকলস.জভা :34646))
উচ্চ-মাধ্যমে আউটপুট জিআরপিসি ক্লায়েন্ট তৈরির সর্বোত্তম অনুশীলনের সাথে যে কোনও সহায়তা প্রশংসিত।
scalapb
। সম্ভবত এই স্ট্যাকট্রেস প্রকৃতপক্ষে স্কেল্যাপবি-উত্পন্ন কোড থেকে শুরু করে। আমি স্কেল্যাপব সম্পর্কিত সমস্ত কিছু সরিয়ে ফেলেছি তবে এটি আর্টের পারফরম্যান্সে খুব একটা সহায়তা করে নি।