Nếu như bạn biết cách một nhà máy bia vận hành, bạn cũng sẽ hiểu được cách hoạt động của Amazon Web Service (AWS).

Ảnh của Elevate trên Unsplash

Khi bạn đang bắt tay vào việc tạo ra một web app đầu tiên cho bản thân, là lúc bạn sẽ nghe được những gì người ta nói về việc một sản phẩm mới sẽ được triển khai như thế nào từ trước tới giờ.

Người ta sẽ nói những điều đại loại như: "...Cái thời của tôi á, tôi phải tự mua cho mình cả một server và tự cấu hình nó."

Hoặc là "...tôi phải thức cả đêm để debug nó nữa cơ".

Rất may, những ngày đó đã lùi xa. Bạn có thể triển khai một web app với $10 trong vòng một giờ, nếu như bạn biết mình làm những gì.

Nhưng có một vấn đề nhỏ ở đây, những công cụ tiêu chuẩn như Amazon Web Service (AWS) có thể hơi phức tạp, ít nhất là với những người mới bắt đầu. Mặc dù AWS cung cấp khả năng mở rộng đến mức đáng kinh ngạc từ một người dùng (user) đến cả hàng trăm thậm chí hàng triệu người dùng... nó vẫn cần phải được cấu hình lại một chút.

Tôi muốn tìm hiểu hết tất cả các chức năng chính mà AWS có. Sau vài giờ suy nghĩ, tôi nhận ra rằng hệ sinh thái AWS cũng tương tự như các bộ phận của một nhà máy bia công suất lớn.

Đây là tóm tắt sơ lược:

Và trên đây, "phía sau một web app" là năm công cụ phổ biến của AWS. Tôi sẽ đi vào giải thích Heroku, một công cụ phổ biến để triển khai một web app mang ít tính linh hoạt nhưng dễ dàng cho việc bắt đầu.

Video chính thức từ AWS này sẽ cho bạn một vài hình dung về công cụ ta đang nói tới:

Để hiểu được đoạn clip hướng dẫn này, bạn cần phải hiểu được mô hình client-server, có thể đọc thêm ở đây

Một hình dung về Amazon Web Service (AWS).

Hãy tưởng tượng bạn là một người thích tự nấu bia. Bạn bắt đầu với việc tự làm bia trong bếp rồi tự uống và mang cho bạn bè. Và mọi người bắt đầu đồn nhau về bia bạn tự nấu ngon như thế nào. Để đáp ứng nhu cầu tăng trưởng, bạn quyết định thuê một số thiết bị cùng một mặt bằng trong một nhà kho nào đó và hình dung ra một nhà máy sẽ trông như thế nào. Bạn nhận những đơn đặt hàng từ các nhà phân phối, các nhà hàng, và những người buôn bán tự do.

 

Trong ví dụ trên, đơn hàng tới từ những khách hàng - một trong những nhà hàng hoặc những nhà phân phối. Đây được gọi là một request (yêu cầu). Nhà máy bia của bạn sẽ nhận đơn hàng và thu các khoản thanh toán qua hóa đơn, đây được gọi là một respond (phản hồi). 

Tương tự như vậy, trình duyệt web gửi một request (yêu cầu) tới server dựa trên những gì bạn yêu cầu. Server sẽ trả về những thông tin được yêu cầu qua một respond (phản hồi).

 

Đây là cách nhìn chuyên nghiệp hơn này, tất nhiên rồi!. Ta sẽ đi vào tìm hiểu sâu hơn từng quá trình khác nhau xảy ra ở phía server (server-side) khi khám phá AWS. Trong cách giải thích bằng nhà máy bia ở trên, ta giả định rằng mọi thứ sẽ đi từ trái qua phải. Giờ là lúc sắp xếp sao cho nhà máy bia có thể vận chuyển các đơn hàng một cách chuẩn xác nhất.

Giải thích Heroku - Cách đơn giản hơn để thay thế AWS.

Trước khi chúng ta tìm hiểu năm bộ phận của AWS, bạn nên biết thêm về cách thay thế đơn giản này. Heroku có thể quản lý nhiều thứ trong hệ thống của bạn, thực tế chúng được xây dựng trên nền tảng hạ tầng AWS.

Heroku cho phép bạn triển khai nhiều phiên bản mới hơn cho ứng dụng bạn đang có bằng cách dùng lệnh git push heroku master. Nó còn có thêm một loạt các thư viện add-ons cho phép bạn bổ sung thêm các tính năng mới cho các dynos, hoặc cho các server ảo.

Heroku là một dạng kiểu như thuê nhà thầu thuộc bên thứ ba để quản lý nhà máy bia của bạn. Tất cả những gì bạn cần làm là cung cấp các công thức, nhà thầu này sẽ sử dụng các chuyên gia của họ cho việc vận hành nhà máy bia và cả việc nấu bia. Họ cũng sẽ cung cấp một đội ngũ, các thiết bị và những mối quan hệ với những nhà cung cấp.

Điều này khiến bạn thấy thật kỳ diệu. Giờ đây bạn có thể tránh khỏi những ngày tháng khổ sở và đau đớn để dành thời gian cũng như công sức vào việc học cách vận hành một nhà máy, nhưng có hai điều bạn cần đề phòng:

  1. Cách làm này có thể sẽ tốn của bạn nhiều chi phí hơn, bạn sẽ phải trả tiền cho các chuyên gia cùng các khoản chi cho quỹ lương, vật liệu thô...
  2. Chúng có thể sẽ không mở rộng quy mô như cách bạn mong muốn. Tưởng tượng bạn bắt đầu nhận được một đơn hàng triệu đô và bạn cần tăng quy mô vận hành, việc chuẩn bị mọi thứ có thể sẽ không đủ nhanh chóng để đáp ứng nhu cầu bạn cần.

Heroku có những ưu/nhược điểm, tốn nhiều chi phí hơn một chút nhưng nó cho phép bạn bắt đầu mọi thứ ngay lập tức. Nếu bạn muốn mở rộng quy mô, bạn có thể phải rời hệ thống của bạn sang AWS, nghĩa là dù thế nào đi nữa bạn vẫn sẽ phải học về hệ thống AWS.

Với những gì đã nói ở trên, hãy tìm hiểu về những công cụ trong AWS.

AWS Storage Tools (Các công cụ lưu trữ)

Đây là mục đầu tiên trong ba mục khiến bạn thấy chúng gần như tương tự như nhau, vậy nên hãy chuẩn bị để bắt đầu hành trình nào!

Trong nhà máy bia, có rất nhiều thứ static-asset không thay đổi nhưng cần thiết cho việc nấu bia. Hãy nghĩ đến những loại máy móc, những dây chuyền lắp ráp hay những thiết bị tạo ra năng lượng cho công nhân sử dụng. Bạn không thể tháo chúng ra từng phần nhỏ rồi ghép chúng lại nhưng chúng có thể sử dụng hết lần này qua lần khác mà vẫn hữu ích.

Điều này giống như Amazon S3. S3 là một dịch vụ đám mây cho phép bạn lưu trữ những static assets như những bức ảnh chẳng hạn, nó là viết tắt của Simple Storage Service.

Khái niệm "lưu trữ các static-asset" (storage of static assets) trong trường hợp này hơi khác một chút so với cách bạn nghĩ ngoài đời. Ngoài đời thực, lưu trữ mọi thứ giống như việc bạn vứt nó lên gác xếp và lãng quên nó nhưng với các dịch vụ đám mây, những thứ này được cất giữ và có thể lấy ra trong vòng vài miligiây. 

Khái niệm này cũng khác với lưu trữ database thông thường, bởi dữ liệu ở database chỉ có thể truy vấn (queried), còn static asset chỉ có thể yêu cầu (requested).

AWS Database Service (Dịch vụ dữ liệu)

Dịch vụ cơ sở dữ liệu quan hệ của Amazon (Amazon Relational Database Service - viết tắt là RDS) cho phép bạn thiết lập và vận hành cơ sở dữ liệu quan hệ của bạn trong AWS, một số ví dụ thường thấy là MySQL, PostGreSQL và Microsoft SQL Server.

Trong ví dụ về nhà máy bia, nó giống như một nơi chứa các loại chai lọ, nhãn mác, mạch nha hay các thành phần cần thiết khác để làm bia, tôi cho là nó còn có cả tài khoản ngân hàng của công ty bạn - được coi như một dạng dynamic storage.

Bạn có thể thắc mắc tại sao tôi lại đi nhắc lại về vấn đề lưu trữ sau mấy ví dụ vừa rồi, vì những yếu tố vừa nói trên "động" (dynamic) hơn nhiều - chúng luôn được kết hợp hoặc thay đổi một cách nhất quán để xử lý các request từ phía người dùng/khách hàng.

Đây là kiểu dữ liệu bạn sẽ phải truy vấn (query), thay vì request, giống như các ví dụ trước. Nếu như bạn đang quản lý một cơ sở dữ liệu (database) cho facebook, dữ liệu này bao gồm dữ liệu về người dùng, các bài viết được đưa lên mục News Feed.

Một lưu ý cuối cùng, dữ liệu (lúa mạch, chai lọ...) sẽ chỉ hữu dụng cho việc chuyển các nội dung phản hồi (respond) về phía người dùng. Nếu muốn đánh giá hiệu suất nhà máy của bạn, bạn cần phải thiết lập một quy trình mới cho team vận hành.

Tưởng tượng đội vận hành nhà máy chạy lòng vòng như lũ điên khắp nhà máy, cố gắng theo dõi hiệu suất làm việc trong khi từng công nhân cố gắng làm ra nhiều chai bia nhất có thể, do vậy hai đội này đang đi theo hai hướng khác nhau.

Đó là khi kho dữ liệu (data warehouse) vào cuộc.

AWS Data Warehouse Tools (Các công cụ về kho dữ liệu)

Hãy làm rõ một điều ở đây: "kho dữ liệu" (data warehouse) là một cái tên tồi tệ cho một dịch vụ đám mây... Ờ phải đấy!, nó có thể có nghĩa với những lập trình viên nhiều năm kinh nghiệm, nhưng với những người mới bắt đầu thì... hmmm... Có bao nhiêu thứ trong lĩnh vực phát triển web mang khái niệm tương tự warehouse? Nhiều cực luôn!

Một ví dụ phổ biến của kho dữ liệu là Redshift. Những công cụ kiểu này giúp việc phân tích dữ liệu của các nhà phát triển trở nên dễ dàng hơn. Nó bao gồm các cơ sở dữ liệu quan hệ, cũng như ERP, CRM hay một số các dữ liệu marketing tự động hóa khác.

Hãy trở lại với nhà máy bia, cho tới lúc này, tất cả các dữ liệu đang ở dạng không dễ tiếp cận. Chúng ở dạng chai lọ, các túi houblon hay các nguyên liệu thô nằm rải rác khắp nhà máy. Một nhà phân tích sẽ cần phải đếm thủ công từng thứ nếu như muốn đánh giá tính hiệu quả của nhà máy.

Bạn cần có cách để chuyển các dữ liệu (trường hợp này là physical data) thành dạng dữ liệu máy móc có thể hiểu được, tức là sẽ giúp đội vận hành đưa nhà máy hoạt động hiệu quả hơn. Hãy nghĩ nó như một hệ thống cảm biến đặt quanh nhà máy, những cảm biến này chuyển những nguyên liệu thô thành những thông tin máy móc đọc được, như vậy sẽ giúp ích cho việc phân tích sau này.

Cho tới giờ, khi nhà máy đã vận hành, dữ liệu sẽ được tự động thu thập và chia sẻ với team vận hành nhà máy để họ có thể đánh giá chính xác sự hiệu quả.

Bạn đã thấy nó giúp cả nhà máy và đội sản xuất bớt stress như thế nào chưa? Đội sản xuất chỉ cần tập trung vào làm bia còn đội vận hành chỉ cần ngồi trong văn phòng mà phân tích mọi thứ. Đây là một lý do tốt để sử dụng kho dữ liệu, nó giảm thiểu các lệnh truy vấn cho cơ sở dữ liệu - thứ luôn làm chậm hệ thống.

Hy vọng bạn sẽ hiểu được tại sao "kho dữ liệu" lại gây nhầm lẫn, nó tạo ra một dataset chỉ dành cho các nhà phân tích. Nhưng cũng khó có thể kể được hết vì sao lại có nhiều "thứ-đại-khái-như-warehouse" đến vậy trong những phần khác của hệ thống.

AWS Computing Tools (Các công cụ tính toán)

Ở các sơ đồ đã thấy từ trước đến giờ, bạn có thể để ý rằng "nhà máy" luôn nằm ở giữa, dù là sơ đồ về nhà máy hay sơ đồ về các môi trường tinh toán của hệ thống cloud.

Đó là vì chúng ta chưa bao nhắc đến một dịch vụ kết hợp tất cả những thứ này lại với nhau, đó là EC2 hay Elastic Computed Cloud. EC2 cho phép bạn triển khai các phiên bản ảo (virtual instance) đại khái như "nhà máy" trong ví dụ này.

Các phiên bản ảo này là các server ảo. Không như các công nghệ trước đây, khi code của bạn luôn phải đi liền với server vật lý, server ảo cho phép bạn triển khai code trên môi trường cloud, vốn được tạo ra từ việc kết nối nhiều server, đây là phần gắn các dịch vụ khác của AWS vào làm một.

Có thể xem điều này đại khái như việc bạn có thể mở hoặc đóng cửa nhà máy bất kỳ lúc nào tại bất cứ nơi đâu trên thế giới bằng việc copy một nhà máy sẵn có, điều này nghe phi lý trong đời thực nhưng trong hệ sinh thái của AWS điều này lại khả thi. EC2 còn cung cấp chức năng tương tự cho cả không gian vật lý lẫn công nhân trong nhà máy.

Sơ đồ có thể bị nhầm lẫn, vì một server ảo không thể thể hiện hết được cả server, nó nằm trong mạng lưới gồm nhiều server và nó lại quá phức tạp để diễn tả trong biểu đồ nhỏ như thế này, nên tôi đành giữ nó như vậy.

AWS Management Tools (Các công cụ quản lý)

Mục cuối cùng tôi nói tới là các công cụ quản lý, giống như Elastic Beanstalk hay CloudWatch, những công cụ này có thể:

  1. Giám sát các công cụ liệt kê dưới đây
  2. Thiết lập quy trình cho các công cụ khác nhau cùng hoạt động

Trong hình minh họa trên, nhiều công cụ giúp triển khai và bảo trì ứng dụng của bạn, đó là lý do vì sao chúng giống như hệ thống quản lý của công ty, chúng sẽ không giúp bạn sản xuất bia nhưng thay vào đó sẽ giúp cho các bộ phận làm việc được cùng nhau.

Sẽ có vô số các công cụ quản lý trong mục này, nên tôi sẽ không đi sâu vào từng công cụ cụ thể nào. Những công cụ này được đặt ở mức độ cao hơn các công cụ ta đã nói lúc trước.

Qua bài viết vừa rồi, chúng ta đã phần nào biết được cách hoạt động của Amazon Web Service, mọi ý kiến đóng góp, vui lòng để ở phần comment phía dưới

Nguồn tham khảo tại đây.