แนวทางการเลือก Amazon RDS for PostgreSQL กับ Amazon Aurora PostgreSQL

Кредитный пост https://aws.amazon.com/blogs/database/is-amazon-rds-for-postgresql-or-amazon-aurora-postgresql-a-better-choice-for-me

ทั้ง Amazon RDS for PostgreSQL กับ Amazon Aurora PostgreSQL ต่างก็เป็น Option ที่ดีทั้งคู่ในการรัน Database workload สำหรับ Modern Application

ซึ่งในโพสต์นี้จะตอบคำถามที่หลายๆท่านสงสัยว่า จะเลือกอะไรดีระหว่าง Amazon RDS for PostgreSQL กับ Amazon Aurora PostgreSQL

ก่อนที่จะไปดูความแตกต่าง เรามาทำความรู้จักกับ Amazon RDS for PostgreSQL และ Aurora PostgreSQL ในภาพรวมกันครับ

Amazon RDS for PostgreSQL และ Aurora PostgreSQL เป็น полностью управляемая база данных PostgreSQL с открытым исходным кодом ซึ่งให้ในเรื่องของความง่ายในการสร้าง, ดูแลจัดการ, การทำ High availability, การ scale ในด้านรองรับ Read-only/Reporting workload, การทำ Auto scaling ในส่วนของ Storage

Amazon RDS for PostgreSQL รองรับ Storage สูงถึง 64 TiB และมีการใช้งาน Amazon Elastic Block Store (Amazon EBS) volume สำหรับเก็บ database และ log file

Amazon Aurora PostgreSQL เป็น Cloud native database พัฒนาโดย AWS ซึ่ง re-design ในส่วนของ Database engine และ Storage และมีการเพิ่มความสามารถเพิ่มเติม เช่น การขยาย Storage ได้สูงถึง 128 TiB, ปรับปรุงเรื่องของ Performance ให้รองรับ Throughput ได้มากขึ้น

RDS PostgreSQL จะมี Основная база данных ที่ AZ1 และถ้าเลือก deployment เป็น Multi-AZ จะมีการสร้าง RDS PostgreSQL secondary database ใน AZ2

Amazon Aurora PostgreSQL ในส่วนที่เป็น Database instance ทั้ง Writer และ Reader จะใช้ Storage ชุดเดียวกัน มีการกระจาย copy ของ data ไปถึง 6 copy กระจายไปทั้ง 3 AZ

โดยยจะแบ่งข้อแตกต่างเป็น 7 ด้านดังนี้

  1. Масштабируемость
  2. Восстановление после сбоев
  3. Отказоустойчивость
  4. Хранение
  5. Высокая доступность и аварийное восстановление
  6. Резервное копирование
  7. Версия PostgreSQL
  8. Дополнительные возможности
  9. Заключение

Масштабируемость

Amazon RDS สามารถลดงานทางด้านการ Read เช่น การอก Report, การ Query data โดยใช้ feature Read replica ซึ่งเป็นการสร้าง Replica database instance เพื่อรองรับงานทางด้าน Read

Amazon RDS รองรับการสร้าง Read replica ถึง 5 replica เมื่อมีการเปลี่ยนแปลงของ data ที่ Primary database ใน Write-ahead log (WAL) ไฟล์ จะส่งไปที่ Read replica แบบ Asynchronous mode

Aurora PostgreSQL รองรับการสร้าง Read replica ได้สูงสุด 15 replica จุดที่แตกต่างกับ Amazon RDS for PostgreSQL คือ Aurora ใช้ Share storage กันทั้งหมด data ทั้งใน Primary database และ Read Replica จะมีการ sync กันตลอดเวลาจะมี данные ที่แตกต่างกันในส่วนของ память เท่านั้น ทำให้เรื่องของ Lag time จะอยู่ในระดับ millisecond หรือในบางเคสที่ Primary database มี Workload activities สูงๆ Lag time อาจจะอยู่ในระดับ 30 วินาที

ข้อสรุปด้าน Scalability
ถ้า Business requirement ที่จำเป็นต้องมี Replication lag time ต่ำๆ หรือต้องการ Read replica มากกกว่า 5 replica, Aurora PostgreSQL จะเป็นตัวเลือกที่ดีกว่า แต่ถ้า Replication lag time สามารถที่จะเป็นระดับวินาที หรือนาที หรือ Read replica 5 replica ก็เพียงพอ, Amazon RDS for PostgreSQL จะตัวเลือกที่ดี

Восстановление после сбоя

เมื่อ Database เกิด crash และต้องการทำ crash recovery, Amazon RDS for PostgreSQL จะมีการ replay transaction log ที่เกิดขึ้น หลัง checkpoint ครั้งล่าสุด ซึ่ง checkpoint คือการ flush ข้อมูลที่มีการเปลี่ยนแปลงของ database block ใน memory และ Write-… опережающий журнал (WAL) จาก память ไปที่ диск
โดย контрольная точка по умолчанию จะเกิดขึ้นทุกๆ 5 นาที, ถ้า checkpoint เกิดบ่อย ก็จะช่วยให้ทำ crash recovery ได้รวดเร็วมากขึ้น

Aurora PostgreSQL จะไม่ได้ทำกระบวนการ checkpoint ใน database node เพราะจะทำใน storage system ซึ่งข้อมูล log records ที่มีการเปลี่ยนแปลงใน database node จะถูกเขียนลง database страницы ใน узлы хранения และ Aurora จะทำ аварийное восстановление เป็นแบบ асинхронный มีการกระจายงานโดยใช้ параллельный поток ทำให้สามารถ запуск базы данных หลังจากเกิด аварийное восстановление ได้อย่างรวดเร็ว

ข้อสรุปด้าน Crash recovery
ถ้า business requirements ต้องการให้สามารถทำ crash recovery อย่างรวดเร็ว Aurora PostgreSQL จะเป็นตัวเลือกที่ดีกว่า แต่ถ้าเรื่อง crash recovery ไม่ใช่ปัจจัยหลัก Amazon RDS for PostgreSQL ก็จะเป็นตัวเลือกที่เหมาะสม

Обход отказа

Amazon RDS for PostgreSQL Multi-AZ deployment รองรับการทำ failover โดยอัตโนมัติ ซึ่ง Application ไม่จำเป็นต้องมีการเปลี่ยนแปลง database endpoint ที่ใช้ connect database โดยทั่วไปจะใช้เวลาประมาณ 60-… 120 วินาที ในการทำ failover

Aurora PostgreSQL จะใช้เวลาในการ failover โดยทั่วไป ประมาณ 30 วินาที ซึ่งประกอบไปด้วยเวลาในการ detect failure ประมาณ 15-20 วินาที เพื่อ confirm node failure, распространение DNS ประมาณ 10-15 วินาที, และใช้เวลาในการ время восстановления ประมาณ 3-10 วินาที

ข้อสรุปด้าน Failover
ถ้า Application ต้องการ failover time น้อยๆ Aurora จะเป็นตัวเลือกที่ดีกว่า แต่ถ้า Application ยอมรับการทำ failover มากกว่า 60 วินาที Amazon RDS for PostgreSQL ก็จะเป็นตัวเลือกที่เหมาะสม

Хранение

Amazon RDS for PostgreSQL จะใช้ Amazon EBS เป็น storage ที่เก็บข้อมูล โดยสามารถเลือกประเภทเป็นแบบ General Purpose SSD และ Provisioned IOPS, SSD общего назначения จะมี baseline 3 IOPS ต่อ provisioned GB และสามารถ burst ได้สูงสุด 3,000 IOPS ต่อ provisioned GB และมี baseline IOPS limit อยู่ที่ 16,000 IOPS
Предоставленные IOPS SSD จะให้ IOPS อยู่ที่ 1,000 — 80,000 IOPS
Amazon RDS for PostgreSQL รองรับการทำ Storage Auto Scaling ซึ่งสามารถขยาย storage ได้ครั้งละ 5 GiB หรือ 10% ของ allocated storage

Aurora PostgreSQL จะใช้ virtual cluster volume โดยใช้ SSD, Aurora Storage รองรับ Auto Scaling และ storage สามารถเพิ่มครั้งละ 10 GiB และ storage มากสูงสุด 128 TiB
ข้อมูลจะมีการกระจาย copy ไปทั้ง 3 Availability Zone ทำให้ได้ benefit ในเรื่องของ high available และ durable
แม้ว่าจะไม่มี IOPS virtual limitation ตาม storage size แต่ก็สามารถ scale up instance เพื่อรองรับ workload ที่ต้องการ IOPS ที่เพิ่มสูงขึ้น
ภาพด้านล่างคือ Aurora PostgreSQL storage architecture

ข้อสรุปด้าน Storage
ถ้า Database workload ต้องใช้ IOPS มากกว่า 80,000 IOPS Aurora PostgreSQL จะเป็นตัวเลือกที่เหมาะสม แต่ถ้าต้องการน้อยกว่า 80, 000 IOPS ก็สามารถเลือกได้ทั้ง Amazon RDS for PostgreSQL หรือ Aurora PostgreSQL

Высокая доступность и аварийное восстановление

Amazon RDS for PostgreSQL รองรับการทำ высокая доступность และ аварийное восстановление (DR) โดยใช้ функция Multi-AZ развертывание, чтение реплик, และ совместное использование снимков ในส่วนของ Multi-AZ จะ репликация данных ไปที่ secondary หรือ standby instance ที่อยู่คนละ AZ เป็นรูปแบบ синхронный режим, Amazon RDS for PostgreSQL รองรับ Read Replica ทั้งใน Region เดียวกัน และต่าง Region (Cross Region)
และยังสามารถ copy และ share Amazon RDS snapshot ไปต่าง AWS account หรือ Region เพื่อจุดประสงค์การทำ DR

Aurora PostgreSQL รองรับ Multi-AZ deployment และจะส่งข้อมูลกันใน 6 storage node ใน cluster volume ทั้ง 3 AZ เป็นแบบ synchronous mode ในระดับ storage level, Aurora replica สามารถจะ promote ขึ้นมาเป็น primary instance ได้ทันที ในกรณีที่มีปัญหา
นอกจากนี้ยังมี feature Amazon Aurora Global Database ที่สามารถทำ cross-region replication โดยที่ใช้ความสามารถของ infrastructure ใน AWS ทำให้สามารถลด replication latency ได้ต่ำกว่า 1 วินาที
ในการ copy และ share Aurora cluster snapshots ไปต่าง AWS account หรือ Region เพื่อจุดประสงค์การทำ DR ก็สามารถทำได้เช่นกัน

ข้อสรุปด้าน Высокая доступность и аварийное восстановление
ถ้า requirement ทางด้าน High availability ต้องมีการทำ Multi-AZ, สามารถยอมรับ cross- время запаздывания репликации ได้ Amazon RDS for PostgreSQL จะตอบโจทย์ แต่ถ้าต้องการ design High availability และต้องการทำ DR решение เพื่อลด Recovery Point Objective (RPO) และ Recovery Time Objective (RTO) Aurora PostgreSQL ก็จะเป็นตัวเลือกที่เหมาะสม

Резервное копирование

Amazon RDS สามารถ enable backup และระหว่างช่วงเวลาการทำ backup อาจจะกระทบในเรื่องของ производительность เล็กน้อย ถ้ามีการสร้าง RDS เป็นแบบ single AZ deployment และ Amazon RDS จะ backup transaction logs (WALs) ด้วย, ในกรณีที่ทำ PITR (Point-in-time recovery) จะมีการ Restore full backup ก่อน และ replay WALs จนถึงเวลาที่ต้องการ recovery, ถ้า RDS for PostgreSQL มี write-intensive workload การ replay transaction logs อาจจะใช้เวลานานขึ้น

Aurora PostgreSQL จะ backup cluster volume และมีการเก็บ retention ไว้ตาม period ที่กำหนด, ในกรณีที่ทำ PITR จะมีการสร้าง copy ของ database cluster ขึ้นมาใหม่จาก backup ดังนั้นจะช่วยให้ improve ในเรื่องของ PITR restore time

ข้อสรุปด้าน Backup
ถ้า requirement ต้องการที่จะลด RPO, RTO และถ้า workload มีความ sensitive เกี่ยวกับ performance ที่ลดลงระหว่างการทำ backup, Aurora PostgreSQL จะเป็นตัวเลือกที่ดีกว่า แต่ถ้าเรื่อง performance ที่ลดลงไม่ใช่ปัจจัยหลัก Amazon RDS for PostgreSQL ก็จะสามารถตอบโจทย์ได้ ซึ่งสามารถที่จะปรับช่วงเวลาที่จะทำการ backup เพื่อหลีกเลี่ยงผลกระทบเรื่อง performance ในช่วง peak hours หรือมีการใช้ Multi- AZ развертывание เพื่อให้ backup จาก standby instance ได้

версия PostgreSQL

ในเรื่องของการอัพเดท version ให้ทันกับ PostgreSQL ตรงจุดนี้ Amazon RDS for PostgreSQL จะมีการอัพเดท version ได้รวดเร็วมากกว่า Aurora PostgreSQL เพราะเป็น PostgreSQL database engine

ข้อสรุปด้าน PostgreSQL version
ถ้า application ต้องการ PostgreSQL version ที่ใหม่ รวมทั้งต้องมีการ update version ให้ทันกับ PostgreSQL version ใหม่ๆที่ออกมา, Amazon RDS for PostgreSQL จะเป็นตัวเลือกที่เหมาะสมกว่า

Дополнительные возможности

AWS ได้มีการพัฒนา features เพิ่มเติม เพื่อให้ Aurora PostgreSQL ตอบโจทย์การใช้งานมากยิ่งขึ้น เช่น fast database cloning, управление планом запросов, управление кэшем кластера, бессерверная และ глобальная база данных

ในส่วนของ database cloning จะช่วยให้สามารถ clone database ใน cluster ได้อย่างรวดเร็วกว่า restore database จาก snapshot ใน RDS for PostgreSQL

Управление планом запросов จะช่วยให้ Aurora PostgreSQL สามารถ control การเปลี่ยนแปลงของ query plan ได้อย่างมีประสิทธิภาพ

Управление кэшем кластера จะช่วย улучшение เรื่องของ производительности ของ writer instance ใหม่ หลังจาก failover เพราะว่าจะมีการทำ replicate кэш ระหว่าง writer instance กับ read replica ที่ต้องการจะ promote ซึ่งใน Amazon RDS for PostgreSQL หลังจากที่มีการทำ failover, буфер базы данных จะต้องมีการสร้างขึ้นมาใหม่จากศูนย์เลย เพราะ база данных จะต้องอ่านข้อมูลจาก disk ก่อน และจะส่งผลต่อ performance

Aurora Serverless คือ database cluster ที่สามารถ starts, scales และ shutdown ได้ตาม application ต้องการ, เหมาะกับ Application ที่ยังไม่มี pattern ที่แน่นอนในการใช้

Aurora Global Database คือ Aurora database ที่มีการกระจายตัวไปหลายๆ region เพื่องานด้านการ read ที่สามารถทำได้อย่างรวดเร็วในแต่ละ регион และลด latency ให้น้อยมากกกว่า 1 วินาที ซึ่งถ้าเป็น Amazon RDS for PostgreSQL จะรองรับ cross-… региональная репликация แต่จะมี задержка репликации มากกว่า

особенность ต่างๆเหล่านี้สามารถรองรับ требование ของ приложение ได้หลากหลาย และยังเพิ่มในเรื่องของ performance ให้ดีขึ้น

Заключение

Amazon RDS for PostgreSQL เป็นตัวเลือกที่เหมาะสมกับ workload ที่มีขนาด small-medium-large แต่ถ้าต้องการ feature เพิ่มเติมที่ช่วยตอบโจทย์ในแง่ของ performance และการใช้งาน feature เพิ่มเติม, Aurora PostgreSQL ก็เป็นอีกหนึ่งตัวเลือกที่สามารถพิจารณาเพื่อใช้งานครับ

สำหรับข้อมูลเพิ่มเติมในการ migrate จาก Amazon RDS for PostgreSQL หรือ Aurora PostgreSQL สามารถศึกษาเพิ่มเติมตามรายละเอียดด้านล่างครับ

  • Перенос локальной базы данных PostgreSQL на Amazon RDS for PostgreSQL
  • Перенос данных на Amazon Aurora с совместимостью с PostgreSQL

หวังว่าโพสต์นี้จะเป็นประโยชน์กับท่านผู้อ่าน เพื่อเป็นแนวทางในการเลือกระหว่าง Amazon RDS for PostgreSQL และ Amazon Aurora PostgreSQL กันนะครับ

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *