PixWave
PixWave เป็นไมโครเซอร์วิสกระเป๋าสตางค์ดิจิทัลที่ปรับขนาดได้และมีประสิทธิภาพสูง ออกแบบมาเพื่อจัดการการชำระเงินแบบเรียลไทม์ผ่าน PIX โดยใช้ สถาปัตยกรรมหลายเกตเวย์ ระบบรวมเกตเวย์การชำระเงินหลายช่องทาง รวมถึง Mercado Pago และ Gerencianet เพื่อให้มั่นใจถึงความน่าเชื่อถือและความสามารถในการสำรองที่ราบรื่น ด้วยการเลือกเกตเวย์ที่มีอยู่มากที่สุดแบบไดนามิกในช่วงเวลาใดก็ตาม PixWave ช่วยลดเวลาหยุดทำงานและรับประกันการประมวลผลการชำระเงินอย่างต่อเนื่อง
สถาปัตยกรรมถูกสร้างขึ้นเพื่อให้ มีความยืดหยุ่น เป็นโมดูล และปรับขนาดได้ โดยใช้ Docker สำหรับคอนเทนเนอร์, Kubernetes สำหรับการจัดการ, Redis สำหรับแคช, SNS สำหรับการส่งข้อความแบบอะซิงโครนัส และ สแต็ก ELK (Logstash, Elasticsearch, Kibana) สำหรับการบันทึกแบบรวมศูนย์และการตรวจสอบแบบเรียลไทม์ ของประสิทธิภาพของระบบ
คุณสมบัติที่สำคัญ
- สถาปัตยกรรมหลายเกตเวย์ พร้อมการเลือกเกตเวย์แบบเรียลไทม์และทางเลือกสำรองอัตโนมัติ
- การประมวลผลงานแบบอะซิงโครนัส พร้อมกลไกการลองใหม่อีกครั้งสำหรับการจัดการธุรกรรมที่ล้มเหลวและงานที่ใช้เวลานาน
- การบันทึกแบบรวมศูนย์และการตรวจสอบแบบเรียลไทม์ โดยใช้ สแต็ก ELK (Elasticsearch, Logstash, Kibana)
- ความสามารถในการปรับขนาดและความยืดหยุ่น ที่ขับเคลื่อนโดย Docker และ Kubernetes ทำให้มั่นใจได้ว่าระบบสามารถรองรับโหลดสูงและยังคงทำงานได้ภายใต้ความเครียด
สถาปัตยกรรมระบบ
1. สถาปัตยกรรมที่ใช้ไมโครเซอร์วิส
PixWave ดำเนินตาม สถาปัตยกรรมไมโครเซอร์วิส โดยที่องค์ประกอบหลัก เช่น การประมวลผลการชำระเงิน การจัดการผู้ใช้ และการตรวจสอบธุรกรรม ถูกแยกออกเป็นบริการอิสระ การออกแบบนี้ช่วยให้สามารถปรับขนาดบริการแต่ละรายการได้อย่างอิสระและดูแลรักษาได้โดยไม่ส่งผลกระทบต่อระบบทั้งหมด
- Laravel ถูกใช้เป็นเฟรมเวิร์กแบ็กเอนด์เพื่อจัดการธุรกรรมการชำระเงิน การโต้ตอบของผู้ใช้ และคำขอ API
- Docker รวบรวมบริการแต่ละรายการ เพื่อให้มั่นใจถึงความสอดคล้องในสภาพแวดล้อมการพัฒนา การทดสอบ และการใช้งานจริง
- Kubernetes จัดเตรียมการปรับใช้และการจัดการคอนเทนเนอร์เหล่านี้ โดยให้ฟีเจอร์ต่างๆ เช่น การปรับขนาดอัตโนมัติ การซ่อมแซมตัวเอง และการปรับสมดุลโหลด
2. การประมวลผลการชำระเงิน
แกนหลักของ PixWave คือโมดูลประมวลผลการชำระเงิน ซึ่งออกแบบมาเพื่อจัดการธุรกรรม PIX แบบเรียลไทม์ที่มีความพร้อมใช้งานสูงและทนทานต่อข้อผิดพลาด ระบบรวมเกตเวย์การชำระเงินหลักสองรายการ: Mercado Pago และ Gerencianet และใช้กลไกการเลือกเกตเวย์อัจฉริยะ
2.1. ระบบหลายเกตเวย์พร้อมทางเลือก
- ครั้งแรกระบบจะพยายามประมวลผลการชำระเงินผ่านเกตเวย์หลัก (Mercado Pago หรือ Gerencianet)
- Redis จัดเก็บสถานะความพร้อมใช้งานของแต่ละเกตเวย์ ช่วยให้ดึงข้อมูลและตัดสินใจได้อย่างรวดเร็ว
- หากเกตเวย์หลักไม่พร้อมใช้งาน ระบบจะสลับไปที่เกตเวย์สำรองทันที เพื่อให้มั่นใจว่าการประมวลผลการชำระเงินจะต่อเนื่องโดยมีเวลาหยุดทำงานน้อยที่สุด
2.2. การจัดการธุรกรรม
- ธุรกรรมทั้งหมดได้รับการบันทึกไว้ใน MySQL รวมถึงรายละเอียดต่างๆ เช่น จำนวนธุรกรรม, ID ผู้ใช้, เกตเวย์ที่ใช้, สถานะ (สำเร็จ, ล้มเหลว หรือรอดำเนินการ) และการประทับเวลา
- การจัดการสถานะตาม Enum จะกำหนดสถานะธุรกรรมข้ามเกตเวย์ต่างๆ ให้เป็นมาตรฐานเพื่อความสอดคล้องในฐานข้อมูล
- คิวงาน จัดการการประมวลผลการชำระเงินแบบอะซิงโครนัส ทำให้ผู้ใช้สามารถเริ่มการชำระเงินได้โดยไม่ต้องรอให้กระบวนการทั้งหมดเสร็จสิ้น
3. กลไกงานและลองใหม่
ระบบงาน ใน PixWave มีความสำคัญอย่างยิ่งต่อการจัดการงานต่างๆ เช่น การประมวลผลการชำระเงินและการลองใหม่ ด้วยการจัดส่งงานสำหรับการร้องขอการชำระเงินแบบอะซิงโครนัส PixWave มอบประสบการณ์ที่ไม่มีการปิดกั้นสำหรับผู้ใช้ และเพิ่มการตอบสนองของระบบโดยรวม
3.1. การจัดการงาน
- เมื่อมีการร้องขอการชำระเงิน งาน จะถูกส่งไปเพื่อประมวลผลธุรกรรมแบบอะซิงโครนัส โดยติดต่อเกตเวย์การชำระเงินที่เกี่ยวข้องเพื่อส่งธุรกรรมและรับผลลัพธ์
- งานได้รับการประมวลผลแบบคู่ขนาน ทำให้มั่นใจได้ถึงการจัดการการชำระเงินจำนวนมากอย่างมีประสิทธิภาพ
3.2. กลไกการลองอีกครั้ง
- หากความพยายามในการชำระเงินล้มเหลวเนื่องจากปัญหาเกตเวย์ ระบบจะพยายามอีกครั้งสูงสุด 3 ครั้ง ก่อนที่จะทำเครื่องหมายธุรกรรมว่าล้มเหลว
- หลังจากลองใหม่ทั้งหมดแล้ว ระบบจะสลับไปที่เกตเวย์สำรองและลองชำระเงินอีกครั้ง
- หากทางเลือกสำรองล้มเหลว ธุรกรรมจะถูกบันทึกว่าล้มเหลว และอาจส่งการแจ้งเตือนผ่าน SNS เพื่อตรวจสอบเพิ่มเติม
4. การแคชด้วย Redis
PixWave ใช้ Redis สำหรับการแคชเพื่อเพิ่มประสิทธิภาพและลดภาระในฐานข้อมูลหลัก
- ความพร้อมใช้งานของเกตเวย์ : แคชไว้ใน Redis ช่วยให้ระบบระบุเกตเวย์การชำระเงินที่จะใช้ได้อย่างรวดเร็วโดยไม่ต้องทำการเรียก API ซ้ำซ้อน
- การค้นหาธุรกรรม : ธุรกรรมที่ประมวลผลล่าสุดจะถูกแคช ช่วยให้สามารถค้นหาได้อย่างรวดเร็วและลดการสืบค้นที่ไม่จำเป็นไปยังฐานข้อมูล MySQL
5. การบันทึกและการตรวจสอบจากส่วนกลาง
Logstash และ Elasticsearch ใช้เพื่อจัดการการบันทึกแบบรวมศูนย์ โดยให้ข้อมูลเชิงลึกแบบเรียลไทม์เกี่ยวกับเหตุการณ์ของระบบ ข้อผิดพลาด และตัววัดประสิทธิภาพ
- Logstash รวบรวมบันทึกจากบริการทั้งหมด (Laravel คิวงาน เกตเวย์การชำระเงิน) และส่งไปที่ Elasticsearch เพื่อทำดัชนี
- Elasticsearch เปิดใช้งานการสืบค้นที่มีประสิทธิภาพสำหรับการตรวจสอบสภาพระบบและการแก้ไขปัญหา
- Kibana นำเสนอแดชบอร์ดแบบกราฟิกสำหรับการสำรวจบันทึก การติดตามข้อผิดพลาด และการแสดงภาพประสิทธิภาพของระบบ
6. คิวข้อความและการแจ้งเตือนแบบอะซิงโครนัส
PixWave ใช้ SNS (Simple Notification Service) สำหรับการส่งข้อความระหว่างไมโครเซอร์วิสและการส่งการแจ้งเตือนไปยังระบบภายนอก
- เมื่อประมวลผลธุรกรรม การแจ้งเตือนจะถูกส่งไปยังระบบภายนอก (เช่น แอพผู้ใช้หรือบริการของบุคคลที่สาม) ผ่านทาง SNS ทำให้มั่นใจได้ว่าระบบยังคงตอบสนองแม้ภายใต้ปริมาณการใช้งานสูง
- การส่งข้อความภายในระหว่างส่วนประกอบต่างๆ ของระบบได้รับการจัดการผ่าน SQL และ SNS เพื่อให้มั่นใจว่าการสื่อสารแบบแยกส่วนระหว่างบริการต่างๆ
คำแนะนำในการติดตั้ง
1. โคลนพื้นที่เก็บข้อมูล
ในการเริ่มต้น ให้โคลนพื้นที่เก็บข้อมูล PixWave ไปยังเครื่องของคุณ:
git clone https://github.com/your-repository/pixwave.git
cd pixwave
2. ตั้งค่าตัวแปรสภาพแวดล้อม
คัดลอกไฟล์ .env.example
ไปที่ .env
และกำหนดค่าตัวแปรสภาพแวดล้อมของคุณ ตัวแปรเหล่านี้ประกอบด้วยข้อมูลรับรองฐานข้อมูล ข้อมูลรับรองเกตเวย์การชำระเงิน (Mercado Pago และ Gerencianet) และคีย์ API สำหรับบริการอื่นๆ:
อัปเดตค่าต่อไปนี้ในไฟล์ .env
:
-
DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
– การตั้งค่าฐานข้อมูล MySQL -
MERCADOPAGO_ACCESS_TOKEN
– โทเค็นการเข้าถึง Mercado Pago -
GERENCIANET_CLIENT_ID
, GERENCIANET_CLIENT_SECRET
, GERENCIANET_PIX_KEY
– ข้อมูลรับรอง Gerencianet API -
SNS_API_KEY
– คีย์ SNS API ของคุณสำหรับการแจ้งเตือน -
LOGSTASH_HOST
– โฮสต์สำหรับบริการ Logstash (สำหรับการบันทึกแบบรวมศูนย์)
3. ติดตั้งการพึ่งพา
รันคำสั่งต่อไปนี้เพื่อติดตั้งการขึ้นต่อกันที่จำเป็นทั้งหมด:
4. ตั้งค่านักเทียบท่า
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Docker บนเครื่องของคุณแล้ว จากนั้นใช้ Docker Compose เพื่อสร้างและรันคอนเทนเนอร์ที่จำเป็น:
docker-compose up --build
คำสั่งนี้จะเริ่มบริการต่อไปนี้:
- แอป Laravel (แบ็กเอนด์ PHP)
- MySQL (ฐานข้อมูลเชิงสัมพันธ์)
- เรดิส (แคช)
- Elasticsearch & Logstash (การบันทึกแบบรวมศูนย์)
- Kibana (อินเทอร์เฟซการวิเคราะห์บันทึก)
5. เรียกใช้การย้ายข้อมูลและ Seeders
หลังจากที่คอนเทนเนอร์เริ่มทำงานแล้ว ให้ดำเนินการย้ายข้อมูลเพื่อตั้งค่าสคีมาฐานข้อมูลและเริ่มต้นข้อมูลบางส่วน:
docker exec -it laravel_app php artisan migrate --seed
6. สร้างรหัสแอปพลิเคชัน
สร้างคีย์เข้ารหัสแอปพลิเคชันซึ่ง Laravel ใช้สำหรับการเข้ารหัสที่ปลอดภัย:
docker exec -it laravel_app php artisan key:generate
7. เรียกใช้แอปพลิเคชัน
เมื่อตั้งค่าทุกอย่างเรียบร้อยแล้ว คุณสามารถเข้าถึงแอปพลิเคชันได้แล้ว ตามค่าเริ่มต้น แอปพลิเคชันจะพร้อมใช้งานที่ http://localhost
:
ไปที่ http://localhost
ในเบราว์เซอร์ของคุณเพื่อโต้ตอบกับระบบ PixWave
การทดสอบการทำงาน
PixWave มีชุดทดสอบที่ครอบคลุม หากต้องการรันการทดสอบ ตรวจสอบให้แน่ใจว่าคุณอยู่ภายในคอนเทนเนอร์ Docker หรือมีการตั้งค่าสภาพแวดล้อมในเครื่อง รันคำสั่งต่อไปนี้:
docker exec -it laravel_app php artisan test
ซึ่งจะดำเนินการทดสอบหน่วยและฟีเจอร์เพื่อให้แน่ใจว่าระบบการชำระเงินทำงานได้ รวมถึงการประมวลผลงาน เกตเวย์สำรอง และการจัดการประวัติการทำธุรกรรม
การแก้ไขปัญหา
ความขัดแย้งของพอร์ต : หากคุณพบความขัดแย้งของพอร์ต (เช่น Redis หรือ MySQL ทำงานอยู่แล้วบนระบบของคุณ) ให้อัปเดตไฟล์ docker-compose.yml
เพื่อเปลี่ยนการแมปพอร์ตเริ่มต้น
ข้อผิดพลาดในการอนุญาต : หากปัญหาการอนุญาตเกิดขึ้นเมื่อพยายามเขียนลงในบันทึกหรือที่เก็บข้อมูล ตรวจสอบให้แน่ใจว่าไดเร็กทอรี storage/
และ bootstrap/cache/
สามารถเขียนได้โดยการรัน:
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache
การรีสตาร์ทคอนเทนเนอร์ : หากคอนเทนเนอร์รีสตาร์ทหรือไม่สามารถทำงานได้ ให้ตรวจสอบบันทึกเพื่อดูข้อความแสดงข้อผิดพลาดโดยละเอียด:
เทคโนโลยีที่ใช้
1. กรอบการทำงานแบ็กเอนด์
- Laravel : ใช้เพื่อพัฒนาตรรกะการประมวลผลการชำระเงินหลักและการโต้ตอบกับ API
2. ฐานข้อมูล
- MySQL : ฐานข้อมูลเชิงสัมพันธ์สำหรับจัดเก็บรายละเอียดธุรกรรม ข้อมูลผู้ใช้ และข้อมูลเกตเวย์
3. แคช
- Redis : เลเยอร์แคชสำหรับการปรับเวลาตอบสนองให้เหมาะสมและลดภาระในฐานข้อมูลหลัก
4. การส่งข้อความ
- SNS (บริการแจ้งเตือนแบบง่าย) : ใช้สำหรับส่งการแจ้งเตือนแบบอะซิงโครนัสและการส่งข้อความภายในระหว่างบริการ
5. คิวงาน
- งาน Laravel : จัดการการประมวลผลงานเบื้องหลัง รวมถึงธุรกรรมการชำระเงินและการลองใหม่
- การบรรจุและการประสาน
- นักเทียบท่า : รับประกันความสอดคล้องในสภาพแวดล้อมโดยการบรรจุแอปพลิเคชัน
- Kubernetes : จัดการการจัดการคอนเทนเนอร์ การปรับขนาด และการตรวจสอบสภาพสำหรับบริการ
7. การบันทึกและการตรวจสอบ
- Logstash & Elasticsearch : รวบรวมและจัดทำดัชนีบันทึกสำหรับการตรวจสอบและวิเคราะห์แบบเรียลไทม์
- Kibana : มอบอินเทอร์เฟซแบบภาพสำหรับการสำรวจบันทึกและติดตามประสิทธิภาพของระบบ