Spinnaker là gì? Tìm hiểu mọi thứ về Spinnaker.

Các môi trường phần mềm

Infra hệ thống thường chia thành 4 môi trường:

  • Dev: Môi trường dev là môi trường được tạo ra và duy trì bởi đội Dev để viết code. Việc truy cập cho môi trường này chỉ dành cho nhóm Dev. Thông thường đội ngũ QA không có quyền truy cập vào môi trường này. Môi trường này chủ yếu được nhóm Dev sử dụng để unit test.
  • QA: môi trường là nơi các kiểm thử thực sự diễn ra. Môi trường này thuộc sở hữu của nhóm QA. Nhóm DEV không có quyền truy cập vào môi trường này. Sau khi thiết kế và hoàn thành code, code được chuyển đến môi trường đảm bảo chất lượng cho nhóm QA để tiến hành kiểm tra.
  • Staging: Một môi trường gần giống với production, đại loại là code test chạy thấy ổn ngon rồi thì deploy vào, coi như là 1 bản beta để xài thử trước khi release
  • Production: Môi trường dành cho end-user sử dụng, chứa dữ liệu thật, trước khi deploy vào đây là phải qua rất nhiều ban bệ approve, mấy chú dev cùi là cấm sờ vào hiện vật. Không có nhóm DEV và QA nào có quyền đọc / ghi vào môi trường này. Các nhóm hỗ trợ sản phẩm được duy trì để giải quyết các vấn đề liên quan đến môi trường sản xuất.

Ngoài ra còn có 1 số môi trường như môi trường UAT:

  • UAT – User Acceptance Test là môi trường nơi người dùng doanh nghiệp tiến hành kiểm tra. Điều này được thực hiện sau khi kiểm tra hệ thống đã được hoàn thành. Mục đích chính là kiểm tra hệ thống từ điểm nhìn business. Truy cập vào môi trường này chỉ dành cho người dùng doanh nghiệp (user business). Tuy nhiên, trong một số trường hợp, họ tìm kiếm sự hỗ trợ QA, trong những trường hợp đó, đội ngũ QA được tiếp cận tạm thời với môi trường.

Khác nhau giữa môi trường UAT và Staging là dữ liệu.

  • Trong môi trường UAT, thì các Stake Holder hay QA thường thiết lập dữ liệu theo cách đặc biệt nào đó để kiểm thử tính năng hay có thể thiết lập các dữ liệu cấu hình mockup để kiểm tra mọi thứ.
  • Tại môi trường Staging thì dữ liệu thường là bản sao của dữ liệu trên môi trường Production. Một số công ty thường xuyên “làm mới” cơ sở dữ liệu Stging của họ từ các bản snapshot của môi trường Production.

Vấn đề đặt ra là việc deployment sẽ mất một khoảng thời gian nào đó, dẫn tới hệ thống bị down-time, user sẽ không truy cập được, nên đa số người ta deploy vào lúc nửa đêm.

Tuy nhiên user ngày nay nhiều thanh niên là cú đêm nên việc này tạo bad user experiences cho người dùng.  Để giải quyết điều này, thì blue/green deployment được ra đời.

Phương thức triển khai phần mềm

Blue-green deployment

User đang dùng bản app version 1 được deploy trên 1 cụm server gọi là blue.

Bản version 2 sẽ được deploy trên 1 cụm server mới gọi là green, nếu deploy xong xuôi, test chạy ok thì chỉ switch load balancer sang cụm server mới là xong. Cụm server mới này lại trở thành blue sang lần deploy tiếp theo. Còn cụm server kia có thể terminate đi để tiết kiệm.

Cách này hay là zero-downtime, nếu deploy gặp vấn đề gì thì vẫn rollback được.

Canary deployment

Cài này cũng na ná như B/G deployment nhưng có vài điểm khác biệt 
Xét theo khía cạnh infra thì cấu trúc của nó tương đồng với B/G deploy ở chỗ là, cũng có 2 môi trường production nằm độc lập. Tuy nhiên cách vận hành và mục đích của chúng thì khác nhau. Canary release sẽ không route người dùng vào 1 trong 2 môi trường production mà sẽ phân tán vào cả 2 cùng một lúc (có thể theo tỉ lệ 1-9 hay 3-7 vân vân), mục đích là thăm dò và đánh giá phản ứng của người dùng với 2 phiên bản khác nhau trước khi thực sự release.

Spinnaker là gì?

Phần trên nói nhiều về việc deployment, spinnaker chính là một tool dùng trong công việc deploy ứng dụng lên cloud server (CD) được phát triển bởi Netflix.

Spinnaker mạnh ở chỗ nó là một tool multi-cloud continuous delivery platform sử dụng để phát hành phần mềm (software changes) một cách nhanh chóng và tin cậy. Bạn có thể dùng spinnaker để build, deploy lên AWS, Azure, GCE … đủ loại.

Một trong tính năng nổi bật của Spinnaker là khả năng triển khai cho multi-cloud sử dụng các best practice và các deployment strategy đã được kiểm chứng.

Slogan của Spinnaker là “Continuous Delivery for Enterprise”.

Spinnaker bao gồm tập hợp nhiều Microservices nhưng có dependency với nhau. Ví dụ như

  • Deck là browser-UI
  • Halyard CLI là service để config spinnaker
  • Gate là API gateway
  • Clouddriver để làm việc với multi-cloud provider
  • Front50 dùng để lưu trữ metadata
  • Echo là event bus
  • Fiat is Spinnaker’s authorization service

Spinnaker có thể tích hợp với Jenkins để start các jobs từ Jenkins, monitor process. Jenkins dùng để build, Spinnaker dùng để deployment

Setup Spinnaker

Bạn có thể setup Spinnaker trên local, GCE kubernetes, EKS hoặc ECS. Lúc đầu mình setup Spinnaker trên Kubernetes GCE dùng helm khá dễ dàng, do helm chuyên dùng cho Kubernetes. Tuy nhiên do yêu cầu dùng infra của AWS nên chuyển sang setup trên ECS thì khó khăn vì phải làm hoàn toàn from scratch.

Khác nhau giữa Spinnaker vs Jenkin CD

Jenkins

  • Bản chất Jenkins là CI tool và có thêm plugin để tích hợp CD thông qua các native plugins như (Ansible, Puppet…) hoặc tích hợp với các công cụ CD khác như Spinnaker. Spinnaker thậm chí có sẵn API tích hợp cho Jenkins giúp cho việc tích hợp hết sức dễ dàng.
  • Ngoài ra Jenkin không được thiết kế cho việc triển khai trên môi trường Cloud (mặc dù JenkinsX là cloudnative, giải pháp cho Kubernetes). Jenkins plugins hoặc các script bên ngoài được yêu cầu sử dụng cho việc tích hợp Cloud. Mặc dù danh mục plugin mở rộng giải quyết nhiều trường hợp sử dụng, nhưng điều này không đảm bảo trường hợp sử dụng cụ thể cho đám mây của bạn có sẵn plugin.

Spinnaker

  • Trong khi đó Spinnaker là CD tool, không phải CI tool, do vậy việc tích hợp giữa 2 công cụ này rất hữu ích.
  • Ngoài ra, Spinnaker là ứng dụng cloud-native, cloud-agnostic với chức năng có sẵn cho hạ tầng on-demands và sự thay đổi của ứng dụng. Nó cung cấp multi-account với độ sẵn sàng cao và triển khai multi-artifact một cách tin cậy và có khả năng dự đoán được.
  • Spinnaker cho phép tạo các deployments, load balancer và tự động rollout-version… Nó cung cấp giao diện UI để quản lý đồng thời cả các deployment và các resource chính.
  • Spinnaker cung cấp khả năng quản lý các deployments giữa các cloud provider và quản lý trạng thái process và deployments giữa nhiều môi trường Cloud.
  • Spinnaker cung cấp nhiều bộ và mẫu model deployment hơn Jenkins.
  • Jenkins nổi tiếng là một ứng dụng tùy biến (temperamental) một phần là do nó phụ thuộc vào các tập lệnh cho chức năng. Spinnaker được xây dựng để cung cấp trải nghiệm người dùng đơn giản, đáng tin cậy.
  • Đánh đổi với sự đơn giản của Spinnaker là việc hạn chế trong quản lý quyền truy cập khi so sánh với chức năng được cung cấp bởi các tiện ích mở rộng plugin và cấu hình gốc của Jenkins.

Tham khảo: Giao sư cận

Leave a Reply

Your email address will not be published. Required fields are marked *