DevOps ở Got It – Những vũ khí nâng hiệu quả và tốc độ

DevOps ở Got It làm gì? Nói không ngoa, hiệu quả và tốc độ là hai yếu tố tối quan trọng giúp những startup trẻ như Got It sống sót. Qua bài viết này, chúng mình nóng lòng muốn được chia sẻ cho bạn về thứ vũ khí giúp Got It đạt được những yếu tố đó — DevOps.

1. DevOps là gì?

Từ thuở sơ khai của công nghệ phần mềm, hai khái niệm phát triển (software development)vận hành (IT operation) đã được phân chia rất rõ ràng với những vị trí phụ trách các công việc khác nhau. Chúng ta hầu hết là những software developer — những người tạo ra các dòng code, tham gia vào giai đoạn phát triển phần mềm (software development). Một số nhỏ còn lại phụ trách những công việc liên quan đến thứ đắt đỏ bậc nhất trong giới phần mềm — cơ sở hạ tầng (infrastructure). Họ là các sysadmin, database admin, network admin… Bất kì ai tác động vào infrastructure của phần mềm đều được gộp chung vào đội ngũ IT operation. Có thể nói:

  • Sản phẩm đầu ra của software development = sản phẩm đầu vào của IT operation
  • Kết quả của IT operation + business operation = đầu vào cho giai đoạn tiếp theo của software development.

Thế nhưng, bộ máy tưởng chừng khá trơn tru ấy lại gặp trục trặc ở các dự án yêu cầu tính hiệu quả và tốc độ cao. Hai thành phần tách biệt software development và IT operation có thể sẽ gặp không ít khó khăn trong giao tiếp và khớp nối công việc. Một bản release có thể phải mất vài ngày hoặc vài tuần để go live sau khi toàn bộ mã nguồn đã được phát triển xong. Một sự cố kĩ thuật có thể tiêu tốn rất nhiều tài nguyên để tìm ra nguyên nhân và cách khắc phục. Điểm yếu trong cách phân chia hai thành phần này nằm ở chỗ team software development không hiểu rõ cách phần mềm của mình được vận hành, còn team IT operation thì lại không thể tìm ra những lỗ hổng nằm ngay bên trong mã nguồn.

Như một xu hướng tất yếu, DevOps ra đời để khắc phục vấn đề của phương thức phát triển phần mềm theo cách truyền thống ở trên. Tư tưởng chính của DevOps là gộp software development và IT operation lại thành một. Những người phát triển cũng chính là những người vận hành về mặt kĩ thuật cho sản phẩm của mình.

Tuy nhiên, mọi thứ không chỉ dừng lại ở đó. Áp dụng DevOps đồng nghĩa với với việc bạn phải áp dụng những phương pháp, những công cụ phát triển và vận hành phần mềm mới để đảm bảo được hiệu quả và tốc độ của dự án. Vậy ở Got It chúng mình đã áp dụng những gì? Hãy cùng đọc tiếp nhé.

2. Áp dụng CI/CD

Trước đây, việc đưa một bản fix nhỏ lên trên môi trường chung để team QA kiểm tra đôi khi cũng hết sức khó khăn. Cách duy nhất là truy cập vào VPS phục vụ cho hệ thống của công ty, git pull và khởi động lại các module cần thiết — một công việc lặp đi lặp lại và hết sức nhàm chán. Hơn nữa, việc chỉ có một số người nhất định được cấp quyền truy cập trực tiếp vào các VPS khiến cho team thiếu chủ động, làm giảm tốc độ của quá trình kiểm thử và sửa lỗi trước khi release.

Sau khi áp dụng DevOps, chúng mình có thể chuyển một bản fix cho team QA ngay sau khi git push. Thậm chí, có khi chỉ cần một cú click chuột để đưa bản fix ấy go live trên production. Chúng mình đã làm thế nào ư? Câu trả lời nằm ở bộ dịch vụ AWS CodePipeline, AWS CodeBuild và AWS CodeDeploy của Amazon Web Services. Đây là các dịch vụ giúp chúng mình triển khai CI/CD (Tích hợp liên tục/Chuyển giao liên tục) vào công việc hàng ngày.

Trong AWS CodePipeline, một pipeline được chia thành các bước nhỏ hơn gọi là stage. Ở stage đầu tiên, chúng mình để cho AWS CodePipeline kích hoạt pipeline mỗi khi có sự thay đổi về source code trên một branch đã định sẵn. Ở stage thứ hai, chúng mình cài đặt AWS CodeBuild lấy source code đã được tải về từ stage đầu tiên để tiến hành build theo script được viết trong file buildspec.yml.

Điểm đặc biệt ở AWS CodeBuild là dịch vụ này sẽ build source code của chúng ta trên những con máy ảo có cấu hình phần cứng và môi trường phần mềm đã được cài đặt sẵn. Đối với các module frontend được host qua AWS S3 và AWS Cloudfront, tại bước này chúng mình kết thúc pipeline bằng cách sử dụng aws cli để upload build artifact lên S3 và invalidate edge cache trên Cloudfront. Đối với các module khác phức tạp hơn cần chạy trên VPS, chúng mình chuyển build artifact sang stage cuối cùng là AWS CodeDeploy. Dịch vụ này cho phép chuyển build artifact sang một số AWS EC2 instance nhất định và chạy script được viết trong file appspec.yml để cài đặt build artifact đó.

3. Áp dụng Infrastructure as code

Ở Got It, gần như toàn bộ hệ thống được setup trên các dịch vụ được cung cấp bởi Amazon Web Service. Nhìn chung, để có thể setup một hệ thống trên các cloud services như AWS, bạn sẽ phải trải qua hằng hà sa số các trang document để tìm hiểu những service mà mình cần sử dụng. Nào là Route53 để routing, Cloudfront cho edge caching, EC2 cho VPS, Application load balancer hay AWS Auto Scaling cho auto scaling… Sẽ rất khó để nhớ hết từng bước setup hệ thống. Vậy nên việc viết một bản hướng dẫn để minh hoạ cho các cài đặt, kết nối giữa các service cũng khá khó khăn.

Thật may mắn, AWS cung cấp một công cụ cực kì hữu hiệu để chúng mình có thể mô tả hệ thống phục vụ cho các sản phẩm của Got It dưới dạng các file json, yaml và các đoạn shellscript — đó là AWS CloudFormation. Với CloudFormation, chúng mình tạo ra các stack. Trong mỗi một stack lại liệt kê ra các resource cần dùng và mối quan hệ giữa các resource đó. Các resource trong CloudFormation có thể hiểu là những thành phần khác nhau của các dịch vụ trên AWS.

Ví dụ, để setup một stack cho một module frontend, ta sẽ cần một S3 bucket để chứa mã nguồn đã được build và định nghĩa một Cloudfront Distribution trỏ đến S3 bucket đó. Chúng mình định nghĩa một RecordSet trên Route53 để có được một subdomain trên domain của công ty cho module này. Ngoài ra, để có được CI/CD, chúng mình còn phải sử dụng thêm cả AWS CodePipeline và AWS CodeBuild để build mã nguồn và upload lên S3 bucket. Sau khi đã có được một file yaml hoặc json mô tả đầy đủ những điều trên, ta chỉ cần dùng AWS cli để khởi tạo stack trên AWS CloudFormation. Ngoài ra, khi cần sửa đổi bất cứ thứ gì, ta chỉ cần sửa file này và update lại stack, AWS CloudFormation sẽ tự động phát hiện ra các resource cần phải tạo mới, sửa đổi, hoặc thay thế.

Với AWS CloudFormation, việc quản lí các infrastructure của Got It trở nên thật dễ dàng. Chúng mình đang áp dụng CloudFormation vào tất cả các module mới của hệ thống và dần dần thay thế các cài đặt thủ công của những module cũ.

4. Theo dõi và phát hiện lỗi

Theo dõi và phát hiện lỗi để khắc phục sớm nhất có thể luôn là ưu tiên được đặt lên hàng đầu ở Got It. Chúng mình sử dụng rất nhiều các công cụ và phương pháp khác nhau để thực hiện điều đó.

Để phát hiện các lỗi liên quan đến infrastructure, chúng mình sử dụng AWS CloudWatch. AWS CloudWatch cung cấp rất nhiều các phương pháp khác nhau để theo dõi hệ thống. Ở Got It, khi một module nào đó xuất hiện downtime vượt quá threshold cho trước, AWS CloudWatch sẽ gửi message vào Slack và “@channel” để thông báo cho tất cả mọi người biết.

Để phát hiện các lỗi về mặt tính năng của sản phẩm, chúng mình áp dụng rất nhiều các công nghệ hiện đại như AWS Lambda, Docker, Selenium… để chạy test automation một cách thường xuyên và trực tiếp trên môi trường production. Kết quả chạy test automation này cũng được cập nhật vào Slack một cách tự động để tất cả mọi người có thể được thông báo ngay khi có lỗi phát sinh.

Cuối cùng, để phát hiện các lỗi ở bên trong source code, chúng mình sử dụng sentry.io. Sentry cho phép ta biết được có những exception nào được bắn ra, thông tin của exception đó như nó thuộc bản release nào, ở dòng code nào, các hành động trước đó của người dùng hoặc hệ thống là gì… Ngoài việc bắt những unhandled exception, Sentry còn cho phép chúng ta tự tạo ra các exception và gắn meta data với mục đích riêng. Và tất nhiên, các exception khi xuất hiện sẽ luôn được thông báo thông qua Email và Slack.

5. Vậy công việc của DevOps Engineer ở Got It là gì?

DevOps ở Got It chính là người cài đặt và quản lí các công cụ giúp cả team thực hiện những phương pháp kể trên, cũng như nhiều phương pháp hiện đại khác để đảm bảo tính hiệu quả, tốc độ cao trong các dự án và sản phẩm của Got It. Nói một cách chính xác hơn, DevOps Engineer chính là những người xoá nhoà khoảng cách giữa software development và IT operation, tạo điều kiện thuận lợi nhất để cả team có thể xây dựng và làm chủ các sản phẩm phần mềm của mình.

Tác giả bài viết: T.V.Thắng — Software Engineer tại Got It.

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
September 23, 2019
Share this post to:
Tags:
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback
Việc làm Junior DevOps Engineer - Got It Vietnam
3 years ago

[…] nhất trên thế giới. Got It đang tìm kiếm những ứng viên tài năng cho vị trí Junior DevOps Engineer tại Hà Nội. Bạn sẽ giúp chúng tôi xây dựng và duy trì cơ sở hạ tầng hệ […]

trackback
Senior DevOps Engineer - Got It Vietnam
3 years ago

[…] kiểm thử (testing), phát triển (developing) và những công việc khác, thì DevOps Engineer một sự lựa chọn hoàn hảo dành cho […]

Các bài viết liên quan
Review 10 khóa học DevOps tốt nhất cho developers

Review 10 khóa học DevOps tốt nhất cho developers

Để hiểu sâu hơn về DevOps, bạn có thể tham khảo top 10 khóa học DevOps tốt nhất dưới đây. Từ đó, bạn sẽ có thể lựa chọn cho mình khóa học phù hợp nhất với bản thân trong sự nghiệp phát triển phần mềm nhé. Mục lục1. DevOps Project: CI/CD with Jenkins Ansible Docker […]
Azure DevOps Services là gì? Cách chọn Azure DevOps Services

Azure DevOps Services là gì? Cách chọn Azure DevOps Services

Nếu là một lập trình viên, bạn sẽ không thể bỏ qua những kiến thức chuyên môn về Azure DevOps Services. Vậy cụ thể nó là gì? Làm sao để có thể lựa chọn dịch vụ Azure DevOps đúng cách? Hãy cùng tham khảo bài viết sau đây để có câu trả lời chi tiết, […]
Kubernetes là gì? Vì sao nên sử dụng Kubernetes?

Kubernetes là gì? Vì sao nên sử dụng Kubernetes?

Kubernetes là gì? Bài viết dưới đây sẽ giúp bạn tìm hiểu về khái niệm của Kubernetes, cũng như thành phần và vai trò của hệ thống này trong quản lý, điều phối các container hiện nay.  Mục lụcKubernetes là gì?Thành phần của KubernetesVai trò của KubernetesChức năng của KubernetesCác kết hợp cần thiết Kubernetes […]
DevOps Engineer là gì? Kỹ năng cần có của một DevOps Engineer giỏi

DevOps Engineer là gì? Kỹ năng cần có của một DevOps Engineer giỏi

DevOps Engineer là một nghề khá hot tại Việt Nam trong nhiều năm gần đây. Tuy nhiên, vẫn còn rất nhiều bạn chưa hiểu rõ DevOps Engineer là gì, để trở thành DevOps Engineer giỏi thì cần trang bị những kỹ năng nào. Hãy cùng tìm hiểu những thông tin về DevOps Engineer qua bài […]
DevOps là gì? DevOps Engineer cần trang bị điều gì?

DevOps là gì? DevOps Engineer cần trang bị điều gì?

Một phần mềm được hoàn thiện là thành quả của quá trình phát triển và quá trình quản trị hệ thống. DevOps chính là yếu tố giúp tối ưu hóa vòng đời phát triển phần mềm. Vậy DevOps là gì? Thực chất đây là công cụ hay phương pháp?  Để có được cơ hội nghề […]
Monitoring System: Khi bạn thật sự quan tâm đến người dùng

Monitoring System: Khi bạn thật sự quan tâm đến người dùng

Tại sao chúng ta cần hệ thống Monitoring? Hệ thống monitoring có ích gì cho công ty của bạn?