วันจันทร์, เมษายน 19

อยากทำเว็บสำหรับเทรดคริปโต…ต้องรู้อะไรบ้าง

ในปัจจุบัน มีหลายๆ เว็บไซต์ที่เป็นเว็บสำหรับเทรดเหรียญคริปโตหรือ cryptocurrency exchange เกิดขึ้นมามากมาย ยกตัวอย่างจำนวนมาจากเว็บไซต์ CoinMarketCap ก็ปาเข้าไปเกือบ 300 เว็บ (แบบ spot นะครับ ถ้ารวมทุกแบบก็สามหมื่นกว่าเว็บได้ อ้างอิงจาก https://coinmarketcap.com/rankings/exchanges/)  แต่ก็ยังมีอีกหลายคนอยากทำบ้างทั้งทำเล่นๆ หรือทำจริงๆ วันนี้ผมก็เลยอยากมาเล่ามาเเชร์ไอเดียคร่าวๆ ว่า ถ้าอยากจะทำ exchange เองบ้างเนี่ยน่าจะต้องรู้อะไรบ้าง

ก่อนอื่นเลย..เราจะทำเป็บเว็บเน๊อะ เราก็ควรต้องรู้จักเทคโนโลยีเพื่อการ develop web application ซึ่งปัจจุบันเองการทำ webapp แบบนี้ก็นิยมทำแยกให้ส่วนที่จะแสดงผลบน web browser หรือที่เรียกว่า frontend กับส่วนที่คอยรับคำสั่งไปทำงานไปคำนวนตามกฏที่วางไว้หรือที่เรียกว่า backend แยกออกจากกัน เพื่อให้ระบบมีประสิทธิภาพมากขึ้น

โดยที่ส่วนใหญ่แล้วนั้น เทคโนโลยีที่นิยมใช้ทำ frontend ก็มักจะใช้ framework ตระกูลภาษา Javascript ทำกันเช่นพวก Angular ReactJS VueJS หรืออื่นๆ อีกมากมาย หรือจะไปใช้ .net Java หรือ php ก็ได้ตามแต่ถนัดครับ ไม่เพียงแค่นั้น ก็ควรต้องไปรู้จักพวก CSS framework เพื่อทำในส่วนหน้าตา เช่น Bootstarp Tailwind Bulma เป็นต้น เป้าหมายในส่วน frontend นั้นก็จะสร้างออกมาเพื่อให้เซ้บเราสวยงามและใช้งานง่ายเป็นหลักครับ

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

ก่อนอื่นเลยนะครับ ในส่วน backend นั้น มันคือส่วนที่จะคอยทำงานต่างๆ ทั้งรับส่งข้อมูลให้ frontend หรือคำนวนเงินคำนวนค่าต่างๆ หรือรับเงินส่งเงินจากภายนอก  ในปัจจุบันก็มีเทคนิคที่นิยมทำกัน หรือพูดให้ถูกก็คือสถาปัตยกรรมที่นิยมออกแบบกันนี่ ส่วนใหญ่จะใช้แบบ micro services ครับ กล่าวคือออกแบบให้ระบบหรือ service  1 service ทำงานแค่สิ่งที่ตัวเองต้องรับผิดชอบ เพื่อให้เราสามารถ scale ได้เป็นเรื่องๆ ไป หากมีการใช้งานที่สูงขึ้น เช่นเว็บเทรดเราอยู่คนแห่มาเทรด เราก็จะเพิ่มแค่ service ส่วนรับคำสั่งซื้อขายมาเพื่อให้เพียงพอต่อปริมาณคำสั่งที่เข้ามา แต่ส่วนระบบ support คนอาจจะไม่ค่อยได้ใช้ ก็จะได้ไม่ต้องไปยุ่งกับมัน โดยผมจะขอยกมาคร่าวๆ ในบริบทของเว็บ exchange เรานี้นะครับ

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

อันดับต่อมา sevice ที่น่าจะต้องมีที่เป็นหัวใจของ exchange คือส่วนของคอยรับ order ของการซื้อขาย ส่วนนี้อาจะแยกส่วนที่รับ order เหล่านั้นมาแล้วคำนวนเปรียบเทียบกันก็ได้ว่าใครควรได้ match กับใคร แล้วจากนั้นจึงไปบันทึกว่านายคนนี้จับคู่กับนายคนนี้แล้วกี่เหรียญที่ราคาเท่าไหร่

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

ในส่วนของเหรียญคริปโตนั้น อันนี้ผมจะขอแยกเป็น 2 ส่วนคือส่วนจัดการ blockchain กับส่วนจัดการ wallet  ซึ่งในส่วนของการจัดการ blockchain นี่ ที่เราต้องมีเพราะว่าแต่ละเหรียญเองก็จะมีการต้องติดตั้ง node เช่น Bitcoin เราก็ต้องไปหา software สำหรับขึ้น blockchain วง Bitcoin มาตั้ง หรือ Ethereum ก็ต้องไปหา client เช่น software ที่ชื่อ Geth หรือ Parity เป็นต้น ซึ่งแต่ละ blockchain ก็จะลักษณะและวิธีการติดตั้งแตกต่างกันไป และในส่วนของการจัดการ wallet นั้น มีเพื่อให้เราสามารถส่งคำสั่งไปยัง node blockchain ที่เราตั้งขึ้นมา

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

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

สิ่งถัดมาที่ต้องรู้จักคือฐานข้อมูลครับ ฐานข้อมูลหรือ database นั้นปัจจุบันมีมากมายหลายยี่ห้อมาก แต่ละยี่ห้อก็มีความเก่งไปคนละแบบ แต่ที่เราต้องรู้เลยนั้นคือชนิดของมัน โดยพื้นฐานนั้นที่ต้องมีเลยคือ database แบบ rational database หรือเอาง่ายๆ ก็ database ที่ใช้ภาษา SQL ในการทำงาน เช่น MySQL Oracle PostgreSQL ซึ่งพวกนี้จะเก่งในการเก็บข้อมูลที่มันสัมพันธ์กัน เช่น ผู้ใช้คนนี้ มี order อะไรบ้างและ order เคยไป match กับใครบ้าง แต่ข้อเสียของ database พวกนี้คือทำงานช้าครับ ไม่ทันใจ ครั้นจะต้องเรียกข้อมูลออกมาทุกอิริยาบทขณะเรากำลังใช้งาน ก็คงทำให้ database ตายได้ ดังนั้นอะไรที่เราต้องการเรียกใช้ถี่ๆ ควรหันไปใช้พวกที่เก็บข้อมูลบน Ram เช่น Redis โดยเอาไว้เก็บพวก Session หรือข้อมูลคำสั่งเพื่อให้ frontend เรียกเอาไปแสดงบน browser 

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

ถัดมาการจัดการ sourcecode ที่เราเขียนมา จะเอาไป deploy เอง ถ้าระบบเราเล็กๆ ทำคนเดียว จะรันคำสั่งไป deploy ก็คงไม่ยากมากนัก แต่ระบบ exchange เรานี้ component ต่างๆเยอะ และคงทำหลายทีม ถ้าจะให้การขึ้นระบบมีประสิทธิภาพและมีการจัดการ sourcecode  ที่ดี ควรใช้พวก soucecode repository เข้ามาช่วย เช่น Github หรือ Gitlab ครับ ซึ่งพวกนี้นอกจากจะช่วยเราเก็บ sourcecode และจัดการรวม code กันที่เราเขียนๆมา ยังมีส่วนที่เรียกว่า CI/CD ที่ช่วยเรื่องการ deploy ระบบแบบอัตโนมัติด้วยครับ เพื่อให้เราไม่ต้องไปพิมพ์คำสั่งเองทุกรอบเมื่อเราต้องการจะ deploy แต่ สำหรับส่วนที่ทำเฉพาะการ CI/CD เลยนั้น ที่นิยมใช้กันจะใช้ Jenkins กัน

สุดท้ายแล้ว เพื่อให้บริการระบบของเรา เราควรต้องไปรู้จัก cloud service ต่างๆ เช่นตัวที่จะใช้ run พวก micro service ที่นิยมๆก็พวก AmazonAWS Google Azure  หรือ Digital ocean ซึ่งเจ้าเหล่านี้ก็มีบริการที่ชอบเรา deploy ของต่างๆ ที่เล่ามาข้างต้นแทบจะทุกอย่างแล้ว ขอแค่มีเงินเท่านั้นครับ และส่วนที่ไว้เป็ด่านหน้าของเว็บเรา เพื่อช่วยจัดการการเข้าถึงและจัดการด้านความปลอดภัย ที่นิยมๆ ก็ Cloudflare ครับ 

ทั้งหมดทั้งมวลที่ผมเล่ามานี้ เป็นแค่ concept คร่าวๆ นะครับ ในแต่ละเรื่องก็มีรายละเอียดลึกลงไปอีก รวมถึงชื่อ tool หรือ software ต่างๆ ที่ยกขึ้นมานี้ ก็ยังมีตัวอื่นให้เลือกใช้อีก โดยสามารถเอาชื่อที่ผมยกมา ต่อด้วย คำว่า alternative ก็จะมีเว็บที่เค้ารวมๆอยู่ครับ

สำหรับเรื่องเล่านี้ผมก็ขอจบเท่านี้ครับ ลองไปศึกษาไปหัดทำเล่นๆกันดูครับ ขอบคุณครับ…