Việc đưa hệ thống lên đám mây giúp người dùng có thể tiếp cận và sử dụng dễ dàng hơn thay vì phải cài đặt local trên máy tính cá nhân, đồng thời đáp ứng nhu cầu kết nối, chia sẻ giữa hàn
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
PHÁT TRIỂN HỆ THỐNG VỚI AMAZON WEB SERVICES
Công ty thực tập : TechXCorp Người phụ trách : anh Lê Minh Ân
TP Hồ Chí Minh, tháng 12 năm 2020
Trang 22
Nội dung
LỜI MỞ ĐẦU 3
Chương 1: Giới thiệu công ty thực tập 7
1 Giới thiệu công ty TechX 7
Chương 2: Nội dung thực tập 8
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 8
2 Nghiên cứu kỹ thuật 8
1.1 Làm quen với Python 8
1.2 Tìm hiểu và phát triển ứng dụng cơ bản với Django 8
1.3 Tìm hiểu mô hình serverless, nền tảng AWS và các service phổ biến 9
1.4 Tìm hiểu các service nền tảng trên AWS và cách sử dụng 10
Chương 3: Chi tiết về project 14
1 Giới thiệu về project 14
2 Usecases 15
3 Sequence diagrams 17
4 Cơ sở đữ liệu 30
Tài liệu tham khảo 33
TỔNG KẾT 34
Trang 33
LỜI MỞ ĐẦU
Hiện nay, khi công nghệ ngày càng phát triển, nhu cầu về việc triển khai các dịch vụ và phát triển hệ thống trên internet gia tăng đáng kể Để đáp ứng được các yêu cầu đó đòi hỏi các nhà phát triển cần phải tiến tới các giải pháp công nghệ tối ưu và mang lại hiệu quả cao nhất về mặt nhân lực, chi phí và thời gian
Cloud computing có thể được xem như 1 xu hướng công nghệ mới, nơi mà mọi dữ liệu, dịch vụ đều được lưu trữ, triển khai trên internet Việc đưa hệ thống lên đám mây giúp người dùng có thể tiếp cận và sử dụng dễ dàng hơn thay vì phải cài đặt local trên máy tính cá nhân, đồng thời đáp ứng nhu cầu kết nối, chia sẻ giữa hàng triệu người dùng với nhau Một trong những giải pháp cho Cloud Computing đang được ứng dụng phổ biến chính là Serverless + Microservices
Microservices là 1 kiến trúc hệ thống cho phép chúng ta phát triển, vận hành và triển khai các dịch vụ (service) một cách độc lập với nhau Các service này có thể giao tiếp với nhau thông qua 1 chuẩn nhất định (TCP, HTTP, …) Đó là một trong những ưu điểm và
lí do mà Microservices được sử dụng rất nhiều trên các hệ thống Cloud (Google, Amazon, …)
Serverless (trái ngược với Server) là một mô hình phát triển hệ thống mà tại đó, việc xây dựng ứng dụng được tách rời độc lập với cầu hình của hệ thống (Server) Hay nói cách khác, các nhà phát triển trên mô hình Serverless không cần phải quan tâm nhiều về các
về đề của phần cứng như RAM, bộ nhớ, cầu hình máy, băng thông, khả năng chịu tải, … Với những đặc điểm kể trên, chúng ta có thể thấy Microservices là 1 kiến trúc tối ưu khi đưa vào mô hình Serverless Các vấn đề của phần cứng giờ đây sẽ do các service đảm
Trang 55
LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty TechXCorp đã tạo điều kiện cho em có cơ hội được thực tập tại công ty
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn chu đáo của các anh mentor, em đã
có cơ hội được tiếp cân, học hỏi cách phát triển ứng dụng trên hệ thông AWS cũng như cách làm việc trong môi trường thực tế
Đặc biệt cảm ơn anh Ân, mentor chính, đã hướng dẫn, giúp đỡ cho em tận tình cả những
khó khăn trong quá trình thực tập; cảm ơn anh Trần Quốc Việt đã giúp em làm quen với môi
trường làm việc và giúp đỡ em khắc phục những thiếu sót cá nhân
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều kiện em làm bài báo cáo này
Nguyễn Duy Minh
TP Hồ Chí Minh, 29/12/2020
Trang 66
NHẬN XÉT CỦA KHOA
Trang 7
7
Chương 1: Giới thiệu công ty thực tập
1 Giới thiệu công ty TechX
TechX là được công ty thành lập nhằm xây dựng hệ thống và cung cấp các giải pháp công nghệ liên quan tới Cloud Computing cho các doanh nghiệp Dù chỉ mới được thành lập trong thời gian không lâu nhưng với đội ngũ phát triển giàu kinh nghiệm, TechX đã có những sản phẩm chất lượng, đáp ứng nhu cầu cho hàng triệu người dùng Các đối tác lớn của TechX có AWS, Oracle, SaleForce, …
Trang 88
Chương 2: Nội dung thực tập
Đợt thực tập với chủ đề “Phát triển ứng dụng serverless trên AWS” nhằm mục đích giúp sinh viên thực tập được có cơ hội học hỏi và làm quen với mô hình serveless, nền tảng AWS và các khái niệm cũng như cách sử dụng các dịch vụ (service) trên AWS Tại công ty, sinh viên có cơ hội được học tập, khám phá và làm việc trong một môi trường năng động và tích cực
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian : 1 ngày
Nội dung : Giới thiệu về công ty và các thành viên trong công ty
- Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triên (như đã nhắc đến ở trên) cũng như đội ngũ nhân lực của công ty
- Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm, các quy định cần phải tuân thủ, cách thức liên lạc, hỏi đáp, …
Kết quả :
Hiểu thêm về công ty TechX, quá trình thành lập và phát triển và các thành viên trong team
2 Nghiên cứu kỹ thuật
1.1 Làm quen với Python
Thời gian : 4 ngày
Nội dung : Tìm hiểu về ngôn ngữ Python, cách setup project và pip
Kết quả : Hiểu cơ bản về cách hoạt động và các package cơ bản của Python
1.2 Tìm hiểu và phát triển ứng dụng cơ bản với Django
Thời gian : 3 tuần
Nội dung : Tìm hiểu và phát triển ứng dụng web sử dụng framework Django
-
Trang 9- Cách cài đặt và sử dụng các package bên thứ 3
- Deploy sản phẩm lên Heroku
Thực hiện: Phát triển 1 ứng dụng web đơn giản
Kết quả :
- Nâng cao hiểu biết và làm quen dần với việc sử dụng Python
- Nắm được cách hoạt động của RESTful API, các cài đặt các chức năng quan trọng như xác thực, phân quyền, bảo mật hệ thống
1.3 Tìm hiểu mô hình serverless, nền tảng AWS và các service phổ biến
Nội dung: Các kiến thức cơ bản về serverless, AWS và các khái niệm cơ bản và cách thức
hoạt động của AWS Services
Khái niệm cơ bản về Serverless Computing
- Serviceless Computing là một giải pháp cung cấp dịch vụ hệ thống dựa trên nhu cầu sử dụng của người dùng Nó cho phép chúng ta cài đặt và triển khai code mà không phải bận tâm về hạ tầng dịch vụ (hệ điều hành, băng thông, bộ nhớ, …)
Chi phí sử dụng phụ thuộc vào nhu cầu sử dụng
- Đa phần các nhà cung cấp dịch vụ serverless đều đưa ra giải pháp
Function-as-a-Service (FaaS) Các developer làm việc độc lập trên các Function này Điều này giúp đơn giản hóa code base và nâng cao khả năng module hóa
Trang 1010
AWS Cloud
- AWS Cloud là 1 nền tảng đám mây do Amazon phát triển Các dịch vụ phổ biến nhất
trên Amazon gồm có như server, lưu trữ, networking, database, máy học, …
- AWS hiện có mặt tại hơn 76 khu vực Người dùng có thể chọn khu vực phù hợp về mặt
địa lý và sản phẩm để giảm thiểu những hạn chế về độ trễ và tăng tính ổn định
Thực hiện :
- Xem khóa học cơ bản về Serverless và AWS trên Udemy
Kết quả:
- Nắm được khái niệm Serverless và kiến trúc Microservices
- Hiểu được cơ bản nền tảng AWS
1.4 Tìm hiểu các service nền tảng trên AWS và cách sử dụng
Thời gian: 3 tuần
Nội dung: Tìm hiểu và nắm vững các service cốt lõi của AWS và cách sử dụng CDK để
thao tác lên các service
IAM (Identity Access Management)
- IAM là 1 service cho phép chúng ta kiểm soát và bảo mật quyền truy cập đến các tài nguyên của AWS IAM đóng vai trò trung tâm trong việc xác thực và phân quyền trên
hệ thống AWS
- IAM cho phép chúng ta:
o Kiểm soát quyền truy cập của các tài khoản AWS
o Chia sẻ quyền truy cập
o Hỗ trợ nhiều cách thức cung cấp quyền truy cập
Trang 1111
o Xác thực nhiều lớp
o Cung cấp quyền truy cập tạm thời cho người dùng / thiết bị / service
S3 (Simple Storage Service)
- S3 là service hỗ trợ việc lưu trữ và quản lí các file.một cách bảo mật và chia sẻ trên nhiều thiết bị khác nhau
- S3 là dịch vụ lưu trữ kiểu object Mỗi file được xem như 1 object với cấu hình của riêng
nó (tên file, phiên bản, định dạng, …)
- S3 là dịch vụ đồng nhất (tất cả các khu vực đều truy cập chung 1 miền dịch vụ)
- S3 sử dụng giao thức HTTPS để tương tác với hệ thống và các service khác
DynamoDB
- DynamoDB là 1 NoSQL database cho khả năng truy xuất nhanh và linh động
- DynamoDB hỗ trợ cả model kiểu document và key-value
- Sử dụng giao thức HTTP/HTTPS để tương tác với các dịch vụ khác
- Có khả năng scale tự động và sao lưu dữ liệu khi số lượng request có biến động
Lambda
- Lambda là 1 computing service cho phép chúng ta cài đặt và thực thi code mà không cần phải cung cấp hay quản lí server Mỗi lambda là một container độc lập với môi trường thực thi riêng và những cấu hình riêng
- Lambda đóng vai trò trung tâm xoay quanh kiến trúc AWS Serverless Các developers sử dụng Lambda để xây dựng những service riêng và tương tác trên toàn bộ nền tảng AWS
- Lambda có thể scale tự động, chúng ta không cần quan tâm về việc service bị sập hoặc
có lỗi xảy ra khi lượng request tăng đột biến
- Lambda cho phép chúng ta:
o Thực thi code như 1 handler từ sự kiện được phát đi của 1 service khác
Trang 1212
o Thực thi xử lý khi có request gửi xuống từ service API Gateway
o Gọi tới 1 service bất kỳ thông qua AWS SDK
- Lambda cho phép setup các cấu hình như biến môi trường, bộ nhớ cấp phát, thời gian timeout, …
- Hỗ trợ test
- Layers: hỗ trợ chúng ta thêm các thư viện hoặc package thứ 3 mà Lambda cần
API Gateway
- API Gateway là 1 service hỗ trợ việc tạo, public, theo dõi và bảo mật REST, HTTP API
- Với API Gateway, chúng ta có thể tạo nên 1 gateway để tương tác giữa client và ứng dụng mà không cần phải quan tâm về phần xử lý ở backend
- API Gateway có thể:
o Tạo HTTP APIs
o Tạo REST APIs
o Tạo WebSocket APIs
- Với mỗi collection của API, chúng ta có thể deploy nhiều phiên bản khác nhau
- Authorizer: là 1 Lambda cho phép chúng ta kiểm soát quyền truy cập của API trước khi request được xử lý
Thực hiện :
- Xem khóa học trên Udemy
- Thực hành trên AWS
-
Trang 1313
Kết quả:
- Nắm rõ các khái niệm của các service trên AWS
- Hiểu được cách thức hoạt động và cách sử dụng các service
2 Thực hiện project
- Sau hơn 1 tháng làm quen với các khái niệm và cách sử dụng cơ bản các service AWS, bước tiếp theo là xây dựng 1 ứng dụng đơn giản nhằm áp dụng và củng cổ những kiến thức đã học cũng như học hỏi về cách các chức năng được thực hiện
trong thực tế
Trang 1414
Chương 3: Chi tiết về project
1 Giới thiệu về project
Xây dựng một ứng dụng web hoàn chỉnh để quản lí các thành phần trong game
Khi xây dựng 1 game, một trong những công việc quan trọng, đó là quản lí các tài nguyên của game Cụ thể, ở đây, ứng dụng sẽ quản lí các game map, dữ liệu của các map, các tài nguyên hình ảnh, file, các đối tượng database, …
Ngoài ra, ứng dụng còn quản lí người dùng với việc quản lí tài khoản, đăng nhập, xác thực, …
Trang 1515
2 Usecases
Trang 1616
Mô tả Usecases:
- Đăng nhập
- Đăng ký: người dùng có thể đăng ký tài khoản mới
- Tạo map mới: người dùng có thể tạo map mới và chia sẻ với người dùng khác
- Cập nhật map: Trong trường hợp map quá khó để chơi thì người dùng có thể chỉnh sửa map tùy ý
- Xem thông tin của map: Sau khi đăng nhập, người dùng có thể xem thông tin cụ thể của
1 map Các thông tin của map bao gồm: tên của map, người tạo, thời gian chỉnh sửa, …
- Lưu lại trạng thái game: Trước khi người dùng chơi 1 map nào đó, trạng thái game của người dùng sẽ được tạo tự động Trong quá trình chơi, người dùng có thể lưu lại trạng thái map mình đang chơi
- Lấy thông tin trạng thái của game: người chơi có thể xem thông tin về trạng thái chơi của
1 map cụ thể Map nào đã hoàn thành, đang thực hiện hoặc chưa vượt qua, …
Trang 1717
3 Sequence diagrams
a Đăng nhập
Trang 1818
b Đăng ký tài khoản mới
Trang 1919
c Cập nhật tài khoản
Trang 2020
d Cập nhật thông tin cá nhân
Trang 2121
e Lấy access token
Trang 2222
f Lấy thông tin người dùng theo ID
Trang 2323
g Tạo map mới
Trang 2424
h Cập nhật map
Trang 2525
i Lấy thông tin map theo ID
Trang 2626
j Lấy danh sách map
Trang 2727
k Tạo trạng thái game
Trang 2828
l Lấy thông tin trạng thái game
Trang 2929
m Xử lí phân quyền cho request
Trang 30user_id string Partition key ID của user
Trang 3131
game_map
created_by string Partition key ID của người dùng đã tạo map
last_edited datetime Sort key Thời gian lần cuối map được cập
nhật
map_file_url string URL của file chứa thông tin của map map_image_url string URL của hình nền của map
game_state
user string Partition key ID của người dùng với trạng thái
game này
game_map string Sort key ID của map tương ứng với trạng thái
của game saved_date datetime Thời gian mà trạng thái được lưu
Trang 3232
Profile (document con của bảng user)
family_name string Họ của người dùng
given_name string Tên của người dùng
picture string URL của avatar người dùng
Trang 3333
Tài liệu tham khảo
AWS Documentation: https://docs.aws.amazon.com/
Github repository: https://github.com/minhnguyenduy99/aws-game-api
Trang 3434
TỔNG KẾT
Như vậy, trong vòng 2 tháng, em đã học hỏi và tạo được 1 web app đơn giản trên nền tảng AWS Tuy chức năng còn đơn giản và chưa áp dụng nhiều kỹ thuật cao nhưng em đã có cơ hội được tiếp cận với công nghệ mới và một phần học hỏi được cách thức thực hiện 1 project trong thực tế thông qua sự hướng dẫn của anh mentor
Chân thành cảm ơn sự giúp đỡ của anh Ân đã hỗ trợ em trong quá trình thực hiện project