- เรื่องราวการพัฒนาโครงการ LegiNote ตอนที่ 3 - Request ใน Go
- บทความนี้จะแนะนำกระบวนการพัฒนาโครงการ LegiNote ซึ่งใช้ภาษา Go ในการดึงข้อมูลกฎหมายจาก OpenAPI ของสภาผู้แทนราษฎร ครอบคลุมหัวข้อต่างๆ เช่น การส่งคำขอ HTTP และการกำหนดโครงสร้างข้อมูล
สวัสดีครับ ผม StatPan
กำลังเขียนเกี่ยวกับการพัฒนาโปรเจ็กต์ข้างเคียง LegiNote อยู่ครับ
สำหรับตอนก่อนหน้า โปรดดูลิงก์ต่อไปนี้ครับ
การพัฒนา LegiNote ตอนที่ 4 ผมจะมาเล่าเรื่องการสร้างโครงสร้างพื้นฐานซึ่งแตกต่างจากก่อนหน้านี้เล็กน้อยครับ
ในการพัฒนาบริการนั้น จำเป็นต้องมีทรัพยากรเซิร์ฟเวอร์เพื่อให้บริการทำงานได้
แน่นอน หากไม่ได้ต้องการใช้งานบริการอย่างต่อเนื่อง ก็สามารถพิจารณาใช้ PC ส่วนตัวหรือบริการฟรีจากบริษัทต่างๆ ได้ครับ
สามารถใช้บริการฟรีจากคลาวด์หลักๆ เช่น AWS, Azure, GCP ได้ชั่วคราว หรืออาจพิจารณาใช้บริการโฮสติ้ง เช่น cafe24, gabia ก็ได้ครับ
ในบรรดาตัวเลือกต่างๆ ผมเลือกใช้ Oracle Cloud Free tier ครับ เรียกได้ว่ามีนโยบาย Free tier ที่ดีที่สุดในบรรดาคลาวด์เลยก็ว่าได้
สรุปแล้ว
สามารถใช้ VM ที่มี OCPU 4, RAM 24GB, SDD 200GB ได้ตลอดเวลาสำหรับบริการ (แม้ว่าปริมาณการใช้งานจะไม่ใช่แบบไม่จำกัด แต่ถ้าใช้จนเต็มขนาดนี้ ก็คงต้องใช้บริการแบบเสียเงินแล้วล่ะครับ)
แต่การจะใช้ VM นี้ได้นั้น ต้องผ่านการทดสอบการลงทะเบียนบัตรเครดิตของ Oracle ที่มีชื่อเสียงไม่ดีเสียก่อน
จึงได้มาซึ่ง VM ที่ทำงานได้ตลอด 24 ชั่วโมง 1 เครื่อง
ทรัพยากรที่ยังรู้สึกว่าไม่เพียงพอ
ระหว่างการพัฒนา พบว่าเพียงแค่ 1 โหนดไม่เพียงพอ
จากประสบการณ์ของผม จำเป็นต้องมีทรัพยากรที่สามารถแยกการกระจายการทำงานระหว่างการพัฒนาและการใช้งานได้
น่าเสียดายที่ Oracle Free tier ใช้ได้เพียง 1 เครื่อง (ในกรณีมาตรฐาน) ดังนั้นจึงต้องการหา VM ที่ทำงานได้ตลอดเวลาเพิ่มอีก
ทางเลือกแทน VM คือ Mini PC
เพื่อให้ได้สเปกที่เทียบเท่ากับบริการ Oracle Free tier และสามารถใช้งานได้ตลอด 24 ชั่วโมง จำเป็นต้องใช้เซิร์ฟเวอร์ที่มีประสิทธิภาพและใช้พลังงานต่ำในการใช้งานอย่างต่อเนื่อง
ระหว่างค้นหาข้อมูล พบว่าแหล่งข้อมูลที่ให้ความช่วยเหลือมากที่สุดคือ DC 갤러리
จากตัวเลือกต่างๆ เช่น n100, eqr6, ser8 ผมเลือก eqr6 เพราะต้องการสเปกที่ใกล้เคียงกับ VM และได้ซื้อเซิร์ฟเวอร์ในราคาที่ถูกมาก
eqr6 แบบเปล่าๆ 240,000 วอน
SSD 256GB 22,000 วอน
แรม 8GB * 2 18,000 วอน
รวม 280,000 วอน
ถ้าคิดว่าจะใช้ VM สเปกใกล้เคียงกันทำงานได้ตลอด 24 ชั่วโมง ประมาณ 1-2 ปี ก็ถือว่าคุ้มค่าที่จะซื้อ
จนถึงตอนนี้ยังราบรื่นดีอยู่... แต่...
จุดเริ่มต้นของปัญหา
การจัดส่งที่ต้องรอคอย
ใช่แล้ว Mini PC เหล่านี้ ในยุคที่ของมาส่งถึงบ้านภายใน 1-2 วัน กลับใช้เวลานานมาก
เวลา 2 สัปดาห์ที่ต้องรอของนั้น ยาวนานมาก ถึงกับคิดว่าโดนจีนหลอกหรือเปล่า จนกระทั่งได้ของ
สำหรับท่านที่ไม่มีประสบการณ์ในการตั้งค่า PC สามารถใช้เวลาว่างในช่วงรอคอยอ่านบทความดีๆ ใน Mini PC 갤러리 ได้ครับ
(เช่น การเตรียมดิสก์บูตนอกเหนือจาก USB ไดรเวอร์ที่ให้มา หรือเตรียมไดรเวอร์ที่จะติดตั้งร่วมด้วย ฯลฯ)
การประกอบ Mini PC
ใช่ครับ การประกอบ Mini PC เป็นประสบการณ์ที่แตกต่างออกไป ผมเคยประกอบเดสก์ท็อปด้วยตัวเองมาก่อน จึงคิดว่าคงง่าย แต่ Mini PC นั้นมีชิ้นส่วนต่างๆ อยู่ในตัวเครื่องขนาดเล็ก จึงทำให้การประกอบยากกว่าที่คิด โดยเฉพาะการเอาสกรูที่หลุดออกมาใส่กลับเข้าไปใหม่ ยากมากครับ
เพื่อเอาสกรูออกนั้น ผมต้องถอดส่วนจ่ายไฟออกเล็กน้อย ปรากฏว่าต่อเข้าไปไม่แน่น ทำให้ตัวเครื่องสั่นนิดเดียวก็ดับ เกิดเหตุการณ์สนุกๆ แบบนี้ขึ้นบ่อยมาก
พอนึกย้อนกลับไปแล้ว มันคือความเจ็บปวดที่ปลอมตัวเป็นความทรงจำดีๆ นี่เอง
การตั้งค่า Mini PC
ครั้งนี้เป็นสงครามกับ BIOS ครับ หลังจากติดตั้ง ubuntu แล้ว พบว่าใช้ VRAM 8GB ทำให้เหลือแรมใช้งานแค่ 8GB
เนื่องจากผมตั้งใจจะใช้เป็นเซิร์ฟเวอร์ จึงไม่ค่อยจำเป็นต้องใช้ VRAM ดังนั้นจึงต้องค้นหาฟังก์ชันนี้ในเมนู BIOS แบบเก่า ซึ่งค่อนข้างลำบาก เนื่องจากเวอร์ชัน BIOS เก่า ทำให้เมนูไม่ตรงกับคู่มือที่หาได้จากอินเทอร์เน็ต
สุดท้ายก็หาเจอจากวิดีโอใน Youtube ที่ไม่รู้จัก
ขอขอบคุณนักพัฒนาที่ไม่รู้จักชื่อ ณ ที่นี้ครับ...
การตั้งค่าโฮมเน็ตเวิร์ก
ผมใช้ internet ของ SK เนื่องจากตอนติดตั้งไม่มีผมอยู่ จึงไม่รู้ว่าติดตั้งอย่างไร และมีประสบการณ์การใช้ internet ของ KT มาก่อน จึงคิดว่าคงง่าย
นั่นคือ ผมคิดว่าใช้เพียงเราเตอร์ตัวเดียวที่ต่อออกจากโมเด็ม
แต่ SK นั้นไม่เหมือนใคร มีโมเด็มที่เชื่อมต่อกับ IP สาธารณะแยกต่างหาก 1 ตัว และมีโมเด็ม (เราเตอร์) ที่ใช้ในห้องนั่งเล่นแยกต่างหาก
ตอนแรกไม่รู้เรื่องนี้ ทำให้เราเตอร์ในห้องนั่งเล่นและเราเตอร์ในห้อง มีช่วงความถี่ไม่ตรงกัน คิดว่าเราเตอร์ในห้องมีปัญหา จึงรีเซ็ตไปหลายครั้ง
สุดท้ายก็ค้นพบว่ามีเราเตอร์อีกตัวหนึ่ง และพบโมเด็มที่ซ่อนอยู่ในที่ลับ
เพื่อแก้แค้นเวลาที่เสียไปประมาณ 1 วัน ผมจึงตัดสินใจเชื่อมต่อโมเด็มที่มี IP สาธารณะโดยตรงกับบริดจ์ และตั้งค่าเราเตอร์ SK ภายในเป็น NAT เพื่อควบคุมเครือข่ายทั้งหมด แต่ก็มีปัญหาเล็กน้อย
ยังไม่ทราบสาเหตุ แต่สุดท้ายผมก็มี IP สาธารณะ 2 ตัว
ส่วนตัวรู้สึกพอใจที่ได้ IP แยกต่างหากสำหรับบริการ แต่ยังไม่คุ้นเคยกับบริการที่แตกต่างจากบริษัทอินเทอร์เน็ตอื่นๆ
หากท่านใดใช้ internet ของ SK และกำลังจะสร้างโฮมเน็ตเวิร์ก ขอให้ทราบข้อมูลสำคัญเหล่านี้ จะช่วยให้แก้ปัญหาได้โดยไม่ยาก
DDNS และ DNS การส่งต่อพอร์ต
จริงๆ แล้ว ถ้าได้ Oracle VM เพิ่ม ก็ไม่จำเป็นต้องทำขั้นตอนนี้ แต่ก็ถือว่าเป็นประสบการณ์ที่ดีครับ
IP สำหรับใช้ในบ้านมักจะได้รับการกำหนด IP แบบไดนามิก ดังนั้น หากทำการแมป IP ไว้ที่เซิร์ฟเวอร์ DNS หากรีเซ็ตเราเตอร์ ก็ต้องทำการแมปอีกครั้ง
เพื่อแก้ปัญหานี้ เราเตอร์บางตัวมีบริการ DDNS ในตัว
เราเตอร์ของ SK ไม่ได้ให้บริการนี้โดยตรง แต่แนะนำให้ใช้บริการของบุคคลที่สาม
โชคดีที่ผมใช้เราเตอร์ ASUS จึงไม่ต้องใช้บริการเพิ่มเติม แต่ใช้ฟังก์ชัน DDNS ในหน้าจอผู้ดูแลระบบของเราเตอร์ ASUS และทำการแมปกับเซิร์ฟเวอร์ DNS เพื่อแก้ปัญหา
เนื่องจากผมเคยซื้อโดเมนและใช้ DNS มาก่อน จึงทำขั้นตอนนี้ได้ง่าย
ข้อคิดหลังจากแก้ปัญหาแล้ว
ตอนที่แค่คำนวณค่าใช้จ่ายในการใช้งาน VM ตลอด 24 ชั่วโมง อาจรู้สึกว่าค่าใช้จ่ายค่อนข้างสูง แต่ถ้าคิดถึงต้นทุนในการตั้งค่าเริ่มต้นและเวลาที่ต้องใช้ ก็พอจะเข้าใจได้ว่าทำไมบริการคลาวด์ถึงได้รับความนิยม
อย่างไรก็ตาม เพื่อให้โปรเจ็กต์ที่ยังไม่สร้างรายได้ทำงานต่อไปได้ และเพื่อการเรียนรู้ส่วนตัว ผมวางแผนที่จะพัฒนาโครงสร้างพื้นฐานนี้ต่อไป
จริงๆ แล้ว เพราะตอนนี้ยังไม่มีผู้ใช้ที่ต้องปรับขนาดบริการอย่างเร่งด่วน
ต่อไปนี้ เนื้อหาเกี่ยวกับโครงสร้างพื้นฐานที่รองรับโปรเจ็กต์นี้ ก็จะถูกนำมาใส่ในโพสต์ด้วย
หากท่านใดมีปัญหาหรือวางแผนทำในสิ่งที่คล้ายกัน ยินดีให้ความช่วยเหลือครับ
StatPan ครับ!
ความคิดเห็น0