คำถามติดแท็ก microservices

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

2
การออกแบบ microservice แบบหลายผู้เช่า
เรากำลังอยู่ในขั้นตอนการโอนย้ายแอพพลิเคชั่นแบบเสาหินไปยังสถาปัตยกรรมไมโครเซอร์วิส เนื่องจากข้อกำหนดทางกฎหมายบางประการเราต้องเก็บข้อมูลลูกค้าจากประเทศต่างๆในฐานข้อมูลแยกต่างหาก (เฉพาะประเทศ) เช่น US db สำหรับลูกค้า US, UK db สำหรับลูกค้า UK ... การออกแบบต่อไปนี้ที่เรากำลังพิจารณามีดังนี้: ตัวเลือกที่ 1: แอปพลิเคชันผู้เช่าหลายคนพร้อมการสนับสนุนผู้เช่าหลายรายที่จำศีลที่สามารถปรับเป็นจำนวน N ครั้งขึ้นอยู่กับความต้องการ (คิดว่าฝัก kubernetes) อินสแตนซ์เดียวของแอปพลิเคชันนี้จะสามารถเชื่อมต่อกับฐานข้อมูลทั้งหมด ตัวเลือก 2: ปรับใช้ 1 อินสแตนซ์ microservice ต่อฐานข้อมูลประเทศ ด้วยเกตเวย์ API ด้านหน้าการกำหนดเส้นทางทราฟฟิก หากคุณต้องออกแบบระบบประเภทนี้ตัวเลือกของคุณจะเป็นอย่างไร

2
รูปแบบโดเมนที่ใช้ร่วมกันของสถาปัตยกรรม Microservice
สมมติว่าเรามีแอพพลิเคชั่น Spring Boot ที่ใช้สถาปัตยกรรมไมโครไซต์ แต่ละบริการมีรูปแบบโดเมนของตนเอง แต่แต่ละบริการต้องอ้างอิงวัตถุโดเมนผู้ใช้ อะไรจะเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้? แต่ละบริการจะมี userId ที่ดีกว่าหรือไม่จากนั้นเมื่อจำเป็นให้สอบถามผู้ใช้บริการเพื่อขอรายละเอียดของผู้ใช้หรือดีกว่าถ้ามีห้องสมุดโดเมนที่ใช้ร่วมกันสำหรับไมโครไซต์ทั้งหมด

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

4
ทำอย่างไรให้พอดีกับกฎของเอ็นจินในสถาปัตยกรรมไมโครเซอร์วิสเมื่อต้องการข้อมูลอินพุตจำนวนมาก?
สถานการณ์ปัจจุบัน เรากำลังดำเนินการ (และตอนนี้ยังคงรักษา) เว็บแอปพลิเคชันการช็อปปิ้งออนไลน์ในสถาปัตยกรรม microservice หนึ่งในความต้องการก็คือธุรกิจจะต้องสามารถใช้กฎกับสิ่งที่ลูกค้าของเราเพิ่มลงในรถเข็นของพวกเขาเพื่อปรับแต่งประสบการณ์ของพวกเขาและลำดับท้ายที่สุด เห็นได้ชัดว่าต้องวางเอ็นจิ้นกฎทางธุรกิจและเราได้ใช้ "บริการไมโคร" ที่เฉพาะเจาะจงสำหรับสิ่งนี้ (ถ้าเรายังคงเรียกมันได้) ในช่วงหนึ่งปีที่ผ่านมาเอ็นจินกฎนี้มีความซับซ้อนมากขึ้นเรื่อย ๆ ต้องการข้อมูลมากขึ้น (เช่นเนื้อหาของรถเข็น แต่ยังรวมถึงข้อมูลผู้ใช้บทบาทของเขาบริการที่มีอยู่ของเขาข้อมูลการเรียกเก็บเงินบางอย่างเป็นต้น) เพื่อให้สามารถ คำนวณกฎเหล่านั้น ในขณะนี้shopping-cartmicroservice ของเรากำลังรวบรวมข้อมูลทั้งหมดจาก microservices อื่น ๆ แม้ว่าส่วนหนึ่งของข้อมูลนี้จะถูกใช้งานโดยshopping-cartส่วนใหญ่จะใช้เพื่อป้อนกฎของเครื่องมือเป็นส่วนใหญ่ ข้อกำหนดใหม่ ตอนนี้มาถึงความต้องการแอปพลิเคชั่น / ไมโครไซต์อื่นเพื่อนำเอ็นจินกฎกลับมาใช้ใหม่สำหรับข้อกำหนดที่คล้ายกัน ในสถานการณ์ปัจจุบันพวกเขาจะต้องส่งข้อมูลชนิดเดียวกันเรียกไมโครไซต์เดียวกันและสร้าง (เกือบ) ทรัพยากรเดียวกันเพื่อให้สามารถเรียกเครื่องมือกฎ ดำเนินการต่อตามที่เป็นอยู่เราจะเผชิญกับปัญหาหลายประการ: ทุกคน (เรียกเครื่องมือกฎ) ต้องนำการดึงข้อมูลกลับมาใช้ใหม่แม้ว่าพวกเขาจะไม่ต้องการมัน การร้องขอไปยังเอ็นจินกฎมีความซับซ้อน ต่อไปในทิศทางนี้เราจะต้องขนส่งข้อมูลนี้ไปทั่วเครือข่ายสำหรับคำขอจำนวนมาก (คิดว่าμs A μsโทรμs B เรียกเครื่องมือกฎ แต่ A มีข้อมูลที่ต้องการกฎเครื่องยนต์อยู่แล้ว); shopping-cart ได้กลายเป็นใหญ่เนื่องจากการดึงข้อมูลทั้งหมด ฉันอาจลืม ... เราจะทำอย่างไรเพื่อหลีกเลี่ยงปัญหาเหล่านี้ เป็นการดีที่เราจะหลีกเลี่ยงการเพิ่มความซับซ้อนมากขึ้นในเครื่องมือกฎ …

1
เหตุใดจึงเป็นความคิดที่ไม่ดีที่จะแบ่งปันอินเทอร์เฟซระหว่างเซิร์ฟเวอร์และไคลเอนต์
ฉันอ่านเอกสารSpring Cloud Netflixเมื่อฉันค้นพบวิธีแชร์อินเทอร์เฟซระหว่างเซิร์ฟเวอร์ HTTP และไคลเอนต์ พวกเขาใช้ตัวอย่างนี้สำหรับ microservices แม้ว่าจะไม่มีเหตุผลว่าทำไมมันถึงขยายไปยังการสื่อสาร HTTP ทั่วไปไม่ได้: // The shared interface, in a common library public interface UserService { @RequestMapping(method = GET, value = "/users/{id}") User getUser(@PathVariable long id); } // The controller, on the server @RestController public class UserResource implements UserService { } // The same …

2
การอนุญาตของผู้ใช้ด้วย microservices
microservices ควรรับผิดชอบในการจัดการการอนุญาตของตนเองหรือคุณคิดว่าจะดีกว่าที่จะมีการให้บริการการอนุญาตแยกต่างหากที่ใช้ร่วมกันในทุกส่วนย่อย (ภายในโดเมนธุรกิจเดียวกัน) ของ microservices สำหรับฉันแล้วมันมีเหตุผลมากกว่าที่จะทำให้ง่ายต่อการใช้การเปลี่ยนแปลงบังคับใช้นโยบาย เป็น DRY เป็นต้นอย่างไรก็ตามสามารถออกจากมือได้อย่างง่ายดายด้วยบริการทุกประเภทที่ทิ้งกฎไว้ในที่เดียวและยังกังวลเกี่ยวกับค่าใช้จ่ายของเครือข่าย ความคิดใด ๆ

3
ตรรกะทางธุรกิจที่ควรนั่งในสถาปัตยกรรมบริการไมโคร?
ยังคงพยายามคลุมหัวของฉันรอบ ๆ สถาปัตยกรรมไมโครบริการเนื่องจากฉันคุ้นเคยกับวิธีการแบบเสาหิน สมมติว่าเราพยายามสร้างระบบการจอง Uber ที่ง่ายมาก เพื่อลดความซับซ้อนของสิ่งที่เราสมมติว่าเรามี 3 บริการและ API ประตูสำหรับไคลเอนต์: Booking, Drivers, Notificationและเรามีขั้นตอนการทำงานต่อไปนี้: เมื่อสร้างการจองใหม่: ตรวจสอบว่าผู้ใช้ปัจจุบันมีการจองแล้ว รับรายการไดรเวอร์ที่มี ส่งการแจ้งเตือนไปยังผู้ขับขี่เพื่อรับการจอง คนขับรับการจอง สมมติว่าการส่งข้อความทั้งหมดทำได้ผ่านการโทร http แทนที่จะส่งข้อความบัสเช่นคาฟคาเพื่อให้ทุกอย่างง่ายขึ้น ดังนั้นในกรณีนี้ฉันคิดว่าBookingบริการสามารถทำการตรวจสอบการจองที่มีอยู่ แต่ใครจะได้รับรายชื่อของไดรเวอร์และการแจ้งเตือนที่มีอยู่ ฉันกำลังคิดที่จะทำในระดับเกตเวย์ แต่ตอนนี้ตรรกะแบ่งออกเป็นสองที่: Gateway - รับรายการไดรเวอร์ที่มีอยู่ + ส่งการแจ้งเตือน Booking - ตรวจสอบการจองที่มีอยู่ และฉันค่อนข้างแน่ใจว่าเกตเวย์ไม่ใช่สถานที่ที่เหมาะสมที่จะทำ แต่ฉันรู้สึกว่าถ้าเราทำในBookingบริการมันจะกลายเป็นคู่แน่น? เพื่อให้มันซับซ้อนยิ่งขึ้นจะเกิดอะไรขึ้นถ้าเรามีโครงการอื่นที่ต้องการนำระบบการจองกลับมาใช้ใหม่ แต่ด้วยตรรกะทางธุรกิจของมันเอง นั่นเป็นเหตุผลที่ฉันคิดว่าจะทำในระดับเกตเวย์เพื่อให้เกตเวย์โครงการใหม่สามารถมีตรรกะทางธุรกิจของตัวเองแยกต่างหากจากที่มีอยู่ อีกวิธีหนึ่งในการทำฉันคิดว่าแต่ละโครงการมีบริการจองของตัวเองที่จะพูดคุยกับบริการจองหลัก แต่ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดที่นี่ :-)

1
Microservices ที่อยู่หลังเกตเวย์ API จำเป็นต้องยืนยันโทเค็นการเข้าใช้หรือไม่
ฉันมี microservices มากมายที่เข้าถึงได้จากภายนอกผ่านเกตเวย์ API เท่านั้น API เกตเวย์ของฉันถูกตั้งค่าเป็นทรัพยากร OAuth และตรวจสอบโทเค็น (ตรวจสอบลายเซ็น ฯลฯ ) ก่อนส่งคำขอดาวน์สตรีมไปยังไมโครไซต์หนึ่งรายการหรือมากกว่า ในขณะที่ microservices ของฉันต้องการโทเค็นเพื่อตรวจสอบขอบเขตและการเรียกร้อง แต่ตอนนี้บริการนี้จำเป็นต้องมีการตรวจสอบโทเค็นด้วยหรือไม่ ดูเหมือนว่าจะเกินกำลังเล็กน้อย แต่ฉันไม่สามารถหาคำแนะนำออนไลน์เกี่ยวกับสถานการณ์นี้ได้ การตรวจสอบโทเค็นที่เกตเวย์ API นั้นดีพอหรือไม่ หรือเป็นวิธีที่ดีที่สุดในการตรวจสอบอีกครั้งในภายหลัง?

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

7
บริการควรพูดคุยกันโดยตรงในสถาปัตยกรรมบริการไมโครสโคปหรือไม่?
ฉันมีเว็บเซอร์วิสจำนวนหนึ่งที่รวมเป็นเว็บแอปพลิเคชัน ลูกค้าสามารถเข้าถึงบริการเหล่านี้ผ่านการเรียกใช้ REST API บริการเหล่านี้ควรจะสามารถพูดคุยกันได้โดยตรงหรือไม่? ถ้าเป็นเช่นนั้นจะไม่ทำให้พวกเขาคู่ซึ่งขัดแย้งกับแนวคิดเกี่ยวกับ microservices? ลูกค้าควรเรียกพวกเขาโดยตรงเพื่อรับข้อมูลที่จำเป็นในการโหลดหน้าเว็บบนไคลเอนต์หรือไม่ หรือฉันควรมีเลเยอร์อื่นอยู่ด้านบนของบริการที่จัดการการร้องขอจากไคลเอนต์ดึงข้อมูลสำหรับการร้องขอนั้นแล้วส่งกลับไปยังไคลเอนต์หรือไม่

3
วิธีการใช้ RESTful API ภายนอกด้วย Symfony
เรากำลังสร้างสถาปัตยกรรม Microservice สำหรับโครงการของเราโดยส่วนใหญ่แล้วแอพพลิเคชั่นส่วนหน้าของ Symfony จะโต้ตอบกับ RESTful APIs ส่วนหลัง ปัญหาคือวิธีนี้กำลังทำลายการจัดการเอนทิตี้ของ Symfony ที่อาศัยหลักคำสอนกับฐานข้อมูลเป็นอย่างมาก โดยที่ Symfony มักจะจัดการเอนทิตีกับ Doctrine โดยอัตโนมัติงานส่วนใหญ่สิ่งนี้ไม่สามารถทำซ้ำได้ง่ายเมื่อเราต้องเข้าถึงข้อมูลภายนอกจาก API ตัวอย่างเช่นกับเอนทิตีของลูกค้า: ด้วยการใช้ Doctrine เราต้องกำหนดคลาสลูกค้าของเราและตอนนี้มันเป็นเรื่องง่ายที่จะสร้างปรับปรุงเรียกลูกค้าของเรา การใช้วิธี REST API ลูกค้าสามารถเข้าถึงได้ผ่าน API แต่เรามีงานจำนวนมากเพื่อกำหนดวิธีสร้างไคลเอ็นต์ (POST), อัปเดต (PUT), ดึง (GET) ฯลฯ เพื่อให้ลูกค้าสังเกตเห็นมีการใช้งานโดยแอปพลิเคชั่นหลายแห่งไม่เพียง แต่แอพพลิเคชั่นส่วนหน้าเท่านั้นดังนั้นจึงเป็น API เฉพาะ เราควรสร้างคลาสที่มีวิธีคล้ายเอนทิตีที่ซ่อนความซับซ้อนในการเรียก API การนำเข้าข้อมูล API ทั้งหมดในพื้นที่และเข้าถึงพวกเขาผ่าน Doctrine หรือวิธีอื่นใด?

2
อะไรคือความแตกต่างระหว่าง SOA และ Microservices
คำปฏิเสธ ฉันหวังว่าฉันจะไม่เหยียบนิ้วเท้าของใครก็ตาม พื้นหลัง ฉันค้นหาความแตกต่างที่แท้จริงระหว่าง Service Oriented Architecture และ Microservices โดยไม่ต้องค้นหาคำตอบที่ชัดเจน ฉันอ่านสิ่งที่ชอบ: ผลข้างเคียงของ SOA SOA เป็นรูปแบบการต่อต้าน Microservices มาเพื่อแก้ไขความล้มเหลวของ SOA ESB ไม่ใช่ ESB จริง ๆ แทนที่จะเป็น EAI พึ่งพาโบรกเกอร์ข้อความมากเกินไป ผู้ขายใช้ความคิดในทางที่ผิดของ SOA และพยายามขายผลิตภัณฑ์ของตน SOA เติบโตอย่างไม่สามารถควบคุมได้ แต่ถึงกระนั้นก็ไม่มีอะไรกำหนดความแตกต่างทางสถาปัตยกรรมอย่างชัดเจนระหว่าง Service Oriented Architecture (เป็นแนวคิด) และ Microservices (เป็นแนวคิด) ตามที่ฉันเข้าใจพวกเขาทั้งสองมี: ผู้ให้บริการทำสิ่งเดียวเท่านั้น Service Gateway / ESB เปิดเผยบริการเหล่านั้นต่อผู้บริโภค ผู้บริโภคบริการเข้าถึงบริการผ่าน ESB / เกตเวย์บริการ …

5
Microservices: หินใหญ่ก้อนแรก?
ฉันค้นคว้าสถาปัตยกรรมไมโครเซอร์วิสที่พยายามรับภาพรวมในระดับสูงถึงข้อดีและข้อเสียทั้งหมดและข้อมูล ฯลฯ ข้อมูลมากมายที่ฉันอ่าน / ดูมาจาก ThoughtWorks (Martin Fowler, Neal Ford, et อัล) งานส่วนใหญ่ของมาร์ตินฟาวเลอร์ในเรื่องนี้มีอายุเพียงไม่กี่ปีเมื่อ Microservices (เป็นชื่อครัวเรือนในการเขียนโปรแกรมหากไม่ใช่ในทางปฏิบัติทั่วไป) ยังเด็กอยู่ดังนั้นฉันจึงใช้เกลือเม็ดเล็ก ๆ สิ่งหนึ่งที่พิเศษคือ: เมื่อฉันได้ยินเรื่องราวเกี่ยวกับทีมที่ใช้สถาปัตยกรรมไมโครไซต์ฉันสังเกตเห็นรูปแบบทั่วไป เรื่องราวของบริการไมโครสโคปที่ประสบความสำเร็จเกือบทั้งหมดเริ่มต้นด้วยก้อนหินขนาดใหญ่ที่ใหญ่เกินไปและพังทลาย เกือบทุกกรณีที่ฉันได้ยินเกี่ยวกับระบบที่สร้างขึ้นเป็นระบบไมโครบริการตั้งแต่เริ่มต้นมันก็จบลงด้วยปัญหาร้ายแรง รูปแบบนี้ทำให้เพื่อนร่วมงานของฉันหลายคนโต้แย้งว่าคุณไม่ควรเริ่มโครงการใหม่ด้วยบริการไมโครเซสชั่นแม้ว่าคุณจะแน่ใจว่าใบสมัครของคุณจะใหญ่พอที่จะทำให้คุ้มค่า . (อ้างอิง: https://martinfowler.com/bliki/MonolithFirst.html - เน้นพวกเขา) ตอนนี้ 3 ปีต่อมาและด้วย microservices คำที่แพร่หลายมากขึ้นมันเป็นที่ยอมรับกันโดยทั่วไปว่าระบบใหม่มักจะให้บริการที่ดีขึ้นโดยมีบริการที่ใหญ่กว่า (-than-microservice มันละเอียดยิ่งขึ้นซึ่งเป็นส่วนหนึ่งของมาตรการวิวัฒนาการใช่หรือไม่ หรือมีบรรทัดฐานในการเริ่มต้นโครงการตั้งแต่เริ่มต้นด้วยสถาปัตยกรรมไมโครบริการแบบตรงข้ามกับข้อความข้างต้นหรือไม่? ดูเหมือนว่าวิธีการทั่วไปมีเหตุผล แต่อยากรู้อยากเห็นความคิดของชุมชน

3
ในสถาปัตยกรรม microservices ที่เชื่อมโยงกันอย่างหลวม ๆ คุณจะติดตามการพึ่งพาของคุณได้อย่างไร
ตัวเลือกสถาปัตยกรรมระดับสูงที่ได้รับความนิยมในโปรแกรมที่ทันสมัยคือระบบ microservices ที่ใช้ REST สิ่งนี้มีข้อดีหลายประการเช่นข้อต่อหลวมการใช้งานง่าย จำกัด ข้อ จำกัด เกี่ยวกับเทคโนโลยีที่สามารถใช้ได้ความยืดหยุ่นสูงเป็นต้น แต่ปัญหาอย่างหนึ่งที่ฉันเห็นในสถาปัตยกรรมนั้นก็คือการมองเห็นที่ไม่ดีเกี่ยวกับการพึ่งพาของแอปพลิเคชัน ตัวอย่างเช่นสมมติว่าฉันมีแอปพลิเคชันที่ใช้การเรียกใช้ REST หนึ่งชุดเป็นประจำทุกวัน แอปพลิเคชั่นนี้ใช้การเรียกใช้ REST ชุดที่สอง แต่เพียงไตรมาสละครั้ง ถ้าฉันจะสแกนบันทึกสำหรับสัปดาห์ที่ผ่านมาฉันจะเห็น cals ทุกวัน แต่ฉันคงไม่เห็นการโทรรายไตรมาส เมื่อถึงเวลาต้องปรับโครงสร้างการโทรรายไตรมาสมีความเสี่ยงสูงที่จะแตกหัก รูปแบบหรือเครื่องมือใดที่สามารถนำมาใช้เพื่อลดความเสี่ยงนี้และให้ทัศนวิสัยที่ดีขึ้นในการพึ่งพาของสถาปัตยกรรมคู่ที่หลวม

2
Microservices & Canonical model
เมื่อฉันอ่านเกี่ยวกับไมโครไซต์บนเว็บไซต์นี้ฉันเจอคำแถลงด้านล่าง สกีมาแบบบัญญัติมีความหมายอย่างไร มันไม่เหมือนกับโมเดลโดเมนใช่ไหม รูปแบบสถาปัตยกรรม Microservices ปฏิเสธส่วนอื่น ๆ ของ SOA เช่นแนวคิดของ schema แบบบัญญัติ

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