Table of Contents
Đối với các công ty công nghệ, xây dựng hệ thống hạ tầng là nền móng cho sự phát triển của mọi sản phẩm, điều này đặc biệt hơn cả với PageFly. Từ một ý tưởng bắt đầu với chỉ một vài người, Pagefly nay đã có thể vận hành hệ thống chạy ổn định cho +90,000 khách hàng sử dụng và có tiếng vang trên khắp thế giới.
Trong bài blog này, chúng ta cũng trò chuyện với anh Quyết (Eric), Lead Infrastructure Engineer đến từ PageFly để có thể hiểu rõ hơn về câu chuyện của anh đằng sau sự thành công này.
Table of Contents
Q: Hi Eric, Anh đã bắt đầu xây dựng hạ tầng cho sản phẩm PageFly như thếnào?
Eric:
Khi anh quyết định trong việc xây dựng hệ thống cho PageFly, có rất nhiều yếu tố cần phải cân nhắc như hiệu năng, khả năng mở rộng, tính sẵn sàng, độ tin cậy, chi phí và vận hành. Trong đó, việc đảm bảo tính sẵn sàng cao (High Availability) cho hệ thống luôn phải được chú trọng hàng đầu để đảm bảo tính liên tục khi truy cập. Mỗi phút bị mất trong thời gian hệ thống bị gián đoạn hoặc không hoạt động (down time) có thể dẫn đến thiệt hại lớn về doanh thu và uy tín của sản phẩm.
Trong đầu lúc đó anh đặt ra những câu hỏi để thiết kế hệ thống PageFly :
- Hệ thống triển khai sẽ đáp ứng được bao nhiêu khách hàng truy cập trong cùng một thời điểm ?
- Vấn đề về mở rộng ứng dựng một cách nhanh chóng và giảm thiểu rủi ro một cách thấp nhất có thể ?
- Quy trình triển khai code lên hệ thống hoàn toàn tự động trên các môi trường Development , Staging , Production.
- Thiết kế hệ thống an toàn và bảo mật dữ liệu, sao lưu dữ liệu định kỳ đảm bảo dữ liệu khách hàng.
Và rồi anh bắt đầu lựa chọn Cloud để xây dựng hệ thống cho PageFly. Hiện nay có rất nhiều nhà cung cấp máy chủ trên thế giới như Amazon Web Service , Google Cloud , Azure… Mỗi nhà cung cấp đều có những lợi thế riêng. Tuy nhiên sau một thời gian nghiên cứu thì anh quyết định lựa chọn Cloud của AWS để giải quyết bài toán trên.
Với AWS, anh có thể xây dựng hệ thống PageFly đáp ứng tính sẵn sàng cao và mở rộng một cách nhanh chóng trên đám mây.
- Web: EC2 và các dịch vụ khác cho phép cung cấp tài nguyên máy chủ, cung cấp các tính năng sẵn sàng cao như cân bằng tải (Load Balancing), tự động mở rộng (Auto Scaling) và cung cấp trên các Availability Zones của Amazon (AZ), những nơi riêng biệt của các trung tâm dữ liệu Amazon.
- Database: Amazon RDS và các managed SQL database khác cung cấp các tùy chọn để tự động triển khai cơ sở dữ liệu với một bản sao dự phòng ở một AZ khác.
- Storage: Các dịch vụ lưu trữ của Amazon, chẳng hạn như S3, EFS và EBS, cung cấp các tùy chọn được tích hợp sẵn. S3 và EFS tự động lưu trữ dữ liệu trên các AZ khác nhau, trong khi EBS cho phép triển khai snapshots tới các AZ khác nhau.
Sau khi đã xác định được những công nghệ dùng cho PageFly thì anh bắt đầu thiết kế mô hình để triển khai.
- Tầng Infrastructure
Tầng Infrastructure bao gồm NAT Gateway, Load Balancers và Bastion/VPN . Các máy chủ này đều thuộc Public Subnet, bởi vì chúng có thể truy cập được Internet thông qua cổng Internet Gateway .
NAT Gateway được triển khai trong 2 Public Subnets ở các zones khác nhau để tránh rủi ro bị chết khi ở trong 1 zone duy nhất.
Bastion/VPN Instance dùng để kết nối đến các tài nguyên riêng tư từ Internet.
- Tầng Web
Để đảm bảo vấn đề bảo mật thì tầng Web được sử dụng trong Private Subnet để tránh bị khai thác dữ liệu và đảm bảo vấn đề bảo mật. Sử dụng Load Balancing để cân bằng tải cho hệ thống PageFly.
Ngoài ra anh còn sử dụng Auto Scaling cho tầng Web trên nhiều availability zones để nâng cao tính sẵn sàng (Availability) và mở rộng (Scalability).
- Tầng Database
Triển khai các Database trong các private subnets riêng biệt. Sử dụng Cơ sở dữ liệu Mongo DB để khởi chạy database trong Multi-AZ để mang tính khả dụng cao và sử dụng tính năng Replicate để sao lưu dữ liệu xuống các máy chủ. Điều này mang lại khả năng mở rộng cho ứng dụng.
- Tầng Cache / CDN
PageFly sử dụng Elasticache Redis trong private subnet riêng biệt. Dịch vụ bộ nhớ cache này sẽ hữu ích cho các lưu trữ sesstion và lưu trữ page. Giúp giảm tải trên các máy chủ cơ sở dữ liệu.
Ngoài ra PageFly còn sử dụng CloudFront. Một dịch vụ CDN của AWS phân phối nội dung tại nhiều máy chủ khác nhau giúp xử lý yêu cầu của khách hàng nhanh hơn.
- Tầng Deployment & Management
Triển khai Deployment & Management servers trong Private subnet riêng biệt.
Hệ thống CICD được triển khai để đảm bảo code luôn được triển khai lên máy chủ một cách nhanh nhất. Monitoring Server được sử dụng để theo dõi tất cả các tài nguyên hệ thống, các chương trình chạy trên server.
Q: Chỉ mới nghe qua thôi cũng đủ để thấy anh đặt rất nhiều tâm huyết vào sản phẩm này. Vậy đối với anh đâu là thách thức lớn nhất trong quá trình xây dựng PageFly và anh vượt qua các thách thức đó ra sao?
Eric:
Trước đây, thách thức lớn nhất khi xây dựng hệ thống PageFly là không thể xử lý sự cố vào khung giờ 1h – 5h sáng. Hệ thống PageFly sẽ có một lượng server hữu hạn để đáp ứng nhu cầu vận hành. Tuy nhiên, khi số lượng yêu cầu công việc tăng lên, sẽ gây ra sự chậm trễ trong xử lý yêu cầu, sự cố khi xử lý hay thậm chí là không đủ tài nguyên để xử lý. Để giải quyết bài toán trên PageFly sử dụng dịch vụ Auto Scaling để khắc phục lỗi này. Auto Scaling tự động tăng số lượng máy chủ đủ để chạy các ứng dụng với hiệu suất tốt nhất và tránh tình trạng máy chủ bị quá tải.
Giả sử số lượng máy chủ cho PageFly là 2 máy chủ. Vào buổi tối lượng khách hàng rất là đông, lượng CPU, RAM tăng đáng kể dẫn đến quá tải. Khi lượng CPU vượt quá ngưỡng 80%, hệ thống PageFly sẽ tự động mở rộng thêm 2 máy chủ nữa để xử lý. Khi lượng khách truy cập giảm và lượng CPU giảm xuống dưới 80% hệ thống sẽ tự động xoá 2 máy chủ vừa được mở rộng thêm để giảm tải vấn đề chi phí. Cứ như vậy, hệ thống PageFly luôn sẵn sàng và tự động và giải quyết được vấn đề không thể xử lý vào khung giờ 1-5h sáng.
Auto Scaling là một trong những dịch vụ rất quan trọng sử dụng cho PageFly, nó giúp ứng dụng hoạt động tốt nhất, tối ưu hóa chi phí vận hành của ứng dụng, nâng cao trải nghiệm của người dùng, không còn các hiện tượng quá tải tắc nghẽn truy cập khó khăn trong thời gian sử dụng Auto Scaling.
Q: Vậy theo anh, một hạ tầng tốt cho một sản phẩm như Pagefly cần những yếu tố gì?
Eric:
Để có thể xây dựng hệ thống PageFly ổn định thì cần khá nhiều yếu tố. Xây dựng hạ tầng xong chưa đủ, phải vận hành nó trơn tru và ổn định mới là điều quan trọng. Có nhiều công nghệ dùng cho PageFly nhưng theo anh các yếu tố sau quan trọng.
Tự động hoá cơ sở hạ tầng
Hạ tầng PageFly sử dụng khá nhiều công nghệ nên xây dựng cơ sở hạ tầng cho PageFly nếu làm thủ công sẽ rất là rối và có thể trong quá trình build hạ tầng có thể dẫn đến sai sót nếu mất tập trung.Thêm nữa, khi mà hệ thống nó càng phình ra đồng nghĩa cấu hình sẽ tương đối phức tạp và việc quản lý bằng tay là điều không thể.
PageFly sử dụng công cụ là Terraform để build hạ tầng một cách tự động bằng việc sẽ viết các đoạn mã để xây dựng và quản lý hạ tầng cho PageFly dưới dạng code.
Terraform là công cụ cơ sở hạ tầng bất biến đa đám mây được HashiCorp đầu tiên giới thiệu thế giới vào tháng 7 năm 2014 và được viết bằng Go.
Bên cạnh đó Terraform có thể quản lý và hỗ trợ hầu hết các nhà cung cấp Cloud lớn hiện nay như:
- Amazon Web Service
- Google Cloud
- Microsoft Azure
Giả sử với mô hình PageFly bên trên nếu xây dựng bằng tay sẽ rất rối và trong quá trình build có thể nhầm lẫn dẫn đến lỗi. Khi chạy hạ tầng với Terraform những tác vụ đó sẽ được build tự động và hạn chế nhiều rủi ro.
Một video demo nhỏ để thấy được sức mạnh của Terraform khi build hạ tầng. Chỉ chưa đầy thời gian anh uống hết một ly cafe đã có thể build được một máy chủ một qua đoạn code.
Tự động hoá cấu hình
Hạ tầng đã ổn và bây giờ là việc quản lý cấu hình. Sau khi có hạ tầng cho PageFly thì công việc tiếp theo là triển khai ứng dụng và quản lý cấu hình trên máy chủ.
Khi build hệ thống PageFly anh có rất nhiều thứ cần phải lo từ cài đặt Node JS , Mongo DB, Cache ,CDN, setup crontab, update phần mềm mới, deploy ứng dụng, chỉnh sửa file cấu hình… Những công việc này làm tốn rất nhiều thời gian của anh nếu buid bằng tay. Vậy có cách nào để tự động hóa những công việc này không? Câu trả lời chính là sử dụng các tool automation để quản trị hệ thống. Hiện nay có rất nhiều các tool có chức năng này như: Chef, Puppet, Ansible, SaltStack, CFEngine, StackStorm,…
Anh sử dụng một công cụ cực kỳ mạnh để quản lý cấu hình là Ansible. Với Ansible anh có thể tự động hoá cho PageFly một cách nhanh chóng và không mất quá nhiều thời gian.
- Configuration Management: Quản lý cấu hình tập trung các dịch vụ cho PageFly như Node JS, Mongo DB… không cần phải tốn công chỉnh sửa cấu hình trên từng server.
- Application Deployment: Deploy các ứng dụng như Node JS , Mongo DB và các dịch vụ khác trên toàn bộ máy chủ của PageFly tự động trên các môi trường Development , Staging , Production.
- Security & Compliance: Quản lý các chính sách về an toàn thông tin một cách đồng bộ trên nhiều sản phẩm và môi trường khác nhau như deploy policy hay cấu hình firewall hàng loạt trên nhiều server.
Một video demo nhỏ để thấy được sức mạnh của Ansible để quản lý cấu hình.
Monitor hệ thống liên tục
Khi đã build xong hạ tầng và triển khai các ứng dụng cho nó cần có một hệ thống Monitor để theo dõi hạ tầng. Anh sử dụng hệ thống Monitor Zabbix kết hợp với Grafana.
Hệ thống Monitor cho PageFly được thiết kế để theo dõi, ghi lại các trạng thái, hoạt động của hệ thống PageFly như tình trạng sức khoẻ như CPU , RAM , data transfer , số lượng request truy cập vào máy chủ ….
Ngoài ra nó còn có khả năng gửi các thông báo, các cảnh báo cho người anh biết khi có nguy cơ sự cố hoặc có sự cố đang diễn ra thông qua hệ thống SMS, email hoặc các ứng dụng như Telegram , Slack … để kịp thời xử lý.
Phân tích logs để xử lý lỗi
Log là một công cụ đơn giản và mạnh mẽ, ghi lại toàn bộ những hoạt động của hệ thống.
Nhờ có log anh có thể tra cứu lại trạng thái của hệ thống trong quá khứ, những code nào đã được chạy, từ đó tìm ra lỗi và xử lý dễ dàng hơn.
Anh sử dụng hệ thống phân tích và xử lý logs ELK Stack cho PageFly.
- Elasticsearch: Cơ sở dữ liệu để lưu trữ, tìm kiếm và query log
- Logstash: Tiếp nhận log từ nhiều nguồn, sau đó xử lý log và ghi dữ liệu và Elasticsearch
- Kibana: Giao diện để quản lý, thống kê log. Đọc thông tin từ Elasticsearch
Q: Qua những chia sẻ ở trên thì có lẽ các bạn độc giả cũng đã hiểu đươc phần nào về hệ thống hạ tầng của PageFly rồi. Vậy trong tương lai, đâu là tầm nhìn và định hướng phát triển của anh với PageFly?
Eric:
PageFly hiện có hơn 100 nghìn khách hàng trên thế giới sử dụng. Và trong tương lai có thể tăng hơn nữa. Với những công nghệ hiện đang sử dụng, PageFly có thể đáp ứng được hàng triệu khách hàng sử dụng. Tuy nhiên công nghệ mỗi ngày thay đổi liên tục, PageFly luôn sẵn sàng cập nhật công nghệ mới giúp trải nghiệm khách hàng tốt hơn.
Trong thời gian tới vấn đề dữ liệu ngày càng phình to đang là điều anh quan tâm cho PageFly. Tuy nhiên anh đã có giải pháp cho nó bằng cách sử dụng công nghệ Sharding trong Mongo DB. Vào một thời điểm thích hợp và dữ liệu quá lớn anh sẽ cập nhật công nghệ Sharding cho PageFly.
Với Sharding việc chia nhỏ dữ liệu của hệ thống và tải chúng lên nhiều server , thêm server để tăng công suất . Mặc dù tốc độ hoặc công suất chung của mỗi máy có thể vẫn thế nhưng mỗi máy xử lý một tập hợp con của khối lượng dữ liệu chung vì thế nó có khả năng mang lại hiệu quả tốt hơn so với một server công suất cao.
Q: Một câu hỏi cuối cùng, anh có thể chia sẻ đâu là thành tựu mà anh thấy tự hào nhất trong quá trình xây dựng PageFly?
Eric:
PageFly là sản phẩm của những con người Việt Nam nhưng được thiết kế giúp hàng trăm nghìn người sử dụng trên toàn thế giới. Anh tự hào vì với những con người BraveBits nhỏ bé nhưng dũng cảm để tạo ra một sản phẩm có tiếng vang trên thế giới. Anh tin rằng trong tương lai sản phẩm còn phát triển nhiều hơn nữa.
Anh cũng cảm thấy khá tự hào vì có thể thiết kế và vận hành hệ thống PageFly chạy ổn định cho hàng trăm nghìn khách hàng sử dụng. Hệ thống không còn gặp vấn đề quá tải vào khung giờ cao điểm. Hệ thống sẽ tự động mở rộng nếu vượt qua ngưỡng mà anh cấu hình giúp hệ thống luôn duy trì ổn định.
Cảm ơn Eric về buổi chia sẻ này.