DEV Community

Peerapat A
Peerapat A

Posted on

เราไม่ทิ้งกัน clone v. open source สำหรับงานแบบนี้ในอนาคต

ทีมท่าแซะ ทำงานไม่เป็น ดีแต่ปากดีไปวันๆ ได้ฟังพี่โดม Live สัมภาษณ์หนึ่งในทีมผู้พัฒนาระบบเรื่องกาทำงานของระบบ "เราไม่ทิ้งกัน" เท่าที่จับใจความได้ คือรันบน K8S GCP, ทุก services แบ่งออกมาเป็น microservices ของใครของมัน มีการใช้งาน Redis เป็น Database จากการฟังแล้วก็นึกสนุก อ่ะงั้นเราจะมาลองออกแบบ รวมถึงออกเป็น open source สำหรับใครที่อยากได้ไว้ใช้เลยดีกว่า ว่าแล้วก็เลย draft system architecture คร่าวๆ ไว้ก่อน แต่เพื่อความสบายใจ เลยขอเพิ่มส่วน disk persists ด้วย PostgreSQL DB

Alt Text

ก่อนจะมาถึงส่วนออกแบบกัน เรามาย้อนดู fact กันก่อนคือ high throughput สูงสุดที่ 2M / 10นาที หรือมี traffic สูงสุดที่ 3334 TPS สำหรับงานนี้ หรือเราต้องการระบบที่แต่ละ services สามารถรับโหลดได้สูงสุดที่ 3334 TPS ตั้งแต่ Static html, eConsent, Persist, OTP, Captcha ...

ต้องบอกก่อนว่าระบบนี้น่าจะไม่เหมือนกับตัวจริงที่ทางทีม KTB พัฒนา แต่มันไม่ถือว่าเป็นสาระของการ open source

เริ่มกันเลยดีกว่า ถ้าทุกคนจำได้ว่าระบบนี้เริ่มด้วยการขอ consent ให้เรา accept term ก่อนที่จะเริ่มเข้าไปหน้ากรอกข้อมูล ในส่วนนี้นั้นควรมีการเก็บ cookie_id or something ไว้ก่อนเพื่อให้ธุรกรรมที่เกิดหลังจากนี้ถูกต้องตามหลักการขอ consent ก่อน

POST /econsent/submit
KEY: "random_uuid", VALUE: "7bb376c2b20f44d2b16114e8d0957778"
KEY: "checked", VALUE: true | false
response
HTTP Status : 200, 401

งานควรจะเป็นแค่การเก็บ cookie_id ที่ checked == true ลงใน redis เพื่อให้ transaction หลังจากนี้จะทำงานต่อเฉพาะ cookie_id ที่ได้มีการ accept ไว้เท่านั้น


POST /account/save
KEY: "random_uuid", VALUE: "7bb376c2b20f44d2b16114e8d0957778"
KEY: "citizen_id", VALUE: ""
...
...
KEY: "", VALUE: ""
response
HTTP Status : 200, 401

งานหลักๆ ควรเริ่มด้วยการการ checked ว่า cookie_id เป็น cookie_id ที่ได้ทำการ accpet มาแล้วเท่านั้นซึ่งสามารถเช็กได้โดยการไป get จากใน redis ออกมา


POST /account/info
KEY: "random_uuid", VALUE: "7bb376c2b20f44d2b16114e8d0957778"

HTTP Status : 200, 401 with data

งานหลักๆ ควรเริ่มด้วยการการ checked ว่า cookie_id เป็น cookie_id ที่ได้ทำการ accpet มาแล้วเท่านั้นซึ่งสามารถเช็กได้โดยการไป get จากใน redis ออกมา


POST /captcha/request
KEY: "random_uuid", VALUE: "7bb376c2b20f44d2b16114e8d0957778"
response
HTTP Status : 200, with base64 image

Random Captcha ออกมาเป็น 2 chars, 1 operation เช่น 3 + 1 = _ แล้ว render ออกมาเป็นรูปภาพและเก็บข้อมูลไว้ที่ server


POST /otp/request
KEY: "random_uuid", VALUE: "7bb376c2b20f44d2b16114e8d0957778"
response
HTTP Status : 200, with OTP

Random OTP ออกมาเป็นเลขหกหลักส่งไปหา SMS Provider จากนั้น save OTP คู่กับ cookie_id ลงใน Redis


Initial Repo ไว้ที่ github นะครับ https://github.com/beid-io/oss-registration Sourcecode ทั้งหมดอยู่ภายใต้สัญญาอนุญาติแบบ MIT

ปล.

  • เราทำ captcha ตรงไหนหว่า จำไมไ่ด้ ใครจำได้ comment หน่อยจะได้ออกมาแก้ไข

COPYRIGHT 2020, Peerapat Asoktummarungsri

Top comments (0)