บริการ REST เป็นแอปพลิเคชันเซิร์ฟเวอร์สำหรับเครื่องไคลเอนต์ 2000+ เครื่อง มันเป็นความคิดที่ดีหรือไม่?


11

เราจะสร้างระบบด้วย UI ใน javaFx ที่จะนำไปใช้กับเครื่องมากกว่า 2000 เครื่อง (ขั้นต่ำคือ 2000 แต่จะมีมากขึ้น - สามารถเข้าถึงเครื่องได้ 5,000 เครื่อง)

ด้วยเหตุผล / ข้อ จำกัด อื่น ๆ จะต้องติดตั้งบนเครื่องดังนั้นเราจึงไม่สามารถทำได้ด้วยเว็บเบราว์เซอร์อินเตอร์เฟส

เครื่องจักรกว่า 2,000 เครื่องจะอยู่ในกลุ่มที่ตั้งทางภูมิศาสตร์ที่แตกต่างกัน โดยทั่วไปแล้วการเชื่อมต่อนั้นดี แต่อาจไม่ดีในสถานที่ห่างไกล

แทนที่จะเข้าถึงฐานข้อมูลโดยตรงฉันกำลังคิดถึงการสร้างคลัสเตอร์เซอร์วิส REST ด้วย Spring + Spring Boot + Spring Data (java)

เซอร์วิส REST จะยอมรับและส่งคืน Json

ฉันคิดว่ามันเป็นความคิดที่ดีเพราะ:

  • บริการจะทำหน้าที่เป็นกลุ่มการเชื่อมต่อฐานข้อมูล (ฉันคิดว่าการเชื่อมต่อ 2000+ บนฐานข้อมูลอาจทำให้เกิดปัญหา);
  • เป็นไปได้ที่จะมีฐานข้อมูลพร้อมบันทึกการจัดส่งไปยังฐานข้อมูลแบบอ่านอย่างเดียวอื่น ๆ
  • มันจะขยายขนาดได้ดีขึ้นเนื่องจากเราสามารถเพิ่มเครื่องจักรให้ทำงานบริการ REST ได้มากขึ้น
  • เป็นไปได้ที่จะใช้ HTTPS กับการบีบอัดเพื่อเหตุผลด้านความปลอดภัยและการประหยัดแบนด์วิดท์
  • มีความเป็นไปได้ที่จะทำการเปลี่ยนแปลงแบบรวมศูนย์ในเอนทิตีธุรกิจโดยไม่ต้องปรับใช้เครื่องจักรใหม่กว่า 2000+ เครื่อง
  • มันรวมได้ดีขึ้นกับระบบอื่น ๆ (เพียงชี้ไปที่บริการ REST)

มันเป็นความคิดที่ดีจริงๆเหรอ?

คุณสามารถแบ่งปันประสบการณ์เชิงบวกหรือเชิงลบได้ไหม?

ขอบคุณ.


1
ฉันคิดว่ามันเป็นความคิดที่สมเหตุสมผลโดยเฉพาะอย่างยิ่งเนื่องจาก REST ได้รับการออกแบบโดยคำนึงถึงแคช คุณอาจพิจารณาใช้ websockets เพื่อลดภาระจากการเชื่อมต่อไคลเอนต์แบบไม่ถาวร แต่ขึ้นอยู่กับรูปแบบการใช้งาน API ของคุณ WebSocket เริ่มแสดงจุดแข็งเมื่อมีความเป็นไปได้ที่จะทำธุรกรรมซ้ำ ๆ จำนวนมากในการเชื่อมต่อแบบต่อเนื่อง ที่กล่าวว่ามันอาจจะง่ายเพียงแค่วัดออก ...
BLZ

8
ฐานข้อมูลไม่ควรเข้าถึงได้จากอินเทอร์เน็ตสาธารณะและอยู่หลังไฟร์วอลล์เสมอดังนั้นการป้องกันฐานข้อมูลผ่าน REST API หรือกระบวนการมาตรฐานที่คล้ายคลึงกัน นอกจากนี้ยังช่วยให้คุณเพิ่มคุณสมบัติความปลอดภัยอื่น ๆ ได้ง่ายขึ้นเช่นป้องกันผู้ใช้จากการแก้ไขรายการข้อมูลที่ไม่ได้รับอนุญาตให้ดูหรือแก้ไข
amon

คำตอบ:


3

นี่เป็นคำถามปลายเปิดที่มีการตอบสนองที่เป็นไปได้มากมายซึ่งขึ้นอยู่กับสิ่งที่คุณพยายามทำ อย่างไรก็ตามฉันจะเพิ่มบางสิ่งเป็นคำตอบเนื่องจากความคิดเห็นจะไม่ใหญ่พอ

บริการจะทำหน้าที่เป็นกลุ่มการเชื่อมต่อฐานข้อมูล (ฉันคิดว่าการเชื่อมต่อ 2000+ บนฐานข้อมูลอาจทำให้เกิดปัญหา);

ใช่นั่นเป็นความคิดที่ดี คุณเปิดการเชื่อมต่อจำนวนน้อยลงและนำมาใช้ใหม่เมื่อการร้องขอมาถึงบริการ แต่คุณจำเป็นต้องรู้ว่าจะให้บริการคำขอที่รวดเร็วเพียงใดและคำขอแต่ละรายการใช้ฐานข้อมูลไม่มากมิเช่นนั้นจะมีกลุ่มย่อยขนาดเล็กที่สามารถหมดได้อย่างง่ายดายและคำขออื่น ๆ จะถูกบล็อกขณะที่รอการเชื่อมต่อฐานข้อมูล

การแคชสามารถช่วยได้ในการส่งคืนข้อมูลที่ดึงมาแล้ว (เช่นที่ฉันพูดขึ้นอยู่กับสิ่งที่คุณพยายามทำ - หากแบบสอบถามไม่ซ้ำกันคุณไม่สามารถแคชได้มาก)

นอกจากนี้โปรดทราบว่าขนาดสระจะได้รับการคูณด้วยจำนวนบริการที่คุณวาง บริการน้อยและคุณสามารถใช้ขนาดพูลฐานข้อมูลขนาดใหญ่ บริการมากขึ้นและคุณต้องลดขนาดพูลเพื่อให้คุณมีจำนวนการเชื่อมต่อที่เปิดไปยังฐานข้อมูลโดยรวม

เป็นไปได้ที่จะมีฐานข้อมูลพร้อมบันทึกการจัดส่งไปยังฐานข้อมูลแบบอ่านอย่างเดียวอื่น ๆ

ฐานข้อมูลสามารถกลายเป็นคอขวดของคุณได้อย่างง่ายดาย มีการเชื่อมต่อและ / หรือข้อความค้นหามากเกินไปและคุณสามารถทำลายได้ ณ จุดนี้มันไม่สำคัญว่าคุณจะสามารถขยายบริการของคุณไปยังหมายเลขใด ๆ ในแนวนอนได้ คำขอทั้งหมดจะเข้าถึงฐานข้อมูลเดียวกันในที่สุด

มีหลายวิธีในการปกป้อง: แคชฉันได้กล่าวถึงแล้ว (ขึ้นอยู่กับกรณีการใช้งานของคุณ), ทำซ้ำข้อมูลบางอย่างบนเซิร์ฟเวอร์อื่น ๆ เพื่อให้บริการแบบสอบถามบางอย่างตามที่คุณพูดถึง, CQRS (ขึ้นอยู่กับกรณีการใช้งานของคุณ) (ขึ้นอยู่กับกรณีการใช้งานของคุณอีกครั้ง) ฯลฯ

โปรดทราบว่าเมื่อคุณกระจายข้อมูลเช่นนั้นทฤษฎีบท CAP ก็เริ่มที่จะนำไปใช้ ระวังให้ดีเพราะคุณอาจต้องประนีประนอมระหว่างความสอดคล้องและความพร้อมใช้งาน

มันจะขยายขนาดได้ดีขึ้นเนื่องจากเราสามารถเพิ่มเครื่องจักรให้ทำงานบริการ REST ได้มากขึ้น

ใช่บริการ REST จะปรับขนาด แต่ตามที่กล่าวไว้ข้างต้นหากคุณไม่ได้ป้องกันฐานข้อมูลนั่นอาจกลายเป็นปัญหาคอขวดได้ง่าย

เป็นไปได้ที่จะใช้ HTTPS กับการบีบอัดเพื่อเหตุผลด้านความปลอดภัยและการประหยัดแบนด์วิดท์

ใช่เช่นเดียวกับสิ่งอื่น ๆ ... บางทีคุณอาจต้องการการรับรองความถูกต้อง / การอนุญาตในภายหลัง ฯลฯ

มีความเป็นไปได้ที่จะทำการเปลี่ยนแปลงแบบรวมศูนย์ในเอนทิตีธุรกิจโดยไม่ต้องปรับใช้เครื่องจักรใหม่กว่า 2000+ เครื่อง

ใช่ แต่มากถึงระดับหนึ่งและไม่ใช่การเปลี่ยนแปลงทุกประเภท หากคุณทำการเปลี่ยนแปลงที่ขาดคุณจะต้องอัปเดตลูกค้าด้วย ดังนั้นคิดเกี่ยวกับกลยุทธ์ในการอัปเดตไคลเอนต์เป็นเวอร์ชันล่าสุดหรือหากคุณอนุญาตให้ไคลเอนต์รุ่นเก่ายังคงทำงานและใช้แอปพลิเคชันได้

มันรวมได้ดีขึ้นกับระบบอื่น ๆ (เพียงชี้ไปที่บริการ REST)

ใช่ แต่นั่นหมายถึงลูกค้าที่ใช้บริการของคุณซึ่งบางทีคุณไม่สามารถควบคุมได้

หากคุณทำการเปลี่ยนแปลงที่ไม่หยุดยั้งและคุณมีกลยุทธ์ที่ดีในการอัพเดทไคลเอนต์ JavaFX 2000+ ของคุณก็ไม่มีปัญหา แต่ถ้ามีไคลเอนต์อื่นและคุณไม่สามารถควบคุมได้คุณอาจต้องใช้การกำหนดเวอร์ชันในบริการ REST และสนับสนุนมากกว่าหนึ่งเวอร์ชันจนกว่าทุกคนจะสามารถอัปเดตเป็นล่าสุดได้

อย่างที่ฉันพูดมันขึ้นอยู่กับสิ่งที่คุณพยายามจะทำ โดยรวมแล้วคุณเป็นความคิดที่ดี แต่ระวังสิ่งที่จะไม่มาฟรีเพียงเพราะคุณติดบริการ REST หน้าฐานข้อมูล

แค่ 2 เซ็นต์ของฉัน!


ตอบที่ดี ฉันแค่อยากจะเน้นไปที่ Thiago ว่ามันคุ้มค่าที่จะพิจารณาการกำหนดเวอร์ชันใน RESTful API โดยเร็วที่สุด คุณอาจไม่จำเป็นต้องทำตั้งแต่เริ่มต้น แต่คุณควรระวังและเตรียมพร้อม
Daniel Hollinrake
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.