Penskalaan

Penskalaan cluster adalah proses penambahan atau penghapusan node ke cluster sebagai respons terhadap perubahan beban kerja cluster atau kebutuhan penyimpanan data. Sebaiknya skalakan cluster Bigtable berdasarkan metrik seperti penggunaan CPU cluster. Misalnya, jika cluster menerima beban berat dan penggunaan CPU-nya tinggi, Anda dapat menambahkan node ke cluster hingga penggunaan CPU-nya berkurang. Anda juga dapat menghemat uang dengan menghapus node dari cluster saat node tidak digunakan secara berlebihan.

Opsi penskalaan

Anda dapat menskalakan cluster Bigtable dengan cara berikut:

Dalam sebagian besar kasus, jika Anda menginginkan penskalaan otomatis, Anda harus menggunakan fitur penskalaan otomatis bawaan Bigtable. Saat Anda mengaktifkan fitur ini, Bigtable akan terus memantau cluster dan menyesuaikan jumlah node secara otomatis berdasarkan setelan Anda.

Batasan

Sebelum mengaktifkan penskalaan otomatis atau menyiapkan penskalaan terprogram untuk cluster Bigtable, pertimbangkan batasan berikut.

Ketersediaan node

Kuota node berlaku baik jika cluster telah mengaktifkan alokasi node manual atau penskalaan otomatis. Lihat Ketersediaan node dan kuota untuk mengetahui detailnya.

Penundaan saat node menyeimbangkan kembali

Setelah node ditambahkan ke cluster, perlu waktu hingga 20 menit untuk memuat sebelum Anda melihat peningkatan performa cluster yang signifikan. Akibatnya, jika beban kerja Anda melibatkan burst aktivitas tinggi yang singkat, menambahkan node ke cluster berdasarkan beban CPU tidak akan meningkatkan performa — pada saat Bigtable menyeimbangkan kembali data Anda, burst aktivitas yang singkat akan berakhir.

Untuk merencanakan penundaan ini, Anda dapat menambahkan node ke cluster, baik secara terprogram atau melalui Konsol Google Cloud, sebelum Anda meningkatkan beban pada cluster. Pendekatan ini memberi Bigtable waktu untuk menyeimbangkan kembali data Anda di seluruh node tambahan sebelum beban kerja meningkat. Pada cluster yang menggunakan alokasi node manual, ubah jumlah node. Pada cluster yang menggunakan penskalaan otomatis, ubah jumlah minimum node. Setelah traffic kembali normal, ubah kembali setelan node Anda.

Peningkatan latensi yang disebabkan oleh penurunan skala terlalu cepat

Saat Anda mengurangi jumlah node dalam cluster untuk memperkecil skala, cobalah untuk tidak mengurangi ukuran cluster lebih dari 10% dalam periode 10 menit. Penskalaan yang terlalu cepat dapat menyebabkan masalah performa, seperti peningkatan latensi, jika node yang tersisa dalam cluster sementara kewalahan.

Masalah desain skema

Jika ada masalah dengan desain skema untuk tabel Anda, menambahkan node ke cluster Bigtable Anda mungkin tidak akan meningkatkan performa. Misalnya, jika Anda memiliki banyak pembacaan atau penulisan ke satu baris dalam tabel, semua operasi baca atau tulis akan diteruskan ke node yang sama di cluster Anda. Akibatnya, penambahan node tidak akan meningkatkan performa. Sebaliknya, jika operasi baca dan tulis didistribusikan secara merata di seluruh baris dalam tabel Anda, penambahan node umumnya akan meningkatkan performa.

Lihat Mendesain Skema untuk mengetahui detail cara mendesain skema yang memungkinkan Bigtable melakukan penskalaan secara efektif.

Cara menskalakan Bigtable secara terprogram

Dalam beberapa kasus, Anda mungkin ingin menulis aplikasi Anda sendiri untuk menskalakan cluster Bigtable. Bagian ini menjelaskan cara menskalakan cluster secara terprogram dan menyediakan contoh kode yang dapat Anda gunakan sebagai titik awal. Panduan ini juga menjelaskan beberapa batasan yang harus Anda ketahui sebelum menyiapkan penskalaan terprogram.

Bigtable menampilkan berbagai metrik melalui Cloud Monitoring API. Anda dapat memantau metrik ini secara terprogram untuk cluster Anda, lalu menggunakan salah satu library klien Bigtable atau Google Cloud CLI untuk menambahkan atau menghapus node berdasarkan metrik saat ini. Setelah mengubah ukuran cluster, Anda dapat memantau performanya melalui Google Cloud Console; melalui dasbor kustom Cloud Monitoring; atau secara terprogram.

Metrik Monitoring API

Monitoring API menyediakan berbagai metrik yang dapat Anda gunakan untuk memantau status cluster saat ini. Beberapa metrik yang paling berguna untuk penskalaan terprogram mencakup:

  • bigtable.googleapis.com/cluster/cpu_load: Beban CPU cluster.
  • bigtable.googleapis.com/cluster/node_count: Jumlah node dalam cluster.
  • bigtable.googleapis.com/cluster/storage_utilization: Penyimpanan yang digunakan sebagai bagian dari total kapasitas penyimpanan.
  • bigtable.googleapis.com/server/latencies: Distribusi latensi permintaan server untuk tabel.

Kode contoh

Sebagai titik awal untuk alat penskalaan terprogram Anda sendiri, Anda dapat menggunakan salah satu contoh alat berikut:

Alat contoh menambahkan node ke cluster Bigtable saat beban CPU-nya berada di atas nilai yang ditentukan. Demikian pula, alat sampel menghapus node dari cluster Bigtable saat beban CPU-nya di bawah nilai yang ditentukan. Untuk menjalankan contoh alat, ikuti petunjuk untuk setiap contoh di GitHub.

Alat contoh menggunakan kode berikut untuk mengumpulkan informasi tentang beban CPU pada cluster:

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Timestamp now = timeXMinutesAgo(0);
Timestamp fiveMinutesAgo = timeXMinutesAgo(5);
TimeInterval interval =
    TimeInterval.newBuilder().setStartTime(fiveMinutesAgo).setEndTime(now).build();
String filter = "metric.type=\"" + CPU_METRIC + "\"";
ListTimeSeriesPagedResponse response =
    metricServiceClient.listTimeSeries(projectName, filter, interval, TimeSeriesView.FULL);
return response.getPage().getValues().iterator().next().getPointsList().get(0);

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

client = monitoring_v3.MetricServiceClient()
cpu_query = query.Query(
    client,
    project=PROJECT,
    metric_type="bigtable.googleapis.com/" "cluster/cpu_load",
    minutes=5,
)
cpu_query = cpu_query.select_resources(
    instance=bigtable_instance, cluster=bigtable_cluster
)
cpu = next(cpu_query.iter())
return cpu.points[0].value.double_value

Berdasarkan beban CPU, alat contoh menggunakan library klien Bigtable untuk mengubah ukuran cluster:

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

double latestValue = getLatestValue().getValue().getDoubleValue();
if (latestValue < CPU_PERCENT_TO_DOWNSCALE) {
  int clusterSize = clusterUtility.getClusterNodeCount(clusterId, zoneId);
  if (clusterSize > MIN_NODE_COUNT) {
    clusterUtility.setClusterSize(clusterId, zoneId,
      Math.max(clusterSize - SIZE_CHANGE_STEP, MIN_NODE_COUNT));
  }
} else if (latestValue > CPU_PERCENT_TO_UPSCALE) {
  int clusterSize = clusterUtility.getClusterNodeCount(clusterId, zoneId);
  if (clusterSize <= MAX_NODE_COUNT) {
    clusterUtility.setClusterSize(clusterId, zoneId,
      Math.min(clusterSize + SIZE_CHANGE_STEP, MAX_NODE_COUNT));
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk Bigtable, lihat Library klien Bigtable.

Untuk melakukan autentikasi ke Bigtable, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

bigtable_client = bigtable.Client(admin=True)
instance = bigtable_client.instance(bigtable_instance)
instance.reload()

if instance.type_ == enums.Instance.Type.DEVELOPMENT:
    raise ValueError("Development instances cannot be scaled.")

cluster = instance.cluster(bigtable_cluster)
cluster.reload()

current_node_count = cluster.serve_nodes

if scale_up:
    if current_node_count < max_node_count:
        new_node_count = min(current_node_count + size_change_step, max_node_count)
        cluster.serve_nodes = new_node_count
        operation = cluster.update()
        response = operation.result(480)
        logger.info(
            "Scaled up from {} to {} nodes for {}.".format(
                current_node_count, new_node_count, response.name
            )
        )
else:
    if current_node_count > min_node_count:
        new_node_count = max(current_node_count - size_change_step, min_node_count)
        cluster.serve_nodes = new_node_count
        operation = cluster.update()
        response = operation.result(480)
        logger.info(
            "Scaled down from {} to {} nodes for {}.".format(
                current_node_count, new_node_count, response.name
            )
        )

Setelah ukuran cluster diubah, Anda dapat menggunakan Google Cloud Console atau dasbor kustom Cloud Monitoring untuk memantau perubahan performanya dari waktu ke waktu.

Langkah selanjutnya