Style Characteristics (คุณลักษณะของ Style)

คะแนน 1 ดาว ในตาราง characteristics ratings ( Figure 12-3 ) หมายความว่า architecture characteristic นั้นไม่ได้รับการรองรับที่ดีนักใน architecture ในขณะที่คะแนน 5 ดาวหมายความว่า architecture characteristic นั้นเป็นจุดแข็งที่สุดอย่างหนึ่งของ architecture style นี้ characteristic ที่อยู่ใน scorecard ถูกอธิบายและนิยามไว้ใน Chapter 4 .

pipeline architecture style เป็น architecture แบบ technically partitioned เพราะ application logic ของมันถูกแยกตามประเภทของ filter นอกจากนี้ เนื่องจาก pipeline architecture มักถูก implement เป็น monolithic deployment architectural quantum ของมันจึงเป็น 1 เสมอ

Pipeline ratings

Figure 12-3. คะแนน characteristics ของ pipeline architecture

ต้นทุนโดยรวม (overall cost), ความเรียบง่าย และ modularity คือจุดแข็งหลักของ pipeline architecture style เนื่องจากเป็น monolithic pipeline architecture จึงไม่มีความซับซ้อนที่มากับ distributed architecture style—มันเรียบง่าย เข้าใจง่าย และมีต้นทุนต่ำในการสร้างและดูแลรักษา architectural modularity เกิดจากการแยก concern ระหว่าง filter ประเภทต่าง ๆ และ transformer: filter ตัวใดก็ตามสามารถแก้ไขหรือแทนที่ได้โดยไม่กระทบ filter อื่น ตัวอย่างเช่น ใน Kafka example ที่แสดงใน Figure 12-4 Duration Calculator สามารถแก้ไขเพื่อเปลี่ยนวิธีคำนวณ duration ได้โดยไม่ต้องเปลี่ยน filter อื่นเลย

Deployability และ testability แม้จะอยู่ในระดับปานกลาง แต่ก็ได้คะแนนสูงกว่า layered architecture เล็กน้อยเนื่องจากระดับ modularity ที่ filter ทำได้ อย่างไรก็ตาม pipeline architecture ก็ยังคง มักจะ เป็น monolithic ดังนั้นข้อเสียของมันจึงรวมถึง ceremony, ความเสี่ยง, ความถี่ในการ deploy และความครบถ้วนของการทดสอบ

Elasticity และ scalability ได้คะแนนต่ำมาก (1 ดาว) ใน pipeline architecture ซึ่งส่วนใหญ่เป็นเพราะ monolithic deployment การ implement architecture style นี้เป็น distributed architecture โดยใช้การสื่อสารแบบ asynchronous สามารถปรับปรุง characteristic เหล่านี้ได้อย่างมีนัยสำคัญ แต่ trade-off คือกระทบต่อต้นทุนโดยรวมและความเรียบง่าย

pipeline architecture ไม่รองรับ fault tolerance เพราะมักถูก deploy เป็นระบบ monolithic ถ้าส่วนเล็ก ๆ ส่วนหนึ่งของ pipeline architecture ทำให้เกิด out-of-memory condition แอปพลิเคชันทั้งหมดจะได้รับผลกระทบและ crash นอกจากนี้ availability โดยรวมยังได้รับผลกระทบจาก mean time to recovery (MTTR) ที่สูง ซึ่งพบได้ทั่วไปในแอปพลิเคชันแบบ monolithic ส่วนใหญ่ โดยมี startup time วัดเป็นนาที เช่นเดียวกับ elasticity และ scalability การ implement architecture style นี้เป็น distributed architecture โดยใช้การสื่อสารแบบ asynchronous สามารถปรับปรุง fault tolerance ได้อย่างมีนัยสำคัญ โดยต้องแลกมาด้วยต้นทุนและความซับซ้อนอีกเช่นกัน

ดังที่เราได้กล่าวไปแล้ว operational characteristic ที่ได้คะแนนต่ำส่วนใหญ่สามารถยกระดับได้ด้วยการทำให้เป็น distributed architecture ที่ใช้การสื่อสารแบบ asynchronous โดยแต่ละ filter เป็น deployment unit แยกและ pipe เป็น remote call แต่การทำเช่นนั้นจะส่งผลกระทบเชิงลบต่อคุณลักษณะอื่น ๆ เช่น ความเรียบง่ายและต้นทุน ซึ่งแสดงให้เห็น trade-off คลาสสิกอย่างหนึ่งของ software architecture

When to Use (เมื่อใดควรใช้)

pipeline architecture เหมาะสำหรับระบบที่มีความซับซ้อนระดับใดก็ได้ ที่มีขั้นตอนการประมวลผลแบบทางเดียวซึ่งชัดเจน มีลำดับ และ deterministic ความเรียบง่ายของ style นี้ยังทำให้เหมาะกับสถานการณ์ที่มีข้อจำกัดด้านเวลาและงบประมาณที่ตึงตัว

When Not to Use (เมื่อใดไม่ควรใช้)

เนื่องจากธรรมชาติแบบ monolithic ของ architectural style นี้ มันจึงไม่เหมาะกับระบบที่ต้องการ scalability, elasticity และ fault tolerance สูง อย่างไรก็ตาม การใช้แนวทาง distributed architecture จะช่วยบรรเทาข้อกังวลเหล่านี้ได้

pipeline architecture style ยังไม่เหมาะกับสถานการณ์ที่ต้องมีการสื่อสารไปมาระหว่าง filter เนื่องจาก pipe ถูกออกแบบมาให้เป็นทางเดียวเท่านั้น แม้ว่าจะเป็นไปได้ที่จะใช้ architecture style นี้กับ workflow แบบ nondeterministic โดยใช้ tester filter จำนวนมากตลอด pipeline แต่เราไม่แนะนำให้ทำเช่นนั้น เพราะมันทำให้ architecture style ที่ค่อนข้างเรียบง่ายนี้ซับซ้อนเกินความจำเป็น และอาจส่งผลเชิงลบต่อ maintainability, testability, deployability และท้ายที่สุดคือ reliability โดยรวม event-driven architecture (ดู Chapter 15 ) เหมาะกับสถานการณ์ที่มี workflow แบบ nondeterministic มากกว่ามาก

pipeline architecture style ปรากฏในแอปพลิเคชันหลากหลายประเภท โดยเฉพาะงานที่ต้องการการประมวลผลแบบทางเดียวที่เรียบง่าย ตัวอย่างเช่น เครื่องมือ electronic data interchange (EDI) จำนวนมากใช้ pattern นี้ในการสร้างการแปลงจาก document type หนึ่งไปยังอีกแบบหนึ่งด้วย pipe และ filter เครื่องมือ database extract, transform, and load (ETL) ใช้ pipeline architecture ในการแก้ไขข้อมูลและส่งต่อจากฐานข้อมูลหรือแหล่งข้อมูลหนึ่งไปยังอีกแหล่งหนึ่ง orchestrator และ mediator เช่น Apache Camel ใช้ pipeline architecture ในการส่งข้อมูลจากขั้นตอนหนึ่งของ business process ไปยังอีกขั้นตอนหนึ่ง