Cloud Computing hay còn gọilà điện toán đám mây là một mô hình dịch vụ mà ở đó người dùng có thể truy cập đếncác tài nguyên điện toán dùng chung như mạng, các máy chủ, ứng dụng, dịch vụ,
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
**********
BÁO CÁO
ĐỀ TÀI:
Architecture of Sofware in Cloud
Giảng viên hướng dẫn : TS Nguyễn Nhất Hải
TS Trịnh Thành Trung
Chu Xuân Kiên - 20212609M Trịnh Hữu Trường – 20211039M
Hà Nội, 09 - 2022
1
Trang 2Mục lục
Mục lục 1
Danh mục hình ảnh 2
I Giới thiệu tổng quan về cloud, aws, azure, gcp 4
II Kiến trúc phần mềm trong Cloud 7
1 Kiến trúc Client server 7
1.1 Giới thiệu 7
1.2 Kiến trúc Client – Server trên Cloud 11
2 Kiến trúc Microservices 15
2.1 Giới thiệu 15
2.2 Kiến trúc Microservices trên Cloud 16
3 Kiến trúc 3 tầng 27
3.1 Tổng quan về kiến trúc 3 tầng 27
3.2 Mô hình kiến trúc 3 tầng trong AWS 28
III Kết luận 32
Tài liệu tham khảo 33
Trang 3Danh mục hình ảnh
Hình 1: Mô hình Cloud Computing 4
Hình 2: Mô hình Client Server 8
Hình 3: Phương pháp sizing 9
Hình 4: Mô hình kiến trúc Client - Server khi triển khai trên Cloud 13
Hình 5: Kiến trúc monolithic và microservices 15
Hình 6: Kiến trúc tổng thể của 1 hệ thống shop sử dụng microservices 16
Hình 7: Kiến trúc microservices (cụ thể AWS) 17
Hình 8: Kiến trúc mircroservices AWS cho ứng dụng Sales Portal for Automotive 19
Hình 9: Sơ đồ luồng thực hiện theo mô hình kiến trúc 20
Hình 10: Kiến trúc microservices trên Azure Kubernetes Service 22
Hình 11: Kiến trúc Microservice trên Google Cloud 24
2
Trang 4I Giới thiệu tổng quan về cloud, aws, azure, gcp
Công nghệ ngày càng phát triển đã sinh ra những mô hình, dịch vụ phần mềm mới, đadạng, tiện lợi và phù hợp với nhu cầu của người dùng Cloud Computing hay còn gọi
là điện toán đám mây là một mô hình dịch vụ mà ở đó người dùng có thể truy cập đếncác tài nguyên điện toán dùng chung như mạng, các máy chủ, ứng dụng, dịch vụ, lưutrữ chỉ thông qua kết nối mạng máy tính vào mọi lúc mọi nơi, dễ dàng tiếp cận và phục
vụ theo yêu cầu Những tài nguyên này có thể được tạo ra hoặc loại bỏ bằng ngườidùng cuối mà không cần sự can thiệp của các nhà cung cấp dịch vụ Hình dưới mô tảcác thiết bị và người dùng cuối sử dụng Cloud Computing cũng như các dịch vụ mà nócung cấp
Hình 1: Mô hình Cloud ComputingĐặc điểm của Cloud Computing là khả năng truy cập tài nguyên thông qua kết nốimạng băng thông rộng, tốc độ cao Người dùng có thể tùy chọn cấu hình dịch vụ theomong muốn Tài nguyên trên Cloud Computing sẽ được sử dụng chung cho nhiềungười với nhiều mục đích khác nhau Khi sử dụng tài nguyên điện toán thì sẽ được
Trang 5giám sát, kiểm tra theo thời gian thực Tài nguyên có thể tăng giảm tự động mà khôngcần người điều phối Khi kết hợp nhiều máy chủ với lượng tài nguyên nhàn rỗi, nhữngngười dùng có nhu cầu có thể cùng nhau chia sẻ lượng tài nguyên đó và từ đó sẽ tối ưuđược năng lực của các tài nguyên này Khi dùng chung như vậy thì chi phí dịch vụcũng sẽ rẻ hơn.
Cloud Computing sẽ giúp người dùng truy cập dịch vụ mọi lúc mọi nơi chỉ cần kết nốimạng Internet Các ứng dụng và dữ liệu lưu trữ không cần phải gắn trên các thiết bịphần cứng mang theo người Các ứng dụng trên điện toán đám mây cũng có thể dễdàng mở rộng quy mô, dễ dàng thay đổi lượng tài nguyên theo nhu cầu Các nhà pháttriển ứng dụng có thể tiết kiệm chi phí mua, lắp đặt và bảo trì hạ tầng máy chủ, khôngtốn chi phí thuê địa điểm đặt máy chủ, từ đó tiết kiệm chi phí tối đa Các phần mềmtrên điện toán đám mây cũng có thể dễ dàng nâng cấp bảo trì cập nhật liên tục màkhông sợ gián đoạn, có khả năng chống lỗi cao Mạng lưới điện toán đám mây là trêntoàn cầu, do đó các dịch vụ trên cloud có thể truy cập ở mọi nơi trên thế giới, điều nàycũng là yếu tố quan trọng cho các nhà phát triển ứng dụng quy mô toàn cầu Ngoài ra,các thông tin, dữ liệu lưu trữ cũng không bị mất do thiên tai, lũ lụt ở một địa điểm nào
đó do dữ liệu lưu trữ trên điện toán đám mây được sao lưu ở khắp nơi trên thế giới,đảm bảo sự an toàn của dữ liệu Các cơ chế bảo mật dữ liệu của điện toán đám mâycũng rất mạnh mẽ
Có 3 loại điện toán đám mây phổ biến hiện nay là:
- Cơ sở hạ tầng như một dịch vụ (IaaS): là loại dịch vụ đám mây mang tính chất
hạ tầng nên nó cho phép người dùng khả năng tùy chỉnh tối đa Thông thường đượcdùng cho các nhà phát triển ứng dụng, các công ty, doanh nghiệp có kiến thức về côngnghệ thông tin Nó cho phép tạo ra các máy chủ ảo, tự xây dựng cấu hình máy ảo đó từ
vi xử lý, bộ nhớ, mạng, hệ điều hành …
- Nền tảng như một dịch vụ (PaaS): là loại dịch vụ đám mây mang tính chất nềntảng tức là không phải chỉ cung cấp các máy ảo rỗng mà thay vào đó là các máy ảo đãđược cài các môi trường phát triển phần mềm, có các môi trường lập trình, thư viện,phương thức triển khai hệ thống phần mềm Nhờ đó, các doanh nghiệp phát triển phầnmềm chỉ còn phải tập trung vào business của mình
5
Trang 6- Phần mềm như một dịch vụ (SaaS): là một loại điện toán đám mây phổ biếnnhất hiện nay Nó cung cấp đến người dùng những phần mềm hoàn chỉnh và có thể sửdụng được ngay Các phần mềm này không cần phải tải về máy mà thay vào đó là chạytrực tiếp trên trình duyệt nhờ đó có thể hoạt động trên đa nền tảng, tiết kiệm thời giancài đặt phần mềm.
Với những tiềm năng và lợi thế lớn như vậy nên ngành điện toán đám mây đã và đangphát triển rất mạnh mẽ Hàng loạt các nhà cung cấp dịch vụ điện toán đám mây ra đời
để bắt kịp xu thế Trong số đó phải kể đến những nhà cung cấp dịch vụ điện toán đámmây hàng đầu bao gồm Amazon Web Services (AWS), Microsoft Azure, Google CloudPlatform (GCP) Đây là 3 nhà cung cấp dịch vụ lớn nhất đến thời điểm hiện tại vớihàng trăm dịch vụ khác nhau Amazon Web Service được ra đời năm 2006 doAmazon.com phát triển Có thể coi là nhà cung cấp dịch vụ ra đời sớm nhất và hiệncũng đang chiếm thị phần lớn nhất AWS là một nền tảng đám mây toàn diện với hơn
200 dịch vụ từ tính toán, lưu trữ đến giám sát, triển khai … Microsoft Azure doMicrosoft phát triển ra đời muộn hơn AWS vào năm 2010, nó cũng chứa trong mìnhhơn 200 dịch vụ, đặc biệt là các dịch vụ SaaS Office 365 như Word, Excel,Powerpoint… đã rất phổ biến với đại đa số người dùng văn phòng Google CloudPlatform được cung cấp bởi Google ra đời vào tháng 4 năm 2008 với hơn 90 dịch vụ,tập trung chủ yếu vào các nhà phát triển ứng dụng vừa và nhỏ, đặc biệt là mạnh mẽtrong các dịch vụ AI Machine Learning Ngoài ra, ở trong nước ta cũng có nhiều đơn
vị đã triển khai các dịch vụ cloud như Viettel IDC, FPT Smart Cloud… đều là cáccông ty công nghệ hàng đầu của Việt Nam
Đối với các nhà phát triển ứng dụng trên điện toán đám mây Ngoài việc học cách sửdụng các dịch vụ của nhà cung cấp điện toán thì việc thiết kế phần mềm trên một cơ sở
hạ tầng mới mẻ cũng đòi hỏi những kiến trúc phần mềm phù hợp và tối ưu Do đó,trong đề tài này chúng em sẽ đi sâu vào tìm hiểu và nghiên cứu một số các kiến trúcphần mềm được sử dụng trong điện toán đám mây
Trang 7II Kiến trúc phần mềm trong Cloud
1 Kiến trúc Client server
1.1 Giới thiệu
Client Server là một kiến trúc rất phổ biến hiện nay được sử dụng trong nhiều phầnmềm đặc biệt là các phần mềm network, lưu trữ tập trung Với kiến trúc này, sẽ cónhiều client yêu cầu thực hiện một số công việc nào đó và gửi yêu cầu đến một server -
là một máy tính tập trung lưu trữ các thông tin chung của các client hoặc có khả năng
xử lý các yêu cầu của các client Các máy client sẽ gửi yêu cầu một dịch vụ nào đó đếnserver và nhận lại kết quả tương ứng từ server Ví dụ, khi người dùng truy cập vào mộttrang web thì sẽ yêu cầu tải các file html, css… từ server để có thể hiển thị nội dungtrang web trên trình duyệt Server sẽ luôn phải chạy hay còn gọi là zero down time vàchờ các yêu cầu từ client trong khi các máy client có thể không phải hoạt động liêntục Thông thường, một server sẽ cung cấp một lớp truy cập trong suốt với clients haynói cách khác là client không cần biết đến các thành phần xử lý đứng sau server nhưphần cứng hoặc phần mềm mà server chạy Client thông thường là các máy trạm hoặcmáy tính cá nhân, điện thoại di động trong khi server là một máy tính có trên mạng và
có sức mạnh tính toán cao Mô hình này đặc biệt hiệu quả trong trường hợp client vàserver thực hiện các task khác nhau với tập tính chạy khác nhau
7
Trang 8Hình 2: Mô hình Client Server
Mô hình này có thể coi như một kiến trúc phần mềm phân tán do hai bên client vàserver lưu trữ các thông tin khác nhau và trao đổi dữ liệu của nhau qua mạng máy tính.Server sẽ chạy một vài chương trình để chia sẽ tài nguyên với client Một clientthường không chia sẻ bất kỳ tài nguyên nào của nó, nhưng nó sẽ gửi các yêu cầu đếnserver và sau đó sẽ nhận lại phản hồi từ server Một cặp request-response này là mộtphiên làm việc Ví dụ phổ biến của kiến trúc client-server là hệ thống email, worldwide web… Vai trò của server là chia sẻ chương trình, dịch vụ cho một hoặc nhiềuclient
Trong kiến trúc Client-Server, server thường được thiết kế như một hệ thống tập trung
để phục vụ nhiều client Do đó, năng lực tính toán, bộ nhớ của server sẽ phải tăng lênnếu khối lượng client hoặc công việc tăng lên Để tăng khả năng tính toán của mộtserver lên người ta thường sử dụng hai phương pháp là Horizontal Scaling và VerticalScaling
Trang 9Hình 3: Phương pháp sizingHorizontal Scaling là thêm một máy hoặc một node vào hạ tầng server Chương trìnhserver lúc này sẽ được chạy trên nhiều máy tính khác nhau, khối lượng công việc nhậnrequest từ client sẽ được chia sẻ trên các máy tính này và nhờ đó làm tăng khả năngphục vụ các client Điều phức tạp ở đây là phải làm sao kết nối các máy tính lại vớinhau và phân chia công việc ra sao trong một tập hợp các máy tính riêng lẻ này Thôngthường người ta sẽ tạo thành các cluster máy tính, trong đó các máy tính sẽ cùng nốiđến một Load Balancing (cân bằng tải) - có nhiệm vụ phân phối các request của clientđến các máy tính trong cluster.
Có rất nhiều thuật toán phân tải trong đó chia làm hai loại là thuật toán phân tải động
và thuật toán phân tải tĩnh Trong thuật toán phân tải động có thể kể đến các thuật toánnhư:
- Least connection: Tìm máy tính đang có ít kết nối nhất và gửi request đến máynày
9
Trang 10- Weighted least connection: Người quản trị có thể gán các giá trị trọng số khácnhau đến từng máy tính trong cluster, ví dụ các máy tính có khả năng tính toán
và bộ nhớ lớn hơn sẽ có trọng số lớn hơn tức là phục vụ được nhiều requesthơn
- Weighted response time: Tính trung bình thời gian phản hồi của từng máytính, kết hợp với số kết nối đang kết nối đến từng máy tính Nhờ đó, phản hồitới client sẽ là nhanh nhất
- Resource-based: Trên mỗi máy tính đều có thể tính toán tài nguyên hiện tạinhư tính khả dụng của CPU, RAM … dựa vào các thông số này, LoadBalancing sẽ quyết định request sẽ được gửi vào máy tính nào
Thuật toán phân tải tính bao gồm các thuật toán:
- Round robin: Trong một tập hợp các máy tính được đánh số từ 1 đến N, cácrequest đến sẽ được lần lượt đưa đến máy tính 1 đến N và quay vòng lại
- Weighted round robin: Cho phép người quản trị gán các trọng số khác nhauđến từng máy tính Request sẽ được gán từ máy tính có trọng số lớn đến nhỏ vàquay vòng
- IP hash: Mỗi IP gửi request đến sẽ được chuyển sang một mã hash, mỗi máytính sẽ phục vụ một dải mã hash cố định hay một dải IP cố định tương ứng.Load balancing có thể kết hợp với một DNS resolver để routing tên miền về địa chỉcủa Load balancing Với một cluster máy tính thì không thể thiếu Load Balancingđược
Ngoài ra, với Horizontal Scaling còn một vấn đề quan trọng khác là việc cài đặt mớimột máy tính và vấn đề tăng thêm hoặc giảm bớt số lượng máy một cách tự động Cóthể dựa vào số lượng request đến và lượng tài nguyên hiện tại của cả cluster Để có thể
tự động tạo một máy tính mới có thể chạy chương trình server hiện tại thì việc setupmôi trường trên máy tính mới là rất khó khăn, do đó người ta nghĩ ra sử dụng kháiniệm container để có thể dễ dàng sinh ra một máy ảo có thể chạy ngay chương trìnhcủa server hiện tại Để có thể quản lý các container này, người ta lại nghĩ ra các hệthống quản lý container như Kubernetes, Docker Swarm …
Trang 11Vertical Scaling là phương pháp thêm tài nguyên cho một máy tính duy nhất Ví dụ đểtăng khả năng tính toán lên thì người ta lắp thêm nhiều CPU vào máy tính server, đểtăng bộ nhớ RAM người ta lắp thêm nhiều RAM vào máy tính server, để tăng bộ nhớlưu trữ người ta lắp nhiều ổ cứng HDD, SSD vào máy tính server Tuy nhiên việc thêmnhiều tài nguyên sẽ khó có thể tăng mãi, đồng thời tính chịu lỗi sẽ giảm xuống do chỉ
có một máy sẽ dễ làm server down time hơn là nhiều máy tính
Có thể thấy ưu điểm của horizontal scaling là khả năng mở rộng ít phụ thuộc vào phầncứng, ít thời gian down time hơn, tăng khả năng chịu lỗi và tăng hiệu năng trong khi
đó với vertical sẽ lợi thế về chi phí, không cần giao tiếp phức tạp giữa các máy tính,đơn giản trong việc bảo trì, ít phải thay đổi phần mềm
Với vấn đề bảo mật, ở phía server luôn phải đảm bảo tính bảo mật và khả năng chịu lỗitrước các cuộc tấn công Server có nhiệm vụ lưu trữ và xử lý tập trung, do đó tất cả các
dữ liệu của các client sẽ được lưu tập trung tại server Các client khác nhau sẽ có thểlưu trữ các thông tin cá nhân của mình trên server, nhưng không có quyền lấy hoặcchỉnh sửa thông tin của client khác Máy tính server sẽ luôn tiếp nhận request từ client,
vì vậy trong các client hoàn toàn có thể có các client có ý đồ xấu, muốn đánh sậpserver hoặc ăn cắp hoặc chỉnh sửa thông tin trái phép không phải của mình ở trênserver Các cuộc tấn công phổ biến có thể kể đến như tấn công từ chối dịch vụ(DDOS), tấn công SQL Injection, … Mỗi kiểu tấn công đều mang đến hậu quả nặng
nề, làm tê liệt dịch vụ hoặc làm mất, sai dữ liệu Đặc biệt với các ngành quan trọngnhư giáo dục, dịch vụ, ngân hàng thì bảo mật server lại càng quan trọng
Một số cách bảo mật cho server là sử dụng rate limit để đảm bảo lượng truy cập vàoserver không bị tăng đột biến, sử dụng mật mã hóa để mã hóa dữ liệu truyền đi giữaclient và server, và mã hóa dữ liệu của client trên server để đảm bảo kẻ tấn công khôngthể xem và chỉnh sửa thông tin trên server
1.2 Kiến trúc Client – Server trên Cloud
Việc xây dựng phần mềm trên cloud computing bằng kiến trúc client-server là hết sức
rõ ràng và cụ thể Việc triển khai một phần mềm chạy trên cloud đã cho thấy mục đíchcủa nó là cho nhiều người có thể sử dụng Bản thân môi trường cloud là một mạngmáy tính kết nối với nhau qua mạng internet và bất kỳ thiết bị nào trên thế giới cũng
11
Trang 12có thể kết nối đến các mạng cloud Do đó, rõ ràng những phần mềm được triển khaitrên cloud sẽ phục vụ cho rất nhiều client với quy mô lớn và mang tầm thế giới.Trong mô hình client server thì cloud computing thường đóng vai trò là server Khixây dựng xong các chương trình phần mềm cho server, nhà phát triển sẽ phải đưachương trình lên các máy chủ server Các máy chủ này có thể là các host do chính nhàphát triển xây dựng hoặc thuê từ bên thứ 3 tùy vào mục đích, độ bảo mật và chi phítriển khai Với phương án thuê bên thứ 3 thì hiện nay có rất nhiều các host của cácdoanh nghiệp đang cung cấp, thậm chí có những host free Việc triển khai trên các hostnày chỉ sử dụng cho các chương trình server nhỏ và phạm vi hoạt động nhỏ do bảnthân các đơn vị này cũng không thể cung cấp tài nguyên lớn và phủ được mạng lướimáy tính khắp thế giới được Trái lại, với cloud thì khả năng tính toán và xử lý là rấtcao bởi siêu máy tính và số lượng lớn các data center phủ khắp các quốc gia trên thếgiới.
Bản thân bên trong server của mô hình client server cũng sẽ được xây dựng bằng nhiềukiến trúc phần mềm khác Do đó, với mô hình client-server thì đề tài chủ yếu sẽ chỉ tậptrung ở cách mà giao tiếp giữa client và server trong môi trường cloud computing
Để chạy chương trình server trên cloud, trước hết chúng ta cần các dịch vụ tính toán.Nếu trong AWS ta có thể kể đến các dịch vụ có thể chạy chương trình server như:
- EC2: là một dịch vụ cho phép cung cấp các máy tính ảo hóa theo nhu cầu, cóthể tự do lựa chọn ram, số nhân, bộ nhớ lưu trữ, hệ điều hành… do đó mangtính linh động rất cao
- Elastic BeanStalk: là một dịch vụ triển khai mở rộng các ứng dụng web mộtcách dễ dàng chỉ cần cung cấp source code mà không cần quan tâm nhiều đếnvấn đề triển khai
- Elastic Container Service: Là một dịch vụ điều phối các container, dùng để xâydựng server chạy nhiều service trên nhiều máy ảo khác nhau Dùng cho cácchương trình server phức tạp và quy mô lớn
- Amazon Lambda: Là một dịch vụ phi máy chủ hay serverless, đây là dịch vụchỉ thuần tính toán, không lưu trữ bất kỳ thông tin gì Nó dựa vào các event và
dữ liệu từ các service khác và thực hiện tính toán sau đó trả lại kết quả
Trang 13Ở phía client nếu là ứng dụng điện thoại hoặc desktop sẽ cần sử dụng các phần mềm
để có thể kết nối lên server, còn nếu là trang web thì cần sử dụng trình duyệt để có thểtruy cập được vào dịch vụ server Do đó với phần mềm dưới client thì không liên quanđến các dịch vụ cloud computing
Để có thể giao tiếp giữa client và server thì trong mô hình cloud có thể xây dựng nhưhình dưới đây
Hình 4: Mô hình kiến trúc Client - Server khi triển khai trên Cloud
Client khi truy cập dịch vụ của server sẽ có thể gọi trực tiếp vào địa chỉ public IP củaserver, tuy nhiên địa chỉ IP là khó nhớ và có thể bị thay đổi Hơn nữa, nếu giả sử server
mở rộng theo Horizontal Scaling để tạo nên nhiều máy hơn thì lúc đó số lượng IP cũnglớn theo Do đó, để dễ dàng cho việc truy cập đến server người ta sử dụng hệ thốngDNS (Domain Name System) Khi muốn gửi request đến server người dùng sẽ sửdụng một tên miền dễ nhớ và gửi tên miền này đến DNS Resolver, DNS Resolver sẽtìm địa chỉ IP ứng với tên miền này và gửi lại cho client, lúc này client sẽ dùng địa chỉ
IP này để gửi request đến server Trong AWS, dịch vụ Route 53 là dịch vụ được sửdụng để quản lý các địa chỉ của server và cập nhật địa chỉ này đến các DNS Resolvertheo tên miền xác định từ ban đầu
13
Trang 14Như đã trình bày ở phần trước, để có thể sử dụng Horizontal Scaling thì cần đến loadbalancer Trong AWS, dịch vụ Elastic Load Balancer sẽ có nhiệm vụ phân tải về cácmáy tính để đảm bảo hệ thống scaling hoạt động ổn định Cuối cùng, các chương trìnhcủa server sẽ được chạy trên một hoặc nhiều máy ảo EC2 Đây là mô hình giao tiếpgiữa client và server đơn giản nhất khi sử dụng Route 53, Elastic Load Balancer,Amazon EC2.
Nâng cao hơn, do việc xây dựng một server là để phục vụ nhiều client và tại bất cứthời điểm nào Do đó, server luôn phải đảm bảo tính sẵn sàng tức là thời gian downtime tốt nhất phải là zero Nhưng trong quá trình phát triển phần mềm của server thìkhông thể tránh khỏi việc phải cập nhật, bổ sung tính năng hoặc vá các lỗ hổng Vì thế,các chiến lược triển khai chương trình server ra đời Trong số đó có mô hình CanaryDeployment, tức là chiến lược triển khai từng phần Giả sử khi có một phiên bản mớiv2 cần triển khai, ta sẽ xây dựng thêm một cụm Elastic Load Balancer và EC2 và đặtcùng với cụm hiện tại đang triển khai phiên bản v1 Lúc này sử dụng Route 53 đểchuyển hướng các request dần sang cụm máy chủ v2 Ban đầu sẽ là 10% lượng requestvào v2, 90% vào v1 Sau đó, tiến hành kiểm tra độ ổn định của v2 Nếu thấy tốt thì cóthể tăng dần lượng request sang cụm v2 và giảm dần ở v1 Đến cuối cùng nếu không
có lỗi ở cụm v2 thì tiến hành thay thế hoàn toàn cụm v1 bằng cụm v2 mới Chiến lượctriển khai v2 hoàn tất Với cách triển khai này thì sẽ đảm bảo phát hiện được lỗi kịpthời và khả năng rollback cũng rất nhanh Tránh được thời gian downtime mà vẫn đảmbảo chất lượng của version mới
Kiến trúc client-server nhìn chung là một kiến trúc nền tảng và đóng vai trò rất quantrọng trong các phần mềm hiện đại ngày nay