Docker - Microservices
Add figcaption (optional)

Docker - Microservices

2020, Apr 10    

Docker & Microservices

I - Mở đầu
II - Start Stacks
III - Ưu điểm
IV - Nhược điểm
V - Liên kết

Mở đầu

  • Microservice nhìn như nào, cầm tay xem cảm giác ra sao?

  • Bạn muốn giảm thời gian phát triển ứng dụng?

  • Bạn muốn giảm thời gian triển khai ứng dụng?

  • Bạn muốn tự triển khai hạ tầng dựa trên các máy chủ hiện đang có?

  • Hoặc bạn muốn có kiến thức về container để triển khai/vận hành ứng dụng lên các nền tảng Docker / Kubenetes của Amazone Web Services / Google Cloud / AzureCloud / DigitalOccean

Docker là nền tảng để xây dựng môi trường DevOps


lean-stacks.svg

Starter Stacks

API Gateway:

  • sử dụng Kong Gateway
  • chức năng chính để điều hướng API từ Load Balancer vào trong mạng microservices.

Auth Service:

  • cho phép xác thực tài khoản, cấp token, xác thực token của người dùng.
  • mở rộng, service này có thể đảm nhận chức năng phân quyền/bảo vệ dữ liệu cho từng yêu cầu được gửi tới hệ thống.
  • sử dụng Golang/NodeJS, MongoDB

Order Service:

  • dịch vụ xử lý đơn hàng có chức năng:
    • cho phép người dùng tạo / upload file ds đơn hàng qua API để nhập lên hệ thống. Auth qua AuthService
    • cho phép bên thứ 3 tích hợp API để đẩy đơn qua từ phần mềm đối tác, ERP khác qua giao thức RESTful API. Auth qua API Gateway
    • kết quả trả về của API bao gồm mã đơn tham chiếu + trạng thái đơn hàng.
  • sử dụng NodeJs, RedisRabbitMQ message queue.

Inventory Service:

  • cho phép người dùng xem tồn kho, xem vị trí hàng lưu trong kho.

  • xử lý nghiệp vụ nhập hàng, quản lý, đồng bộ tồn kho.

  • nhận các đơn hàng đã xử lý để lấy hàng, xuất hàng đi giao cho các đối tác vận chuyển.

  • sử dụng Python, MySQL, Redis, Rabbit MQ.

    • Specs:
    • 20K yêu cầu tạo mới đơn / giây.
    • 10M+ messages / ngày.
    • 1000 kết nối đồng thời.
    • Uptime 99.99999%, thời gian triển khai < 2 phút.
    • Ghi log đầy đủ, theo dõi giám sát qua qua thông báo mobile Realtime.
    • Giám sát lỗi phát triển, lỗi triển khai, lỗi người dùng Realtime.

Keywords

Microservices vs kiến trúc một khối:

  • Khác biệt với kiến trúc nguyên khối Monolith, thay vì gom tất cả module thành một khối (monolith), Microservice tách các module thành những service siêu nhỏ. Mỗi service sẽ được đặt trên một server riêng (server vật lý hoặc server ảo hóa, hoặc đóng gói trong container docker), giao tiếp với nhau qua giao thức HTTP hoặc sử dụng MessageQueue, gRPC.
  • Có thể phát triển / triển khai ứng dụng theo kiến trúc Microservices mà không cần dùng Docker? Câu trả lời là được, sẽ phát sinh nhiều vấn đề về quản lý cấu hình khi số lượng máy chủ và services tăng lên (Horizontal Scaling).

Docker:

  • một nền tảng để đóng gói ứng dụng, đóng gói bao gồm source code + môi trường thực thi code) dưới dạng các image (tương tự file portable-app.exe trên Windows.

  • Phần mềm xách tay (portable-app) – Wikipedia tiếng Việt

  • một nền tảng để triển khai ứng dụng bằng container, có thể coi container như một máy ảo đặc biệt, có thể dừng/khởi động lại/nhân bản theo yêu cầu qua 1 dòng lệnh / click. Container được chạy dựa trên một image đã đóng gói và chắc chắn chạy được.

c5bf5975.png

Docker daemon:

  • [dockerd] đây là máy chủ Docker, quản lý tài nguyên và thực thi các image, nhận các yêu cầu từ Docker Client

Docker client:

  • [docker] đây là một chương trình giúp người dùng nói chuyện với với Docker daemon để quản lý images & containers.

92e098e5.png

VD:

        chạy ứng dụng hello-world docker
        1
        docker run hello-world

      
        lấy ds containers đang chạy
        1
        docker ps

      
        dừng container mongo4
        1
        docker stop mongo4

      

Còn nhiều từ khóa để mảnh ghép kiến thức để sử dụng và triển khai ứng dụng lên cloud, mình sẽ trực tiếp giải thích trong series thực hành tiếp theo. Nếu chưa hiểu, bạn vui lòng để tâm lại, khi có ngữ cảnh, các từ khóa sẽ tự ghép lại theo sự hình dung của từng bạn

Ưu điểm

  • Dễ nâng cấp và scale up, scale down
  • 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ình 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ình riêng, database riêng. VD service xử lý ảnh có thể viết bằng C++, service tổng hợp data 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
  • Đồng nhất môi trường phát triển ứng dụng và triển khai.

Tips: Bạn muốn khởi tạo môi trường để viết code chỉ trong 1 vài câu lệnh là có đủ tất cả Database, Môi trường Java/Python/Nodejs đúng phiên bản yêu cầu.
Tips: Bạn muốn những gì nhìn chạy trên máy tính cá nhân cũng chính là những gì mà máy chủ triển khai source code như nhau, tất cả cấu hình giống hệt như nhau.

  • (Docker) Độc lập môi trường chạy, không làm ảnh hưởng tới máy chủ chính đang chạy Docker và các service khác trong cùng mạng Docker.
  • (Docker) Dễ dàng cài đặt các gói phụ thuộc, mỗi image khi đóng gói đều chỉ định hệ điều hành, các câu lệnh khởi tạo môi trường, cài đặt thư viện sẵn sàng để khi image được đóng gói, container sẵn sàng chạy, đúng như 1 portable-app.exe.
  • (Docker) Khi chạy, container được chạy với quyền cao nhất và chỉ sử dụng trong phạm vi tài nguyên mà nó được cấp.
  • Eg: Tài nguyên CPU/RAM/Disk/Network
  • Eg: Cài đặt dễ dàng Cronicle như 1 service sử dụng quyền root như Cronicle yêu cầu nhưng không làm ảnh hưởng tới bảo mật của máy chủ chạy Docker cũng như ảnh hưởng lan tới ứng dụng khác trong mạng Docker.
  • (Docker) Quản lý số lượng lớn các máy chủ, cụm máy chủ để triển khai đồng bộ, chỉ thực hiện trên 1 giao diện dòng lệnh / đồ họa web duy nhất.
  • (Docker) Theo dõi log, quản lý số lượng container / service, và có thể cài đặt cảnh báo tập trung cho toàn bộ service trên một hoặc nhiều máy chủ.
  • (Docker) Horizontal Scaling: scale ứng dụng bằng một lệnh đơn giản, hoặc tự động dựa trên mức sử dụng CPU.
  • Self-Healing: tự restart container lỗi, tự động phân phối lại container khi một node gặp sự cố.
  • Service Discovery & Load Balancing: các container được cấp IP riêng biệt và DNS cho nhóm container để có thể thực hiện load balancing

Nhược điểm

  • Cần thêm tài nguyên để chạy Docker, điều này không phù hợp với các instance nhỏ, máy tính cấu hình yếu, VD: ec2-micro của Amazon Web Services, các máy chủ ảo hóa kích cỡ nhỏ (Tham khảo Docker System Requirement)
  • Cần nhiều thời gian bỏ ra nghiên cứu và xây dựng kiến trúc phần mềm theo hướng Microservices và triển khai hạ tầng.
  • 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.
  • Không phù hợp với các ứng dụng nhỏ

Links

  1. Deploy to Swarm | Docker Documentation
  2. Deploy to Kubernetes | Docker Documentation
  3. MicroK8s - Fast, Light, Upstream Developer Kubernetes
  4. Portainer Management, Docker User Interface, Container Software - Auckland, Singapore, San Francisco | Emerging Technology Partners
  5. 9 Reasons DevOps Is Better With Docker and Kubernetes - DZone DevOps
  6. GitHub - jhuckaby/Cronicle: A simple, distributed task scheduler and runner with a web based UI.
  7. Docker System Requirement | Docker Documentation
  8. Messege Queue – Bộ phận không thể thiếu trong các hệ thống lớn và microservice architecture | Từ coder đến developer – Tôi đi code dạo
  9. Managing microservices and APIs with Kong and Konga

🔶 Keep in touch!