MỤC LỤCDANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Viết tắt Tiếng anh Tiếng Việt K8s Kubernetes tự động hoá việc quản lý, scaling và triển khai ứng dụng dưới dạng container API Application Pro
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN
MICROSERVICES VỚI DOCKER
Giảng viên hướng dẫn: Trần Thị Bích Vân Sinh viên thực hiện:
1 Nguyễn Đăng Hiếu - 2033181023
2 Nguyễn Thành Dương - 2033181013
TP HỒ CHÍ MINH – 2021
Trang 2LỜI CẢM ƠN
Tụi em xin chân thành gửi lời cảm ơn đến trường Đại Học Công Nghiệp Thực PhẩmTP.Hồ Chí Minh, thầy cô trong khoa Công Nghệ Thông Tin đã đào tạo, trau dồi, cung cấpcho chúng em những kiến thức hữu ích để học tập và rèn luyện
Xin cảm ơn Cô Trần Thị Bích Vân đã hướng dẫn chúng em hoàn thành đồ án trong thờigian vừa qua Cô đã định hướng, hướng dẫn, truyền đạt lại những kiến thức rất bổ ích,cũng như cung cấp những tài liệu cần thiết để em hoàn thành được đồ án
Cuối cùng, do chúng em chưa có nhiều kinh nghiệm cũng như hạn chế về mặt kiến thức
và trải nghiệm thức tế nên chắc chắn sẽ không tránh khỏi những sai sót trong đề tài này.Chúng em mong nhận được sự phản hồi, đánh giá và đóng góp ý kiến của thầy để đề tàicủa chúng em hoàn thiện hơn
Chúng em xin chân thành cảm ơn!
Trân trọng!
Trang 3MỤC LỤC
DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT
Viết tắt Tiếng anh Tiếng Việt
K8s Kubernetes tự động hoá việc quản lý, scaling và
triển khai ứng dụng dưới dạng container
API Application Programming Interface một ứng dụng hay một thành
phần sẽ tương tác với một ứngdụng hay thành phần khác
REST REpresentational State Transfer là một dạng chuyển đổi cấu trúc dữ liệu, một kiểu kiến trúc
để viết API
Trang 4CHƯƠNG 1: TỔNG QUAN
– Hiện nay, nhiều ứng dụng đã thực hiện container hoá bằng cách sử dụng docker và
sử dụng nó như là môi trường production ngày càng tăng Trên môi trườngproduction, việc cấu trúc hệ thống chạy bằng container chỉ sử dụng docker là rấtkhó khăn Cho nên việc sử dụng một nền tảng Container orchestration engine như
là k8s thì khá phổ biến hiện nay
– Tìm hiểu kubernetes
– Có 1 kịch bản, đó là lúc chúng ta phát triển ứng dụng trên môi trường và mục tiêucuối cùng là release sản phẩm, là chạy ứng dụng của mình trên môi trườngproduction Nhưng có vấn đề nảy sinh là môi trường phát triển thì không đượcgiống với môi trường thử nghiệm và khác biệt với môi trường production, khi đóchúng ta khó gì đảm bảo rằng code chúng ta chạy mượt trên môi trường dev , trênmôi trường testing và trên production ?
Vì thế Docker đã ra đời để giúp chúng ta giải quyết bài toán trên
– Triển khai microservices với docker sẽ được tối ưu hóa mọi thứ Nó không giốngnhư các máy ảo phải đầy đủ của một hệ điều hành khách Việc riêng lẻ cáccontainer được thực hiện ở cấp độ hạt nhân mà không cần hệ điều hành khách.Ngoài ra, các thư viện có thể nằm trên các container Giúp loại bỏ các bản sao củamột thư viện trên máy chủ, nhằm tiết kiệm không gian
– Hiểu và biết về Kubernetes
– Triển khai được Microservices với Docker
Trang 5CHƯƠNG 2:TÌM HIỂU CHI TIẾT
2.1 TÌM HIỂU VỀ KUBERNETES
2.1.1 Kubernetes hoặc k8s
là một nền tảng mã nguồn mở tự động hoá việc quản lý, scaling và triển khai ứng dụngdưới dạng container hay còn gọi là Container orchestration engine Nó loại bỏ rất nhiềucác quy trình thủ công liên quan đến việc triển khai và mở rộng các containerizedapplications
Kubernetes orchestration cho phép bạn xây dựng các dịch vụ ứng dụng mở rộng nhiềucontainers Nó lên lịch các containers đó trên một cụm, mở rộng các containers và quản
lý tình trạng của các containers theo thời gian
Các containers đó phải được triển khai trên nhiều server hosts Kubernetes cung cấp khảnăng phối hợp và quản lý cần thiết để triển khai các containers theo quy mô cho cácworkloads đó
2.1.2 Nên sử dụng Kubernetes khi :
• Các doanh nghiệp lớn, có nhu cầu thực sự phải scaling hệ thống nhanh chóng,
và đã sử dụng container (Docker)
Trang 6• Các dự án cần chạy lớn hơn hoặc bằng 5 container cùng loại cho 1 dịch vụ
• Các startup tân tiến, chịu đầu tư vào công nghệ để dễ dàng auto scale về sau
2.1.3 Kubernetes giải quyết các vấn đề :
Bằng việc sử dụng docker, trên 1 host bạn có thể tạo ra nhiều container Tuy nhiên nếubạn có ý định sử dụng trên môi trường production thì phải bắt buộc phải nghĩ đến nhữngvấn đề dưới đây:
• Việc quản lý hàng loạt docker host
• Container Scheduling
• Rolling update
• Scaling/Auto Scaling
• Monitor vòng đời và tình trạng sống chết của container
• Self-hearing trong trường hợp có lỗi xãy ra (Có khả năng phát hiện và tựcorrect lỗi)
Trang 7K8s là một Platform nhưng có khả năng liên kết tốt với các hệ sinh thái bên ngoài, có
nhiều middleware chạy trên các service của k8s, trong tương lai chắc chắn sẽ còn nhiềuhơn nữa
• Ansible: Deploy container tới Kubernetes
• Apache Ignite: Sử dụng Service Discovery của Kubernetes, tự động tạo vàscaling k8s clkuster
• Fluentd: gửi log của container trong Kubernetes
• Jenkins: Deploy container đến Kubernetes
• OpenStackCấu trúc k8s liên kết với Cloud
• Prometheus: Monitor Kubernetes
• Spark: Thực thi native job trên Kubernetes(thay thế cho YARN)
• SpinnakerDeploy container đến Kubernetes
K8s chuẩn bị một vài cơ chế để có thể mở rộng, thực thi chức năng độc lập, nó có thể sửdụng platform như là một framework Bằng cách sử dụng khả năng mở rộng, chúng ta cóthể thực hiện release một ReplicaSet mà k8s cung cấp
2.1.4 Những khái niệm cơ bản trong Kubernetes
• Scheduler: Thành phần này lập lịch triển khai cho các ứng dụng, ưng dụngđược đặt vào Worker nào để chạy
• Controler Manager: Thành phần đảm nhiệm phần quản lý các Worker, kiểm tracác Worker sống hay chết, đảm nhận việc nhân bản ứng dụng…
Trang 8• Etcd: Đây là cơ sở dữ liệu của Kubernetes, tất cả các thông tin của Kubernetesđược lưu trữ cố định vào đây.
Worker node
Là server chạy ứng dụng trên đó Bao gồm 3 thành phần chính:
• Container runtime: Là thành phần giúp chạy các ứng dụng dưới dạngContainer Thông thường người ta sử dụng Docker
• Kubelet: đây là thành phần giao tiếp với Kubernetes API Server, và cũng quản
Pod
Pod là khái niệm cơ bản và quan trọng nhất trên Kubernetes Bản thân Pod có thể chứa 1hoặc nhiều hơn 1 container Pod chính là nơi ứng dụng được chạy trong đó Pod là cáctiến trình nằm trên các Worker Node Bản thân Pod có tài nguyên riêng về file system,cpu, ram, volumes, địa chỉ network…
Trang 9Label ra đời để phân loại và quản lý Pod, Ví dụ chúng ta có thể đánh nhãn các Pod chạy
ở theo chức năng frontend, backend, chạy ở môi trường dev, qc, uat, production…
2.1.5 Các tính năng của Kubernetes
-Phát hành và khôi phục tự động
Kubernetes sẽ tiến hành dần dần các thay đổi đối với ứng dụng hoặc cấu hình của ứngdụng, đồng thời theo dõi tình trạng ứng dụng để đảm bảo nó không giết tất cả các phiênbản của bạn cùng một lúc Nếu có vấn đề gì xảy ra, Kubernetes sẽ hoàn trả thay đổi chobạn Tận dụng hệ sinh thái các giải pháp triển khai đang phát triển
-Khám phá dịch vụ cân bằng tải
Không cần phải sửa đổi ứng dụng của bạn để sử dụng một cơ chế khám phá dịch vụkhông quen thuộc Kubernetes cung cấp cho các Pods địa chỉ IP của riêng họ và một tênDNS duy nhất cho một nhóm các Pod và có thể cân bằng tải trên các nhóm đó
-Điều phối lưu trữ
Trang 10Tự động gắn kết hệ thống lưu trữ mà bạn chọn, cho dù từ bộ nhớ cục bộ, nhà cung cấpđám mây công cộng như GCP hoặc AWS , hay hệ thống lưu trữ mạng như NFS, iSCSI,Gluster, Ceph, Cinder hoặc Flocker.
-Ngăn xếp kếp Ipv4 / Ipv6
-Phân bổ địa chỉ IPv4 và IPv6 cho các nhóm và dịch vụ
-Được thiết kế để có thể mở rộng
-Thêm các tính năng vào cụm Kubernetes của bạn mà không cần thay đổi mã nguồnngược dòng
Trang 112.2 TÌM HIỂU VỀ MICROSERVICES (kiến trúc nhiều dịch vụ nhỏ ):
Microservice là một kỹ thuật thuật phát triển phần mềm , một hướng của kiến trúc dịch
vụ (SOA) cấu trúc một ứng dụng như một tập hợp các dịch vụ được ghép lỏng lẻo Trongkiến trúc microservice, các dịch vụ được xử lý tốt và các giao thức rất nhẹ Lợi ích củaviệc phân tách một ứng dụng thành các dịch vụ nhỏ hơn là nó cải thiện tính mô đun Điềunày làm cho ứng dụng dễ hiểu hơn, phát triển, thử nghiệm và trở nên linh hoạt hơn đốivới xói mòn kiến trúc Nó song song phát triển bằng cách cho phép các nhóm tự trị nhỏphát triển, triển khai và mở rộng quy mô dịch vụ tương ứng của họ một cách độc lập Nócũng cho phép kiến trúc của một dịch vụ riêng lẻ xuất hiện thông qua tái cấu trúc liên tục
Kiến trúc dựa trên microservice cho phép phân phối và triển khai liên tục
Microservice là một kiếu kiến trúc phần mềm Các module trong phần mềm này được
chia thành các service rất nhỏ (microservice) Mỗi service sẽ được đặt trên một serverriêng -> dễ dàng để nâng cấp và scale ( quy mô) ứng dụng
2.2.1 Kiến trúc Microservices
Khác biệt với kiến trúc Monolith, hay vì gom tất cả module thành một khối (monolith), tatách các module thành những service siêu nhỏ Mỗi service sẽ được đặt trên một serverriêng (Có thể dùng server cloud như AWS hoặc Azure), giao tiếp với nhau thông quamạng (Gửi nhận message qua giao thức HTTP hoặc sử dụng MessageQueue)
Các đặc trưng của mô hình Microservice
1 Micro-service
Đặc trưng này được thể hiện ngay từ tên của kiến trúc Nó là microservice chứ khôngphải là miniservice hay nanoservice Thực tế không tồn tại mô hình kiến trúc chominiservice hay nanoservice Từ microservice được sử dụng để giúp người thiết kế cócách tiếp cận đúng đắn Một ứng dụng lớn cần được chia nhỏ ra thành nhiều thành phần,các thành phần đó cần tách biệt về mặt dữ liệu (database) và phải đủ nhỏ cả về mặt kích
cỡ và độ ảnh hưởng của nó trong hệ thống, khi thêm một microservice vào hệ thống cũngnên đảm bảo rằng nó đủ nhỏ để dễ dàng tháo gỡ, xóa bỏ khỏi hệ thống mà không ảnhhưởng nhiều tới các thành phần khác
Ví dụ: Facebook có các tính năng như đăng và hiển thị trạng thái, gửi tin nhắn, gợi ý kếtbạn, hiển thị quảng cáo Mỗi tính năng này có thể được thiết kế như một microservicehoặc có thể tiếp tục chia nhỏ các tính năng trên thành các microservice nếu thấymicroservice đó chưa đủ nhỏ và vẫn có thể tách biệt về mặt dữ liệu (tách biệt database)
Trang 122 Tính độc lập
Các microservice hoạt động tách biệt nhau trong hệ thống, do vậy việc build mộtmicroservice cũng độc lập với việc build các microservice khác Thông thường, để tiệncho việc phát triển và duy trì các microservice, người phát triển nên viết các built scriptkhác nhau cho mỗi microservice
Do tính tách biệt này mà mỗi microservice đều dễ dàng thay thế và mở rộng Hơn thếnữa, nó còn giúp việc phát triển các microservice linh động hơn, các microservice có thểđược phát triển bởi các team khác nhau, dùng các ngôn ngữ khác nhau và tiến độ pháttriển dự án cũng nhanh hơn do không có sự phụ thuộc giữa các team, mỗi team có thể chủđộng quản lý phần việc riêng của mình
3 Tính chuyên biệt
Mỗi microservice là một dịch vụ chuyên biệt, có thể hoạt động độc lập, thông thường mỗimicroservice đại diện cho một tính năng mà các công ty/ doanh nghiệp muốn cung cấptới người dùng, do vậy người thiết kế hệ thống microservice cần hiểu rõ về hoạt độngkinh doanh của công ty Các đầu vào đầu ra và chức năng của mỗi microservice cần đượcđịnh nghĩa rõ ràng
4 Phòng chống lỗi
Kiến trúc microservice sinh ra là để dành cho các hệ thống từ lớn đến vô cùng lớn Nó ápdụng phương pháp chia để trị, phương pháp này giúp việc áp dụng các công cụ, kỹ thuậtcho việc giám sát,phòng chống lỗi phần mềm, lỗi hệ thống hiệu quả
Khi một thành phần trong hệ thống bị lỗi, nó có thể được thay thế bằng các thành phần dựphòng một cách dễ dàng, trong quá trình thay thế thành phần bị lỗi, các thành phần khácvẫn hoạt động bình thường, do vậy hoạt động của toàn bộ hệ thống sẽ không hoặc ít bịgián đoạn
2.2.2 Các ưu điểm của Kiến trúc Microservices
Các ứng dụng lớn cần thiết được tách ra thành các service nhỏ Mỗi service quản lý một
cơ sở dữ liệu riêng, nằm trên một server riêng, tách biệt hoàn toàn với nhau Các ưu điểmnhư sau:
• Điều quan trọng nhất là rất dễ nâng cấp và scale up, scale down Giả sử bạn làmmột trang web liên quan tới vận tải, kho bãi Khi số lượng xe hay hàng hóa tănglên, chỉ việc nâng cấp server cho service liên quan đến nghiệp vụ kho vận(ngượclại, có thể giảm server nếu cần thiết) Với cloud computing, việc nâng cấp server
vô cùng dễ dàng chỉ với vài cú click chuột Điều này rất khó thực hiện vớimonolith
Trang 13• Do tách biệt nên nếu một service bị lỗi, toàn bộ hệ thống vẫn hoạt động bìnhthường Với monolith, một module bị lỗi có thể sẽ kéo sập toàn bộ hệ thống.
• Các service nằm tách biệt nhau, chúng có thể được sử dụng các ngôn ngữ lập trìnhriêng, database riêng VD service xử lý ảnh có thể viết bằng C++, service tổng hợpdata có thể viết bằng Python
• Có thể áp dụng được các quy trình tự động hóa, như build, deploy, monitoring,
• Khi chia nhỏ các service, team size sẽ giảm và mọi người sẽ làm việc hiệu quả hơn
- Giảm thiểu sự gia tăng phức tạp rối rắm hệ thống lớn
- Chia nhỏ ứng dụng một khối cồng kềnh thành các dịch vụ nhỏ dễ quản lý, bảo trìnâng cấp, tự do chọn, nâng cấp công nghệ mới
- Mỗi dịch vụ nhỏ sẽ định ra ranh giới rõ ràng dưới dạng RPC hay API hướng thôngđiệp
- Microservice thúc đẩy tách rạch ròi các khối chức năng (loose coupling - highcohesion), điều rất khó thực hiện với ứng dụng một khối Nếu muốn loose coupling
- high cohesion trong ứng dụng một khối, sẽ phải thiết kế theo Design Pattern(Gang Of Four) và liên tục tái cấu trúc (refactor)
Mỗi dịch vụ nhỏ sẽ phát triển dễ hơn, nhanh hơn, dễ viết mã kiểm thử tự động
2.2.3 Nhược điểm
• Các module giao tiếp qua mạng nên có thể tốc độ không cao bằng monolith Ngoài
ra, mỗi module phải tự giải quyết các vấn đề về bảo mật, transaction, lỗi kết nối,quản lý log files
• Việc đảm bảo tính đồng nhất trong dữ liệu sẽ trở nên phức tạp hơn
• Sử dụng nhiều service nên việc theo dõi, quản lý các service này sẽ phức tạp hơn
• Cần một đội ngũ thật ngon để thiết kế và triển khai bao gồm software architect xịn
• Microservice nhấn mạnh kích thước nhỏ gọn của dịch vụ Một số lập trình đề xuấtdịch vụ siêu nhỏ cỡ dưới 100 dòng code Chia quá nhiều sẽ dẫn đến manh mún,vụn vặt, khó kiểm soát Việc lưu dữ liệu cục bộ bên trong những dịch vụ quá nhỏ sẽkhiến dữ liệu phân tán quá mức cần thiết
Trang 14• Nhược điểm tiếp của microservice đến từ đặc điểm hệ thống phân tán (distributedsystem):
1 - Phải xử lý sự cố khi kết nối chậm, lỗi khi thông điệp không gửi được hoặcthông điệp gửi đến nhiều đích đến vào các thời điểm khác nhau
2 - Đảm bảo giao dịch phân tán (distributed transaction) cập nhật dữ liệu đúng đắn(all or none) vào nhiều dịch vụ nhỏ khác nhau khó hơn rất nhiều, đôi khi là khôngthể so với đảm bảo giao dịch cập nhật vào nhiều bảng trong một cơ sở dữ liệu trungtâm
3 - Theo nguyên tắc CAP (CAP theorem) thì giao dịch phân tán sẽ không thể thỏamãn cả 3 điều kiện: consistency (dữ liệu ở điểm khác nhau trong mạng phải giốngnhau), availablity (yêu cầu gửi đi phải có phúc đáp), partition tolerance (hệ thốngvẫn hoạt động được ngay cả khi mạng bị lỗi)
4 - Kiểm thử tự động một dịch vụ trong kiến trúc microservices đôi khi yêu cầuphải chạy cả các dịch vụ nhỏ khác mà nó phụ thuộc Do đó khi phân rã ứng dụngmột khối thành microservices cần luôn kiểm tra mức độ ràng buộc giữa các dịch vụmềm dẻo hơn hay cứng nhắc - lệ thuộc hơn Nếu ràng buộc ít đi, lỏng leo hơn, bạn
đi đúng hướng và ngược lại
2.3 TÌM HIỂU VỀ DOCKER
2.3.1 Docker là gì?
Docker là một công cụ được thiết kế để giúp tạo, triển khai và chạy các ứng dụng dễ
dàng hơn bằng cách sử dụng các containers
Docker là nền tảng phần mềm cho phép bạn dựng, kiểm thử và triển khai ứng dụng một
cách nhanh chóng Docker đóng gói phần mềm vào các đơn vị tiêu chuẩn hóa được gọi
Trang 15là container có mọi thứ mà phần mềm cần để chạy, trong đó có thư viện, công cụ hệthống, mã và thời gian chạy Bằng cách sử dụng Docker, bạn có thể nhanh chóng triểnkhai và thay đổi quy mô ứng dụng vào bất kỳ môi trường nào và biết chắc rằng mã củabạn sẽ chạy được.
Docker là một nền tảng cho phép bạn build, ship và chạy các container dựa trên nhân của
Linux Docker hỗ trợ một cách mặc định cho các nền tảng Linux
Điểm khác biệt là thay vì tạo ra toàn bộ hệ điều hành ảo, Docker cho phép các ứng dụng
sử dụng cùng một nhân Linux như hệ thống mà chúng đang chạy và chỉ yêu cầu các ứngdụng được vận chuyển với những thứ chưa chạy trên máy chủ Điều này giúp tăng hiệusuất đáng kể và giảm kích thước của ứng dụng và quan trọng, Docker là mã nguồn mở
2.3.2 Nền tảng Docker
Docker cung cấp khả năng đóng gói và chạy một ứng dụng trong một môi trường cô lậplỏng lẻo được gọi là vùng chứa Sự cô lập và bảo mật cho phép bạn chạy nhiều vùng chứađồng thời trên một máy chủ nhất định Các vùng chứa có trọng lượng nhẹ và chứa mọithứ cần thiết để chạy ứng dụng, vì vậy bạn không cần phải dựa vào những gì hiện đượccài đặt trên máy chủ lưu trữ Bạn có thể dễ dàng chia sẻ vùng chứa trong khi làm việc vàđảm bảo rằng mọi người bạn chia sẻ đều có cùng vùng chứa hoạt động theo cùng mộtcách
Docker cung cấp công cụ và nền tảng để quản lý vòng đời của các vùng chứa của bạn:
• Phát triển ứng dụng của bạn và các thành phần hỗ trợ của nó bằng cách sử dụngcác thùng chứa
• Vùng chứa trở thành đơn vị phân phối và thử nghiệm ứng dụng của bạn
• Khi bạn đã sẵn sàng, hãy triển khai ứng dụng của bạn vào môi trường sản xuất củabạn, dưới dạng một vùng chứa hoặc một dịch vụ được điều phối Điều này hoạtđộng giống nhau cho dù môi trường sản xuất của bạn là trung tâm dữ liệu cục bộ,nhà cung cấp đám mây hay kết hợp cả hai
2.3.3 Containers
Container giải quyết vấn đề quan trọng trong việc phát triển ứng dụng Khi viết code, cácdev làm việc trên môi trường của riêng họ Nhưng khi chuyển sang môi trường hệ thốngthực tế production, vấn đề nảy sinh Code hoạt động tốt trên máy của dev nhưng lạikhông hoạt động trong môi trường thực tế Có nhiều nguyên nhân như: hệ điều hành khácnhau, phụ thuộc khác nhau, thư viện khác nhau
Trang 16Các container giải quyết vấn đề về tính di động và cho phép tách code ra khỏi cơ sở hạtầng bên dưới mà nó đang chạy Các dev có thể đóng gói ứng dụng của họ Bao gồm tất
cả các thùng và thư viện mà nó cần để chạy chính xác, vào một ảnh container nhỏ Trongproduction, container có thể chạy trên bất kỳ máy tính nào có nền tảng hợp nhất
Ưu điểm của Container
Ngoài việc giải quyết thách thức về tính di động, container còn cung cấp nhiều lợi thế sovới công nghệ ảo hóa truyền thống
Container chỉ để lại dấu chân cực kỳ nhỏ Chỉ cần ứng dụng của nó và các thùng, thư viện
mà nó yêu cầu để chạy Không giống như các máy ảo có một bản sao hoàn chỉnh của một
hệ điều hành khách Việc cách ly container được thực hiện ở cấp độ hạt nhân mà khôngcần hệ điều hành khách Ngoài ra, các thư viện có thể nằm trên các container Giúp loại
bỏ việc phải có 10 bản sao của một thư viện trên máy chủ, nhằm tiết kiệm không gian
Nếu có 3 ứng dụng chạy các node và express thì không cần phải có 3 instance node vàexpress Những ứng dụng đó có thể chia sẻ các thùng và thư viện đó Cho phép các ứngdụng được đóng gói trong các môi trường khép kín cho phép triển khai nhanh hơn.Tương đương gần hơn giữa các môi trường phát triển và khả năng mở rộng vô hạn
Những ưu điểm của docker
1 Dưới máy local – giả lập môi trường server
Giả sử một máy bình thường trong môi trường server, khi chạy demo cho một dự án thìkhá tốt Nhưng khả năng sập khi deploy thì khả năng xảy ra khá cao Nguyên nhân dokhác môi trường, máy local và server ở 2 môi trường khác nhau Và đây là cơ bản dẫnđến liên quan
Thế nhưng, bạn có thể thu phục môi trường server một cách hoàn hảo với máy local – chỉnhờ docker
2 Dùng một hệ điều hành mới và trải nghiệm
Chỉ cần docker là đủ, chẳng cần đến virtua studio nữa
3 Chia sẻ và lưu trữ – setup dự án cho nhóm
Trước đây, để setup dự án rất là lằng nhằng, khi có docker thì chỉ cần một hành độngshare container thì đã hiệu quả rồi Bạn sẽ giảm được hơn 1/2 những document cho việcsetup cho môi trường
Thuận tiện, đơn giản và dễ dàng cho các thành viên của hệ thống khi tham gí vào dự án
Trang 174 Chương trình test song song
Docker sinh ra nhiều container gần giống nhau, rồi ta chia task cho nó cùng thực hiệnmột lúc Liên tục vận dụng hết các tài nguyên server sẵn có để test
5.Test app với hệ điều hành khác
Có nghĩa là bạn có thể dùng docker để chạy thử app của một chương trình khác mà khôngcần setup máy ảo lại
2.3.4 Cách thức hoạt động của Docker
Docker hoạt động bằng cách cung cấp phương thức tiêu chuẩn để chạy mã của bạn.Docker là hệ điều hành dành cho container Cũng tương tự như cách máy ảo ảo hóa (loại
bỏ nhu cầu quản lý trực tiếp) phần cứng máy chủ, các container sẽ ảo hóa hệ điều hànhcủa máy chủ Docker được cài đặt trên từng máy chủ và cung cấp các lệnh đơn giản màbạn có thể sử dụng để dựng, khởi động hoặc dừng container
2.3.5 Lý do nên sử dụng Docker
Việc sử dụng Docker cho phép bạn vận chuyển mã nhanh hơn, tiêu chuẩn hóa hoạt độngcủa ứng dụng, di chuyển mã một cách trơn tru và tiết kiệm tiền bằng cách cải thiện khảnăng tận dụng tài nguyên Với Docker, bạn sẽ được nhận một đối tượng duy nhất có khảnăng chạy ổn định ở bất kỳ đâu Cú pháp đơn giản và không phức tạp của Docker sẽ chobạn quyền kiểm soát hoàn toàn Việc đưa vào áp dụng rộng rãi nền tảng này đã tạo ra một
hệ sinh thái bền vững các công cụ và ứng dụng có thể sử dụng ngay đã sẵn sàng sử dụngvới Docker
Kiến trúc của Docker
Trang 182.3.6 Các thành phần trong Docker
1 The Docker daemon
Một docker daemon là một thành phần server chạy trên một máy ảo và được ví như mộtserver chịu trách nhiệm build, chạy và phân phối các Docker container Docker clienttương tác với daemon này thông quá Rest API
2 The Docker client
Docker client là một CLI cho phép tương tác với Docker daemon thông qua socket hoặcRest API Docker client có thể được chạy trên cùng một host với daemon hoặc chạy trênmột host khác và kết nối với daemon bằng cách dùng CLI
3 The Docker image
Khái niệm quan trọng nhất về Docker chính là Docker image Nó là một bản sao cho cácthư viện hệ điều hành cũng như các ứng dụng liên quan trong OS đó Trong ngữ cảnhmicroservices mà được xây dựng trên nên tảng Spring Boot, Docker image có thể đượcgói trong một distribution của Linux như Alpine, JRE8 và một Spring Boot microservicejar
Trang 194 The Docker container
Cách hiểu đơn giản nó là các instance của Docker image Docker container sẽ sử dụngkernel của hệ điều hành Linux và nó sẽ có hệ thống filesystem của nó cũng như các cấuhình network
5 Dockerfile
Là một file chứa các script có nhiệm vụ chỉ dẫn ra việc build như thế nào đối với mộtDocker image Về cơ bản nó là một file văn bản (text file) và có tên là Dockerfile
CHƯƠNG 3:XÂY DỰNG MÔ HÌNH
3.1 GIỚI THIỆU MÔ HÌNH
Bắt đầu triển khải container cho Docker theo các bước dưới đây:
1 Cài đặt Docker
Để triển khai microservices bởi Docker, các bạn phải cài đặt Docker từ
(www.docker.com) và làm theo các chỉ dẫn được đưa ra khi cài đặt
2 Chuẩn bị Dockerfile
Giả sử rằng bạn đang thiết kế các service dùng Spring Boot và nói chuyện thông quaRabbitMQ Khi đó bạn cần thay đổi lại application Properties là nơi khai báo các cấuhình liên quan kết nối rabbitmq bằng cách dùng địa chỉ IP thay cho dùng localhost Tạisao lại vây, bởi vì localhost không thể định danh bên trong các Docker container Trongứng dụng thực, cái này sẽ được trỏ bởi DNS hoặc qua load balancer
Tạo một file docker (tên file là Dockerfile) và đưa vào thư mục gốc chứa mã nguồnmicroservice bạn sẽ phát triển File này về cơ bản sẽ là:
3 Build Docker
Xong xuôi phần khai báo, giờ để build chúng (có nghĩa là download JDK8 image và thựchiện các lệnh trong Dockerfile), cách đơn giản là chạy lệnh docker build tại thư mục chứaDockerfile
Trang 20Ở đây chúng ta sẽ có 2 microservices là reservation và customer Lặp lại bước 2->3 chomicroservice customer.
4 Thực hiện chạy (run) một Docker container
Cuối cùng chúng sẽ thực hiện chạy một Docker container bằng lệnh docker run Lệnh này
sẽ load container và thực hiện chạy file jar mà bạn đã khai báo trong Dockerfile
Để kiểm tra tất cả các services được start hay chưa
5 Run RabbitMQ
Như các bạn biết, RabbitMQ được sử dụng rất nhiều trong kiến trúc microservice Vì vậy,
để setup RabbitMQ nhưng là một Docker container, cách dễ dàng nhất là lấy một image
đã có sẵn trên Docker Hub Vậy là bạn có thể dễ dàng dùng rabbitmq để nói chuyện giữacác microservices
6 Docker Registry
Docker Hub là nới lưu trữ các Docker image Tuy nhiên, các image có thể được lưu trữtrong một private hub (local hub) vì lý do bảo mật Chúng ta có thể làm điều này dễ dàngvới Docker bằng cách đăng ký một Docker Registry cho riêng bạn
Tạo một private registry với cổng 3000:
$ DOCKER RUN -D -P 3000:3000 –RESTART=ALWAYS –NAME REGISTRY REGISTRY:LATEST
Tạo tag:
$ DOCKER TAG RESERVATION:1.0 LOCALHOST:3000/RESERVATION:1.0
Cuối cùng là đẩy image bạn muốn lên registry
$ DOCKER PUSH LOCALHOST:3000/RESERVATION:1.0
Đường link vào trang chủ docker để tải docker về máy
Trang 23Phiên bản ubutu
3.2 NÊU Ý TƯỞNG
Mô hình triển khai
RESTful - API Rule( filewall)
Order-service
API-gateway
User-Service
Trang 24Giải thích sơ lượt về demo
- Tao ra 2 cái service đó là order-service và user-service
- Sử dụng kong getway để cung cấp api cho 2 service với bên ngoài
- Dùng registry để tao kết nối 2 service lại với nhau
Viết trên asp.net , html
RESTful API là một tieu chuẩn dùng trong việc thiết kế các API cho các ứng dụng web
API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo đó,
một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác.API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổbiến như JSON hay XML
REST (REpresentational State Transfer) là một dạng chuyển đổi cấu trúc dữ liệu, một
kiểu kiến trúc để viết API Nó sử dụng phương thức HTTP đơn giản để tạo cho giao tiếpgiữa các máy Vì vậy, thay vì sử dụng một URL cho việc xử lý một số thông tin ngườidùng, REST gửi một yêu cầu HTTP như GET, POST, DELETE, vv đến một URL để xử
lý dữ liệu
REST hoạt động chủ yếu dựa vào giao thức HTTP Các hoạt động cơ bản nêu trên sẽ sửdụng những phương thức HTTP riêng
• GET (SELECT): Trả về một Resource hoặc một danh sách Resource
• POST (CREATE): Tạo mới một Resource
• PUT (UPDATE): Cập nhật thông tin cho Resource
• DELETE (DELETE): Xoá một Resource
Postman là một chương trình giúp bạn đóng vai 1 client để tạo restquest đến server,
postman như một trình duyệt dành cho web dev Nó hỗ trợ đầy đủ các method http nhưpost, get, put, delete….và các tham số trong http request
*Push lên Docker