Enterprise Distributed Application Service (EDAS) mendukung penerapan aplikasi di kluster Elastic Compute Service (ECS) maupun Kubernetes (K8s). Meskipun keduanya dapat menjalankan aplikasi Anda, masing-masing menawarkan fitur yang berbeda. Jika Anda sedang memilih tumpukan teknologi atau melakukan migrasi arsitektur, Anda mungkin bingung menentukan lingkungan yang tepat. Topik ini menyajikan rekomendasi dan perbandingan fitur untuk membantu Anda mengambil keputusan.
Pengenalan lingkungan penerapan
EDAS menyediakan dua lingkungan penerapan kluster untuk aplikasi: ECS dan K8s.
-
Kluster ECS dan K8s sama-sama mendukung hosting, administrasi layanan, dan observabilitas untuk aplikasi Java yang menggunakan framework layanan mikro Spring Cloud, Dubbo, atau High-Speed Service Framework (HSF).
-
Hanya kluster K8s yang mendukung hosting, administrasi layanan, dan observabilitas untuk aplikasi poliglot.
Selain itu, kedua lingkungan penerapan memiliki persyaratan yang berbeda terhadap aplikasi dan tumpukan teknologinya. Kemampuan manajemen aplikasi yang disediakan EDAS juga berbeda antara keduanya.
Rekomendasi pemilihan lingkungan penerapan
Dalam sebagian besar kasus, kami merekomendasikan penggunaan lingkungan K8s untuk menerapkan aplikasi. EDAS terintegrasi secara mendalam dengan Alibaba Cloud Container Service for Kubernetes (ACK), yang menyediakan berbagai fitur manajemen aplikasi dan memungkinkan pemanfaatan sumber daya yang lebih efisien.
Pilih lingkungan yang sesuai berdasarkan skenario Anda.
|
Skenario |
Lingkungan |
|
K8s environment |
|
ECS environment |
Jika Anda sudah menggunakan lingkungan ECS untuk mengelola aplikasi dan memerlukan fitur lanjutan yang disediakan K8s, Anda dapat memigrasikan aplikasi tersebut ke lingkungan K8s.
Perbandingan fitur hosting aplikasi
Tabel berikut membandingkan fitur-fitur lingkungan ECS dan K8s. 'Y' menunjukkan fitur didukung, sedangkan 'N' menunjukkan fitur tidak didukung.
|
Fitur |
Lingkungan ECS |
Lingkungan K8s |
Keterangan |
|
Deploy application |
Y |
Y |
Lingkungan K8s mendukung lebih banyak kebijakan penjadwalan instans dan memungkinkan Anda menerapkan beberapa aplikasi pada satu node. |
|
Start application |
Y |
Y |
None |
|
Stop application |
Y |
Y |
None |
|
Delete application |
Y |
Y |
None |
|
Application scaling |
Y |
Y |
None |
|
Reset application |
Y |
N |
Fitur ini tidak diperlukan di lingkungan K8s. Untuk mereset aplikasi, hapus pod tersebut. |
|
Upgrade or downgrade container |
Y |
Y |
None |
|
Application rollback |
Y |
Y |
None |
|
Automatic horizontal scaling |
Y |
Y |
Metode dan aturan yang didukung berbeda. |
|
Scheduled scaling |
N |
Y |
None |
|
Phased release |
Y |
Y |
None |
|
Application group |
Y |
N |
None |
|
Application group configuration |
Y |
N |
None |
|
Real-time log |
Y |
Y |
None |
|
Log directory |
Y |
Y |
None |
|
SLS log |
Y |
Y |
None |
|
Server Load Balancer |
Y |
Y |
None |
|
Health check |
Y |
Y |
Lingkungan K8s mendukung readiness dan liveness probes, yang berbeda dari health check di lingkungan ECS. |
|
JVM parameter settings |
Y |
Y |
None |
|
Tomcat configuration |
Y |
Y |
None |
|
Lifecycle hook |
Y |
Y |
Lingkungan K8s mendukung hook PostStart dan PreStop, yang berbeda dari hook di ECS. |
|
Environment variable |
Y |
Y |
None |
|
Canary release |
Y |
Y |
None |
|
Traffic monitoring |
Y |
Y |
None |
|
Throttling and degradation |
Y |
Y |
Di lingkungan K8s, hal ini dapat diimplementasikan tanpa memodifikasi kode aplikasi. |
|
Service list query |
Y |
Y |
None |
|
Configuration push |
Y |
Y |
None |
|
Event Center |
Y |
Y |
None |
|
Notifications |
Y |
Y |
None |
|
Application diagnostics |
Y |
Y |
Kubernetes (K8s) menyediakan kemampuan pemantauan, kontrol, dan diagnostik yang lebih kuat serta terintegrasi. |
|
Resource purchase |
Y |
N |
None |
|
Service Mesh |
N |
Y |
None |
|
Image deployment support |
N |
Y |
None |
|
Polyglot support |
N |
Y |
None |
|
NAS support |
N |
Y |
None |
FAQ
Apakah saya dapat menerapkan beberapa instans aplikasi pada satu node di lingkungan ECS?
Tidak, Anda tidak dapat melakukannya. Jika memerlukan kemampuan ini, gunakan lingkungan K8s.
Apakah saya dapat menerapkan aplikasi poliglot di lingkungan ECS?
Tidak, Anda tidak dapat melakukannya. Jika memerlukan kemampuan ini, gunakan lingkungan K8s.
Apakah operasi OpenAPI untuk lingkungan ECS dan K8s sama?
Apakah kedua lingkungan ECS dan K8s mendukung tool developer?
Ya, keduanya mendukung, tetapi konfigurasinya berbeda. Perhatikan perbedaan tersebut.
-
Untuk informasi selengkapnya tentang Cloud Toolkit, lihat Ikhtisar Cloud Toolkit.
-
Untuk informasi selengkapnya tentang Maven Plugin, lihat Ikhtisar toolkit-maven-plugin.
-
Untuk informasi selengkapnya tentang Terraform, lihat Ikhtisar Terraform.
-
Untuk informasi selengkapnya tentang Jenkins, lihat Ikhtisar Jenkins.
Apakah kedua lingkungan ECS dan K8s mendukung Apsara DevOps?
Bagaimana cara lingkungan K8s melakukan scale out node dengan pembelian resource?
Di lingkungan K8s, skalabilitas elastis mengacu pada penskalaan pod. Biasanya, hal ini tidak melibatkan pembelian instans ECS (node) baru atau pelepasan instans yang sudah ada.
Anda dapat menggunakan fitur Container Service untuk mengimplementasikan skalabilitas elastis node.
Jika saya menggunakan fitur mount script di lingkungan ECS, bagaimana cara migrasi ke lingkungan K8s?
Mount script untuk aplikasi ECS digunakan untuk menjalankan perintah tertentu pada tahapan spesifik proses penerapan. Anda dapat memasang skrip pada empat tahap siklus hidup: Prepare Instance, Start Application, Stop Application, dan Destroy Instance.
Kait siklus hidup yang disediakan lingkungan K8s terbatas pada PostStart dan PreStop, dan tidak secara langsung sesuai dengan siklus hidup aplikasi ECS. Oleh karena itu, saat Anda memigrasikan aplikasi yang menggunakan mount script ke lingkungan K8s, Anda harus melakukan beberapa modifikasi.
-
Untuk mount script yang dijalankan sebelum tahap Prepare Instance, tambahkan ke Dockerfile dan bangun ke dalam image.
-
Untuk mount script yang dijalankan sebelum tahap Start Application, Anda juga dapat menambahkannya ke Dockerfile dan membangunnya ke dalam image.
Untuk sebuah pod, persiapan instance dan memulai aplikasi merupakan bagian dari proses yang sama.
-
Untuk mount script yang dijalankan setelah tahap start, konfigurasikan dalam hook PostStart.
-
Untuk mount script yang dijalankan sebelum tahap stop instance, konfigurasikan dalam hook PreStop.
-
Untuk mount script yang dijalankan setelah tahap stop instance, lakukan tugas pembersihan selama proses graceful shutdown aplikasi. Misalnya, Anda dapat menggunakan Java ShutdownHook atau mendengarkan sinyal SIGTERM. Anda juga dapat memindahkan tugas-tugas ini ke hook PreStop sesuai kebutuhan.
-
Untuk mount script yang dijalankan sebelum tahap destroy instance, lakukan tugas pembersihan selama proses graceful shutdown aplikasi. Misalnya, Anda dapat menggunakan Java ShutdownHook atau mendengarkan sinyal SIGTERM. Anda juga dapat memindahkan tugas-tugas ini ke hook PreStop sesuai kebutuhan.
Untuk sebuah pod, menghancurkan instance dan menghentikan instance merupakan bagian dari proses yang sama.