Avatar
1
Lâm Văn Đời Beginner
Microservices dùng Spring
Hi anh, em có thời gian rãnh nên vào đọc lại câu hỏi này  https://stackask.com/question/login-trong-he-thong-microservices-voi-spring/  để có thêm kiến thức để làm 1 hệ thống Microservices bằng Spring để rèn luyện thêm.

Em rất muốn tự làm 1 cái app đơn giản (FE dùng ReactJS, BE dùng SpringBoot) đơn giản có đầy đủ các chức năng cơ bản như login = account của hệ thống, login = google, Facebook, áp dụng cả Kafka hoặc RabbitMQ để làm 1 chức năng gì đó (Hiện em chỉ biết mỗi chức năng gửi mail mà ko biết hệ thống thật có dùng ko :D ), Redis để cache,các service trong hệ thống trao đổi thông tin với nhau ..... với mô hình Microservices.

Nên em cho em thắc mắc thêm vài câu hỏi về chủ đề này:

  1. Message Queue ( Kafka, RabbitMQ,....) thường dùng để làm những gì trong hệ thống Microservices.
  2. Theo câu trả lời của anh thì em hiểu 1 service có nghĩa là có UI và cả BE luôn đúng ko ạ ? Nhưng App  em đang muốn là chỉ có 1 UI là ReactJS thôi. Client (ReactJS) sẽ call đến Api gateway (AG) và AG gọi đến service authen để check token và nếu token verify ok thì sẽ gọi đến các service khác để lấy data trả về cho client (khái niệm service theo em đang hiểu là web service chỉ gửi request và nhận response với data kiểu JSON, nếu em có hiểu sai thì mong anh chỉ em lại).Nếu như vậy thì câu hỏi của em là service tập trung như anh nói ở trên thì có liên quan gì đến cơ chế oauth2 hay ko a ? (em đang rất rối về cái cơ chế Oauth2 này trong hệ thống Microservices, có thật sự cần thiết để dùng cơ chế này hay không ). Mong anh có thể nói rõ hơn dựa vào ví dụ của em nêu ở trên để em hiểu thêm về service authen tập trung như anh nói để có thể login bằng nhiều cách với hệ thống Microservices.Em đang muốn dùng 100% thư viện của Spring để viết tất cả các service này.
  3. Mong a suggest thêm 1 số công nghệ và các chức năng cơ bản hay ho của hệ thống Microservices để em có thể học tập và làm theo.

Rất cảm ơn anh về tâm huyết của anh trong các câu trả lời !

  • Answer
spring microservices
Remain: 5
2 Answers
Avatar
tvd12 Beginner
tvd12 Beginner
  1. Nó thường được dùng để các service (service là chương trình hoặc là 1 server) giao tiếp được với nhau. Ví dụ nếu em có 1 service web để user tạo đơn hàng, em có thể thông qua kafka, MQ để gửi thông tin đơn hàng đến service xử lý đơn hàng.

  1. Phải làm rõ cách hiểu về service

a. service hiểu theo nghiệp vụ thì nó thường có cả web lẫn API, ví dụ khi nói MỘT service quản lý đơn hàng thì có thể nó sẽ bao gồm: giao diện để user nhập đơn hàng, API để tiếp nhận đơn hàng, giao diện để admin duyệt đơn hàng

b. service hiểu theo kỹ thuật thì nó là một chương trình chạy độc lập, ví dụ phần quản lý đơn hàng kia thì có CÁC service: website giao diện cho user, API server để tiếp nhận đơn hàng, website giao diện.

Nên em cần nói rõ là em đang nhắc đến khái niệm service nào thì anh mới trả lời tiếp được.

  1. Công nghệ thì:

Code: anh đang dùng spring-boot hoặc ezyfox, redis, kafka, MySQL

DevOps: anh dùng cả k8s và server thường

  • 0
  • Reply
Dạ nếu vậy cái em đang muốn làm là service theo kiểu service hiểu theo kỹ thuật.
  • 1 service web giao diện người dùng (WUI) viết bằng ReactJS
  • 1 service sẽ xử lý Authen  cho phép login = account của hệ thống và kể cả FB,Google.
  • 1 service Api Gateway (AG) nếu cần thiết
  • Một số service khác (liên quan đến nghiệp vụ ) để cung cấp API cho client (ReactJS) có thể là public hoặc private (trường hợp này cần phải xác thực thông qua auth service phía trên thì mới gọi API private này đc )

Em đang muốn hỏi anh về cơ chế xác thực của hệ thống như trên.

  1. Đối với chức năng login bằng FB,Google được triển khai như thế nào với hế thống này thì ổn (em có tìm hiểu thì có 2 hướng là: service WUI sẽ gọi đến FB,Google để lấy thông tin user sau đó gửi thông tin unique thường là id đến Auth service để xác thực  hoặc là Auth service sẽ làm hết chức năng này cụ thể là WUI sẽ vào link do Auth service cung cấp kèm theo url của WUI sẽ chuyển đến khi login thành công -> đăng nhập fb, google -> redirect về url callback  auth service -> authe service xử lý -> hoàn tất đăng nhập -> redirect về url WUI đã đính kèm theo trước đó )
  2. Làm thế nào để các service nghiệp vụ biết là request đã xác thực rồi.Có phải là trước khi vào các service nghiệp vụ thì request đó phải thông qua AG trước (theo em hiểu AG sẽ là thằng cầm token đi xác thực với Authe service)  ? Mong anh giải đáp thắc mắc cho em.
  3. Như hệ thống mà em nói ở trên thì có cần áp dụng cơ chế Oauth2 hay ko a ? (em đang rất rối về cái cơ chế Oauth2 này trong hệ thống Microservices, có thật sự cần thiết để dùng cơ chế này hay không ).Mong anh có thể nói rõ cho em hiểu về cái này.
 –  Lâm Văn Đời 1671238357000
Avatar
tvd12 Beginner
tvd12 Beginner
  1. Đối với chức năng login bằng FB,Google: WUI sẽ chỉ có nút nhấn, sau đó user nhấn vào thì google sẽ hiển thị nên popup để cho user xác nhận là có ch phép web này login không, nếu họ đồng ý thì sau đó Google sẽ gọi AG thông qua callback mà em cấu hình, AG sẽ chịu trách nhiệm lấy thông tin user và lưu vào DB, sau đó nó sẽ redirect đến WUI với token của web (của em) trong cookie.

  1. Khi gửi request lên AG thì theo cơ chế SSO anh đã trình bày ở câu trả lời trước thì lúc này request user gửi lên AG cũng có token trong cookie khi gửi lên, nếu token hợp lệ nghĩa là xác thực rồi.

  1. Oauth2 là giao thực để cho phép 1 ứng dụng bên ngoài có tận dụng việc xác thực user có sẵn. Ví dụ như web của em là abc.com thì nó không thuộc google nên cần Oauth2. Nhưng nếu là cùng trong một hệ sinh thái của chính em, ví dụ mail.abc.com, search.abc.com thì phải dùng SSO chứ không phải là Oauth2. Bởi vì chung hệ sinh thái nên dùng chung được token thì không cần Oauth2 nữa.
  • 0
  • Reply