Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In
Continue with Google
Continue with Facebook
or use


Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here
Continue with Google
Continue with Facebook
or use


Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.


Have an account? Sign In Now

Sorry, you do not have a permission to ask a question, You must login to ask question.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Stack Ask

Stack Ask Logo Stack Ask Logo

Stack Ask Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 8995
Next
In Process
Lâm Văn Đời
  • 1
Lâm Văn ĐờiBeginner
Asked: December 16, 20222022-12-16T14:32:58+00:00 2022-12-16T14:32:58+00:00In: Spring

Microservices dùng Spring

  • 1

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 😀 ), 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 !

microservicesspring
  • 3 3 Answers
  • 58 Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook
  • Report

3 Answers

  • Voted
  • Oldest
  • Recent
  1. tvd12 Enlightened
    2022-12-17T04:02:26+00:00Added an answer on December 17, 2022 at 4:02 am

    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.

    2. 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.

    3. 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
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • Lâm Văn Đời Beginner
      2022-12-17T07:52:37+00:00Replied to answer on December 17, 2022 at 7:52 am
      This answer was edited.

      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.
      • 0
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
  2. tvd12 Enlightened
    2022-12-17T08:02:38+00:00Added an answer on December 17, 2022 at 8:02 am

    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.

    2. 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.

    3. 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
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

You must login to add an answer.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 823
  • Answers 1k
  • Best Answers 80
  • Users 334
  • Popular
  • Answers
  • monkey

    [Deep Learning] Làm thế nào để xác định được cái ...

    • 16 Answers
  • Thành Vương

    Bug sai đường dẫn khi config ckeditor lên live

    • 14 Answers
  • Tú Trần Anh

    [Ezyfox Server] Unity game client không gửi được command khi ...

    • 12 Answers
  • tvd12
    tvd12 added an answer Anh thấy chỉ cần lúc tạo bảng em cứ khai… January 20, 2023 at 4:28 pm
  • monkey
    monkey added an answer 1. Anh chưa hiểu là cơ sở dữ liệu của… January 16, 2023 at 9:55 am
  • monkey
    monkey added an answer Em có thể tham khảo 2 lớp này: https://github.com/youngmonkeys/ezymq/tree/master/ezymq-kafka/src/main/java/com/tvd12/ezymq/kafka/serialization. Ở… January 16, 2023 at 6:34 am

Related Questions

  • Cường Nguyễn Hữu

    Xóa kiểm tra ràng buộc primary key-foreign key khi sử ...

    • 1 Answer
  • Vo Thanh Vuong

    IOC và Dependency Injection

    • 1 Answer
  • Vo Thanh Vuong

    Không lấy được data khi dùng RestTemplate

    • 3 Answers

Top Members

tvd12

tvd12

  • 76 Questions
  • 1k Points
Enlightened
monkey

monkey

  • 122 Questions
  • 1k Points
Enlightened
Nguyễn Thái Sơn

Nguyễn Thái Sơn

  • 205 Questions
  • 307 Points
Enlightened

Trending Tags

#formatdate .net .net core .net oop abstract class access app access token ai analytics android ansible anti-flooding apache poi api app architecture artificial intelligence assembly async asyncawait atomicboolean authentication backend backend nestjs background bash script batch bean big project binding bitcoin blockchain blog boot-nodes branch british btree bucket4j buffered build bundle c# c# .net cache caching callback career career path cast centos chat cloud cloud reliability commit communication company computer science concurrent config-css connection pool content-disposition contract convert date to number cookie cors cosmos cosmos-sdk crawl data cron css database database migration datasource datastructure deadlock decentralized exchange deep learning deploy contract design-pattern design patterns devops dex di distraction programing dns docker download draw.io du học duration dữ liệu lớn eclip editor elasticsearch email employee english erc20 erc721 estimation eth ethereum ethereum login excel exception exception handle exception handler executor export compliance extensions exyfox ezyfox ezyfox-boot ezyfox-server ezyfoxserver ezyhttp ezymq-kafka ezyredis facebook fe filter floating point flutter format json freetank french front-end frontend fullstack fulltextsearch future gallery game game-box game-room game-server gateway get get file zip git glide go golang google gorilla graduation thesis graphql grapql grpc guide h2 database handy terminal hazelcast hibernate hibernateconfig html http https hyperloglog image index indexing integration-test intellij interface interview io ioc ipfs isolate issue it java java core javacore javascript java spring javaw java web jenkins jetbrains job join jotform jpa js json json file jsonproperty json to object jsp jsp & servlet junit-test jvm jwt kafka keep promise kerberos keycloak kotlin language languague library list load-balancing load balancer lock log log4j log4j-core login lưu trữ machine learning macos mail mail template main maria db math maven merge message queue messaging metamask microservice microservices migration mobile model mongo monitoring mq msgpack multi-threading multiple tenant multithread multithreading mysql n naming naming convention nan netcore netty networking nft nft game nginx nio node.js nodejs non-blocking io null oop opensource optimize orm otp message paginaiton pagination pancakeswap panic partition pdf pgpool phỏng vấn plugin pointer postgresql pre private_key procedure profile programming project management promise properties push-noti push message android push notification python python unicode qrcode question queue rabbitmq reactive reactjs reactjs download readmoretextview recyclerview redis refactor refresh token regex replica repository request resilence4j resource rest resttemplate roadmap ropssten ropsten round robin rust rxjava s3 schedule scheduled scheduled spring boot search security send email send mail server servlet session shift jis singleton sjis slack smart contract soap socket socket server soft delete solution sosanh spring spring-boot-test spring-jpa spring aop spring boot springboot spring data jpa spring redis spring security springsecurity springwebflux mysql spring websocket spring websocket cors sql sql server sse ssl email stackask storage stream stream api stress test structure trong spring boot study synchronize synchronized system environment variables test thread threadjava threadpool thread pool thymeleaf tomcat totp tracking location transaction transfer transfer git udp uniswap unit test unity upload upload file utf-8 file validate validate date vector view volatile vue vue cli watermark web web3 web3 client webassembly webflux webpack websocket windows 11 winforms work zip file zookeeper

Footer

Stack Ask

Stack Ask is where Developers Ask & Answers. It will help you resolve any questions and connect you with other people.

About Us

  • Meet The Team
  • About Us
  • Contact Us

Legal Stuff

  • Terms of Service
  • Privacy Policy
  • Cookie Policy

Help

Follow

© 2021 Stack Ask. All Rights Reserved
Powered by youngmonkeys.org