สถาปัตยกรรมไมโครเซอร์วิส - คู่มือฉบับย่อ

Microservice เป็นวิธีการพัฒนาแอปพลิเคชันที่ใช้บริการ ในวิธีการนี้แอปพลิเคชันขนาดใหญ่จะถูกแบ่งออกเป็นหน่วยบริการอิสระที่เล็กที่สุด Microservice เป็นกระบวนการในการนำ Service-oriented Architecture (SOA) มาใช้โดยแบ่งแอปพลิเคชันทั้งหมดเป็นชุดของบริการที่เชื่อมต่อกันโดยแต่ละบริการจะตอบสนองความต้องการทางธุรกิจเพียงหนึ่งเดียว

แนวคิดของ Going Micro

ในสถาปัตยกรรมที่มุ่งเน้นบริการแพคเกจซอฟต์แวร์ทั้งหมดจะถูกแบ่งย่อยออกเป็นหน่วยธุรกิจขนาดเล็กที่เชื่อมต่อกัน หน่วยธุรกิจขนาดเล็กแต่ละหน่วยจะสื่อสารกันโดยใช้โปรโตคอลที่แตกต่างกันเพื่อส่งมอบธุรกิจที่ประสบความสำเร็จให้กับลูกค้า คำถามคือ Microservice Architecture (MSA) แตกต่างจาก SOA อย่างไร? พูดได้คำเดียวว่า SOA เป็นรูปแบบการออกแบบและ Microservice เป็นวิธีการดำเนินการเพื่อใช้ SOA หรือเราสามารถพูดได้ว่า Microservice คือ SOA ประเภทหนึ่ง

ต่อไปนี้เป็นกฎบางประการที่เราต้องคำนึงถึงในขณะที่พัฒนาแอปพลิเคชันที่มุ่งเน้น Microservice

  • Independent - ไมโครเซอร์วิสแต่ละตัวควรใช้งานได้อย่างอิสระ

  • Coupling - ไมโครเซอร์วิสทั้งหมดควรอยู่คู่กันอย่างหลวม ๆ เพื่อที่การเปลี่ยนแปลงในหนึ่งจะไม่ส่งผลกระทบต่ออีก

  • Business Goal - แต่ละหน่วยบริการของแอปพลิเคชันทั้งหมดควรมีขนาดเล็กที่สุดและสามารถบรรลุเป้าหมายทางธุรกิจที่เฉพาะเจาะจง

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

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

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

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

พิจารณาสถานการณ์ต่อไปนี้ที่คุณต้องเปลี่ยนใบสมัครตามความต้องการทางธุรกิจ

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

อีกครั้งหน่วยธุรกิจของคุณต้องการการเปลี่ยนแปลงบางอย่างในโมดูล "ชำระเงิน" เพื่อรวมตัวเลือก "กระเป๋าเงิน" ตอนนี้คุณต้องเปลี่ยนโมดูล“ ชำระเงิน” ของคุณและทำให้ใช้งานได้อีกครั้งในเซิร์ฟเวอร์ หมายเหตุคุณกำลังปรับใช้โมดูลต่างๆของแพ็คเกจซอฟต์แวร์ของคุณอีกครั้งในขณะที่เราไม่ได้ทำการเปลี่ยนแปลงใด ๆ ต่อไปนี้เป็นแนวคิดของสถาปัตยกรรมที่มุ่งเน้นการบริการที่เฉพาะเจาะจงมากขึ้นสำหรับสถาปัตยกรรม Microservice เราสามารถพัฒนาแอปพลิเคชันเสาหินของเราในลักษณะที่แต่ละโมดูลของซอฟต์แวร์จะทำงานเป็นหน่วยงานอิสระที่สามารถจัดการงานทางธุรกิจเดียวได้อย่างอิสระ

ลองพิจารณาตัวอย่างต่อไปนี้

ในสถาปัตยกรรมข้างต้นเราไม่ได้สร้างไฟล์หูใด ๆ ด้วยบริการ end-to-end ขนาดกะทัดรัด แต่เรากำลังแบ่งส่วนต่างๆของซอฟต์แวร์โดยเปิดเผยว่าเป็นบริการ ส่วนใดส่วนหนึ่งของซอฟต์แวร์สามารถสื่อสารกันได้อย่างง่ายดายโดยการใช้บริการที่เกี่ยวข้อง นั่นเป็นวิธีที่ microservice มีบทบาทอย่างมากในเว็บแอปพลิเคชันสมัยใหม่

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

ข้อดีข้อเสีย

ต่อไปนี้เป็นข้อดีของการใช้ไมโครเซอร์วิสแทนการใช้แอปพลิเคชันเสาหิน

ข้อดี

  • Small in size- Microservices คือการนำรูปแบบการออกแบบ SOA มาใช้ ขอแนะนำให้ใช้บริการของคุณให้มากที่สุดเท่าที่จะทำได้ โดยพื้นฐานแล้วบริการไม่ควรทำงานทางธุรกิจมากกว่าหนึ่งอย่างดังนั้นจึงเห็นได้ชัดว่ามีขนาดเล็กและดูแลรักษาง่ายกว่าแอปพลิเคชันเสาหินอื่น ๆ

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

  • Autonomous- บริการไมโครแต่ละรายการควรเป็นหน่วยธุรกิจที่เป็นอิสระของแอปพลิเคชันทั้งหมด ดังนั้นแอปพลิเคชันจึงทำงานร่วมกันอย่างหลวม ๆ ซึ่งช่วยลดต้นทุนการบำรุงรักษา

  • Technology heterogeneity- Microservice สนับสนุนเทคโนโลยีที่แตกต่างกันเพื่อสื่อสารกันในหน่วยธุรกิจเดียวซึ่งช่วยให้นักพัฒนาใช้เทคโนโลยีที่ถูกต้องในสถานที่ที่ถูกต้อง ด้วยการใช้ระบบที่แตกต่างกันเราจะได้รับความปลอดภัยสูงสุดความเร็วและระบบที่ปรับขนาดได้

  • Resilience- ความยืดหยุ่นเป็นคุณสมบัติของการแยกหน่วยซอฟต์แวร์ Microservice เป็นไปตามความยืดหยุ่นในระดับสูงในวิธีการสร้างดังนั้นเมื่อใดก็ตามที่หน่วยงานหนึ่งล้มเหลวจะไม่ส่งผลกระทบต่อธุรกิจทั้งหมด ความยืดหยุ่นเป็นอีกคุณสมบัติหนึ่งที่ใช้ระบบคู่ที่ปรับขนาดได้สูงและน้อยลง

  • Ease of deployment- เนื่องจากแอปพลิเคชันทั้งหมดถูกแบ่งย่อยออกเป็นชิ้นส่วนเล็ก ๆ ส่วนประกอบทุกชิ้นจึงควรมีลักษณะเป็นสแต็กเต็ม ทั้งหมดนี้สามารถปรับใช้ในทุกสภาพแวดล้อมได้อย่างง่ายดายโดยมีเวลาที่ซับซ้อนน้อยกว่าซึ่งแตกต่างจากแอปพลิเคชันเสาหินอื่น ๆ ในประเภทเดียวกัน

ต่อไปนี้เป็นประเด็นบางประการเกี่ยวกับข้อเสียของสถาปัตยกรรมไมโครเซอร์วิส

ข้อเสีย

  • Distributed system- เนื่องจากความแตกต่างทางเทคนิคเทคโนโลยีที่แตกต่างกันจะถูกนำมาใช้เพื่อพัฒนาส่วนต่างๆของไมโครเซอร์วิส จำเป็นต้องมีผู้เชี่ยวชาญที่มีทักษะจำนวนมากเพื่อสนับสนุนซอฟต์แวร์แบบกระจายที่แตกต่างกันขนาดใหญ่นี้ ดังนั้นการกระจายและความแตกต่างจึงเป็นข้อเสียอันดับหนึ่งของการใช้ไมโครเซอร์วิส

  • Cost - Microservice มีค่าใช้จ่ายสูงเนื่องจากคุณต้องรักษาพื้นที่เซิร์ฟเวอร์ที่แตกต่างกันสำหรับงานธุรกิจที่แตกต่างกัน

  • Enterprise readiness- สถาปัตยกรรม Microservice ถือได้ว่าเป็นกลุ่มของเทคโนโลยีที่แตกต่างกันเนื่องจากเทคโนโลยีมีการพัฒนาขึ้นทุกวัน ดังนั้นจึงเป็นเรื่องยากที่จะสร้างองค์กรแอปพลิเคชันไมโครเซอร์วิสให้พร้อมเมื่อเทียบกับรูปแบบการพัฒนาซอฟต์แวร์ทั่วไป

Microservice ผ่าน SOA

ตารางต่อไปนี้แสดงคุณสมบัติบางอย่างของ SOA และ Microservice โดยให้ความสำคัญของการใช้ microservice ผ่าน SOA

ส่วนประกอบ SOA ไมโครเซอร์วิส
รูปแบบการออกแบบ SOA เป็นกระบวนทัศน์การออกแบบสำหรับซอฟต์แวร์คอมพิวเตอร์โดยที่ส่วนประกอบของซอฟต์แวร์จะเปิดเผยต่อโลกภายนอกเพื่อใช้งานในรูปแบบของบริการ Micro Service เป็นส่วนหนึ่งของ SOA เป็นการใช้งาน SOA โดยเฉพาะ
การพึ่งพา หน่วยธุรกิจพึ่งพาซึ่งกันและกัน หน่วยธุรกิจทั้งหมดเป็นอิสระจากกัน
ขนาด ขนาดซอฟต์แวร์ใหญ่กว่าซอฟต์แวร์ทั่วไป ขนาดซอฟต์แวร์มีขนาดเล็ก
เทคโนโลยี กองเทคโนโลยีน้อยกว่า Microservice Microservice มีลักษณะที่แตกต่างกันเนื่องจากเทคโนโลยีที่แน่นอนถูกนำมาใช้เพื่อทำงานเฉพาะอย่าง Microservices ถือได้ว่าเป็นกลุ่มของเทคโนโลยีมากมาย
อิสระและโฟกัส แอปพลิเคชัน SOA สร้างขึ้นเพื่อทำงานทางธุรกิจหลายอย่าง แอปพลิเคชัน Microservice สร้างขึ้นเพื่อทำงานทางธุรกิจเดียว
ธรรมชาติ เสาหินในธรรมชาติ กองเต็มในธรรมชาติ
การปรับใช้ การทำให้ใช้งานได้ใช้เวลานาน การปรับใช้ทำได้ง่ายมาก ดังนั้นจะใช้เวลาน้อยลง
ลดค่าใช้จ่าย คุ้มค่ากว่า คุ้มค่าน้อยลง
ความสามารถในการปรับขนาด น้อยกว่าเมื่อเทียบกับ Microservices ปรับขนาดเต็มที่
ตัวอย่าง ให้เราพิจารณาแอปพลิเคชันการจอง CAB ออนไลน์หนึ่งรายการ หากเราต้องการสร้างแอปพลิเคชันนั้นโดยใช้ SOA หน่วยซอฟต์แวร์จะเป็น -
  • GetPayments และ DriverInformation และ MappingDataAPI
  • AuthenticateUsersAnd DriversAPI
หากแอปพลิเคชันเดียวกันสร้างขึ้นโดยใช้สถาปัตยกรรมไมโครเซอร์วิส API จะเป็น -
  • SubmitPaymentsService
  • GetDriverInfoService
  • GetMappingDataService
  • AuthenticateUserService
  • AuthenticateDriverService

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

การปรับขนาดแกน X

การปรับขนาดแกน X เรียกอีกอย่างว่ามาตราส่วนแนวนอน ในขั้นตอนนี้แอปพลิเคชันทั้งหมดจะถูกแบ่งย่อยออกเป็นส่วนต่างๆในแนวนอน โดยปกติเว็บเซิร์ฟเวอร์แอปพลิเคชันใด ๆ สามารถมีการปรับขนาดประเภทนี้ได้ พิจารณาสถาปัตยกรรม MVC ปกติที่เป็นไปตามมาตราส่วนแนวนอนดังแสดงในรูปต่อไปนี้

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

แกน Y

การปรับขนาดแกน Y เรียกอีกอย่างว่ามาตราส่วนแนวตั้งที่รวมการปรับระดับทรัพยากรใด ๆ ระบบ DBaaS หรือ Hadoop ใด ๆ ถือได้ว่าเป็นแกน Y ในการปรับขนาดประเภทนี้คำขอของผู้ใช้จะถูกเปลี่ยนเส้นทางและ จำกัด โดยใช้ตรรกะบางอย่าง

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

วิธีการแบ่งทรัพยากรออกเป็นหน่วยธุรกิจอิสระขนาดเล็กนี้เรียกว่าการปรับขนาดแกน Y

แกน Z

การปรับขนาดแกน X และ Y นั้นเข้าใจง่ายกว่ามาก อย่างไรก็ตามแอปพลิเคชันหนึ่งสามารถปรับขนาดได้ในระดับธุรกิจซึ่งเรียกว่าการปรับขนาดแกน Z ต่อไปนี้เป็นตัวอย่างของการปรับขนาดแอปพลิเคชันบริการรถแท็กซี่ในประเภทธุรกิจต่างๆ

ข้อดีของการขูดหินปูน

  • Cost - การปรับขนาดซอฟต์แวร์ที่เหมาะสมจะช่วยลดต้นทุนในการบำรุงรักษา

  • Performance - เนื่องจากข้อต่อหลวมประสิทธิภาพของซอฟต์แวร์ที่ปรับขนาดอย่างเหมาะสมจึงดีกว่าซอฟต์แวร์ที่ไม่ปรับขนาดเสมอ

  • Load distribution - การใช้เทคโนโลยีที่แตกต่างกันทำให้เราสามารถรักษาการโหลดเซิร์ฟเวอร์ของเราได้อย่างง่ายดาย

  • Reuse - ความสามารถในการปรับขนาดของซอฟต์แวร์ยังช่วยเพิ่มความสามารถในการใช้งานซอฟต์แวร์

Microservice ใช้ SOA ภายใน ในแง่ที่กว้างขึ้นเราสามารถพิจารณาว่าเป็นส่วนย่อยของแอปพลิเคชัน SOA หนึ่ง

กฎและขั้นตอนการทำงาน

ต่อไปนี้เป็นหลักการที่ต้องได้รับการดูแลในขณะที่พัฒนาไมโครเซอร์วิส

  • High Cohesion- โมเดลธุรกิจทั้งหมดจะต้องแบ่งย่อยเป็นส่วนธุรกิจที่เล็กที่สุดให้มากที่สุด แต่ละบริการควรมุ่งเน้นเพื่อดำเนินงานทางธุรกิจเพียงอย่างเดียว

  • Independent - บริการทั้งหมดควรเป็นแบบเต็มรูปแบบและเป็นอิสระจากกัน

  • Business Domain Centric - ซอฟต์แวร์จะโมดูลาร์ตามหน่วยธุรกิจและไม่อิงตามระดับ

  • Automation- การปรับใช้การทดสอบจะเป็นไปโดยอัตโนมัติ พยายามแนะนำให้มีปฏิสัมพันธ์กับมนุษย์น้อยที่สุด

  • Observable - แต่ละบริการจะมีลักษณะเป็นสแต็กเต็มรูปแบบและควรใช้งานได้อย่างอิสระและสังเกตได้เช่นเดียวกับแอปพลิเคชันระดับองค์กร

การจัดการทีม

“ Two Pizza Rule” เป็นกฎประเภทหนึ่งที่ จำกัด จำนวนผู้เข้าร่วมในทีมพัฒนาไมโครเซอร์วิส ตามกฎนี้จำนวนสมาชิกในทีมของหนึ่งแอปพลิเคชันควรมีขนาดเล็กมากจนสามารถป้อนพิซซ่าได้สองชิ้น โดยทั่วไปจำนวนไม่ควรเกิน 8 เนื่องจาก microservice มีลักษณะเป็น full stack ทีมจึงเป็น full stack ตามธรรมชาติ ในการเพิ่มผลผลิตเราต้องสร้างทีมหนึ่งทีมสูงสุด 8 คนพร้อมความเชี่ยวชาญทุกประเภทที่จำเป็นสำหรับบริการนั้น

การจัดการงาน

งานเป็นบทบาทสำคัญในวงจรชีวิตการพัฒนาซอฟต์แวร์ การพัฒนาแอปพลิเคชันขนาดใหญ่สามารถแบ่งออกเป็นหน่วยงานย่อย ๆ ให้เราพิจารณาว่าเราจำเป็นต้องพัฒนาแอปพลิเคชั่นเดียวเช่น Facebook จากนั้นฟังก์ชัน "เข้าสู่ระบบ" ถือได้ว่าเป็นงานของกระบวนการสร้างทั้งหมด ความคืบหน้าของแต่ละงานเหล่านี้จำเป็นต้องได้รับการตรวจสอบอย่างเหมาะสมภายใต้ผู้เชี่ยวชาญที่มีทักษะสูง Agile เป็นโครงสร้างกระบวนการที่รู้จักกันดีตามในอุตสาหกรรมเพื่อให้ทันกับการจัดการงานที่ดี

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

ประเภทของบริการ

ตามชื่อ Microservice เราถือว่าบริการนี้สามารถใช้งานผ่านโปรโตคอล HTTP ได้อย่างไรก็ตามเราจำเป็นต้องทราบว่าสามารถสร้างบริการประเภทใดได้โดยใช้สถาปัตยกรรมนี้ ต่อไปนี้เป็นรายการบริการที่สามารถใช้งานได้โดยใช้สถาปัตยกรรม Microservice

Platform as a Service [PaaS]- ในสถาปัตยกรรมที่มุ่งเน้นบริการนี้แพลตฟอร์มจะถูกกำหนดให้เป็นเครื่องมือที่สามารถปรับแต่งได้ตามความต้องการทางธุรกิจ PaaS มีบทบาทสำคัญในการพัฒนาแอปพลิเคชันบนมือถือ ตัวอย่างที่ดีที่สุดของ PaaS คือเครื่องมือ Google App ซึ่ง Google มีแพลตฟอร์มที่มีประโยชน์ต่างๆเพื่อสร้างแอปพลิเคชันของคุณ เดิมที PaaS พัฒนาขึ้นเพื่อมอบสถาปัตยกรรมหรือโครงสร้างพื้นฐานในตัวให้กับนักพัฒนา ช่วยลดความซับซ้อนในการเขียนโปรแกรมระดับสูงในเวลาที่ลดลงอย่างมาก ต่อไปนี้เป็นภาพรวมของ PaaS ที่ Google ให้มา

Software as a Service [SaaS]- Software as a Service เป็นธุรกิจลิขสิทธิ์ซอฟต์แวร์ซึ่งซอฟต์แวร์จะโฮสต์จากส่วนกลางและได้รับอนุญาตจากการสมัครสมาชิก SaaS สามารถเข้าถึงได้ผ่านเบราว์เซอร์เป็นหลักและเป็นรูปแบบสถาปัตยกรรมที่ใช้กันทั่วไปในธุรกิจหลายประเภทเช่นการจัดการทรัพยากรมนุษย์ (HRM) การวางแผนทรัพยากรองค์กร (ERP) การจัดการลูกค้าสัมพันธ์ (CRM) เป็นต้นภาพหน้าจอต่อไปนี้จะแสดงตัวอย่างของ SaaS ที่แตกต่างจาก Oracle

Infrastructure as a Service [IaaS]- โครงสร้างพื้นฐานมีบทบาทที่ดีในอุตสาหกรรมไอที การใช้ระบบคลาวด์คอมพิวติ้งบางองค์กรมีโครงสร้างพื้นฐานเสมือนเป็นบริการของตน IaaS มีประโยชน์มากในการนำความคล่องตัวความคุ้มค่าความปลอดภัยประสิทธิภาพการทำงานและอื่น ๆ มาใช้ในการพัฒนาซอฟต์แวร์ Amazon EC2 และ Microsoft Azure เป็นตัวอย่างที่ใหญ่ที่สุดของ IaaS ภาพต่อไปนี้แสดงตัวอย่างของ AWS ซึ่งมีการจัดเตรียมศูนย์ข้อมูลเป็น IaaS

Data as a Service [DaaS]- เทคโนโลยีสารสนเทศเกี่ยวข้องกับข้อมูลและผู้นำในอุตสาหกรรมชั้นนำบางคนเชื่อว่าข้อมูลจะเป็นปัจจัยยังชีพใหม่ของสังคม DaaS เป็นบริการประเภทหนึ่งที่มีการแบ่งปันข้อมูลกับกลุ่มธุรกิจเพื่อการวิจัยและวิเคราะห์ DaaS นำมาซึ่งความเรียบง่ายคล่องตัวและความปลอดภัยในชั้นการเข้าถึงข้อมูล ต่อไปนี้เป็นตัวอย่างของ Oracle Data cloud ซึ่งสามารถเข้าถึงหรือได้รับอนุญาตสำหรับความต้องการทางธุรกิจของคุณเอง

Back End as a Service [BaaS]- BaaS เป็นที่รู้จักกันในชื่อ MBaaS ซึ่งหมายถึงบริการแบ็คเอนด์มือถือ ในบริการประเภทนี้แบ็กเอนด์ของแอปพลิเคชันจะถูกจัดเตรียมไว้ให้กับหน่วยธุรกิจเพื่อการลงทุนทางธุรกิจของตนเอง การแจ้งเตือนแบบพุชบริการเครือข่ายสังคมทั้งหมดอยู่ภายใต้บริการประเภทนี้ Facebook และ Twitter เป็นตัวอย่างของผู้ให้บริการ BaaS ที่มีชื่อเสียง

ความปลอดภัย

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

  • Security issue faced by service providers - ปัญหาด้านความปลอดภัยประเภทนี้ต้องเผชิญกับผู้ให้บริการเช่น Google, Amazon เป็นต้นเพื่อให้แน่ใจว่ามีการป้องกันความปลอดภัยการตรวจสอบประวัติของไคลเอ็นต์เป็นสิ่งที่จำเป็นโดยเฉพาะอย่างยิ่งผู้ที่สามารถเข้าถึงส่วนหลักของคลาวด์ได้โดยตรง

  • Security issue faced by consumers- Cloud มีค่าใช้จ่ายที่เป็นมิตรดังนั้นจึงมีการใช้กันอย่างแพร่หลายในอุตสาหกรรมต่างๆ บางองค์กรจัดเก็บรายละเอียดผู้ใช้ในศูนย์ข้อมูลของบุคคลที่สามและดึงข้อมูลเมื่อจำเป็น ดังนั้นจึงจำเป็นต้องรักษาระดับความปลอดภัยเพื่อไม่ให้ผู้ใช้รายอื่นเห็นข้อมูลส่วนตัวของลูกค้ารายใดรายหนึ่ง

เพื่อป้องกันปัญหาด้านความปลอดภัยดังกล่าวข้างต้นกลไกการป้องกันบางส่วนที่องค์กรใช้มีดังต่อไปนี้

  • Deterrent Control - รู้ว่าคุณอาจเป็นภัยคุกคามเพื่อลดการโจมตีทางไซเบอร์

  • Preventive Control - รักษานโยบายการตรวจสอบสิทธิ์ระดับสูงเพื่อเข้าถึงระบบคลาวด์ของคุณ

  • Detective Control - ตรวจสอบผู้ใช้ของคุณและตรวจจับความเสี่ยงที่อาจเกิดขึ้น

  • Corrective Control - ทำงานอย่างใกล้ชิดกับทีมต่างๆและแก้ไขปัญหาที่เกิดขึ้นระหว่างขั้นตอนการควบคุมนักสืบ

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

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

รูปแบบผู้รวบรวม

รูปแบบ Aggregator เป็นรูปแบบเว็บที่ง่ายที่สุดที่สามารถใช้งานได้ในขณะที่พัฒนาไมโครเซอร์วิส ในรูปแบบการจัดองค์ประกอบนี้โมดูลเว็บอย่างง่ายจะทำหน้าที่เป็นตัวจัดสรรภาระงานซึ่งหมายความว่าจะเรียกใช้บริการที่แตกต่างกันตามข้อกำหนด ต่อไปนี้เป็นแผนภาพที่แสดงถึงเว็บแอปไมโครเซอร์วิสที่เรียบง่ายพร้อมการออกแบบตัวรวบรวม ดังที่เห็นในภาพต่อไปนี้ "Aggregator" มีหน้าที่เรียกใช้บริการต่างๆทีละรายการ หากเราต้องการใช้ตรรกะทางธุรกิจใด ๆ กับผลลัพธ์ของบริการ A, B และ C เราก็สามารถใช้ตรรกะทางธุรกิจในตัวรวบรวมได้

ผู้รวบรวมสามารถเปิดเผยได้อีกครั้งในฐานะบริการอื่นสู่โลกภายนอกซึ่งผู้อื่นสามารถใช้งานได้ทุกเมื่อที่ต้องการ ในขณะที่พัฒนาบริการเว็บรูปแบบตัวรวบรวมข้อมูลเราจำเป็นต้องจำไว้ว่าบริการ A, B และ C แต่ละรายการของเราควรมีชั้นแคชของตัวเองและควรเป็นแบบเต็มสแต็ก

รูปแบบพร็อกซี

Proxy microservice pattern เป็นรูปแบบของ aggregator model ในรุ่นนี้เราจะใช้โมดูลพร็อกซีแทนโมดูลการรวม บริการพร็อกซีอาจเรียกใช้บริการที่แตกต่างกันเป็นรายบุคคล

ในรูปแบบพร็อกซีเราสามารถสร้างความปลอดภัยพิเศษได้อีกหนึ่งระดับโดยจัดเตรียมเลเยอร์พร็อกซีการถ่ายโอนข้อมูล เลเยอร์นี้ทำหน้าที่คล้ายกับอินเทอร์เฟซ

รูปแบบที่ถูกล่ามโซ่

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

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

รูปแบบบริการไมโครสาขา

Branch microservice เป็นเวอร์ชันขยายของรูปแบบตัวรวบรวมและรูปแบบโซ่ ในรูปแบบการออกแบบนี้ลูกค้าสามารถสื่อสารกับบริการได้โดยตรง นอกจากนี้บริการหนึ่งรายการสามารถสื่อสารกับบริการได้มากกว่าหนึ่งบริการในแต่ละครั้ง ต่อไปนี้คือการแสดงแผนผังของ Branch Microservice

รูปแบบไมโครเซอร์วิสสาขาช่วยให้นักพัฒนาสามารถกำหนดค่าการเรียกใช้บริการแบบไดนามิก การเรียกใช้บริการทั้งหมดจะเกิดขึ้นพร้อมกันซึ่งหมายความว่าบริการ A สามารถเรียกใช้บริการ B และ C ได้พร้อมกัน

รูปแบบทรัพยากรที่ใช้ร่วมกัน

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

ในบทนี้เราจะพัฒนาแอปพลิเคชันที่ใช้ CRUD ด้วยสถาปัตยกรรม SOA ต่อไปในบทต่อ ๆ ไปเราจะแยกบริการนี้ออกเป็นไมโครเซอร์วิสและเราจะเรียนรู้ความแตกต่างพื้นฐานระหว่างสถาปัตยกรรม SOA และไมโครเซอร์วิส

การกำหนดค่าระบบและการตั้งค่า

ในส่วนนี้เราจะสร้างแอปพลิเคชัน CRUD ตัวอย่างซึ่งจะส่งคืนออบเจ็กต์ JSON เป็นการตอบสนองทุกครั้งที่เราเรียกใช้บริการของเรา เราจะใช้เจอร์ซีกรอบในการพัฒนาเดียวกัน ต่อไปนี้เป็นขั้นตอนในการตั้งค่าสภาพแวดล้อมระบบโลคัลของคุณ

การพัฒนาแอปพลิเคชัน CRUD

Step 1- เราจะใช้ NetBeans เป็น IDE ในการพัฒนา โปรดดาวน์โหลดและติดตั้งเวอร์ชันล่าสุดบนเว็บไซต์ทางการของ NetBeanshttps://netbeans.org/downloads/.

Step 2- เปิด NetBeans IDE ของคุณ ไปที่“ ไฟล์ -> โครงการใหม่” ภาพหน้าจอต่อไปนี้จะปรากฏขึ้น เลือก“ Maven” เป็นหมวดหมู่และเลือก“ Project from ArchType” เป็นโปรเจ็กต์แล้วกด Next

สิ่งนี้จะดาวน์โหลดไฟล์ jar ที่จำเป็นทั้งหมดเพื่อสร้างโปรเจ็กต์ Maven และ RESTful Web Service ครั้งแรกของคุณ

Step 3- ในการกดปุ่ม Next ในขั้นตอนก่อนหน้านี้ภาพหน้าจอต่อไปนี้จะปรากฏขึ้น ที่นี่คุณจะต้องระบุ Maven Archetype

ในช่องค้นหาให้ค้นหา“ Jersey-archType-Webapp (2.16)” แล้วเลือกช่องทำเครื่องหมาย“ Show Older”

Step 4- เมื่อคุณเลือกแบบเดียวกันคุณจะถูกนำไปยังหน้าจอต่อไปนี้ เลือกโถที่ต้องการจากรายการและกด Next เพื่อดำเนินการต่อ

Step 5- ในขั้นตอนนี้คุณต้องระบุชื่อโครงการของคุณและรหัสกลุ่มของคุณรวมทั้งรายละเอียดแพ็คเกจ หลังจากให้ข้อมูลทั้งหมดแล้วให้กด Finish เพื่อดำเนินการต่อ

Step 6- คุณตั้งค่าพื้นที่ทำงานเสร็จแล้ว ไดเรกทอรีโครงการจะมีลักษณะดังต่อไปนี้

ตรวจสอบโฟลเดอร์ "Dependencies" ของคุณและคุณจะพบว่า Maven ได้ดาวน์โหลดไฟล์ jar ที่จำเป็นทั้งหมดสำหรับโครงการนี้โดยอัตโนมัติ

Step 7- พื้นที่ทำงานของคุณได้รับการตั้งค่าและคุณสามารถเริ่มต้นด้วยการเขียนโค้ดได้ สร้างคลาสและแพ็กเกจสี่คลาสตามที่ระบุไว้ในภาพหน้าจอต่อไปนี้ คุณจะพบว่า MyResource.java สร้างขึ้นโดย Maven แล้วเนื่องจาก Maven ฉลาดพอที่จะตรวจพบว่าคุณกำลังจะสร้างบริการเว็บของคุณเอง

Step 8 - เมื่อทำตามขั้นตอนข้างต้นเสร็จแล้วเราจะสร้างคลาส POJO ของเราที่เป็น UserProfile.java ดังต่อไปนี้

package com.tutorialspoint.userprofile.Model;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class UserProfile {
   private long ProId;
   private String FName;
   private String LName;
   private String Add;
   public UserProfile(){}
   
   public UserProfile(long Proid, String Fname, String Lname,String Add) {
      this.ProId = Proid;
      this.FName = Fname;
      this.LName = Lname;
      this.Add = Add;
   }
   public long getProId() {
      return ProId;
   }
   public void setProId(long ProId) {
      this.ProId = ProId;
   }
   public String getFName() {
      return FName;
   }
   public void setFName(String FName) {
      this.FName = FName;
   }
   public String getLName() {
      return LName;
   }
   public void setLName(String LName) {
      this.LName = LName;
   }
   public String getAdd() {
      return Add;
   }
   public void setAdd(String Add) {
      this.Add = Add;
   }
}

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

package com.tutorialspoint.userprofile.DAO;

import com.tutorialspoint.userprofile.Model.UserProfile;

import java.util.HashMap;
import java.util.Map;

public class DatabaseClass {
   private static Map<Long,UserProfile> messages = new HashMap<Long,UserProfile>();
   public static Map<Long,UserProfile> getUsers() {
      return messages; 
      // Each time this method will return entire map as an instance of database
   }
}

Step 10- ตอนนี้ให้เราสร้างคลาสบริการของเรา คัดลอกและวางชุดรหัสต่อไปนี้ในคลาส“ ProfileService.java” นี่คือคลาสที่เราจะประกาศวิธีการบริการเว็บทั้งหมดของเราที่จะเปิดเผยต่อโลกภายนอก เราจำเป็นต้องสร้างการอ้างอิงของ DatabaseClass ของเราเพื่อให้สามารถเข้าถึงฐานข้อมูลชั่วคราวของเราได้ในคลาสนี้

package com.tutorialspoint.userprofile.service;

import com.tutorialspoint.userprofile.DAO.DatabaseClass;
import com.tutorialspoint.userprofile.Model.UserProfile;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ProfileService {
   private Map<Long,UserProfile> Userprofiles = DatabaseClass.getUsers();
   
   // Creating some predefine profile and populating the same in the map
   public ProfileService() {
      UserProfile m1 = new UserProfile(1L,"Tutorials1","Point1","TutorialsPoint.com");
      UserProfile m2 = new UserProfile(2L,"Tutorials2","Point2","TutorialsPoint.com2");
      UserProfile m3 = new UserProfile(3L,"Tutorials3","Point3","TutorialsPoint.com3");
      UserProfile m4 = new UserProfile(4L,"Tutorials4","Point4","TutorialsPoint.com4");
      
      Userprofiles.put(1L, m1);
      Userprofiles.put(2L, m2);
      Userprofiles.put(1L, m3);
      Userprofiles.put(2L, m4);
   }
   
   //Method to fetch all profile
   public List<UserProfile> getAllProfile() {
      List<UserProfile> list = new ArrayList<UserProfile>(Userprofiles.values());
      return list;
   }  // Method to fetch only one profile depending on the ID provided
   
   public UserProfile getProfile(long id) {
      return Userprofiles.get(id);
   }  //Method to add profile
   
   public UserProfile addProfile(UserProfile UserProfile) {
      UserProfile.setProId(Userprofiles.size()+1);
      Userprofiles.put(UserProfile.getProId(), UserProfile);
      return UserProfile;
   }  //method to update Profile

   public UserProfile UpdateProfile(UserProfile UserProfile) {
      if(UserProfile.getProId()<=0) { 
         return null;
      } else { 
         Userprofiles.put(UserProfile.getProId(), UserProfile);
         return UserProfile;
      }
   } //method to delete profile
   
   public void RemoveProfile(long Id) {
      Userprofiles.remove(Id);
   }
}

Step 11 - ในขั้นตอนนี้เราจะสร้างคลาส Resource ของเราที่จะเชื่อมโยงกับ URL และจะเรียกใช้บริการที่เกี่ยวข้อง

package com.tutorialspoint.userprofile.Resource;

import com.tutorialspoint.userprofile.Model.UserProfile;
import com.tutorialspoint.userprofile.service.ProfileService;

import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/Profile")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)

public class ProfileResource {
   ProfileService messageService = new ProfileService();
   
   @GET
   public List<UserProfile> getProfile() {
      return messageService.getAllProfile();
   }

   @GET
   @Path("/{ProID}")
   public UserProfile getProfile(@PathParam("ProID")long Id) {
      return messageService.getProfile(Id);
   }

   @POST
   public UserProfile addProfile(UserProfile profile) {
      return messageService.addProfile(profile);
   }

   @PUT
   @Path("/{proID}")
   public UserProfile UpdateProfile(@PathParam("proID")long Id,UserProfile UserProfile) {
      UserProfile.setProId(Id);
      return messageService.UpdateProfile(UserProfile);
   }
   
   @DELETE
   @Path("/{ProID}")
   public void deleteProfile(@PathParam("ProID")long Id) {
      messageService.RemoveProfile(Id);
   }
}

Step 12- ทำความสะอาดสร้างโครงการและเรียกใช้ หากทุกอย่างเป็นไปด้วยดีคุณควรได้รับผลลัพธ์ต่อไปนี้ในเบราว์เซอร์ขณะเข้าถึงhttp://localhost:8080/UserProfile/webapi/Profile” URL

คุณสามารถดูรายการต่างๆที่สร้างขึ้นโดยใช้การแสดง XML

วิธีการต่างๆสามารถทดสอบได้โดยใช้บุรุษไปรษณีย์โดยใช้ URL วิธีการที่เหมาะสม

@GET method - ภาพหน้าจอต่อไปนี้แสดงให้เห็นว่าเราจะได้ผลลัพธ์ที่ต้องการสำหรับคำขอได้อย่างไรซึ่งจะแสดงรายละเอียดผู้ใช้ทั้งหมด

@POST- สามารถใช้คำขอต่อไปนี้เพื่อทดสอบวิธีการโพสต์ของเรา สังเกตว่า proId ถูกสร้างขึ้นโดยอัตโนมัติอย่างไร

@PUT- วิธีนี้จะอัปเดตรายการ ภาพหน้าจอต่อไปนี้แสดงให้เห็นว่า Jersey ใช้ proId จาก URL คำขอและอัปเดตการตอบกลับโปรไฟล์ผู้ใช้เดียวกันได้อย่างไร

ในทำนองเดียวกันคุณสามารถตรวจสอบวิธีการอื่น ๆ ที่มีอยู่ในบริการบนเว็บของคุณ

ในส่วนก่อนหน้านี้เราได้พัฒนาบริการหนึ่งซึ่งจะแสดงฟังก์ชัน CRUD เมื่อใดก็ตามที่เราพยายามใช้บริการนี้ในแอปพลิเคชันของเราเราจำเป็นต้องสร้างไคลเอนต์ของแอปพลิเคชันนี้และแนบไปกับแอปพลิเคชันของเรา ในบทนี้เราจะเรียนรู้วิธีการสร้างฟังก์ชันนี้โดยใช้แนวคิดของ Microservice ต่อไปนี้คือการแสดงแผนผังของแอปพลิเคชันของเราที่สร้างขึ้นโดยใช้ขั้นตอนข้างต้น

นักแสดงควรเป็นจุดเริ่มต้นของบริการของเรา ในกรณีนี้“ ProfileResource.java” จะเป็นหน้าที่ของนักแสดง คลาสนี้จะเรียกวิธีการที่แตกต่างกันเพื่อดำเนินการที่แตกต่างกันเช่นเพิ่มอัปเดตและลบ

การสลายตัวของแอปพลิเคชัน CRUD

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

“ ผู้ใช้หลัก” คือผู้ใช้ที่สื่อสารกับ“ Application Controller” เพื่อตอบสนองความต้องการ “ ตัวควบคุมแอปพลิเคชัน” คือผู้ที่เรียกว่า“ ผู้จัดการทรัพยากร” ที่แตกต่างกันโดยขึ้นอยู่กับคำขอจากผู้ใช้ปลายทาง “ ผู้จัดการทรัพยากร” ทำงานที่จำเป็นต้องทำ มาดูบทบาทต่างๆของหน่วยต่างๆของแอปพลิเคชันกันอย่างรวดเร็ว

  • End User/Main Users - ขอทรัพยากรบางอย่างไปยัง Application Controller

  • Application - รับคำขอและส่งต่อสิ่งเดียวกันกับผู้จัดการทรัพยากรเฉพาะ

  • Resource Manager - งานอัปเดตลบและเพิ่มผู้ใช้จริงหรือไม่

ดูว่าความรับผิดชอบทั้งหมดของชั้นเรียนหนึ่งถูกกระจายไปยังชั้นเรียนอื่น ๆ อย่างไร

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

การกำหนดค่าระบบและการตั้งค่า

ก่อนที่จะไปต่อในขั้นตอนการสร้างให้เตรียมระบบของคุณให้สอดคล้อง คุณจะต้องมีบริการเว็บสาธารณะ คุณสามารถ google ได้อย่างง่ายดายสำหรับสิ่งนี้ หากคุณต้องการใช้บริการเว็บ SOAP คุณจะได้รับไฟล์ WSDL หนึ่งไฟล์จากนั้นคุณจะต้องใช้บริการเว็บเฉพาะ สำหรับบริการ REST คุณจะต้องใช้ลิงค์เดียวเพื่อใช้งานเดียวกัน ในตัวอย่างนี้คุณจะติดขัดบริการเว็บที่แตกต่างกันสามอย่าง "SOAP", "REST" และ "กำหนดเอง" ในแอปพลิเคชันเดียว

สถาปัตยกรรมแอปพลิเคชัน

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

ต่อไปนี้เป็นขั้นตอนในการพัฒนาแอปพลิเคชันไมโครเซอร์วิส

Step 1: Client creation for SOAP service- มีเว็บ API ฟรีมากมายสำหรับเรียนรู้บริการบนเว็บ สำหรับจุดประสงค์ของบทช่วยสอนนี้ให้ใช้บริการ GeoIP ของ“http://www.webservicex.net/.”ไฟล์ WSDL อยู่ในลิงค์ต่อไปนี้บนเว็บไซต์“ webservicex.net ในการสร้างไคลเอนต์จากไฟล์ WSDL นี้สิ่งที่คุณต้องทำคือรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ

wsimport http://www.webservicex.net/geoipservice.asmx?WSDL

คำสั่งนี้จะสร้างไฟล์ไคลเอนต์ที่จำเป็นทั้งหมดภายใต้โฟลเดอร์เดียวชื่อ“ SEI” ซึ่งตั้งชื่อตามอินเทอร์เฟซจุดสิ้นสุดของบริการ

Step 2: Create your custom web service- ทำตามกระบวนการเดียวกันที่กล่าวถึงในขั้นตอนก่อนหน้าในบทช่วยสอนนี้และสร้าง REST api ที่ใช้ Maven ชื่อ“ CustomRest” เมื่อเสร็จแล้วคุณจะพบคลาสชื่อ“ MyResource.java” อัปเดตชั้นเรียนนี้โดยใช้รหัสต่อไปนี้

package com.tutorialspoint.customrest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("myresource")
public class MyResource {
   @GET
   @Produces(MediaType.TEXT_PLAIN)
   
   public String getIt() {
      return "IND|INDIA|27.7.65.215";
   }
}

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

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

Step 3: Configure another Rest API- ในขั้นตอนนี้ให้ใช้บริการเว็บอื่นที่services.groupkt.com สิ่งนี้จะส่งคืนออบเจ็กต์ JSON เมื่อเรียกใช้

Step 4: Create JAVA application - สร้างแอปพลิเคชัน Java ปกติโดยเลือก“ New Project” ->“ JAVA project” แล้วกด Finish ตามที่แสดงในภาพหน้าจอต่อไปนี้

Step 5: Add the SOAP client- ในขั้นตอนที่ 1 คุณได้สร้างไฟล์ไคลเอนต์สำหรับบริการเว็บ SOAP ดำเนินการต่อและเพิ่มไฟล์ไคลเอนต์เหล่านี้ในโครงการปัจจุบันของคุณ หลังจากเพิ่มไฟล์ไคลเอนต์สำเร็จแล้วไดเรกทอรีแอปพลิเคชันของคุณจะมีลักษณะดังต่อไปนี้

Step 6: Create your main app- สร้างชั้นเรียนหลักของคุณที่คุณจะใช้บริการเว็บทั้งสามนี้ คลิกขวาที่โครงการต้นทางและสร้างคลาสใหม่ชื่อ“ MicroServiceInAction.java” ภารกิจต่อไปคือการเรียกใช้บริการเว็บต่างๆจากสิ่งนี้

Step 7: Call your custom web service - สำหรับสิ่งนี้ให้ดำเนินการต่อและเพิ่มชุดรหัสต่อไปนี้เพื่อใช้การเรียกใช้บริการของคุณเอง

try {
   url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
   conn = (HttpURLConnection) url.openConnection();
   conn.setRequestMethod("GET");
   conn.setRequestProperty("Accept", "application/json");
   
   if (conn.getResponseCode() != 200) {
      throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
   }
   
   BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream())));
   while ((output = br.readLine()) != null) {
      inputToOtherService = output;
   }
   conn.disconnect();

} catch (MalformedURLException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}

Step 8: Consume SOAP Services- คุณได้สร้างไฟล์ไคลเอนต์ของคุณแล้ว แต่คุณไม่รู้ว่าควรเรียกใช้วิธีใดในแพ็คเกจทั้งหมดนั้น? สำหรับสิ่งนี้คุณต้องอ้างถึง WSDL อีกครั้งซึ่งคุณใช้ในการสร้างไฟล์ไคลเอนต์ของคุณ ไฟล์ WSDL ทุกไฟล์ควรมีแท็ก“ wsdl: service” หนึ่งแท็กค้นหาแท็กนี้ ควรเป็นจุดเริ่มต้นของบริการเว็บนั้น ต่อไปนี้เป็นจุดสิ้นสุดบริการของแอปพลิเคชันนี้

ตอนนี้คุณต้องใช้บริการนี้ในแอปพลิเคชันของคุณ ต่อไปนี้เป็นชุดโค้ด Java ที่คุณต้องใช้ในการติดตั้งบริการเว็บ SOAP ของคุณ

GeoIPService newGeoIPService = new GeoIPService();
GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);  
// Ipaddress is output of our own web service.

System.out.println("Country Name from SOAP Webserivce ---"+newGeoIP.getCountryName());

Step 9: Consume REST web service- บริการสองรายการถูกใช้ไปจนถึงปัจจุบัน ในขั้นตอนนี้บริการเว็บ REST อื่นที่มี URL ที่กำหนดเองจะถูกใช้ด้วยความช่วยเหลือของบริการเว็บที่คุณกำหนดเอง ใช้ชุดรหัสต่อไปนี้เพื่อดำเนินการดังกล่าว

String url1="http://services.groupkt.com/country/get/iso3code/";//customizing the Url
url1 = url1.concat(countryCode);

try {
   URL url = new URL(url1);
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setRequestMethod("GET");
   conn.setRequestProperty("Accept", "application/json");
   
   if (conn.getResponseCode() != 200) {
      throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
   }
   
   BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream())));
   while ((output = br.readLine()) != null) {
      System.out.println(output);
   }
   conn.disconnect();

} catch (MalformedURLException e) {
   e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}

Step 10: Consume all services - พิจารณาว่าบริการเว็บ“ CustomRest” ของคุณกำลังทำงานอยู่และคุณเชื่อมต่อกับอินเทอร์เน็ตหากทุกอย่างเสร็จสมบูรณ์สิ่งต่อไปนี้ควรเป็นคลาสหลักที่รวมไว้ของคุณ

package microserviceinaction;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;

import net.webservicex.GeoIP;
import net.webservicex.GeoIPService;
import net.webservicex.GeoIPServiceSoap;

public class MicroServiceInAction {
   static URL url;
   static HttpURLConnection conn;
   static String output;
   static String inputToOtherService;
   static String countryCode;
   static String ipAddress;
   static String CountryName;
   public static void main(String[] args) {
      //consuming of your own web service
      try {
         url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
         conn = (HttpURLConnection) url.openConnection();
         conn.setRequestMethod("GET");
         conn.setRequestProperty("Accept", "application/json");
         
         if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
         }
         
         BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));
         while ((output = br.readLine()) != null) {
            inputToOtherService = output;
         }
         conn.disconnect();
      
      } catch (MalformedURLException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
      
      //Fetching IP address from the String and other information
      StringTokenizer st = new StringTokenizer(inputToOtherService);
      countryCode = st.nextToken("|");
      CountryName = st.nextToken("|");
      ipAddress = st.nextToken("|");
      
      // Call to SOAP web service with output of your web service--- 
      // getting the location of our given IP address
      String Ipaddress = ipAddress;
      GeoIPService newGeoIPService = new GeoIPService();
      GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
      GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);
      System.out.println("Country Name from SOAP Webservice ---"+newGeoIP.getCountryName());
      
      // Call to REST API --to get all the details of our country
      String url1 = "http://services.groupkt.com/country/get/iso3code/"; //customizing the Url
      url1 = url1.concat(countryCode);
      
      try {
         URL url = new URL(url1);
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         conn.setRequestMethod("GET");
         conn.setRequestProperty("Accept", "application/json");
			
         if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
         }
      
         BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));
         while ((output = br.readLine()) != null) {
            System.out.println(output);
         }
      
         conn.disconnect();
      } catch (MalformedURLException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

เมื่อคุณเรียกใช้ไฟล์นี้คุณจะเห็นผลลัพธ์ต่อไปนี้ในคอนโซล คุณได้พัฒนาแอปพลิเคชันไมโครเซอร์วิสแรกของคุณสำเร็จแล้ว