1, Short conversation
Tại một công ty chuyên phát triển phần mềm, ông chủ và một thành viên đang thảo luận về một dự án quan trọng. Thành viên vừa triển khai một phiên bản mới của mã và đang gặp một số vấn đề. Anh ấy quyết định quay lại phiên bản trước của mã, nhưng thật không may, anh ấy đã quên lưu cấu hình trước đó.
Sếp nhận thấy thành viên đó trông có vẻ lo lắng và hỏi anh ta có chuyện gì. Thành viên giải thích tình hình và ông chủ bày tỏ sự lo lắng của mình. Anh ấy nói với thành viên rằng việc sao lưu cấu hình là rất quan trọng và phải luôn được thực hiện trước khi thực hiện bất kỳ thay đổi nào....
Boss: Có chuyện quái gì với product vậy!!!? Tôi đang không thể truy cập được vào website và app của chúng ta trên các nền tảng? Rất nhiều khách hàng đang complain về điều này.
Member: Em vừa mới deploy một bản code mới lên product, nhưng không hiểu có chuyện gì xảy ra, mà một vài services không thể start được. Em đang có gắng fix nó!
Boss: Không thể để ứng dụng có thời gian downtime lâu như vậy được, chúng ta đã có cam kết SLA, cậu hãy ngay lập tức rollback lại version trước đó.
Member với trạng thái bất an trả lời...
Member: Em không thể, vì có quá nhiều service nên em đã quên backup lại configuration của các services, nếu quay lại version trước, chúng ta không thể đảm bảo hệ thống vẫn hoạt động.
Boss: WHAT? chưa thể fix ngay các issue, cũng không thể rollback ngay về version trước đó, cậu có biết chuyện mình đang gây ra không?
ASeniorMember: Ổn rồi, tôi vừa rollback mọi thứ về version trước đó. On a tixtax
Tại sao cậu có thể làm được như vậy? dường như chúng ta không có bất kỳ bản backup nào....!!
2, Pain point
Để một application có thể start, run đúng như mong muốn của developer và hơn nữa là có thể dynamic theo từng tính huống, thì configration là việc không thể thiếu, và càng không thể thiếu các file config.
Trong hệ thống lớn và hơn thế nữa là các hệ thống microservices hiện đại hiện hiện, việc có nhiều services là điều tất yếu. Mỗi service đều sở hữu một config nhất định và có file config của riêng service đó. Vì vậy, nếu như một hệ thống microservice có tới chả chục, trăm microservices, khi đó, khó khăn trong việc manage config của các services là luôn có.
Giống như tình huống giả sử ở trên, chúng ta thấy rằng lỗi sai của con người nếu giảm thiểu hoặc tránh được tối đa là điều tốt nhất. Nhưng vì sơ xuất trong quy trình deploy, kiểm tra function code dẫn đến việc khi có sự cố phát sinh thì mọi phương hướng đều đi vào ngõ cụt, member chưa thể fix được issue ngay lập tức, cũng không thể rollback lại version code trước đó để chờ fix xong các issues. Kết quả là hệ thống down, doanh nghiệp mất tiền, nhân sự mất tín nhiệm...
Đó chính xác là một bài học vô cùng đắt giá cho cả các bosses và members về việc phải backup lại configs cũng như data trước mọi sự thay đổi của code và deploy.
3, Sunteco Cloud's solution
Trong thực tế cũng như các dự án mình đã từng làm, thì lỗi sai của con người là điều không thể tránh, nhưng một hệ thống tốt, được trusted thì việc giảm thiểu mọi lỗi sai ngớ ngẩn của các thành viên là điều cốt lõi. Không gì khác đó chính là việc apply automation vào hầu như mọi công đoạn có thể. Và công đoạn backup data, backup configration, tưởng chừng như đơn giản nhưng là việc không thể thiếu sót.
Hãy thử tưởng tượng, bạn có 100 services, mỗi service lại cần chỉnh config ở 1 vài chỗ khác nhau, khi chuẩn bị deploy, bạn phải đi collect hết tất cả các config đó, lưu lại vào một nơi nào đó để dự phòng khi có trường hợp không như mong muốn xảy ra. Và chắc chắn, file đó sẽ out of date sau vài version of code.
Một case nữa cũng tường chừng như đơn giản nhưng lại vô cùng quý giá nếu bạn làm automation được ở bước backup này. Đó là, khi team bạn có thành viên mới tiếp nhận lại những services đã có sẵn, do nhân sự cũ nghỉ hoặc đơn giản là có thêm business mới. Tùy rằng hoạt động handover đã được diễn ra giữa các thành viên, nhưng bạn không thể kiểm soát được rằng thành viên mới có thể work perfectly ngay từ những lần đầu, và đôi khi chỉ cần một lỗi sai nhỏ, có thể gây ra cả một thảm họa cho hệ thống mà khó có thể khắc phục.
Có rất nhiều cách để bạn có thể automation những hành vi lặp đi lặp lại này, bạn tự viết tool backup hàng ngày, bạn tự viết tool quản lí mọi config của bạn, bạn tự dựng opensource, bạn tự ..., bạn tự... Tất cả bạn sẽ phải tự làm tất cả mọi thứ để handle và automation mọi thứ. Nhưng điều đó cũng đồng nghĩ bạn phải bỏ những thời gian ra để tự viết tool, tự learn opensource mà bạn quên mất rằng nên tập trung hơn đó là doanh nghiệp của bạn, business của bạn.
Cho dù bạn có bỏ thời gian viết tool hay tự dựng opensource thì tính realtime, tính trigger, tính consistency giữa version code và config của bạn cũng cần phải care tới điều đó, vì lẽ đương nhiên, chúng ta không thể lấy một động cơ hơi nước năm 65 để gắn vào chiếc xe gắn máy năm 2000s.
Thay vì thế bạn có thể sử dụng những hệ sinh thái sẵn có, để tiết kiệm thời gian và chi phí, và hơn nữa là giảm thiểu tối đa mọi sai sót của con người. Khi mọi thứ đã được những chuyên gia hàng đầu trong lĩnh vực công nghệ tổng hợp, đúc kết lại sau nhiều năm kinh nghiệm những triggers to save data, configs, automation setting environments, build version đã được settup sẵn.
Tất cả chỉ trong một click - Rolling-back!
4, Demo
Dưới đây là câu chuyện có thật mà mình đã trải qua. Ngày hôm đó, mọi thứ đã xong, code đã sẵn sàng, chỉ còn công đoạn cuối là deploy app lên và chờ thời điểm tới.
1, Mình deploy 1 ứng dụng mang tên love-on-cloud, setup các biến môi trường và config cần thiết
2, Sau khi deploy thành công, tạo 1 đường link để publish ứng dụng ra internet nhanh chóng, đem đi tỏ tình với người yêu
3, Còn thời gian mình update một chút và deploy một phiên bản mới lên sau đó, mình cho thêm một config mới vào application của mình
4, Mình đã thêm config mới, nhưng thật không may để sai value, và hơn thế nữa, config cho “user2” setup trước đó cũng đã bị mình thay đổi mà không để ý
5, Khi deploy lại, mình ngỡ ngàng khi nhìn thấy một cái tên hoàn toàn khác mà không kịp thời gian để revert code và thay đổi các config nữa.
6, Ngay lập tức mình sử dụng tính năng rollback để revert lại toàn bộ data, config mà mình đã setup trước đó, việc này cũng đồng nghĩa với việc quay lại sử dụng phiên bản code trước đó. Nhưng mình có thể chấp nhận điều này vì hơn hết mình đã trở lại đúng config cũ một cách nhanh chóng.
7, Bấm confirm để xác nhận chắc chắn mình muốn quay trở lại version trước đó
8, Và hiện giờ bản tỏ tình của mình đã trở lại version 2, và hoàn toàn có thể quay lại version 3 sau khi mình đã chắc chắn mọi config đúng như mong đợi.
9, Chỉ sau vài giây, mình quay trở lại link và đã thấy sự thay đổi kịp thời, vì ngay lúc đó……
Thật may vì mình đã thành công, và bạn cũng có thể kiểm chứng bằng cách truy cập vào link này: https://love-on-cloud-30.sunteco.cloud
Đối với mình đây thật sự là một happy ending. Thanks Sunteco Cloud.
5, Reference & other resources
- Git hub code: https://github.com/DangNguyenTH4/trend-heart
- Docker image: https://hub.docker.com/repository/docker/dangnt520/loveoncloud/general
- Java version 11, Spring boot 6
- Platform & Infras: https://console.sunteco.vn/register
- Xem thêm tại: https://sunteco.vn/