2020.02.14
Kỹ thuật Continuous Delivery (CD)
Anh Tashiro Jin – hiện đang làm việc tại MarketEnterprise.
Continuous Delivery được ứng dụng ở trang web công ty MarketEnterprise Vietnam
Giới thiệu anh Tashiro Jin
Xin chào các bạn. Tôi tên là Tashiro Jin hiện đang làm việc tại MarketEnterprise Japan.
Cách đây nửa năm tôi chuyển việc và gia nhập vào công ty này. Công việc chính của tôi là kỹ sư hệ thống hạ tầng. Trước đây tôi làm về mảng server và network phía máy chủ.
Tuy nhiên, trong khoảng 5-6 năm gần đây tôi chỉ làm công việc cấu trúc hệ thống trên cloud ví dụ như là AWS.
Cách đây cũng khá lâu, chúng ta đã phải tốn rất nhiều thời gian cho việc chọn lựa hardware/ software, rồi công việc thiết kế cấu trúc, và cả những công việc confirm action. Nhưng giờ đây, chỉ cần vài cú click chuột là đã làm xong tất cả các công đoạn.
Tôi cảm thấy rằng mình đang sống trong một thời đại rất tiện lợi. Ở MarketEnterprise cũng đang triển khai hệ thống trên AWS. Thông qua bài viết này tôi xin giới thiệu đến các bạn cách thức trang web MarketEnterprise Vietnam đã được release như thế nào.
Continuous Delivery là gì?
Continuous Delivery (CD) là quá trình diễn ra khi có sự thay đổi code program, nó sẽ tiến hành tự động merge code và tạo bản build dành cho môi trường phát triển, thực hiện việc chuẩn bị release môi trường production.
Thực ra thì trước giai đoạn này thông thường sẽ có quy trình Continuous Integration (CI)
CI chủ yếu là một quá trình tự động test khi phát triển phần mềm, là công đoạn kiểm tra tính an toàn và tính lưu động, và khi kết hợp với CD nói trên thì thường được gọi tắt là CI / CD.
Ngoài ra, CD cũng được dùng để viết tắt cho từ Continuous Deployment. Continuous Deployment là khái niệm gần giống với Continuous Delivery, tuy nhiên Continuous Delivery chỉ nói đến việc tình trạng sẵn sàng cho việc deploy, còn Continuous Deployment là thực thi việc deploy lên môi trường production trên thực tế, đó là điểm khác nhau giữa Continuous Delivery và Continuous Deployment.
Khi thực hiện CD thì có ưu điểm gì không?
CD có nghĩa là các thay đổi trong code sẽ được tự động chuẩn bị hoặc triển khai vào môi trường production.
Công việc test sẽ được thực thi bởi CI, và khi code đã pass qua lần test đó sẽ được triển khai lên môi trường production một cách tự động, có nghĩa là đã loại bỏ được việc tốn chi phí nhân công và chi phí thời gian để xử lý công việc đó.
Nhờ thế chi phí rút giảm được qua việc làm đó sẽ được đầu tư vào việc phát triển. Vì vậy, giúp cho việc nâng cao tốc độ triển khai, và cũng sẽ liên tục triển khai thêm các việc update mới nữa.
Những việc mà máy móc có thể làm được thì cho xử lý tự động, chỉ những chỗ bắt buộc phải do con người làm thì mới điều phối nhân sự vào làm, nhờ vậy mà có thể triển khai một cách nhanh chóng và hiệu quả tốt hơn.
Trang web của MarketEnterprise Vietnam đã được release như thế nào?
Hiện nay có rất nhiều tool làm được chức năng CI/CD. Đại diện cho các tool đó thì có thể kể đến: Jenkins dùng cho máy chủ, Travis CI hoặc CircleCI thì dùng cho Cloud service.
Còn trang MarketEnterprise Vietnam thì đang sử dụng AWS.
Vì AWS cung cấp nhiều dịch vụ có thể thực hiện việc CI / CD, do đó chúng tôi đã xem xét về chi phí và mức độ thân thiện, và đã quyết định sử dụng AWS CodeBuild và AWS CodeDeploy cho trang web MarketEnterprise Vietnam.
Ngoài ra, do source code được quản lý trên GitHub, cho nên AWS CodePipeline cũng được sử dụng để vận hành như một chuỗi các quy trình xử lý từ Github đến AWS CodeDeploy.
Chúng tôi đã release Docker Container xem như là ECS with ECR với ưu điểm là giúp application xử lý nhanh và ổn định
Xử lý theo mô hình sau
Khó khăn đã gặp trong quá trình làm, và việc tìm giải pháp tốt nhất
Gặp phải vấn đề trong việc triển khai từ Docker native sang ECS giống với Docker
Các kỹ sư phát triển trang MarketEnterprise Vietnam mỗi ngày sử dụng Docker để phát triển ở local.
PM sẽ review source code của các bạn kỹ sư, nếu không có vấn đề gì sẽ thực thi update lên nhánh master. Ở thời điểm này Issue được coi là hoàn tất, và bạn kỹ sư đó bắt tay vào làm issue mới. Nói cách khác, cho đến thời điểm này chỉ confirm được ở môi trường Docker native mà thôi.
Vì thế khi triển khai những phần này sang ECS giống với Docker sẽ phải lưu ý nhiều vấn đề. Lý do là ECS được tạo ra dựa trên Docker, tuy nhiên nó không phải là Docker Native.
Khi đó tôi đã phải kiểm tra từng chút một ở spec của Docker và spec của ECS, để xem setting của hai bên có khớp nhau không, và tôi cũng đã phải test nhiều lần để xem setting nào được, setting nào không được, vì thế đã tốn nhiều thời gian hơn tôi dự đoán.
Tìm giải pháp tốt nhất cho việc giải quyết name giữa các container ECS
Trang web MarketEnterprise Vietnam có 4 container. Và 4 container này đang chạy trên 1 thực thể ECS.
Tất cả các container đang chạy trên ECS và có thể truy cập trang web thông qua internet, nhưng một số hình ảnh và icon lại không được hiển thị.
Sau khi điều tra thì tôi biết được là phải cần phải có sự liên lạc một phần giữa các container với nhau, và tôi hiểu được việc xảy ra vấn đề là do chưa giải quyết được name ở một số container.
Có nghĩa là nếu giải quyết được vấn đề name ở mạng nội bộ là được, tuy nhiên liên quan đến vấn đề này thì ở spec của Docker cũng khác với spec của ECS, do đó tôi hiểu được là không thể cho hoạt động được như Docker Native.
Cuối cùng, cách giải quyết vấn đề name của mạng nội bộ sẽ phải chọn 1 trong 2 cách sau: một là chỉnh chế độ network của ECS thành awsvpc; hai là thiết lập sẵn máy chủ DNS nội bộ trong thực thể ECS.
Giải pháp thứ nhất: chỉ dùng Route53 để làm công việc giao tiếp giữa các container trong thực thể ECS, mà việc đó sẽ làm lãng phí chi phí giao tiếp, cho nên chúng tôi không chọn giải pháp này.
Chúng tôi chọn giải pháp thứ hai, chỉ cần install dnsmasq vào thực thể ECS xem nó như là máy chủ DNS nội bộ gọn nhẹ, thì đã giải quyết được vấn đề.
Lời kết
Thông qua bài viết này tôi nghĩ các bạn thấy được ở MarketEnterprise rất chú trọng nhân lực phát triển.
Tôi nghĩ ở môi trường này, bạn chỉ cần tận dụng và phát huy năng lực sẵn có của bạn, mà không cần bận tâm đến việc thiết kế hạ tầng hệ thống.
Bạn nào đang có suy nghĩ muốn phát triển bản thân nhiều hơn nữa thì hãy liên lạc với chúng tôi. Tôi tin chắc nơi đây sẽ là môi trường làm việc tốt cho các bạn.