DevOps ở Got It

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.

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.

Châm ngôn của DevOps: You build it, you own it!

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é.

Á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 đó.

Á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.

AWS in a nutshell

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ũ.

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.

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

DevOps Engineer ở 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.

Click ngay vào đây nếu bạn quan tâm đến vị trí DevOps Engineer của Got It 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 và đọc thêm về quy trình tuyển dụng tại đây.

Tìm hiểu thêm về Got It tại:

 

Facebook

LinkedIn

Instagram

YouTube

Gmail

Zalo

 

Đăng ký nhận newsletter để không bỏ lỡ các bài viết bổ ích và thông tin mới nhất từ Got It

* indicates required

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.

Thao Hoang
Thao Hoang
September 23, 2019
0
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
10 tài liệu lập trình Python tốt nhất

10 tài liệu lập trình Python tốt nhất

Trong 5 năm gần đây, Python luôn được vinh danh trong top những ngôn ngữ lập trình phổ biến nhất và được yêu thích nhất thế giới. Với những newbie về lập trình, Python cũng là một trong những lựa chọn phổ biến, bởi đây là ngôn ngữ lập trình hướng đối tượng bậc cao […]
Học Python từ cơ bản đến nâng cao với hơn 40 dự án thực tế

Học Python từ cơ bản đến nâng cao với hơn 40 dự án thực tế

Python đã và đang là một trong những ngôn ngữ lập trình phổ biến nhất thế giới hiện nay. Nhưng làm gì để thành thạo Python khi bạn chưa có nhiều kinh nghiệm làm việc? Làm sao để có một profile, một CV đẹp để ứng tuyển vào công ty mà bạn ao ước? Có […]
Git và GitHub — liệu bạn đã thật sự biết cách sử dụng?

Git và GitHub — liệu bạn đã thật sự biết cách sử dụng?

Biến Git và GitHub trở thành công cụ đắc lực cùng Software Engineer nhà Got It!
Ở tuổi 22, bạn nên có những kinh nghiệm phỏng vấn gì?

Ở tuổi 22, bạn nên có những kinh nghiệm phỏng vấn gì?

Hai mươi hai tuổi, phần lớn chúng ta đều đứng trước một ngưỡng cửa mang tên “Tốt nghiệp”. Bạn sẽ phải chọn giữa bắt đầu đi làm, hay học lên bậc cao hơn; tự đi tìm việc, hay chờ để được giới thiệu; ở lại thành phố này, hay chuyển đi nơi khác; chọn công […]
Làm Test Engineer ở Got It có lợi thế gì cho bạn?

Làm Test Engineer ở Got It có lợi thế gì cho bạn?

Test Engineer ở Got It là trải nghiệm như thế nào? Sau các bài viết về công nghệ, về quy trình tuyển dụng hay lộ trình đào tạo, hãy cùng nhìn lại một cách tổng quát nhất những lợi thế mà bạn có được khi làm Test Engineer tại Got It nhé! Khác với các […]
Thiền và những lợi ích bạn có thể chưa biết trong ngành lập trình

Thiền và những lợi ích bạn có thể chưa biết trong ngành lập trình

Mình có ý tưởng viết bài này vào một ngày chớm thu ở Hà Nội, khi thời tiết có chút se lạnh và bầu trời có vẻ dịu dàng hơn. Một không khí hoàn hảo để cho ta hít một hơi thật sâu, thả lỏng tâm hồn và cho phép cơ thể được thư giãn. […]