Amazon Kinesis membantu menskalakan model bisnis online – Kinesis memproses aliran data dalam berbagai ukuran dan meningkatkan dan menurunkan skala sesuai kebutuhan.

Pemrosesan aliran data besar secara real-time

Dalam beberapa kasus penggunaan, data datang secara terus menerus, 24 jam sehari, 7 hari seminggu. Anda sering kali ingin memproses aliran data tersebut dengan segera dan memperoleh informasi darinya secepat mungkin, jika memungkinkan dalam hitungan detik. Terkadang kecepatan data atau daya komputasi yang diperlukan bervariasi sepuluh pangkat dari waktu ke waktu. Pemrosesan batch tradisional tidak cukup untuk kasus penggunaan seperti itu.

Amazon Kinesis adalah layanan terkelola untuk pemrosesan aliran data besar secara real-time. Kinesis dapat memproses aliran data besar secara sewenang-wenang dari berbagai sumber, meningkatkan dan menurunkan skala sesuai kebutuhan.

Kasus penggunaan umum untuk Kinesis mencakup pemrosesan file log secara real-time, analisis data keuangan seperti harga saham, postingan media sosial, atau analisis data dalam game online, tetapi juga pemrosesan data sensor dan mesin.

Mari kita lihat detailnya:

Konsep penting

Sebuah aplikasi dapat membuat sejumlah aliran Kinesis untuk pengambilan, penyimpanan, dan distribusi data yang andal. Streaming tidak memiliki batas kapasitas atau kecepatan data yang melekat. Semua data masuk didistribusikan ke tiga AWS Availability Zone untuk alasan ketersediaan tinggi. Setiap aliran dapat memiliki banyak pembaca dan penulis.

Saat Anda membuat aliran, Anda menentukan kapasitas yang diinginkan sebagai pecahan. Setiap pecahan dapat menangani hingga 1000 transaksi tulis per detik (hingga 1 megabita per detik) dan hingga 20 transaksi baca per detik (hingga 2 megabita per detik). Anda dapat menambah atau menghapus shard kapan saja, sehingga melakukan penskalaan tanpa waktu henti dan tanpa memengaruhi throughput (selama ada cukup shard untuk dimuat). Biayanya tergantung pada jumlah pecahan.

Perpustakaan Klien Kinesis adalah bagian penting dari aplikasi Anda. Perpustakaan mengabstraksi rincian penyeimbangan beban, koordinasi, dan penanganan kesalahan. Pustaka klien melakukan sebagian besar pekerjaan, aplikasi hanya perlu mendapatkan data dan memprosesnya.

Aplikasi membaca dan menulis catatan data ke aliran. Catatan dapat berukuran hingga 50 kilobyte dan terdiri dari kunci partisi dan blob data, keduanya diperlakukan sebagai urutan byte yang tidak dapat diubah. Kunci partisi rekaman digunakan untuk memilih pecahan yang blob datanya tidak dianalisis atau diproses lebih lanjut. Nomor urut ditetapkan ke setiap rekaman saat ditulis ke aliran. Catatan secara otomatis dibuang setelah 24 jam.

Model Pemrosesan Kinesis

“Sisi produsen” aplikasi menggunakan TaruhRekam Berfungsi untuk menyimpan data dalam aliran. Ini memerlukan nama aliran, kunci partisi, dan blob data. Fungsi hash MD5 diterapkan ke kunci partisi, nilai 128-bit yang dihasilkan digunakan untuk memilih pecahan di aliran.

“Sisi konsumen” aplikasi membaca data secara berurutan dalam sebuah pecahan. Ini adalah proses dua langkah. Pertama, aplikasi menggunakan GetShardIterator untuk mengatur posisi di beling tempat pembacaan harus dimulai. Untuk menentukan tempat membaca, GetShardIterator memiliki opsi berikut:

AT_SEQUENCE_NUMBER untuk memulai pada nomor baris tertentu

AFTER_SEQUENCE_NUMBER untuk memulai setelah nomor baris tertentu

TRIM_HORIZON untuk memulai dengan catatan tersimpan terlama

TERBARU untuk membaca catatan baru saat mereka tiba

Selanjutnya gunakan aplikasi tersebut Dapatkan Catatan Berikutnya untuk membaca hingga 2 megabita data per detik dari ShardIterator. Cara termudah adalah dengan menggunakan GetNextRecords dalam loop yang berulang kali memanggil GetNextRecords untuk membaca semua data yang tersedia di shard. Antarmuka ini mewakili antarmuka tingkat rendah Kami berharap sebagian besar aplikasi akan menggunakan antarmuka tingkat lebih tinggi yang disediakan oleh Perpustakaan Klien Kinesis.

Perpustakaan Klien menangani banyak detail seperti failover, pemulihan, dan penyeimbangan beban. Pengembang hanya menyediakan implementasi Prosesor Rekaman Antarmuka sudah siap, perpustakaan klien kemudian meneruskan catatan baru ke antarmuka ini ketika tersedia. Ini adalah cara termudah untuk menggunakan Kinesis.

Setelah catatan diproses, kode konsumen dapat meneruskannya ke aliran Kinesis lain, menyimpannya di bucket Amazon S3, tabel Redshift, atau tabel DynamoDB, atau membuangnya begitu saja.

Penskalaan dan pemisahan

Mereka bertanggung jawab atas dua aspek skalabilitas yang berbeda: pemrosesan dan pemisahan. Anda harus memastikan bahwa Anda menyediakan kapasitas pemrosesan yang memadai untuk memproses semua catatan masuk secara tepat waktu dan Anda harus mengelola jumlah pecahan.

Mari kita mulai dengan kapasitas pemrosesan. Cara termudah untuk menangani hal ini adalah dengan menggunakan perpustakaan klien Kinesis dan menerapkan aplikasi pemrosesan ke instans Amazon EC2 yang berjalan di a Penskalaan otomatis Kelompok. Dengan mengatur ukuran minimum Grup Auto Scaling ke 1, kesalahan instans ditangani secara otomatis. Anda harus mengatur ukuran maksimum ke kapasitas yang cukup sehingga memberi Anda kapasitas yang cukup untuk penskalaan. Jika pemrosesan Anda membutuhkan banyak CPU, gunakan metrik CPU CloudWatch untuk penskalaan. Jika pemrosesan memerlukan CPU yang relatif sedikit, penskalaan berdasarkan beban jaringan mungkin akan lebih efisien.

Sekarang untuk pemisahan. Anda harus membuat aliran dengan pecahan yang cukup untuk kecepatan data yang diharapkan. Jika kecepatan data berubah, Anda dapat menambah atau menghapus pecahan. Panggilan API untuk ini adalah SplitShard Dan Gabungkan Pecahan. Untuk menggunakan panggilan ini, Anda perlu memahami cara kerja kunci partisi.

Seperti yang saya sebutkan, fungsi hash MD5 diterapkan pada kunci partisi, menghasilkan nilai antara 0 dan 2127-1. Setiap aliran membagi interval ini menjadi satu atau lebih urutan berdekatan yang ditetapkan ke masing-masing pecahan.

Dalam kasus paling sederhana, aliran hanya memiliki satu pecahan. Kemudian seluruh rentang nilai ditetapkan ke satu pecahan. Jika lebih banyak beban yang perlu diproses daripada yang dapat ditangani oleh pecahan, inilah waktunya untuk melakukan penskalaan. Jika Anda yakin bahwa nilai hash MD5 kunci partisi Anda didistribusikan secara merata pada interval 128-bit, Anda cukup membagi pecahan pertama ke tengah. Kedua pecahan kemudian memproses masing-masing bagian bawah dan atas interval.

Pada kenyataannya, mungkin saja nilai hash MD5 tidak terdistribusi secara merata. Dalam hal ini, distribusi sebenarnya dari kunci partisi harus diperhitungkan saat membuat beling. Untuk melakukan ini, Anda perlu mempertimbangkan distribusi hash jangka panjang sehubungan dengan partisi dan membagi pecahannya sesuai dengan itu.

Saat beban berkurang, Anda dapat menghemat biaya dengan menggabungkan pecahan. Anda dapat menggabungkan pecahan yang berdekatan, tetapi Anda juga perlu mempertimbangkan distribusi hash. Urutan berikut mungkin terjadi seiring berjalannya waktu:

slot