gRPC เป็นเฟรมเวิร์ก RPC ที่ทันสมัย โอเพนซอร์ส และมีประสิทธิภาพสูงซึ่งสามารถทำงานในสภาพแวดล้อมใดก็ได้ โดยจะเชื่อมต่อบริการในและทั่วศูนย์ข้อมูลได้อย่างมีประสิทธิภาพ พร้อมรองรับการจัดสรรภาระงาน การติดตาม การตรวจสอบสถานะ และการตรวจสอบสิทธิ์แบบเสียบปลั๊ก นอกจากนี้ยังใช้ได้ในระยะทางสุดท้ายของการประมวลผลแบบกระจาย เพื่อเชื่อมต่ออุปกรณ์ แอปพลิเคชันบนอุปกรณ์เคลื่อนที่ และเบราว์เซอร์กับบริการแบ็กเอนด์ คุณ ดูเอกสารประกอบได้ในเว็บไซต์อย่างเป็นทางการของ gRPC และรับการสนับสนุนจาก ชุมชนโอเพนซอร์ส คู่มือนี้จะแนะนำโซลูชันสำหรับ การสร้างแอป Android โดยใช้ gRPC
grpc.io เป็นเว็บไซต์อย่างเป็นทางการของ โปรเจ็กต์ gRPC ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของ gRPC ได้ที่gRPC คืออะไร และแนวคิด gRPC ดูวิธีใช้ gRPC ในแอป Android ได้ที่ตัวอย่าง Hello World ในการเริ่มต้นใช้งาน gRPC Android Java อย่างรวดเร็ว นอกจากนี้ คุณยังดูตัวอย่าง gRPC Android อื่นๆ ได้อีกหลายตัวอย่างใน GitHub
ฟีเจอร์
- การเรียกใช้ฟังก์ชันทำให้ทุกอย่างง่ายขึ้น
- เนื่องจากเป็น RPC รูปแบบการเขียนโปรแกรมจึงเป็นการเรียกกระบวนการ โดยระบบจะแยกส่วนเครือข่ายของเทคโนโลยีออกจากโค้ดแอปพลิเคชัน ทำให้ดูเหมือนว่าเป็นการเรียกฟังก์ชันในกระบวนการปกติ การโต้ตอบระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ จะไม่ถูกจำกัดโดยความหมายของเมธอดทรัพยากร HTTP (เช่น GET, PUT, POST และ DELETE) การติดตั้งใช้งานจะดูเป็นธรรมชาติมากขึ้นเมื่อเทียบกับ REST API โดยไม่ต้องจัดการข้อมูลเมตาของโปรโตคอล HTTP
- การส่งผ่านข้อมูลเครือข่ายที่มีประสิทธิภาพด้วย HTTP/2
- การส่งข้อมูลจากอุปกรณ์เคลื่อนที่ไปยังเซิร์ฟเวอร์แบ็กเอนด์อาจเป็นกระบวนการที่ใช้ทรัพยากรมาก การใช้โปรโตคอล HTTP/1.1 มาตรฐาน การเชื่อมต่อบ่อยครั้งจากอุปกรณ์เคลื่อนที่ไปยังบริการระบบคลาวด์อาจทำให้แบตเตอรี่หมด เพิ่มเวลาในการตอบสนอง และบล็อกไม่ให้แอปอื่นๆ เชื่อมต่อ โดยค่าเริ่มต้น gRPC จะทำงานบน HTTP/2 ซึ่งมีการสตรีมแบบ 2 ทาง การควบคุมการไหล การบีบอัดส่วนหัว และความสามารถในการมัลติเพล็กซ์คำขอผ่านการเชื่อมต่อ TCP/IP เดียว ผลลัพธ์คือ gRPC สามารถลดการใช้ทรัพยากร ซึ่งส่งผลให้ เวลาในการตอบสนองระหว่างแอปกับบริการที่ทำงานในระบบคลาวด์ลดลง การใช้อินเทอร์เน็ตลดลง และแบตเตอรี่ของไคลเอ็นต์ที่ทำงานบนอุปกรณ์เคลื่อนที่มีอายุการใช้งานยาวนานขึ้น
- การรองรับการแลกเปลี่ยนข้อมูลการสตรีมในตัว
- gRPC ได้รับการออกแบบโดยคำนึงถึงการรองรับการสตรีมแบบสองทิศทางแบบฟูลดูเพล็กซ์ของ HTTP/2 ตั้งแต่เริ่มต้น การสตรีมช่วยให้คำขอและการตอบกลับมีขนาดใหญ่ได้ตามต้องการ เช่น การดำเนินการที่ต้องอัปโหลดหรือดาวน์โหลดข้อมูลจำนวนมาก การสตรีมช่วยให้ไคลเอ็นต์และเซิร์ฟเวอร์ อ่านและเขียนข้อความพร้อมกันได้ รวมถึงสมัครรับข้อมูลของกันและกันได้โดยไม่ต้อง ติดตามรหัสทรัพยากร ซึ่งจะทำให้การใช้งานแอปมีความยืดหยุ่นมากขึ้น
- การผสานรวมกับบัฟเฟอร์โปรโตคอลอย่างราบรื่น
- gRPC ใช้ Protocol Buffers (Protobuf) เป็น วิธีการซีเรียลไลซ์/ดีซีเรียลไลซ์พร้อมปลั๊กอิน Codegen ที่เพิ่มประสิทธิภาพสำหรับ Android (Protobuf Java Lite) เมื่อเทียบกับรูปแบบที่อิงตามข้อความ (เช่น JSON) Protobuf มีการแลกเปลี่ยนข้อมูลที่มีประสิทธิภาพมากกว่าในแง่ของความเร็วในการมาร์แชลและขนาดโค้ด ซึ่งทำให้เหมาะกับการใช้งานในสภาพแวดล้อมบนอุปกรณ์เคลื่อนที่มากกว่า นอกจากนี้ ไวยากรณ์คำจำกัดความของข้อความ/บริการที่กระชับของ Protobuf ยังช่วยให้กำหนดรูปแบบข้อมูลและโปรโตคอลแอปพลิเคชันสำหรับแอปได้ง่ายขึ้นมาก
ภาพรวมการใช้งาน
การใช้ gRPC สำหรับแอป Android มี 4 ขั้นตอนตามบทแนะนำข้อมูลพื้นฐานเกี่ยวกับ gRPC - Android Java
- กำหนดบริการ RPC ด้วย Protocol Buffer และสร้างอินเทอร์เฟซไคลเอ็นต์ gRPC
- สร้างแชแนลที่ทำหน้าที่เป็นสื่อกลางสำหรับการเรียก RPC ระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์
- สร้างสตับไคลเอ็นต์เป็นจุดแรกเข้าสำหรับการเริ่มการเรียก RPC จากฝั่งไคลเอ็นต์
- โทรหา RPC ไปยังเซิร์ฟเวอร์ระยะไกลเหมือนกับที่คุณทำเมื่อเรียกใช้โพรซีเยอร์ภายใน
ไบต์จะส่งเป็นข้อความธรรมดาในตัวอย่างที่ให้ไว้เพื่อวัตถุประสงค์ในการสาธิต อย่างไรก็ตาม แอปของคุณควรเข้ารหัสข้อมูลเครือข่ายในเวอร์ชันที่ใช้งานจริงเสมอ gRPC รองรับการเข้ารหัส SSL/TLS รวมถึงการแลกเปลี่ยนโทเค็น OAuth (OAuth2 กับบริการของ Google) เพื่อการตรวจสอบสิทธิ์ ดูรายละเอียดเพิ่มเติมได้ที่ TLS ใน Android และการใช้ OAuth2
การขนส่ง
gRPC มีตัวเลือกการใช้งานการส่งผ่าน 2 แบบสำหรับไคลเอ็นต์ Android ได้แก่ OkHttp และ Cronet
เลือกการขนส่ง (ขั้นสูง)
- OkHttp
- OkHttp เป็นสแต็กเครือข่ายที่มีน้ำหนักเบาซึ่งออกแบบมาเพื่อใช้บนอุปกรณ์เคลื่อนที่ ซึ่งเป็น
การรับส่งเริ่มต้นของ gRPC สำหรับการเรียกใช้ในสภาพแวดล้อม Android หากต้องการใช้ OkHttp เป็น
การรับส่ง gRPC สำหรับแอป ให้สร้างแชแนลด้วย
AndroidChannelBuilder
ซึ่งจะห่อหุ้มOkHttpChannelBuilder
และจะลงทะเบียนเครื่องมือตรวจสอบเครือข่ายกับระบบปฏิบัติการ Android เพื่อตอบสนองต่อ การเปลี่ยนแปลงเครือข่ายได้อย่างรวดเร็ว ดูตัวอย่างการใช้งานได้ใน gRPC-Java AndroidChannelBuilder
- Cronet (ทดลอง)
- Cronet คือสแต็กเครือข่ายของ Chromium ที่แพ็กเกจเป็นไลบรารีสำหรับอุปกรณ์เคลื่อนที่ โดยมี
การรองรับเครือข่ายที่แข็งแกร่งด้วยโปรโตคอล QUIC ที่ทันสมัย ซึ่งอาจมี
ประสิทธิภาพเป็นพิเศษในสภาพแวดล้อมเครือข่ายที่ไม่น่าเชื่อถือ ดูรายละเอียดเพิ่มเติมเกี่ยวกับ Cronet ได้ที่ทำการดำเนินการของเครือข่ายโดยใช้ Cronet
หากต้องการใช้ Cronet เป็นการรับส่ง gRPC สำหรับแอป ให้สร้างแชแนลด้วย
CronetChannelBuilder
ตัวอย่างการใช้งานมีให้ใน gRPC-Java Cronet Transport
โดยทั่วไป เราขอแนะนำให้แอปที่กำหนดเป้าหมาย SDK เวอร์ชันล่าสุดใช้ Cronet เนื่องจากมีสแต็กเครือข่ายที่มีประสิทธิภาพมากกว่า ข้อเสียของการใช้ Cronet คือขนาด APK จะเพิ่มขึ้น เนื่องจากเมื่อเพิ่มการอ้างอิงไบนารี Cronet จะทำให้ขนาดแอปเพิ่มขึ้น >1 MB เมื่อเทียบกับ OkHttp ที่มีขนาดประมาณ 100 KB ตั้งแต่ GMSCore v.10 เป็นต้นไป คุณจะโหลดสำเนา Cronet เวอร์ชันล่าสุดจากบริการ Google Play ได้ ขนาด APK อาจไม่ใช่ปัญหาอีกต่อไป แม้ว่าอุปกรณ์ที่ไม่ได้ติดตั้ง GMSCore เวอร์ชันล่าสุด อาจยังคงต้องการใช้ OkHttp อยู่ก็ตาม