Tản mạn về Cloud-Native

Bài viết được sự cho phép của tác giả Edward Thien Hoang

Cloud computing thì ai cũng đã quá quen thuộc, người người lên Cloud, nhà nhà lên Cloud. Gần đây lại xuất hiện trào lưu Cloud-native. Cloud native đã xuất hiện ở nước ngoài khá lâu rồi nhưng chỉ cập bến ở Việt Nam chúng ta vài năm gần đây thôi. Vậy Cloud-native là gì? Khác gì với Cloud computing vậy? Cloud-native là 1 buzzword, cũng giống như Cloud Computing, Blockchain. Buzzword mang một nghĩa chung chung mà không thể nào hiểu theo nghĩa đen được. Điện toán đám mây là gì? Có phải là máy tính để lên các đám mây cho mát thì gọi là điện toán đám mây. Trong bài này mình sẽ không cắt nghĩa Cloud Computing hay nói tắt là Cloud nữa, vì giờ ai cũng biết nó rồi. Quay lại với Cloud-native.

  AWS, Azure và Google Cloud là gì? Chứng chỉ nào tốt nhất cho sự nghiệp của bạn?
  CLOUD ACE: Không mang mọi người lên "mây" mà mang "mây" đến gần mọi người hơn

Cloud-native gồm 2 phần: “cloud” và “native”. Cloud trong Cloud Computing. Còn native? Google dịch sẽ ra: tự nhiên, bản xứ, bẩm sinh. Yeah, để dễ hình dung, hãy nghĩ về native speaker, là 1 người sinh ra và lớn lên đã sử dụng 1 ngôn ngữ làm ngôn ngữ mẹ đẻ. Và Cloud-native cũng vậy, nghĩa là từ khi sinh ra cho đến khi sản phẩm đưa vào vận hành thì phải chạy trên Cloud. Tuy nhiên, một ứng dụng Cloud-native thì chắc chắn chạy trên Cloud rồi, nhưng một ứng dụng chạy trên Cloud thì chưa chắc đã đạt tới cảnh giới Cloud-native. Như người Việt nói tiếng Anh tài đến cách mấy cũng chỉ đạt trình độ của người bản xứ được.

Tuy nhiên, cũng cần lưu ý thêm về các định nghĩa phổ biến về Cloud-native, đó là một ứng dụng Cloud-native sẽ không đề cập đến việc ứng dụng đó được triển khai ở đâu – WHERE (cụ thể ở đây chắc chắn là trên Cloud rồi), mà đề cập đến việc làm thế nào – HOW để ứng dụng có tính “bẩm sinh”, “native”.

“Cloud-native” is an approach to building and running applications that exploits the advantages of the cloud computing delivery model. “Cloud-native” is about how applications are created and deployed, not where.

CONTAINER-NATIVE

OK, để có thể hiểu hơn về Cloud-native thì mình khuyên các bạn nên đọc qua bài viết về “Container-native” của tác giả Minh Monmen đăng trên Kipalog, mình xin trích dẫn 1 xíu ở đây.

…1 bác bên techcrunch có đưa ra 1 định nghĩa khá sát về khái niệm container-native:

Software that treats the container as the first-class unit of infrastructure (as opposed to, for example, treating the physical machine or the virtual machine as the first-class unit)
Software that does not just “happen to work” in, on or around containers, but rather is purposefully designed for containers
Đại khái định nghĩa này nói rằng bạn 1 là phải coi container là thứ sẽ triển khai ứng dụng của bạn, không phải 1 con VM hay máy chủ vật lý. Thứ 2 là việc bạn định hướng container-native phải được làm từ đầu khi khởi tạo ứng dụng, chứ không phải là cứ code rồi… Bụp một cái mang nó vào container là chạy được…

Sau khi đọc xong, có thể là cái hiểu của bạn sẽ được tăng lên để hiểu được từ “native”. 🙂

VẬY TẠI SAO PHẢI CẦN CLOUD-NATIVE?

What thì mình đã cắt nghĩa ở trên. Còn Why, mình sẽ đưa ra 1 số ý kiến. Như mọi người đã biết và hiểu được một trong những đặc tính quan trọng bậc nhất của Cloud Computing đó là tính đàn hồi (elasticity), giúp cho ứng dụng chạy trên Cloud sẽ có thể co dãn, scaling up and down hay in and out một cách dễ dàng, phù hợp với nhu cầu, workload hiện tại của system. Tuy nhiên càng hiện đại thì càng hại điện. Có bao nhiêu hệ thống hoặc ứng dụng có thể tận dụng tối đa lợi ích mà Cloud Computing mang lại? Trong quá trình phát triển sản phẩm, bạn có đặt ưu tiên về scalability của ứng dụng lên trên cùng? Hay việc vận hành, bảo trì, CI/CD? Với việc microservices đang ngày càng thịnh hành, thì việc quản lý một đống service cũng không phải là điều dễ dàng. Và yeah, Cloud-native chính là keyword, tập hợp rất nhiều practices, guideline, là cứu cánh cho chúng ta. Cùng điểm qua 1 số ý chính bằng tiếng Anh (vì lười dịch quá :D)

10 Key Attributes of Cloud-Native Applications

  1. Packaged as lightweight containers
  2. Developed with best-of-breed languages and frameworks
  3. Designed as loosely coupled microservices
  4. Centered around APIs for interaction and collaboration
  5. Architected with a clean separation of stateless and stateful services
  6. Isolated from server and operating system dependencies
  7. Deployed on self-service, elastic, cloud infrastructure
  8. Managed through agile DevOps processes
  9. Automated capabilities
  10. Defined, policy-driven resource allocation

Nguồn: https://thenewstack.io/10-key-attributes-of-cloud-native-applications/

Phìu, có thể túm qua 1 số ý chính là: hệ thống nên buid dạng microservices, chạy trong container (Docker) và có sự hỗ trợ của các Container management platform như Kubernetes. Cần, agility và automation với DevOps và mọi thứ trên Cloud. Và quan trọng nhất là mọi thứ phải được consider ngay từ khâu thiết kế, chứ không phải đợi đến lúc triển khai thì too late và có thể là impossible 🙂

VẬY LÀM SAO ĐỂ ĐẠT TỚI CẢNH GIỚI NATIVE?

Cái khó nhất khi tìm hiểu 1 vấn đề nào đó nằm ở WHAT and WHY, chứ HOW thì đó là nghề của anh em developer rồi. Google phát là ra ngay, nên mình để phần này cho anh em tự khám phá.

MỘT SỐ GỢI Ý:

SáchCloud Native Patterns: Designing change-tolerant software 1st Edition viết bởi Cornelia Davis

Hoặc vào page The Cloud Native Computing Foundation (CNCF) landscape để xem một ứng dụng hay system Cloud-native thì phải dùng tech/stack như thế nào nhé.

Bài viết gốc được đăng tải tại edwardthienhoang.wordpress.com

Có thể bạn quan tâm:

Xem thêm các việc làm Developer hấp dẫn tại TopDev