Lâm Văn Đời
10 questions
0 answers
Avatar
1
Lâm Văn Đời Beginner
Microservices dùng Spring
<blockquote>Hi anh, em có thời gian rãnh nên vào đọc lại câu hỏi này  <a href="https://stackask.com/question/login-trong-he-thong-microservices-voi-spring/">https://stackask.com/question/login-trong-he-thong-microservices-voi-spring/</a>  để có thêm kiến thức để làm 1 hệ thống Microservices bằng Spring để rèn luyện thêm.</blockquote> <p> Em rất muốn tự làm 1 cái app đơn giản (FE dùng <em><strong>ReactJS</strong></em>, BE dùng <em><strong>SpringBoot</strong></em>) đơ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. </p> <p> </p> <p> Nên em cho em thắc mắc thêm vài câu hỏi về chủ đề này: </p> <ol> <li>Message Queue ( Kafka, RabbitMQ,....) thường dùng để <strong>làm những gì</strong> trong hệ thống Microservices.</li> <li>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).<strong>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.</strong></li> <li>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.</li> </ol> <p> Rất cảm ơn anh về tâm huyết của anh trong các câu trả lời ! </p>
Answer
Avatar
1
Lâm Văn Đời Beginner
Login trong hệ thống microservices với Spring
Em đang muốn làm chức năng xác thực (login) bằng account của hệ thống và cũng như xác thực bằng account <em><strong>Facebook, Google </strong></em>trong hệ thống <em><strong>Microsevices</strong></em> viết bằng Spring<em><strong>. </strong></em>Cái này nếu làm dự án Monolithic thì em OK còn khi với hệ thống microservices thì em chưa có solution.Mong anh Dũng và mọi người gợi ý giúp em cách làm về chức năng login kiểu này vừa account hệ thống vừa social account.Có thể là cách phổ biến mà mọi người hay dùng chứ chưa cần phức tạp như các hệ thống lớn đâu ạ. <p> </p> <p> Cảm ơn mọi người </p>
Answer
Avatar
1
Lâm Văn Đời Beginner
Xác thực trong hệ thống microservices
Hi mọi người, <p> </p> <p> Sau 1 thời gian ngắn tìm hiểu về Microservices với Spring Boot cũng như Spring Cloud thì em thấy đối với chức năng login xác thực người dùng thì đa số sẽ có 1 <strong>Api Gateway</strong> (Em đang dùng <strong>Spring cloud gateway</strong>) nhận tất cả request và xác thực 1 bên thứ 3 mà em thấy nhiều ví dụ nhất là <strong>KeyCloak.</strong> </p> <ol> <li>Cho em hỏi là ở thực tế thì trong hệ thống <em><strong>microservices</strong></em> thì các cách, giải pháp triển khai <em><strong>authentication</strong></em> và <em><strong>authorization</strong></em> như thế nào ạ ?</li> <li>Em hiện tại ko muốn xác thực thông qua Keycloak mà em muốn viết logic để xác thực bằng Spring và lưu user của hệ thống ở DB của ta thay vì lưu ở Keycloak thì có ổn ko ạ ? Tại vì theo e nghĩ ở dự án thực tế chả ai lưu user của mình ở Keycloack cả.</li> <li>Nếu có 1 con Gateway thì các service khi gọi nội bộ với nhau thì có cần xác thực ko ạ ?</li> <li>Em đang muốn làm chức năng xác thực (login) bằng account của hệ thống và cũng như xác thực bằng account <em><strong>Facebook, Google. </strong></em>Cái này nếu làm dự án Monolithic thì em OK còn khi với hệ thống microservices thì em chưa có solution.Mong anh Dũng và mọi người gợi ý giúp em cách làm về chức năng login kiểu này vừa account hệ thống vừa social account.</li> </ol> <p> Tks mọi người ! </p>
Answer
Avatar
1
Lâm Văn Đời Beginner
Ưu /khuyết điểm của Message Queue
Chào mọi người, em có câu hỏi là: <p> </p> <strong>Tất cả ưu điểm/khuyết điểm (nếu có)</strong> của mẫu thiết kế gửi message 1 cách bất đồng bộ qua MQ trung gian là gì ạ ?
Answer
Avatar
1
Lâm Văn Đời Beginner
Hỏi về việc gửi tin nhắn qua Message Queue (RabbitMQ,Kafka)
<em>Xin chào mọi người,</em> <p> </p> <p> Theo em được biết thì trong 1 hệ thống <em><strong>Microservices</strong> </em>thì các chức năng như gửi Mail, SMS cho khách hàng thì sẽ được tách thành 1 service mới.Khi cần gửi mail thì sẽ gửi 1 message đến MQ trung gian (Kafka,RabbitMQ,..) chứ không gửi theo kiểu request như thông thường. </p> <p> </p> <p> Em có tìm hiểu nhưng cách giải thích của mọi người trên mạng vẫn làm em mơ hồ chưa hiểu rõ cho lắm.Em chỉ hiểu đơn giản là gửi message qua 1 MQ trung gian như vậy thì đỡ tốn thời gian hơn so với bình thường vì sẽ gửi 1 cách<em><strong> bất đồng bộ</strong></em> và không cần phản hồi từ service đã gửi.Theo em nghĩ thì việc áp dụng 1 MQ trung gian như vậy chắc chắn sẽ có rất nhiều lợi ích.Nên em đặt câu hỏi ở đây và  mong được anh chị có kinh nghiệm giải đáp giúp em ạ. </p> <p> </p> <p> Em có câu hỏi là : </p> <ol> <li>Ngoài service như gửi Mail, SMS thì trong thực tế các service có chức năng kiểu như thế nào thì nên áp dùng kiểu gửi message thông qua MQ như trên vậy ạ? Cho em xin 1 số ví dụ cụ thể với ạ.</li> <li>Vì sao trong thức tế người lại dùng đến các MQ như Kafka, RabbitMQ vậy ạ ?</li> <li><strong>Tất cả ưu điểm/khuyết điểm (nếu có)</strong> của mẫu thiết kế gửi message 1 cách bất đồng bộ qua MQ trung gian là gì ạ ?</li> </ol> <p> Em cảm ơn mọi người rất nhiều ạ ! </p>
Answer
Avatar
1
Lâm Văn Đời Beginner
Đăng nhập bằng mạng xã hội với JWT
Xin chào mọi người <p> </p> <p> Em đang làm ứng dụng React JS (FE) + SpringBoot (BE).Em đã áp dụng JWT cho đăng nhập bằng account của hệ thống còn đối với chức năng đăng nhập bằng các <strong>mạng xã hội</strong> (<em>mxh</em>) như <em><strong>Google,Facebook,...</strong></em> mỗi account login bằng mxh thì  em cũng lưu xuống DB kèm theo provider của mxh đó và coi như 1 account bình thường của hệ thống. </p> <ol> <li> <ol> <li>Cả ReactJS và SpringBoot đều hỗ trợ đăng nhập bằng mxh.Theo mọi người thì  em nên dùng cách nào thì ổn hơn cho hệ thống phân tán như thế này ạ? Ở các hệ thống Microservice thì đăng nhập bằng mxh thì người ta thường triển khai theo cách như thế nào vậy ạ? (login ở BE Springboot thì em dùng <em><strong>spring-boot-starter-oauth2-client</strong> )</em></li> <li>Trong quá trình em tìm hiểu thì em có thấy thêm 1 cái gọi là <strong>Oauth2</strong>.Cho em hỏi trong 1 hệ thống phân tán <em>Microservice</em> thì <strong>JWT</strong> và <strong>Oauth2</strong> có liên quan đến nhau ko ? Cho em xin cách giải thích chi tiết hơn về 2 cái <strong>JWT</strong> và <strong>Oauth2 </strong>để em hiểu thêm về các cơ chế xác thực trong các hệ thống phân tán phức tạp ạ. (lí do em hỏi câu này tại vì em  thấy OAuth2 và JWT không liên quan đến nhau cho lắm. OAuth2 có thể dùng hoặc không dùng JWT. JWT có thể được dùng một mình nó chả liên quan đến OAuth2)</li> </ol> </li> </ol> <p> Rất cảm ơn anh Dũng và mọi người đã trời câu hỏi của em ạ. </p>
Answer
Avatar
1
Lâm Văn Đời Beginner
Session + Cookie và JWT
Xin chào mọi người, theo em được biết thì với các Monolithic application thì thường dùng Session(Cookie) để xác thực. <p> </p> <p> Em có 2 câu hỏi muốn hỏi là : </p> <ol> <li>Đối với combo các ứng dụng <em><strong>SPA + App mobile </strong></em> dùng chung 1 Backend <em>(Microservice)</em> thì tại sao ở phần xác thực các ứng dụng thường dùng JWT thay vì dùng Session(Cookie) vậy ạ ? Ưu/Nhược điểm giữa chúng là gì ạ ?</li> <li>Trên thực tế thì có thể dùng Session(Cookie)  cho chức năng xác thực hay bất cứ chức năng nào cho hệ thống Microservice được không ạ?</li> <li>Có phải Session(Cookie) chỉ nên được sử dụng cho <strong>Monolithic application </strong>không ạ ? (lý do em hỏi câu này là do các ứng dụng Microservice thì thường deploy trên nhiều instance thay vì 1 instance như Monolithic application mà Session thì lưu trên memory server nên em đoán sẽ không ổn cho lắm đúng ko ạ ? )</li> </ol>
Answer
Avatar
1
Lâm Văn Đời Beginner
Round Robin cơ bản
Ví dụ em muốn làm chức năng tự động giao một lớp học <strong>mới</strong> cho một giáo viên của trường theo cơ chế <strong>Round-robin </strong>(Theo em hiểm cơ bản thực toán <em>RR</em> có nghĩa là nó sẽ tự động chọn 1 đối tượng trong 1 danh sách đối tượng theo vòng tròn, người này chọn rồi thì lần sau sẽ không chọn nữa ).Nhưng khi em tìm hiểu sâu thì thực toán RR ko đơn giản như vậy. <p> </p> <p> Nhưng em chỉ muốn áp dụng RR 1 cách cơ bản thôi ạ.Và ko chắc cách này có phải là RR ko hay có thể do em tự định nghĩa ra .Cụ thể là  đối với chức năng tự động giao lớp cho 1 giáo viên thì sẽ là : </p> <ul> <li>Truy vấn vào bảng Giáo viên  =&gt; tìm và lấy 1 giáo viên đang dạy <strong>ít lớp nhất</strong> =&gt; tìm được <strong>1 giáo viên</strong> =&gt;  tự động giao cho giáo viên đó <strong>lớp mới</strong>.</li> <li>Nếu trong bảng Giáo viên có  <strong>nhiều</strong> giáo viên có số lớp đang dạy ít nhất (ví dụ 2 giáo viên cùng  dạy số lượng  2 lớp và 2 lớp là thấp nhất trong trường đó) thì sẽ random chọn 1 trong 2.</li> </ul> <ol> <li>Mọi người cho em hỏi cơ chế ở trên em có phải là RR không ạ ? hay chỉ là do em ngộ nhận :D</li> <li>Nếu được thì cho em xin cách để thực hiện chức năng auto giao 1 lớp cho 1 giáo viên dạy ít lớp nhất trong trường với ạ.(Bao gồm trường hợp nhiều hơn 1 giáo viên có cùng số lớp dạy ít nhất )</li> </ol> <p> Cảm ơn mọi người nhiều ạ ! </p>
Answer
Avatar
1
Lâm Văn Đời Beginner
Cache Spring
Chào tất cả mọi người, hiện tại em có 1 table trong database với dữ liệu rất ít thay đổi (nhưng thỉnh thoáng vẫn có) nên em mới quyết định sử dụng cache khi truy vấn data từ table này. <p> </p> <p> Em dùng @PostConstruct để findAll dữ liệu rồi lưu vào 1 Array.Rồi sau này muốn truy vấn gì thì truy vấn vào Array đó chứ không truy vấn trực tiếp vào database nữa. </p> <p> </p> <p> Nhưng em đang có  vấn đề là : </p> <p> </p> <p> Khi dữ liệu thay đổi thì sẽ xử lý như thế nào là hợp lý nhất ạ ? </p> <p> </p> <p> =&gt; Cách xử lý của em là: mỗi khi (thêm/xóa/sửa) dữ liệu thì em sẽ update lại cái Array ban đầu. </p> <p> </p> <p> Nhưng theo em đoán thì  cách xử lý ở trên chỉ work tốt  khi deploy với 1 instance thôi còn khi deploy với 2 instance trở lên thì khi update sẽ không reload được Array của tất cả các instance. </p> <ul> <li>Theo mọi người thì trường hợp suy đoán của em có đúng ko ạ? Tại em chưa deploy bao giờ nên em cũng không biết rõ ạ,em  chỉ có tìm hiểu lý thuyết thôi ạ.</li> <li>Và mọi người cho em hỏi là cách cache tốt nhất cho trường hợp trên là  gì ạ ? Lưu tất cả các record của Table đó vào 1 cache server (Redis) thày vì object có ổn k ạ?</li> </ul>
Answer
Avatar
1
Lâm Văn Đời Beginner
Lưu trữ file trong spring
Mọi người cho em hỏi là trong thực tế <strong>khi deloy 1 dự án</strong> thì file sẽ được lưu trữ như thế nào vậy ạ ? <p> </p> <p> Đối với: </p> <ul> <li><em><strong>Microservices</strong></em> có phải là phải tạo 1 con service riêng để serve từng hình ảnh cho Cilent ( ví dụ <strong>thẻ img</strong> trong <strong>html</strong> gọi Api để display image ) và với số lượng request lớn như vậy (rất nhiều <strong>thẻ img</strong> trong 1 trang thì có <strong>ảnh hưởng gì server</strong> ko mọi người?Nếu có thì <em><strong>giải pháp</strong></em> để đáp ứng được 1 lượng get image khủng lồ của các dự án microsevices là gì v ạ ?(<em>Tại vì em thấy mấy website đăng ký học phần của các trường ĐH khi có nhiều người đăng ký tạo nhiều request gây sập server nên em có thắc mắc ạ :v</em> )</li> <li><em><strong>Monolithic</strong></em> thì cách lưu trữ file <strong>khi deploy</strong> (để làm chức năng upload 1 hình ảnh,....) như thế nào ạ ? Có phải là lưu trữ ở 1 folder nào đó như các ví dụ trên mạng ko ạ ?</li> <li>Cho em hỏi là trong thực tế khi deploy cả 2 thằng Mono và Microservices đều nên lưu trữ file trên Cloud (<strong>AWS S3</strong>,...) đúng ko ạ? Nếu không thì thường lưu trữ ntn ạ ?Trong DB hay trong 1 Folder?</li> </ul> <p> Tks mọi người ! </p> <p> </p> <p> &nbsp; </p>
Answer