AWS มีการพัฒนานวัตกรรมใหม่ๆ เพื่อตอบโจทย์การใช้งานของผู้ใช้อยู่ตลอดเวลา ทั้งในด้านประสิทธิภาพ, ความง่ายในการใช้, feature ที่เพิ่มขึ้น รวมทั้งยังคำนึงถึงเรื่องการลดค่าใช้จ่ายอีกด้วย
ในโพสต์นี้จะอธิบายการเปลี่ยน Amazon RDS Instance type มาใช้ Amazon Graviton2 และมี CloudFormation template สำหรับสร้าง environment เพื่อทดสอบ
Table of Contents
- Amazon RDS คืออะไร
- Amazon Graviton2 คืออะไร
- Amazon RDS type และ version ที่ Support Graviton2
- วิธีการเปลี่ยน Instance type มาเป็น Graviton2
- ทดสอบ Performance
- CloudFormation สำหรับทดสอบ
- บทสรุป
- แหล่งข้อมูลอ้างอิง
Amazon RDS คืออะไร
Amazon Relational Database Service (Amazon RDS) คือบริการฐานข้อมูลเชิงสัมพันธ์ หรือที่คุ้นเคยในชื่อ Relational Database ซึ่งจะเก็บข้อมูลในรูปแบบของ Table มี Row และ Column เป็นส่วนประกอบ โดย Table ในฐานข้อมูลสามารถมีความเชื่อมโยงกันด้วย Primary key, Foreign Key มีการใช้ ACID เพื่อดูแลความถูกต้องของข้อมูล
Amazon RDS เข้ามาช่วยลด effort ในการดูแลจัดการฐานข้อมูล เช่น การ provision, backup, patch, encryption, disaster recovery โดยผู้ใช้สามารถตั้งค่าและ enable feature ต่างๆได้อย่างสะดวก ทำให้ผู้ใช้สามารถมีเวลา focus ในส่วนของการ design, optimize เพื่อตอบโจทย์ธุรกิจมากขึ้น
Amazon RDS ให้บริการฐานข้อมูลด้วยกันทั้งหมด 6 ประเภทคือ
Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle, Microsoft SQL Server
Amazon Graviton2 คืออะไร
Amazon Graviton2 คือ Processor ที่ AWS สร้างขึ้นมาโดยใช้สถาปัตยกรรมแบบ 64-bit Arm Neoverse โดย Amazon Graviton2 ให้ในเรื่องของประสิทธิภาพการทำงานที่ดีขึ้น ในราคาที่ถูกลง
ประเภทของ RDS Instance ที่ใช้ Graviton2 จะมีดังนี้
- t4g : สำหรับ dev/test workload
- m6g : สำหรับ general purpose workload
- r6g : สำหรับ memory optimized workload
ใน Service อื่นๆเช่น EC2, EKS, ECS ก็สามารถสร้าง Instance type ที่เป็น Graviton2 ได้
สามารถดูรายละเอียด instance เพิ่มเติมได้ ที่นี่
Amazon RDS type และ version ที่ Support Graviton2
-
Amazon Aurora
- Aurora (MySQL 5.7) version 2.09.1 and higher
- Aurora PostgreSQL version 11.9 and higher
-
Amazon RDS for MySQL
- MySQL version 8.0.17 and higher
- Amazon RDS for PostgreSQL
- PostgreSQL version 12.5 and higher
-
Amazon RDS for MariaDB
- MariaDB version 10.4.13 and higher
Amazon RDS Graviton2 instance มีหลากหลาย configuration ให้เลือกใช้ตามตารางตัวอย่างด้านล่าง
สามารถตรวจสอบ RDS Instance type ทั้งหมดได้ ที่นี่
วิธีการเปลี่ยน Instance type มาเป็น Graviton2
⚠️ มี Downtime ประมาณ ~10-15 นาที อาจจะมากขึ้นตามขนาดของฐานข้อมูล
-
ใช้ AWS Console
- เปิด RDS service console https://console.aws.amazon.com/rds
- เลือก RDS database ที่ต้องการ และคลิก Modify
- เลือก DB instance Class ที่ต้องการ ในตัวอย่างนี้จะใช้ db.m6g.large
- เลื่อนลงมาด้านล่าง คลิก Continue
- เลือก Apply immediately เพื่อเปลี่ยน RDS instance type ทันที และคลิก Modify DB instance หลังจากนั้น RDS instance จะขึ้น status: Modifying ใช้เวลาประมาณ 10 นาที RDS instance ก็จะเปลี่ยนมาใช้ db.m6g.large ซึ่งเป็น Graviton2 instance type เรียบร้อยแล้ว
-
ใช้ AWS Command Line Interface (CLI)
ก่อนอื่นต้องเตรียม Access key และ Secret key เพื่อเข้าใช้งานและให้สิทธิ์ในการสร้าง RDS instance https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys
ถัดมาก็ติดตั้ง AWS CLI version 2
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.htmlหลังจากที่ Config AWS CLI กับ Notebook หรือ PC แล้วก็สามารถที่จะเปลี่ยน RDS instance type ตาม command ตัวอย่างด้านล่าง ต้องการเปลี่ยน RDS instance : rdsgraviton เป็น db.m6g.large
aws rds modify-db-instance --db-instance-identifier rdsgraviton --db-instance-class db.m6g.large --apply-immediately
ทดสอบ Performance
เราจะใช้ sysbench ซึ่งเป็น benchmark tool ที่ได้รับความนิยม มาทดสอบประสิทธิภาพของ RDS MySQL
ในตัวอย่างนี้จะใช้ Amazon Linux2 bastion host บน EC2 เพื่อติดตั้ง sysbench และ connect ไปที่ RDS
- รัน command นี้บน bastion host เพื่อเตรียม environment สำหรับติดตั้ง sysbench
sudo yum -y install git gcc make automake libtool openssl-devel ncurses-compat-libs wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm sudo yum -y install mysql-community-devel mysql-community-client mysql-community-common
- Clone sysbench git repository และ install
git clone https://github.com/akopytov/sysbench.git cd sysbench sudo ./autogen.sh sudo ./configure sudo make sudo make install
- Check sysbench version
sysbench --version
- สร้าง MySQL database sbtest สำหรับทดสอบ
mysql -u admin -pAWSpassword \ -hrdsgraviton.c2lep43gswjd.ap-southeast-1.rds.amazonaws.com \ -P3306 -e 'create database sbtest;'
- Prepare และรัน sysbench
sysbench oltp_read_write --db-driver=mysql --mysql-user=admin --mysql-password=AWSpassword --mysql-host=rdsgraviton.c2lep43gswjd.ap-southeast-1.rds.amazonaws.com prepare sysbench oltp_read_write --db-driver=mysql --mysql-user=admin --mysql-password=AWSpassword --mysql-host=rdsgraviton.c2lep43gswjd.ap-southeast-1.rds.amazonaws.com run
ภาพด้านล่างคือผลลัพธ์จากการรัน sysbench บน RDS for MySQL db.m5.large
ภาพด้านล่างคือผลลัพธ์จากการรัน sysbench บน RDS for MySQL db.m6g.large
RDS Graviton2 สามารถทำ performance ได้ดีขึ้น ~10% ใน testing environment นี้
ดังนั้นทางผู้ใช้งาน RDS สามารถทดสอบกับ environment dev/test ก่อนที่จะนำไปใช้บน production environmentโดยการเปลี่ยน RDS instance type มาใช้งาน Graviton2 ข้อดีคือ Application ที่ใช้ database อยู่ไม่ต้องมีแก้ไข เพราะ database engine, version ไม่ได้ถูกแก้ ซึ่งจะเปลี่ยนในส่วนของ infrastructure hardware
ทีนี้มาดูในส่วนของ cost กันบ้าง เมื่อเปรียบเทียบกันแล้ว Graviton2 instance type (db.m6g.large) จะถูกกว่า Intel instance type (db.m5.large) อยู่ประมาณ ~10%
ตัวอย่างการคำนวณ cost
https://calculator.aws/#/estimate?id=ed9f868fac8a92e62642455ed394868fecab382f
CloudFormation สำหรับทดสอบ
ถ้าต้องการ deploy environment สำหรับทดสอบสร้าง RDS for MySQL เพื่อลองเปลี่ยน Instance Type และเตรียม EC2 สำหรับเป็น Bastion host
สามารถ deploy CloudFormation ใน Singapore region (ap-southeast-1) ได้เลย
⚠️ cost ของการรัน Resource ทั้งหมดจะประมาณ ~$0.27 ต่อชั่วโมง
รายละเอียดเกี่ยวกับ cost เพิ่มเติม
- EC2 : https://aws.amazon.com/ec2/pricing
- RDS for MySQL : https://aws.amazon.com/rds/mysql/pricing
ขั้นตอนการ Deploy
- Deploy CloudFormation โดยคลิก ที่นี่
- คลิก Next
- ในหน้านี้ สามารถใส่ค่า parameters ได้ดังนี้
- เปลี่ยน Stack name ตามตัวอย่างจะใช้ RDSGraviton2Workshop
- เปลี่ยน Database password ตามตัวอย่างจะใช้ AWSpassword
- เลือก EC2 KeyPair สำหรับ SSH เข้า bastion host
- สำหรับ Network component เช่น VPC, Subnet สามารถตั้งตามค่า Default และคลิก Next
- เลื่อนลงมาด้านล่าง และคลิก Next
- Review CloudFormation และคลิก Next
หลังจากนั้น CloudFormation ก็จะสร้าง resources ต่างๆตาม Architecture Diagram และเมื่อสร้างเสร็จแล้วจะขึ้น status: CREATE_COMPLETE
บทสรุป
จะเห็นได้ว่า RDS Graviton2 instance type ได้เข้ามาช่วยในเรื่องของ performance ที่ดีขึ้น และสามารถลด cost ได้ โดยที่ไม่ต้องมีการแก้ไข Application
ผมแนะนำให้ทำการทดสอบใน dev/test database ก่อนนำไปปรับใช้บน production นะครับ
แหล่งข้อมูลอ้างอิง
หวังว่าโพสต์นี้จะเป็นประโยชน์กับท่านผู้อ่าน เพื่อเป็นแนวทางการใช้งาน Amazon RDS บน Graviton2 instance type กันนะครับ
Top comments (3)
I love the benchmark!!
Better price/performance !!
good article ja