Engineering

AWS #1 – Sự lựa chọn của EGANY

Trong giới công nghệ hiện nay, Amazon Web Service không còn là một cái gì quá mới mẻ khiến mọi người phải bật lên hỏi: "Ủa, AWS là gì vậy?"

AWS có hầu hết những thứ mà một hệ thống cần như Cloud Server, Storage, Domain Management, CDN… AWS giúp doanh nghiệp tập trung vào phát triển ứng dụng, thay vì quá tốn thời gian vào xây dựng cơ sở hạ tầng.

Tuy nhiên sử dụng AWS một cách hiện quả và tiết kiệm cũng không phải là đơn giản. Chính vì thế, trong chuỗi bài viết này, mình sẽ chia sẽ cách mà team sử dụng AWS.

Bối cảnh

EGANY là đội ngũ phát triển những giải pháp tối ưu UX/UI và CR trên eCommerce Website cho doanh nghiệp vừa và nhỏ. Để có thể phục vụ hàng ngàn chủ shop, team cần một hệ thống server đủ mạnh, có khả năng mở rộng và có tính ổn định cao.

Chính vì thế, team đã lựa chọn Cloud Server thay vì tự xây dựng, giúp giảm thiểu chi phí đầu tư và bảo dưỡng. Tập trung được vào phát triển sản phẩm hơn.

Giai đoạn ban đầu, team đã sử dụng Cloud Server phía Digital Ocean (DO) – một đơn vị chuyên cung cấp server cho các doanh nghiệp vừa và nhỏ.

Điểm mạnh của DO chính là: Giao diện đơn giản, chi phí server không cao, có hỗ trợ sẵn về storage, CDN.. . Nhìn qua thì có vẻ quá tuyệt vời đúng không!?

Tuy nhiên, khi EGANY ngày càng phát triển, nhiều thành viên tham gia team hơn, khách hàng cũng nhiều hơn thì nhu cầu của team cũng nhiều hơn. Khi đó, cái mà team cần chính là sự ổn định của hệ thống, sự phân quyền rõ ràng của các thành viên, triển khai và nâng cấp hạ tầng nhanh chóng & tự động.. . Cái mà DO hiện tại chưa làm tốt lắm.

Chính vì thế, team đã phải tìm đến những giải pháp khác như Google Cloud Platform, Microsoft Azure Cloud và AWS.

Trong khi team đang nghiên cứu và thử nghiệm thì niềm vui ập đến, team đã nhận được một gói tài trợ 25 ngàn đô trong 2 năm từ AWS. Nhờ đó, team đã có cơ hội "vung tiền" và "thử sai" với AWS. Để rồi, chuỗi bài viết về Amazon Web Service đã ra đời!

Bắt đầu sử dụng AWS

Mình sẽ liệt kê và giới thiệu sơ về các dịch vụ và tài nguyên giai đoạn ban đầu EGANY đã sử dụng như bên dưới:

EC2

Trong AWS, VPS (Máy chủ ảo) được gọi là EC2. Nếu bạn chưa hiểu về khái niệm VPS thì VPS là dạng máy chủ được tạo ra bằng phương pháp phân chia một máy chủ vật lý thành nhiều máy chủ khác nhau, có tính năng tương tự một máy chủ riêng (dedicated server), chạy dưới dạng chia sẻ tài nguyên từ máy chủ ban đầu đó.

Quá trình quản lý EC2 cũng khá đơn giản. Chỉ cần setup và click, hàng chục, hàng trăm EC2 với các cấu hình khác nhau sẽ được tạo ra trong vài phút.

Sau khi dùng EC2, sự ổn định của Server được cải thiện rõ rệt, không còn tình trạng "bỗng dưng rớt mạng khi giao tiếp giữa nhiều service trên các VPS".

S3

S3 là storage dùng để lưu trữ dữ liệu dạng tĩnh của AWS như image, video, audio, thậm chí là các file css, js.

Trước khi sử dụng AWS S3, team vừa lưu trữ các dữ liệu trên trên local của VPS, vừa lưu trữ trên storage của những bên khác. Kết quả là gây ra sự bất tiện, tài nguyên phản hồi chậm, hệ thống khó scale hơn.

S3 là một sự lựa chọn tuyệt vời để lưu trữ dữ liệu trong hệ thống phân tán. Nhờ có S3, bạn hoàn toàn có thể bỏ luôn NFS (Network File System), giúp quá trình scale diễn ra cực kì dễ.

Ngoài ra, để tăng tốc độ phản hồi, team đã kết hợp S3 với CloudFlare CDN (Free CDN của CloudFlare), giúp hệ thống ổn định hơn rất nhiều!

VPC

VPC là dịch vụ dùng để quản lý network của EC2, ECS trong AWS.

Hiểu đơn giản thì VPC cũng giống như một mạng LAN nhà bạn vậy. Mỗi EC2 tham gia vào VPC sẽ được gán một IP, gọi là Private IP. Chúng sẽ giao tiếp được với nhau thông qua Private IP.

Còn nếu bạn muốn cho các EC2 này giao tiếp với bên ngoài internet, hoặc từ internet giao tiếp được với EC2, bạn sẽ cần gán public IP cho nó thông qua "tự động" hoặc "thủ công".

IAM

Trong một công ty sẽ có nhiều team, và mỗi team sẽ có các thành viên với vai trò khác nhau. Là một người có quyền cao nhất (admin), chắc hẳn bạn không muốn các team, các thành viên có quyền như nhau phải không nào!

IAM giúp bạn phân quyền sử dụng theo từng thành viên trong team. Có người sẽ là có quyền thao tác với quyền admin, có người sẽ có quyền thao tác với S3, EC2, SMM, ECS…

IAM rất phức tạp, nhưng cũng rất hữu ích để giúp hạn chế những tác động không tốt từ người vượt quyền. Nếu có thời gian, mình sẽ viết một bài riêng về IAM.

Cloud Watch

Về bản chất thì Cloud Watch cũng giống như cụm ELK vậy (ElasticSearch – Logtash – Kibana). Nó giúp monitoring hệ thống của bạn, từ RAM, CPU, Disk… của các con EC2 tới RAM, CPU, Log… của từng container chạy trong EC2.

Container có tính năng giống như một máy chủ ảo của VMWare vậy, đều cung cấp một hệ điều hành ảo để chạy ứng dụng. Khác biệt cơ bản nhất của máy chủ ảo trong VMWare chính là chúng cần được hệ điều hành cấp phát RAM, CPU, DIsk… và chúng sẽ chiếm luôn nguồn tài nguyên này, dù chúng không dùng tới. Còn đối với Container, chúng giống như một ứng dụng thông thường hơn, chúng sẽ dùng chung RAM, CPU, Disk… với máy chủ, mà không "độc chiếm" làm của riêng.

Nhờ đó, bạn có thể theo dõi hệ thống của mình tốt hơn, giúp quá trình fix bugs/ra quyết định thủ công/tự động chính xác hơn khi hệ thống sắp/đang/đã gặp sự cố.

Vẫn còn nhièu tài nguyên khác mà team mình đang sử dụng. Tuy nhiên, để tránh bài viết quá dài, mình xin tạm dừng tại đây với vài mục giới thiệu, không đi sâu vào chi tiết. Hẹn bạn ở bài viết kế tiếp nhé.

Tạm kết

Vậy đã xong phần 1 Amazon Web Service rồi.Trong bài này, mình đã giới thiệu với mọi người về cái duyên dẫn team tới AWS, lý do của sự lựa chọn (từ DO sang AWS), cũng như giới thiệu qua các tài nguyên mà team sử dụng.

Tuy nhiên, mọi chuyện chỉ mới bắt đầu.

Người ta thường có câu "Đời không như mơ", chẳng có việc gì mà suôn sẽ ngay từ đầu cả, và team mình cũng vậy.

Khi mới bắt đầu, có 3 vấn đề khó khăn mà mình nghĩ team nào cũng sẽ gặp phải. Đó là: không biết bắt đầu từ đâu, vấn đề phân quyền các thành viên trong teamchi phí tăng đột biến. Những vấn đề trên mình sẽ trình bày trong phần 2.

Nào, Amazon Web Service #2 – Khó khăn và hướng giải quyết của EGANY đang chờ đợi bạn. Hãy cùng đón xem nhé!

Tuấn Nguyễn

Backend @ EGANY

Share
Published by
Tuấn Nguyễn

Recent Posts

AWS #3 – Kinh nghiệm triển khai EC2

Trong phần trước, mình đã chia sẻ với mọi người những khó khăn khi team…

2 years ago

Microservices #4: Làm việc đa môi trường và sự chờ đợi của Frontend

Xin chào, tiếp tục loạt bài về trải nghiệm của mình trong việc xây dựng…

2 years ago

Frontend Du Ký S2E3 | Cross-platform Apps (phần 3): Có công mài sắt, có ngày release

Cắm đầu cắm cổ dọn dẹp deadline và dọn nhà trước Tết nên ngâm bài…

2 years ago

Front-end Engineer (Reactjs, Nextjs, TypeScript, Svelte, TailwindCSS..)

Nếu bạn yêu thích phát triển sản phẩm với nhiều thử thách và cơ hội…

2 years ago

AWS #2 – Vấn đề và giải pháp

Trong phần 1, mình đã giải thích lý do tại sao EGANY chọn AWS làm…

2 years ago

Microsevices #3 – Service Communication – 3 lần thay đổi

Xin chào! Chúng ta lại quay trở lại với loạt bài về trải nghiệm của…

2 years ago