วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

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

10
ทำไมคำว่า“ if elif else” แทบไม่เคยอยู่ในรูปแบบตารางเลย?
if i>0 : return sqrt(i) elif i==0: return 0 else : return 1j * sqrt(-i) VS if i>0: return sqrt(i) elif i==0: return 0 else: return 1j * sqrt(-i) จากตัวอย่างข้างต้นฉันไม่เข้าใจว่าทำไมฉันถึงไม่เคยเห็นสไตล์แรกในฐานรหัส สำหรับฉันคุณเปลี่ยนรหัสเป็นรูปแบบตารางที่แสดงสิ่งที่คุณต้องการอย่างชัดเจน คอลัมน์แรกสามารถถูกละเว้นได้อย่างแท้จริง คอลัมน์ที่สองระบุเงื่อนไขและคอลัมน์ที่สามให้ผลลัพธ์ที่คุณต้องการ อย่างน้อยก็ตรงไปตรงมาและอ่านง่าย แต่ฉันก็มักจะเห็นสถานการณ์กรณี / สวิตช์แบบง่าย ๆ นี้ออกมาในรูปแบบที่เพิ่มการเยื้องของแท็บ ทำไมถึงเป็นอย่างนั้น? ผู้คนพบรูปแบบที่สองที่สามารถอ่านได้มากขึ้นหรือไม่ กรณีเดียวที่ปัญหานี้อาจเกิดขึ้นได้ก็ต่อเมื่อรหัสเปลี่ยนไป ในกรณีนี้ฉันคิดว่ามันเหมาะสมอย่างยิ่งที่จะทำการปรับรหัสให้อยู่ในรูปแบบที่ยาวและเยื้อง ทุกคนทำวิธีที่สองเพียงเพราะวิธีที่เคยทำมาเสมอหรือไม่ การเป็นผู้สนับสนุนของปีศาจฉันคิดว่าอีกเหตุผลหนึ่งอาจเป็นเพราะผู้คนพบสองรูปแบบที่แตกต่างกันขึ้นอยู่กับความซับซ้อนของคำสั่ง if / else ที่ทำให้สับสน? ความเข้าใจใด …

7
การออกแบบ REST api โดย URI เทียบกับสตริงแบบสอบถาม
สมมติว่าฉันมีสามทรัพยากรที่เกี่ยวข้องดังนี้: Grandparent (collection) -> Parent (collection) -> and Child (collection) ด้านบนแสดงให้เห็นถึงความสัมพันธ์ระหว่างทรัพยากรเหล่านี้เช่น: ปู่ย่าตายายแต่ละคนสามารถแมปกับผู้ปกครองหนึ่งหรือหลายคน ผู้ปกครองแต่ละคนสามารถแมปกับเด็กคนหนึ่งหรือหลายคน ฉันต้องการความสามารถในการสนับสนุนการค้นหากับทรัพยากรลูก แต่ด้วยเกณฑ์ตัวกรอง: หากลูกค้าของฉันส่งรหัสอ้างอิงถึงปู่ย่าตายายให้ฉันฉันต้องการค้นหาเฉพาะเด็กที่เป็นทายาทสายตรงของปู่ย่าตายายนั้นเท่านั้น หากลูกค้าของฉันส่งรหัสอ้างอิงไปยังผู้ปกครองฉันต้องการค้นหาเฉพาะเด็กที่เป็นผู้สืบทอดโดยตรงจากผู้ปกครองของฉัน ฉันคิดถึงบางสิ่งเช่นนั้น: GET /myservice/api/v1/grandparents/{grandparentID}/parents/children?search={text} และ GET /myservice/api/v1/parents/{parentID}/children?search={text} สำหรับข้อกำหนดข้างต้นตามลำดับ แต่ฉันสามารถทำอะไรเช่นนี้: GET /myservice/api/v1/children?search={text}&grandparentID={id}&parentID=${id} ในการออกแบบนี้ฉันสามารถอนุญาตให้ลูกค้าของฉันส่งต่อฉันอย่างใดอย่างหนึ่งในสตริงการสืบค้น: grandparentID หรือ parentID แต่ไม่ใช่ทั้งสองอย่าง คำถามของฉันคือ: 1) การออกแบบ API ใดที่สงบมากขึ้นและทำไม ความหมายพวกมันหมายถึงและประพฤติตนในลักษณะเดียวกัน ทรัพยากรสุดท้ายใน URI คือ "children" หมายความว่าไคลเอ็นต์กำลังทำงานบนทรัพยากรชายด์อย่างมีประสิทธิภาพ 2) อะไรคือข้อดีข้อเสียของแต่ละคนในแง่ของความเข้าใจในมุมมองของลูกค้าและการบำรุงรักษาจากมุมมองของนักออกแบบ 3) สตริงการสืบค้นที่ใช้จริงๆนอกเหนือจาก "การกรอง" ในทรัพยากรของคุณคืออะไร หากคุณใช้วิธีแรกพารามิเตอร์ตัวกรองจะถูกฝังใน …
73 design  rest  api 

3
ความแตกต่างระหว่างอนาคตและสัญญาคืออะไร?
ความแตกต่างระหว่างอนาคตและสัญญาคืออะไร? (ใน Akka และ Gpars) พวกเขาดูเหมือนกันทั้งฉันบล็อกและคืนค่าในอนาคตเมื่อได้รับเรียกและสัญญาคือการได้รับผลของอนาคต
73 api  scala  groovy  akka 

7
ฉันควรทำตามเส้นทางปกติหรือล้มเหลว แต่เนิ่นๆ
จากหนังสือCode Completeมาพร้อมคำพูดต่อไปนี้: "ใส่เคสปกติหลังจากifดีกว่าelse" ซึ่งหมายความว่าควรมีข้อยกเว้น / การเบี่ยงเบนจากเส้นทางมาตรฐานในelseกรณี แต่โปรแกรมเมอร์ในทางปฏิบัติสอนให้เรา "ผิดพลาดเร็ว" (หน้า 120) ฉันควรทำตามกฎใด
73 design 

4
JavaScript ตีความโดยการออกแบบหรือไม่
ฉันระมัดระวังในการถามคำถามนี้เพราะอาจดูเหมือนพิถีพิถันมากเกินไป ฉันเพิ่งเปิด JavaScript: The Definitive Guide และมันระบุไว้ในหน้าแรกของบทที่ 1 "JavaScript เป็นภาษาการเขียนโปรแกรมตีความในระดับสูงแบบไดนามิกและไม่พิมพ์ออกมา" ดังนั้นฉันจะพูดได้ไหมว่าส่วนที่ตีความนั้นเป็นข้อกำหนดในข้อกำหนดภาษาหรือทำให้เข้าใจผิดว่าภาษานั้นเป็นภาษาโปรแกรมที่ถูกตีความเมื่อเคารพความแตกต่างระหว่างภาษาและการใช้งานหลายอย่าง? ไม่มีคอมไพเลอร์แบบคงที่สำหรับ JavaScript อย่างชัดเจน - https://stackoverflow.com/questions/1118138/is-there-a-native-machine-code-compiler-for-javascriptดังนั้นอาจเป็นเพียงภาพสะท้อนของสิ่งนี้
73 javascript 

11
คำแนะนำในการออกแบบเว็บแอปพลิเคชันด้วยอายุการใช้งานมากกว่า 40 ปี
สถานการณ์ ขณะนี้ฉันอยู่นอกเหนือโครงการดูแลสุขภาพที่มีความต้องการหลักคือการเก็บข้อมูลที่มีคุณลักษณะที่ไม่รู้จักโดยใช้แบบฟอร์มที่ผู้ใช้สร้างขึ้นโดยผู้ให้บริการด้านสุขภาพ ข้อกำหนดที่สองคือความสมบูรณ์ของข้อมูลเป็นกุญแจสำคัญและแอปพลิเคชันจะใช้งานมากกว่า 40 ปี ขณะนี้เรากำลังย้ายข้อมูลลูกค้าจาก 40 ปีที่ผ่านมาจากแหล่งข้อมูลต่างๆ (กระดาษ, Excel, Access, ฯลฯ ... ) ไปยังฐานข้อมูล ข้อกำหนดในอนาคตคือ: การจัดการเวิร์กโฟลว์ของแบบฟอร์ม การจัดการตารางเวลาของแบบฟอร์ม ความปลอดภัย / การจัดการตามบทบาท เครื่องมือสร้างรายงาน รองรับมือถือ / แท็บเล็ต สถานการณ์ เพียง 6 เดือนเท่านั้นสถาปนิก / โปรแกรมเมอร์อาวุโส (ที่เซ็นสัญญา) คนปัจจุบันใช้แนวทาง "เร็ว" และได้ออกแบบระบบที่ไม่ดี ฐานข้อมูลไม่ได้รับการปรับให้เป็นมาตรฐาน, โค้ดนั้นเป็นแบบคู่, เทียร์ไม่มีวัตถุประสงค์เฉพาะและข้อมูลเริ่มหายไปเนื่องจากเขาได้ออกแบบถั่วบางตัวเพื่อทำการ "ลบ" บนฐานข้อมูล รหัสฐานนั้นเต็มไปด้วยฟองเลือดมากและมีงานที่ต้องทำการซิงโครไนซ์ข้อมูลเนื่องจากฐานข้อมูลไม่ได้ถูกทำให้เป็นมาตรฐาน วิธีการของเขาคือการพึ่งพางานสำรองเพื่อกู้คืนข้อมูลที่หายไปและดูเหมือนจะไม่เชื่อในการกู้คืนข้อมูล หลังจากนำเสนอสิ่งที่ฉันพบต่อ PM สถาปนิกจะถูกลบออกเมื่อสัญญาของเขาสิ้นสุดลง ฉันได้รับมอบหมายให้สร้างแอปพลิเคชันนี้อีกครั้ง ทีมของฉันประกอบด้วยฉันและโปรแกรมเมอร์ระดับต้นหนึ่งคน เราไม่มีทรัพยากรอื่น ๆ เราได้รับสิทธิ์การแช่แข็ง …

10
ไม่เคยใช้ Strings ใน Java ใช่ไหม [ปิด]
ฉันสะดุดกับรายการบล็อกทำให้ไม่สามารถใช้ Strings ใน Java เพราะทำให้โค้ดของคุณขาดความหมายโดยแนะนำว่าคุณควรใช้คลาส wrapper บาง ๆ แทน นี่คือตัวอย่างก่อนและหลังรายการดังกล่าวมีไว้เพื่อแสดงให้เห็นถึงเรื่อง: public void bookTicket( String name, String firstName, String film, int count, String cinema); public void bookTicket( Name name, FirstName firstName, Film film, Count count, Cinema cinema); จากประสบการณ์การอ่านบล็อกการเขียนโปรแกรมฉันได้ข้อสรุปว่า 90% ไร้สาระ แต่ฉันก็ยังสงสัยว่ามันเป็นประเด็นที่ถูกต้องหรือไม่ อย่างใดก็รู้สึกไม่ถูกต้องสำหรับฉัน แต่ฉันไม่สามารถระบุสิ่งที่ผิดปกติกับรูปแบบของการเขียนโปรแกรม

7
ชื่ออินเตอร์เฟสควรเริ่มต้นด้วยคำนำหน้า“ I” หรือไม่
ฉันได้อ่าน " Clean Code " โดย Robert Martin หวังว่าจะเป็นโปรแกรมเมอร์ที่ดีขึ้น แม้ว่าจะไม่มีสิ่งใดที่ทำให้ฉันรู้สึกแตกต่างไปจากเดิมอย่างสิ้นเชิงเกี่ยวกับวิธีการออกแบบแอปพลิเคชันและเขียนโค้ด มีส่วนหนึ่งของหนังสือที่ฉันไม่เพียง แต่ไม่เห็นด้วย แต่ไม่สมเหตุสมผลสำหรับฉันโดยเฉพาะเกี่ยวกับอนุสัญญาการตั้งชื่ออินเทอร์เฟซ นี่คือข้อความที่นำมาโดยตรงจากหนังสือ ฉันกล้าทำให้มุมมองนี้สับสนและต้องการคำชี้แจง ฉันชอบที่จะออกจากส่วนต่อประสานที่ไม่มีการตกแต่ง ก่อนหน้าฉันที่พบเห็นได้ทั่วไปในยุคปัจจุบันเป็นสิ่งที่ทำให้ไขว้เขวที่ข้อมูลที่ดีที่สุดและมากที่สุดที่เลวร้ายที่สุด ฉันไม่ต้องการให้ผู้ใช้ของฉันรู้ว่าฉันส่งให้อินเตอร์เฟซ อาจเป็นเพราะฉันเป็นแค่นักเรียนหรืออาจเป็นเพราะฉันไม่เคยทำโปรแกรมแบบมืออาชีพหรือเป็นทีม แต่ฉันต้องการให้ผู้ใช้รู้ว่ามันเป็นส่วนต่อประสาน มีความแตกต่างใหญ่ระหว่างการใช้อินเทอร์เฟซและการขยายชั้นเรียน ดังนั้นคำถามของฉันจึงลดลงไปถึง"ทำไมเราควรซ่อนความจริงที่ว่าบางส่วนของรหัสกำลังคาดว่าจะมีส่วนต่อประสาน" แก้ไข ในการตอบกลับคำตอบ: หากประเภทของคุณเป็นอินเทอร์เฟซหรือคลาสเป็นธุรกิจของคุณไม่ใช่ธุรกิจของใครบางคนที่ใช้รหัสของคุณ ดังนั้นคุณไม่ควรรั่วรายละเอียดรหัสของคุณในรหัสของบุคคลที่สามนี้ เหตุใดฉันจึงไม่ควร "รั่วไหล" รายละเอียดว่าประเภทที่กำหนดเป็นส่วนต่อประสานหรือคลาสของรหัสของบุคคลที่สามหรือไม่ สิ่งสำคัญสำหรับนักพัฒนาบุคคลที่สามที่ใช้รหัสของฉันเพื่อรู้ว่าพวกเขาจะใช้อินเทอร์เฟซหรือขยายชั้นเรียนหรือไม่? ความแตกต่างนั้นไม่สำคัญเท่ากับที่ฉันกำลังทำให้พวกเขาอยู่ในใจ

15
การกำหนดตัวแปรเพื่อตั้งชื่ออาร์กิวเมนต์วิธีเป็นการปฏิบัติที่ดีหรือไม่?
เพื่อประโยชน์ในการอ่านฉันมักจะพบว่าตัวเองกำหนดตัวแปรชั่วคราวในขณะที่เรียกฟังก์ชั่นเช่นรหัสต่อไปนี้ var preventUndo = true; doSomething(preventUndo); รุ่นที่สั้นกว่าของสิ่งนี้คือ doSomething(true); แต่เมื่อฉันกลับมาที่รหัสฉันมักจะสงสัยว่าtrueหมายถึงอะไร มีแบบแผนสำหรับปริศนาประเภทนี้หรือไม่?

28
เป็นไปได้ไหมที่โปรแกรมเมอร์ที่ดีจะไม่เคยใช้การควบคุมเวอร์ชัน? [ปิด]
ฉันกำลังมองหาโปรแกรมเมอร์ผู้เชี่ยวชาญเพื่อช่วยแก้ไขสถานการณ์ที่ยากลำบาก การสัมภาษณ์จนถึงตอนนี้ก็น่าผิดหวังอย่างน่าประหลาดใจ ผู้สมัครที่ดีที่สุดคือโปรแกรมเมอร์ที่มีประสบการณ์สูงและไม่เคยใช้ซอฟต์แวร์ควบคุมเวอร์ชัน ปัญหาในตัวมันเองอาจไม่จริงจังเกินไปเพราะเป็นสิ่งที่สามารถเรียนรู้ได้ในเวลาอันสั้น แต่มีแง่มุมที่ลึกกว่าซึ่งทำให้ฉันเป็นกังวล: เป็นไปได้อย่างไรที่จะพัฒนาซอฟต์แวร์อย่างต่อเนื่องเป็นเวลา 10-15 ปีโดยไม่จำเป็นต้องมีการควบคุมเวอร์ชัน? ความจริงแล้วตัวเองไม่ได้มองหาวิธีแก้ไขปัญหาในการติดตามการเปลี่ยนแปลงสัญญาณของทัศนคติที่ไม่ถูกต้องในการเขียนโปรแกรมหรือไม่?

16
เป็นวิธีที่คล่องตัวมากเกินไปสำหรับการแก้ตัวที่สะดวกสำหรับคาวบอย
ฉันเชื่อว่าวิธีการแบบเปรียวนั้นดีที่สุดสำหรับโครงการที่ความต้องการนั้นคลุมเครือและต้องมีการโต้ตอบจำนวนมากเพื่อช่วยกำหนดแนวความคิดของผู้ใช้ อย่างไรก็ตาม ...ในการทำงานอย่างมืออาชีพของฉันฉันมักจะจบลงที่ บริษัท ที่ใช้วิธี "เปรียว" เป็นข้ออ้างว่าทำไมไม่ใช้ความพยายามในการออกแบบด้านหน้า เมื่อข้อกำหนดเป็นที่เข้าใจกันดี ฉันอดไม่ได้ที่จะคิดว่าถ้าวิธีการแบบเปรียวไม่ได้อยู่ใกล้ฉันจะนั่งอยู่ที่นี่ด้วยสเปคระดับสูงที่ดีและไม่ต้องกลับไปที่หน้าจอและฟังก์ชั่นเดิมทุกวันที่สอง และไม่เคยคิดเช่นนั้น ประโยชน์ของวิธีการแบบว่องไวจริงๆเพียงพอที่จะเกินดุลข้ออ้างสำหรับการเป็นคนพิการที่ให้กับฝ่ายเทคนิคคาวบอยหรือไม่? อัปเดต: แดกดันตอนนี้ฉันเป็น Scrum Master ที่ได้รับการรับรองแล้ว หนึ่งในเอกสารที่นำเสนอในหลักสูตรการแย่งชิงกันสังเกตว่ากระบวนการพัฒนาที่ดีที่สุดคือเอกสารที่มีผู้เชี่ยวชาญหรือผู้เชี่ยวชาญในการตัดสินใจออกแบบ แต่มีจุดอ่อนที่ชัดเจน Scrum เปลี่ยนความรับผิดชอบในการผลิตซอฟต์แวร์ที่มีคุณภาพให้กับ "ทีม" ซึ่งหมายความว่าทีมรองสามารถกำจัดสปาเก็ตตี้ซึ่งฉันคิดว่าไม่แตกต่างจากกระบวนการพัฒนาแบบ Agile และ non-Agile อื่น ๆ

7
ความคิดที่แย่คือการใช้ไฟล์ Python เป็นไฟล์กำหนดค่า
ฉันใช้ไฟล์JSONเพื่อกำหนดค่าแอปพลิเคชันของฉันเสมอ ฉันเริ่มใช้พวกเขาตั้งแต่ตอนที่ฉันเขียนโค้ด Java จำนวนมากและตอนนี้ฉันทำงานเป็นหลักเกี่ยวกับการพัฒนา Python ด้านเซิร์ฟเวอร์และวิทยาศาสตร์ข้อมูลและฉันไม่แน่ใจว่าJSONเป็นวิธีที่เหมาะสมที่จะไปอีกต่อไป ฉันเห็น Celery ใช้ไฟล์ Python ที่แท้จริงเพื่อกำหนดค่า ตอนแรกฉันสงสัยเกี่ยวกับมัน แต่แนวคิดของการใช้โครงสร้างข้อมูล Python ง่าย ๆ สำหรับการกำหนดค่าเริ่มที่จะเพิ่มขึ้น ข้อดีบางประการ: โครงสร้างข้อมูลจะเหมือนกับที่ฉันเขียนตามปกติดังนั้นฉันไม่จำเป็นต้องเปลี่ยนกรอบความคิด IDE ของฉัน (PyCharm) เข้าใจการเชื่อมต่อระหว่างการกำหนดค่าและรหัส Ctrl+ Bทำให้สามารถข้ามไปมาระหว่างการกำหนดค่าและรหัสได้อย่างง่ายดาย ฉันไม่ต้องการที่จะทำงานกับที่ไม่จำเป็น IMO เข้มงวดJSON ฉันกำลังดูคุณสองคำพูดไม่มีเครื่องหมายจุลภาคต่อท้ายและไม่มีความคิดเห็น ฉันสามารถเขียนการกำหนดค่าการทดสอบในแอปพลิเคชันที่ฉันกำลังทำงานอยู่จากนั้นจึงย้ายพวกเขาไปยังไฟล์กำหนดค่าโดยไม่ต้องทำการแปลงใด ๆ และการแยกวิเคราะห์ JSON เป็นไปได้ที่จะทำสคริปต์ง่าย ๆ ในไฟล์กำหนดค่าถ้าจำเป็นจริงๆ (แม้ว่าสิ่งนี้ควรมี จำกัด มาก) ดังนั้นคำถามของฉันคือถ้าฉันสลับฉันจะยิงตัวเองในเท้าได้อย่างไร ไม่มีผู้ใช้ที่ไม่มีทักษะจะใช้ไฟล์กำหนดค่า การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับไฟล์การกำหนดค่าปัจจุบันมีความมุ่งมั่นที่จะใช้ Git และถูกนำไปใช้กับเซิร์ฟเวอร์ของเราซึ่งเป็นส่วนหนึ่งของการปรับใช้อย่างต่อเนื่อง ไม่มีการเปลี่ยนแปลงการกำหนดค่าด้วยตนเองเว้นแต่จะมีเหตุฉุกเฉินหรืออยู่ระหว่างการพัฒนา (ฉันเคยพิจารณาYAMLแต่มีบางอย่างเกี่ยวกับมันทำให้ฉันรำคาญดังนั้นสำหรับตอนนี้มันอยู่นอกโต๊ะอเมริกัน)

8
รหัสสถานะ HTTP ใดที่จะส่งคืนหากการกระทำหลายอย่างเสร็จสิ้นด้วยสถานะที่แตกต่างกัน
ฉันกำลังสร้าง API ที่ผู้ใช้สามารถขอให้เซิร์ฟเวอร์ดำเนินการหลายอย่างในคำขอ HTTP เดียว ผลลัพธ์ถูกส่งคืนเป็นอาร์เรย์ JSON โดยมีหนึ่งรายการต่อการดำเนินการ แต่ละการกระทำเหล่านี้อาจล้มเหลวหรือประสบความสำเร็จอย่างเป็นอิสระจากกัน ตัวอย่างเช่นการกระทำแรกอาจสำเร็จการป้อนข้อมูลไปยังการดำเนินการที่สองอาจมีรูปแบบไม่ดีและไม่สามารถตรวจสอบได้และการกระทำที่สามอาจทำให้เกิดข้อผิดพลาดที่ไม่คาดคิด หากมีหนึ่งคำขอต่อการกระทำฉันจะส่งคืนรหัสสถานะ 200, 422 และ 500 ตามลำดับ แต่ตอนนี้เมื่อมีคำขอเพียงครั้งเดียวฉันควรส่งรหัสสถานะใด ตัวเลือกบางอย่าง: ส่งคืน 200 เสมอและให้ข้อมูลรายละเอียดเพิ่มเติมในร่างกาย อาจปฏิบัติตามกฎข้างต้นเฉพาะเมื่อมีมากกว่าหนึ่งการกระทำในคำขอ? อาจส่งคืน 200 หากคำขอทั้งหมดสำเร็จมิฉะนั้น 500 (หรือรหัสอื่น) เพียงใช้หนึ่งคำขอต่อการกระทำและยอมรับค่าใช้จ่ายเพิ่มเติม มีอะไรที่แตกต่างไปจากเดิมอย่างสิ้นเชิง?
72 api  http 

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

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