Engineering

Microsevices #2 – Triển khai microservices “tinh gọn” để bắt đầu dễ dàng hơn

Chào mọi người 👋, tiếp nối phần trước – Microsevices #1 – Sự lựa chọn, trong bài viết này mình xin chia sẻ về việc Triển khai microservices "tinh gọn" để bắt đầu dễ dàng hơn, bài chia sẻ dựa trên góc nhìn cá nhân mong nhận được sự đón nhận của các bạn.
Trước tiên, mình muốn nói rằng bài này không phù hợp lắm với người đã có kinh nghiệm mà sẽ phù hợp cho người mới hoặc team mới tiếp cận microservices như mình trước đây. Những người vừa phải tiếp cận hàng trăm thuật ngữ và kiến thức mới, vừa phải tìm hiểu từng cái một để xem ứng dụng nó như thế nào ở "vũ trụ microservice" này.

Kế tiếp, mình sẽ chia sẻ các từ khóa hoặc công nghệ mình đã dùng. Điều này có thể giúp bạn bớt "gánh nặng" hơn, biết cái nào nên ôm vào làm, cái nào nên xài hàng có sẵn. Mục tiêu là sớm dựng được hệ thống chạy microservices đàng hoàng nhưng vẫn tinh gọn và tiết kiệm được nhiều công sức.

Để xây dựng microservices, đúng là có quá nhiều vấn đề cần quan tâm. Chưa hết, bạn còn phải đọc hằng hà sa số kiến thức (hàn lâm, cao siêu) từ những người đi trước. Cái nào thấy cũng hay, rồi cắm đầu vào làm cho bằng hết rồi.. chìm luôn.

Nếu bình tĩnh lại để phân tích: năng lực và kiến thức hiện tại của mình, những nguồn lực mình đang có và tổ chức mình đang thực sự cần gì. Bạn sẽ bớt bị "sa lầy" hơn đấy, tin mình đi.

Các vấn đề cần giải quyết vừa nêu trên khi làm Microservices gồm:

  • Decomposition
  • Data management
  • Testing
  • Deployment
  • Communication
  • Security
  • Observability

Lược đồ dưới đây sẽ cung cấp cho bạn cái nhìn tổng quan

Hình ảnh được trích từ microservices.io
Chi tiết xem tại microservices.io – patterns

Chúng ta có thể thấy có rất nhiều thứ cần được triển khai, nhưng trong giai đoạn đầu có những thứ là chưa thật sự cần thiết (thực ra có khi cũng không làm tốt hết được).

Vì vậy dưới đây là những gì mình sẽ triển khai cho EGANY 2.0 sau khi đã có nguyên rổ hành ở lần đầu tiên 🤪. Xin lưu ý, vì NodeJS được sử dụng chính trong các dự án của EGANY, do đó những nội dung dưới đây sẽ thiên về NodeJS hơn, nào bắt đầu thôi.

1. Core

Core là những thành phần cốt lõi để xây dựng ứng dụng, nó là bất kỳ thứ gì như framework, nền tảng, ngôn ngữ lập trình.. , ở đây mình sẽ bàn Framework.

Framework

Thay vì việc tự triển khai các module để triển khai microservices như các module dùng để giao tiếp (communication), logger, tracking, service discovery… Thì việc lựa chọn một framework chuyên dụng là một lựa chọn không hề tồi, việc còn lại là tập trung phát triển nghiệp vụ chính. Ở đây mình đã chọn moleculer.service, một framework dành cho NodeJS có gần như là đủ các module để phát triển microservices một cách nhanh chóng. Ok, giờ đã xác định những thành phần của core, giờ xem ta cần những gì tiếp theo.

2. API Gateway

Đây cũng là service khá thông dụng trong microservices vì vậy có dịch vụ trả phí, cũng như project mã nguồn mở. Ở đây để tiết kiệm chi phí và nếu đó là những gì bạn quan tâm thì việc ưu tiên tìm kiếm các project mã nguồn mở, uy tín và chất lượng sẽ là một lựa chọn ổn.
Trong trường hợp moleculer.service cũng có hỗ trợ xây dựng API Gateway thông qua moleculer web, vì vậy việc dùng chung một stack của moleculer để tận dụng các tính năng mà nó cung cấp thì còn gì bằng 👏


Hình ảnh được trích từ nginx.com

3. Auth Service

Nếu yêu cầu về bảo mật chưa cần nâng cao thì hoàn toàn có thể lựa chọn tự triển khai một auth service đơn giản với access token. Một vấn đề trong security là việc auth giữa các service với nhau, tuy nhiên nếu trong trường hợp không cần thiết thì bạn có thể để sau.


Hình ảnh được trích từ auth0.com

4. Service Communication

Ở đây ta có thể có hai cách giao tiếp chính là Remote Procedure InvocationMessaging. Khi sử dụng framework thường sẽ có transporter đảm nhận việc giao tiếp giữa các service với nhau.


Hình ảnh được trích từ docs.microsoft.com

Trong trường hợp moleculer thì chỉ cần cấu hình loại transporter mong muốn và sau đấy mọi thứ sẽ hoạt động ^^. Chia sẻ thêm mình dùng NATS cho transporter vì việc cấu hình chạy ở chế độ cluster rất đơn giản.


Hình ảnh được trích từ moleculer.services

5. Data Management

Data là một phần không thể thiếu trong hầu như mọi ứng dụng, đối với microservices sẽ có các chiến lược triển khai database riêng để đảm bảo hiệu quả nó. Có những hướng triển như CQRS, Shared database, nhưng với các dự án thông thường ít khi triển khai. Vì vậy hãy tiếp cận những thứ gần gũi hơn như Database per Service, Domain event, và API Composition.

6. Docker

Với docker ta có docker enginedocker hub đơn giản để tìm hiểu, sử dụng, miễn phí, hỗ trợ đầy đủ để deploy và quản lý service.
Ngoài ra nếu bạn muốn có giao diện để xem trực quan có thể sử dụng thêm portainer


Hình ảnh được trích từ docs.docker.com

Trên đây là những thành phần cơ bản nhất để bạn có thể bắt đầu triển khai microservices. Còn lại là việc phát triển các service khác phục vụ cho nhu cầu sản phẩm của bạn.

Tới đây đã đủ đồ chơi rồi đó anh em, hy vọng bài này giúp cho mọi người có thêm thông tin giá trị và một góc nhìn khác về việc triển khai microservice. Bắt tay vào làm thôi..

Chưa bắt đầu làm thì sao biết là không được 😉

Cảm ơn mọi người đã chịu khó đọc tới đây!

Tham khảo

Nội dung bài viết có tham khảo, sử dụng hình ảnh, nội dung từ các nguồn sau:

Thuan Nguyen

DevOps Ninja @ EGANY

Recent Posts

AWS #3 – Kinh nghiệm triển khai EC2

Trong phần trước, mình đã chia sẻ với mọi người những khó khăn khi team…

2 years ago

Microservices #4: Làm việc đa môi trường và sự chờ đợi của Frontend

Xin chào, tiếp tục loạt bài về trải nghiệm của mình trong việc xây dựng…

2 years ago

Frontend Du Ký S2E3 | Cross-platform Apps (phần 3): Có công mài sắt, có ngày release

Cắm đầu cắm cổ dọn dẹp deadline và dọn nhà trước Tết nên ngâm bài…

2 years ago

Front-end Engineer (Reactjs, Nextjs, TypeScript, Svelte, TailwindCSS..)

Nếu bạn yêu thích phát triển sản phẩm với nhiều thử thách và cơ hội…

2 years ago

AWS #2 – Vấn đề và giải pháp

Trong phần 1, mình đã giải thích lý do tại sao EGANY chọn AWS làm…

2 years ago

AWS #1 – Sự lựa chọn của EGANY

Trong giới công nghệ hiện nay, Amazon Web Service không còn là một cái gì…

2 years ago