paint-brush
Việc áp dụng Kiến trúc vi dịch vụ cho các ứng dụng trên nền tảng đám mâytừ tác giả@samsey
1,690 lượt đọc
1,690 lượt đọc

Việc áp dụng Kiến trúc vi dịch vụ cho các ứng dụng trên nền tảng đám mây

từ tác giả Donsamsey11m2023/12/19
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Những thách thức này có thể liên quan đến việc xử lý độ phức tạp ngày càng tăng, quản lý độ trễ mạng một cách hiệu quả, xử lý việc phát hiện dịch vụ một cách hiệu quả, giải quyết các mối lo ngại về quản lý cấu hình một cách thích hợp và đảm bảo áp dụng các biện pháp bảo mật. Nhìn chung, mặc dù vi dịch vụ mang lại lợi ích nhưng đối với các ứng dụng gốc, điều quan trọng là phải giải quyết các thách thức liên quan một cách hiệu quả để khai thác tối đa tiềm năng của chúng.

People Mentioned

Mention Thumbnail
Mention Thumbnail

Company Mentioned

Mention Thumbnail
featured image - Việc áp dụng Kiến trúc vi dịch vụ cho các ứng dụng trên nền tảng đám mây
Donsamsey HackerNoon profile picture
0-item
1-item

Trong thế giới kiến trúc phần mềm, microservice là một phong cách bao gồm các dịch vụ độc lập hoạt động cùng nhau thông qua các giao diện được xác định rõ ràng. Mặt khác, các ứng dụng gốc được thiết kế và phát triển đặc biệt cho môi trường đám mây để tận dụng tối đa khả năng mở rộng, khả năng phục hồi và tính linh hoạt của chúng.


Khi nói đến việc sử dụng microservice trong các ứng dụng, có rất nhiều lợi ích cần xem xét. Chúng bao gồm các chu kỳ phát triển, quy trình thử nghiệm và gỡ lỗi, tính linh hoạt và tính mô đun được nâng cao cũng như khả năng chịu lỗi và hiệu suất được cải thiện. Tuy nhiên, điều quan trọng cần phải thừa nhận là cũng có những thách thức đi kèm với cách tiếp cận này.


Những thách thức này có thể liên quan đến việc xử lý độ phức tạp ngày càng tăng, quản lý độ trễ mạng một cách hiệu quả, xử lý việc phát hiện dịch vụ một cách hiệu quả, giải quyết các mối lo ngại về quản lý cấu hình một cách thích hợp và đảm bảo áp dụng các biện pháp bảo mật.


Nhìn chung, mặc dù vi dịch vụ mang lại lợi ích nhưng đối với các ứng dụng gốc, điều quan trọng là phải giải quyết các thách thức liên quan một cách hiệu quả để khai thác tối đa tiềm năng của chúng.


Docker đã trở nên phổ biến như một công cụ để phát triển, thực thi và triển khai các dịch vụ vi mô. Nó hoạt động như một nền tảng, cho phép tạo và thực thi các vùng chứa là môi trường độc lập, bao gồm tất cả các thành phần cần thiết để chạy một dịch vụ. Bao gồm thư viện mã, phần phụ thuộc và cài đặt cấu hình.


Ưu điểm lớn nhất của Docker nằm ở khả năng đóng gói các dịch vụ vào các thùng chứa di động có thể được triển khai liền mạch trên các máy hỗ trợ Docker bất kể hệ điều hành hoặc cơ sở hạ tầng cơ bản của chúng. Ngoài ra, Docker còn cung cấp nhiều tính năng và công cụ để quản lý vòng đời của các vùng chứa này một cách hiệu quả.


Từ việc xây dựng và chạy chúng cho đến dừng, khởi động lại, xóa hoặc cập nhật chúng.

Có những lợi thế khi sử dụng microservice cho các ứng dụng gốc, bao gồm:

1. Chu kỳ phát triển và triển khai được tăng tốc: Bằng cách chia ứng dụng của bạn thành các đơn vị có thể quản lý được, vi dịch vụ cho phép phát triển, thử nghiệm và triển khai độc lập và song song. Cách tiếp cận hợp lý này giúp giảm thời gian và công sức cần thiết để giới thiệu các tính năng và bản cập nhật. Nó cũng tạo điều kiện thuận lợi cho việc áp dụng các thực hành tích hợp và phân phối (CI/CD).


Ngoài ra, vi dịch vụ còn giúp giảm thiểu những thách thức liên quan đến ứng dụng, chẳng hạn như thời gian xây dựng, sự phụ thuộc phức tạp và quá trình triển khai đầy rủi ro.


2. Tăng khả năng mở rộng: Microservice mang lại lợi thế cho việc mở rộng quy mô ứng dụng của bạn. Bạn có thể xóa các phiên bản dịch vụ theo yêu cầu mà không làm gián đoạn phần còn lại của ứng dụng. Tính linh hoạt này hỗ trợ trong việc quản lý khối lượng công việc khác nhau và tối ưu hóa việc sử dụng tài nguyên. Ngoài ra, vi dịch vụ cho phép bạn sử dụng các công nghệ và khung cho từng dịch vụ để điều chỉnh chúng theo yêu cầu và sở thích.


3. Nâng cao khả năng chịu lỗi và khả năng phục hồi: Microservice đóng góp cho ứng dụng khả dụng bằng cách cách ly các lỗi và giảm thiểu tác động của chúng. Nếu một dịch vụ gặp sự cố, các dịch vụ khác có thể tiếp tục hoạt động bình thường trong khi dịch vụ gặp sự cố sẽ nhanh chóng được sửa chữa hoặc thay thế.


Hơn nữa, microservice tạo điều kiện thuận lợi cho việc triển khai các cơ chế lỗi như ngắt mạch, thử lại, hết thời gian chờ và dự phòng. Những mẫu này ngăn chặn các lỗi xếp tầng. Đảm bảo sự suy giảm hiệu suất.


4. Việc lựa chọn và kết hợp công nghệ trở nên đơn giản hơn: Microservice cho phép tích hợp và tương thích giữa ứng dụng của bạn với các hệ thống và dịch vụ bên trong và bên ngoài khác nhau. Họ đạt được điều này bằng cách sử dụng các giao diện được xác định và tiêu chuẩn hóa như API.


Bằng cách tận dụng các vi dịch vụ, giao tiếp giữa các thành phần diễn ra liền mạch bất kể công nghệ hoặc nền tảng cơ bản đang được sử dụng. Ngoài ra, vi dịch vụ cho phép bạn tận dụng các công nghệ và dịch vụ hiện có và mới nổi của nhà cung cấp đám mây, bao gồm các chức năng không có máy chủ, cơ sở dữ liệu, hệ thống nhắn tin và công cụ phân tích.

Có những khó khăn phát sinh khi sử dụng microservice cho ứng dụng gốc. Những thách thức này bao gồm:

1. Độ phức tạp và tải liên lạc tăng lên: Việc kết hợp các vi dịch vụ vào ứng dụng của bạn sẽ làm tăng thêm độ phức tạp. Nó yêu cầu quản lý và điều phối các dịch vụ trên các máy và mạng khác nhau. Điều này liên quan đến việc giải quyết các vấn đề như độ trễ mạng, băng thông, độ tin cậy và bảo mật.


Ngoài ra, các giao thức và cơ chế phải được triển khai cho các tác vụ như khám phá dịch vụ, cân bằng tải, định tuyến và đồng bộ hóa. Các dịch vụ giám sát và khắc phục sự cố cũng như sự tương tác của chúng cũng có thể là một nhiệm vụ tốn thời gian và đầy thử thách.


2. Khó khăn khi kiểm tra và gỡ lỗi: Microservice khiến việc kiểm tra và gỡ lỗi trở nên khó khăn hơn vì bạn cần kiểm tra và gỡ lỗi không chỉ từng dịch vụ riêng lẻ mà toàn bộ hệ thống như một đơn vị gắn kết.


Bạn cần đảm bảo rằng các dịch vụ của bạn tương thích và nhất quán với nhau, đồng thời có thể xử lý các tình huống và trường hợp nguy hiểm khác nhau. Bạn cũng cần mô phỏng và tái tạo môi trường thực tế và các điều kiện của ứng dụng, điều này có thể phức tạp và tốn kém.


3. Thiếu tiêu chuẩn hóa và quản trị trong ứng dụng của bạn: Vì mỗi dịch vụ có quyền tự do sử dụng công nghệ, khung, ngôn ngữ và công cụ, nên điều đó có thể dẫn đến sự không nhất quán trong các nỗ lực trùng lặp và cơ sở mã bị phân mảnh.


Do đó, việc duy trì và cập nhật các dịch vụ này có thể trở nên khó khăn. Để giải quyết vấn đề này, điều quan trọng là phải thiết lập và thực thi các thông lệ, hướng dẫn và chính sách cho dịch vụ của bạn. Chúng có thể bao gồm các tiêu chuẩn mã hóa, yêu cầu tài liệu, quy trình kiểm tra giao thức phiên bản và chiến lược triển khai.


4. Bảo mật và duy trì dữ liệu đặt ra những thách thức: Vì mỗi dịch vụ đều có quyền kiểm soát quyền truy cập và lưu trữ dữ liệu riêng nên nguy cơ vi phạm, rò rỉ và hỏng dữ liệu sẽ tăng lên. Ngoài ra, việc quản lý xác thực, ủy quyền và mã hóa cho các dịch vụ và dữ liệu tương ứng của chúng có thể trở nên phức tạp.


Để giải quyết những mối lo ngại này, điều quan trọng là phải ưu tiên bảo mật dịch vụ của bạn và đảm bảo tuân thủ các quy định và tiêu chuẩn. Việc triển khai các chiến lược, như giao dịch, sagas và tìm nguồn cung ứng sự kiện, cũng có thể giúp duy trì tính nhất quán của dữ liệu.

Sử dụng Docker cho microservice

Nếu bạn đang muốn xây dựng, chạy và triển khai, Docker vi dịch vụ có thể là một công cụ hỗ trợ bạn. Trong phần này, chúng ta sẽ đi sâu vào các khái niệm về Docker như hình ảnh, vùng chứa, khối lượng và mạng. Chúng tôi cũng sẽ cung cấp hướng dẫn về cách tận dụng Docker Compose để xác định và sắp xếp các vi dịch vụ một cách hiệu quả.


Ngoài ra, chúng ta sẽ thảo luận về một số phương pháp thực hành và mẹo hữu ích để sử dụng Docker trong bối cảnh vi dịch vụ.

Hình ảnh và vùng chứa

Trong lĩnh vực Docker, image hoạt động như một gói, chứa mọi thứ cần thiết để dịch vụ hoạt động chính xác. Điều này bao gồm các đoạn mã, thư viện, phần phụ thuộc và thiết lập cấu hình. Điều đáng lưu ý là sau khi được tạo, hình ảnh Docker được coi là bất biến – nghĩa là nó không thể bị thay đổi.


Để tạo hình ảnh tùy chỉnh phù hợp với nhu cầu của bạn, bạn có tùy chọn tạo Dockerfile phác thảo các hướng dẫn xây dựng. Ngoài ra, bạn cũng có thể sử dụng các image hiện có trên các nền tảng như Docker Hub hoặc các nguồn đáng tin cậy khác.


Bộ chứa Docker đại diện cho một phiên bản của hình ảnh Docker. Nó hoạt động độc lập với máy chủ và các bộ chứa khác có hệ thống tệp, mạng và quy trình. Để khởi tạo vùng chứa Docker, bạn có thể sử dụng lệnh docker run để tạo và khởi chạy vùng chứa dựa trên hình ảnh.


Ngoài ra, bạn có tùy chọn tận dụng các lệnh docker start và docker stop để bắt đầu hoặc tạm dừng một container hiện có tương ứng. Nếu cần, lệnh docker rm có thể được sử dụng để xóa vùng chứa.

Khối lượng và mạng

Trong thuật ngữ Docker, một ổ đĩa được sử dụng để lưu trữ có thể được kết nối với vùng chứa Docker. Bằng cách sử dụng khối lượng trong Docker, người ta có thể trao đổi dữ liệu giữa các container và máy chủ một cách thuận tiện đồng thời đảm bảo tính liên tục của dữ liệu trong quá trình khởi động lại hoặc cập nhật.


Việc tạo một ổ đĩa Docker có thể đạt được thông qua việc thực hiện lệnh tạo ổ đĩa docker hoặc chỉ định tùy chọn ổ đĩa trong lệnh chạy docker hoặc trong Dockerfile của bạn.


Ngoài ra, còn có các lệnh như docker Volume để liệt kê các ổ đĩa, docker Volume kiểm tra để lấy thông tin về các ổ đĩa cụ thể và cuối cùng là docker Volume rm để loại bỏ các ổ đĩa không mong muốn.


Mạng Docker đóng vai trò là mạng kết nối các bộ chứa Docker với nhau bằng máy chủ. Bằng cách sử dụng mạng Docker, bạn có thể đảm bảo liên lạc tách biệt giữa các vùng chứa đồng thời cho phép truy cập vào các dịch vụ chạy bên trong chúng.


Để tạo mạng Docker, bạn có tùy chọn sử dụng lệnh "docker network create" hoặc chỉ định mạng trong lệnh "docker run" hoặc Dockerfile.


Ngoài ra, bạn có thể sử dụng các lệnh như "docker network", "docker network Inspection" và "docker network rm" để quản lý và thao tác mạng.

Xây dựng và chạy một microservice đơn giản bằng Docker

Để minh họa cách sử dụng Docker cho vi dịch vụ, chúng ta sẽ xây dựng và chạy một vi dịch vụ đơn giản trả về một trích dẫn ngẫu nhiên từ tệp JSON. Microservice sẽ được viết bằng Python và sử dụng khung Flask. Tệp JSON sẽ chứa một loạt các trích dẫn, mỗi trích dẫn có một tác giả và một văn bản.


Để bắt đầu, hãy tạo một thư mục cho microservice của chúng ta và thêm hai tệp bên trong đó: app.py và quotes.json. Tệp app.py sẽ chứa mã cho microservice của chúng tôi trong khi tệp quotes.json sẽ lưu trữ dữ liệu. Đây là nội dung của từng tập tin;


Python

# app.py

từ bình nhập khẩu Flask, jsonify

nhập khẩu ngẫu nhiên


ứng dụng = Bình( tên )


# Tải trích dẫn từ tệp JSON

với open("quotes.json") là f:

 quotes = f.read() quotes = json.loads(quotes)


# Xác định tuyến đường cho điểm cuối /quote

@app.route("/quote")

trích dẫn chắc chắn():

 # Pick a random quote from the list quote = random.choice(quotes) # Return the quote as a JSON object return jsonify(quote)


JSON

# quote.json

 "author": "Albert Einstein", "text": "Imagination is more important than knowledge."


 "author": "Mahatma Gandhi", "text": "Be the change that you wish to see in the world."


 "author": "Mark Twain", "text": "The secret of getting ahead is getting started."


 "author": "Oscar Wilde", "text": "Be yourself; everyone else is already taken."


 "author": "Steve Jobs", "text": "Your time is limited, so don't waste it living someone else's life."


Tiếp theo, chúng ta cần tạo một Dockerfile cho microservice của mình để chỉ định hướng dẫn xây dựng hình ảnh. Dockerfile sẽ như sau:


Sử dụng hình ảnh Python chính thức làm hình ảnh cơ sở

TỪ trăn: 3,9


Đặt thư mục làm việc thành /app

WORKDIR/ứng dụng


Sao chép các tập tin từ thư mục hiện tại vào thư mục /app

SAO CHÉP. /ứng dụng


Cài đặt các phụ thuộc cần thiết

Bình cài đặt RUN pip


Lộ cổng 5000

TIẾP XÚC 5000


Xác định lệnh để chạy ứng dụng

CMD ["python", "app.py"]


Để build image, chúng ta cần chạy lệnh sau trong terminal từ thư mục chứa Dockerfile:


docker build -t quote-service.


Tùy chọn -t chỉ định tên và thẻ của hình ảnh, trong trường hợp này là dịch vụ trích dẫn. Các . chỉ định bối cảnh cho bản dựng, trong trường hợp này là thư mục hiện tại.


Để chạy container, chúng ta cần chạy lệnh sau trong terminal:


docker run -d -p 5000:5000 --name quote-service quote-service


Tùy chọn -d chạy vùng chứa ở chế độ tách rời, nghĩa là nó chạy ở chế độ nền. Tùy chọn -p ánh xạ cổng 5000 của vùng chứa tới cổng 5000 của máy chủ, cho phép chúng ta truy cập dịch vụ từ máy chủ.


Tùy chọn --name gán tên cho vùng chứa, trong trường hợp này là dịch vụ báo giá. Đối số cuối cùng là tên và thẻ của hình ảnh, trong trường hợp này là dịch vụ trích dẫn.


Để kiểm tra dịch vụ, chúng ta có thể sử dụng một công cụ như Curl hoặc Postman để gửi yêu cầu GET đến điểm cuối /quote của dịch vụ. Yêu cầu này sẽ trả về một báo giá ngẫu nhiên ở định dạng JSON. Ví dụ: sử dụng Curl, chúng ta có thể chạy lệnh sau trong terminal:


Curl http://localhost:5000/quote


Đầu ra phải giống như thế này:


JSON

"tác giả": "Mark Twain",

"text": "Bí quyết để tiến lên phía trước là hãy bắt đầu."



Docker Soạn

Docker Compose cung cấp cách xác định và quản lý vi dịch vụ bằng cách sử dụng tệp YAML. Với Docker Compose, bạn có thể dễ dàng xử lý các tác vụ như tạo, bắt đầu, dừng và cập nhật vùng chứa. Nó cũng cung cấp các chức năng như khám phá dịch vụ, cân bằng tải, mở rộng quy mô và kết nối mạng để đơn giản hóa việc quản lý các vi dịch vụ của bạn.


Để sử dụng Docker Compose, chúng ta cần tạo một tệp có tên docker-compose.yml trong cùng thư mục với Dockerfile. Tệp docker-compose.yml sẽ chứa cấu hình cho các vi dịch vụ của chúng tôi, chẳng hạn như hình ảnh, cổng, ổ đĩa, mạng và phần phụ thuộc.


Ví dụ: giả sử chúng ta muốn thêm một vi dịch vụ khác sử dụng dịch vụ báo giá và hiển thị báo giá trên trang web. Microservice sẽ được viết bằng Node.js và sử dụng Express framework. Tệp docker-compose.yml sẽ như sau:


Chỉ định phiên bản của phiên bản định dạng tệp Docker Compose: "3.9"


Xác định các dịch vụ (thùng chứa) tạo nên các dịch vụ ứng dụng của chúng tôi:

Dịch vụ báo giá

dịch vụ báo giá:

 # Build the image from the Dockerfile in the current directory build: . # Expose the port 5000 ports: - "5000:5000" # Assign a name to the container container_name: quote-service


Dịch vụ Web

dịch vụ web:

 # Use the official Node.js image as the base image image: node:14 # Set the working directory to /app working_dir: /app # Copy the files from the web directory to the /app directory volumes: - ./web:/app # Install the required dependencies command: npm install && node app.js # Expose the port 3000 ports: - "3000:3000" # Assign a name to the container container_name: web-service # Specify the dependency on the quote service depends_on: - quote-service


Thư mục web sẽ chứa hai tệp: app.js và index.html. Tệp app.js sẽ chứa mã cho dịch vụ web của chúng tôi và tệp index.html sẽ chứa HTML cho trang web của chúng tôi. Nội dung của các tập tin như sau:


JavaScript

// ứng dụng.js

const express = require("express");

const axios = require("axios");


const ứng dụng = express();


// Phục vụ tệp index.html làm tuyến gốc

app.get("/", (req, res) => {

res.sendFile(__dirname + "/index.html");

});


// Xác định tuyến đường cho điểm cuối /quote

app.get("/quote", async (req, res) => {

thử

 // Call the quote service and get a random quote const response = await axios.get("http://quote-service:5000/quote"); const quote = response.data; // Return the quote as a JSON object res.json(quote);


bắt (lỗi)

 // Handle the error and return a status code


Trong bài viết này, chúng ta đã khám phá thế giới vi dịch vụ và ứng dụng gốc cũng như cách sử dụng Docker để xây dựng, chạy và triển khai chúng. Trong suốt cuộc thảo luận, chúng ta đã xem xét những lợi thế và thách thức khi sử dụng vi dịch vụ cho các ứng dụng.


Chúng bao gồm các chu kỳ phát triển, tăng tính linh hoạt và khả năng mở rộng, cải thiện khả năng chịu lỗi, lựa chọn và tích hợp công nghệ dễ dàng phục hồi, độ trễ mạng, v.v.


Ngoài ra, chúng tôi đã làm quen với các khái niệm về Docker, chẳng hạn như hình ảnh, khối lượng vùng chứa và mạng. Chúng tôi cũng đã nghiên cứu kỹ việc sử dụng Docker Compose để xác định và sắp xếp các vi dịch vụ. Trong quá trình thực hiện, chúng tôi đã chia sẻ một số phương pháp thực hành và mẹo hữu ích để sử dụng Docker hiệu quả trong môi trường vi dịch vụ.


Điều này bao gồm các đề xuất về chiến lược ghi nhật ký quy ước đặt tên và thực hiện kiểm tra tình trạng.


Nhìn chung, bài viết này đã cung cấp cái nhìn tổng quan về microservice kết hợp với các ứng dụng gốc, đồng thời chỉ ra cách Docker có thể đóng một vai trò quan trọng trong vòng đời phát triển của chúng.


Có những trường hợp và đề cập đến các công ty đã triển khai thành công các dự án vi dịch vụ sử dụng Docker, như Netflix, Uber, Spotify và Airbnb. Các tổ chức này đã sử dụng microservice và Docker như một phương tiện để mở rộng khả năng của ứng dụng, đồng thời nâng cao hiệu suất và cung cấp dịch vụ với tốc độ và độ tin cậy.


Nếu muốn tìm hiểu sâu hơn về những hiểu biết sâu sắc và các phương pháp tiếp cận được đề xuất của họ, bạn có thể khám phá các bài đăng trên blog, podcast và bản trình bày của họ.


Nếu bạn quan tâm đến việc mở rộng kiến thức về microservice và Docker, thì bạn có thể tùy ý sử dụng các tài nguyên và cơ hội học tập. Chúng bao gồm sách, khóa học, hướng dẫn và tài liệu. Dưới đây là một số khuyến nghị:


"Microservices với Docker, Flask và React"; Cuốn sách này cung cấp hướng dẫn về cách xây dựng, thử nghiệm và triển khai các vi dịch vụ bằng Python, Flask, React và Docker.


"Docker và Kubernetes; Hướng dẫn đầy đủ"; Khóa học này trang bị cho bạn các kỹ năng phát triển, chạy và triển khai các ứng dụng bằng Docker và Kubernetes.


"Xây dựng một microservice đơn giản bằng Docker và Flask"; Trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo một microservice bằng Docker và Flask. Nó cũng bao gồm các kỹ thuật kiểm tra và gỡ lỗi bằng cách sử dụng các công cụ như Postman và VS Code.


“Tài liệu Docker”; Để biết thông tin về mọi thứ liên quan đến Docker—từ hướng dẫn cài đặt đến chi tiết cấu hình—tài liệu này đóng vai trò là tài nguyên.


Khám phá các tùy chọn này để tìm hiểu sâu hơn về thế giới vi dịch vụ cùng với Docker.