Em chào anh. Anh có thể cho em xin cách thức liên hện với anh được không ạ. Em gặp phải vấn đề khá nhức đầu mà chưa có hướng giải quyết.
Em có viết 1 cổng APIGW (1) bằng FastAPI.
Khi có request của client(2) về (1) thì (1) có nhiệm vụ mang request của client và call đến service Provider (Third Party: (3)).
Nhận response của (3) và trả về cho (1).
Hiện tại có service gặp lỗi đó là:
thi thoảng request đầu tiên bị lỗi - 500 -> gọi lại lần nữa thì thành công
hoặc gọi lần 1 lần 2 bị lỗi 500 -> gọi lần tiếp theo thì thành công
Tần xuất suất hiện không nhiều nhưng có xu hướng gần đây tăng dần + vì số lượng request ngày càng lớn nên -> request error ngày càng tăng. Anh có thể cho em cách thức liên lạc, anh chỉ bảo em thêm được không ạ
bạn có thể sử dụng projection tạo custom projection hoặc excerptProjection hoặc bạn cũng có thể tạo ObjectMapper để xoá hẳn "_embeded" với "_links" nhé b
Thank anh chủ post, bài post quá hay cho người mới, đã làm theo và thành công ạ.
Có 1 số chỗ trong quá trình làm theo em gặp vấn đề do tay nhanh hơn não share lại cho a/e sau.
Cấu hình file host trước khi copy SSH key.
File host.yaml nếu copy nguyên bên trên thì nên chuyển sang đúng format yaml(Dùng chatgpt convert lại), file trên có vẻ như .ini
Trong quá trình cài đặt gặp lỗi:
{"attempts": 4, "changed": false, "msg": "Failure talking to yum: Cannot find a valid baseurl for repo: base/7/x86_64"}
=> Run command:
sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/.repo && sed -i s/^#.baseurl=http/baseurl=http/g /etc/yum.repos.d/.repo && sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/.repo && yum update -y
Em sử dụng socket.io thay cho pusher và gặp vấn đề là broadcast::channel không chạy, em đã return false ở channel rồi nhưng kênh vẫn được xác thực thành công. Nhờ a xem giúp với ạ.
Trong phạm vi bài viết mình chỉ đang đề cập tới flow của Redux thuần, và action được đề cập cũng là thụnk action của redux.
Còn createAsyncThunk là một API của redux toolkit dùng để đơn giản hóa những flow đề cập trong bài viết, bạn không cần quan tâm tới action creator, dispatch,... bạn chỉ cần một action dạng string, và một callback (tất nhiên là trả về một promise vì đây là async action 😀) và một reducer để resolve cái promise đó.
Nhưng nay đã là 2025 rồi 😀 , bạn có thể thử những thư viện hỗ trợ data fetching khác tôt hơn như như React-query, swr hoặc nếu vẫn muốn ở lại với Redux thì có thể thử Redux Toolkit's RTK.
Hiện tại mô hình mình đang sử dụng cũng giống bạn, khác ở chỗ mình dùng Apache thay cho Nginx.
Theo kiến thức nông cạn của mình, Traefik KHÔNG dùng trực tiếp với php, tính đến thời điểm mình bình luận thì Chưa có giải pháp cho vấn đề này. Traefik hoạt động như Proxy, minh chứng là cái tên đầy của của Traefik là "Traefik proxy" nó không phải là Webserver🫢. Nên mình nghĩ là bạn đã cấu hình đúng.
Nhưng nếu giải quyết vấn đề này, hãy thử dùng cách sau:
Như bạn đã biết "artisan serv" của laravel sẽ start 1 server, sau đó ta chỉ cần expose ra cho Traefik hứng và proxy ra ngoài (nhưng artisan serve chỉ nên dùng ở môi trường DEV phải không?) vì thế hãy tìm một library php có chức năng tương tự và đảm bảo đủ an toàn để chạy cho môi trường Prod, mình thấy cũng có khá nhiều library hỗ trợ.
Nhưng riêng cá nhân mình thấy sử dụng mô hình này để tận dụng những webserver có sẵn (nginx, apache) chỉ tốn thêm miếng dung lượng lưu trữ thôi chứ chất lượng thì chỉ có tốt và tốt hơn thôi. Cho dù tốn thêm vài chục vài hoặc trăm millisecond để đảm bảo sự an toàn và thông suốt cho hệ thống là hoàn toàn hợp lí.
Bài viết chi tiết, dễ hiểu rất phù hợp cho người mới học như mình. Nhưng postman chỉ báo lỗi 401, làm sao để fix được lỗi 403 nữa ạ. Mong bạn hướng dẫn
Trả lời câu hỏi đầu tiên, sử dụng Gemini API đánh nhãn để train AI hoàn toàn được. Cái này là mình train theo data được tạo từ máy, từ khóa cho cái này là synthetic data. Theo mình bạn nên nghiên cứu thử nhiều mô hình khác để đánh giá xem chất lượng đánh label ổn không (Groq hỗ trợ mixtral, llama3, ... hoặc sử dụng Ollama cho máy local).
Trả lời cho câu hỏi thứ hai, theo mình biết, cho tới hiện tại, thì Gemini có giới số lượng token (tùy theo model) và nội dung mà bạn request (Google có cho ra một bộ tiêu chuẩn đạo đức cho AI, nếu response từ Gemini mà vi phạm điều đó, thì nó sẽ không trả về cho bạn, bạn có thể điều chỉnh được các thông số đó).
Nhìn ở góc khác thì vấn đề bạn đang gặp là ở bước lấy requirement. Team phải xác định được size của tham số (số người dùng, số post mỗi người đăng, số cmt mỗi post) thì việc quyết định phương án sẽ có cơ sở giải thích hơn.
THẢO LUẬN
Em chào anh. Anh có thể cho em xin cách thức liên hện với anh được không ạ. Em gặp phải vấn đề khá nhức đầu mà chưa có hướng giải quyết. Em có viết 1 cổng APIGW (1) bằng FastAPI. Khi có request của client(2) về (1) thì (1) có nhiệm vụ mang request của client và call đến service Provider (Third Party: (3)). Nhận response của (3) và trả về cho (1). Hiện tại có service gặp lỗi đó là:
Thankiu anh đã có bài viết như thế này ạ.
bạn có thể sử dụng projection tạo custom projection hoặc excerptProjection hoặc bạn cũng có thể tạo ObjectMapper để xoá hẳn "_embeded" với "_links" nhé b
Thank anh chủ post, bài post quá hay cho người mới, đã làm theo và thành công ạ.
Có 1 số chỗ trong quá trình làm theo em gặp vấn đề do tay nhanh hơn não share lại cho a/e sau.
Cấu hình file host trước khi copy SSH key.
File host.yaml nếu copy nguyên bên trên thì nên chuyển sang đúng format yaml(Dùng chatgpt convert lại), file trên có vẻ như .ini
Trong quá trình cài đặt gặp lỗi: {"attempts": 4, "changed": false, "msg": "Failure talking to yum: Cannot find a valid baseurl for repo: base/7/x86_64"} => Run command: sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/.repo && sed -i s/^#.baseurl=http/baseurl=http/g /etc/yum.repos.d/.repo && sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/.repo && yum update -y
Bài viết đâu có nhắc đến đơn luồng hay đa luồng đâu bạn, "asynchronous" khác với "multithreading".
dấu '≡' là gì vậy ạ
Hi bạn, cảm ơn bạn đã theo dõi, bài này mình không cần link github nha, source của mấy bài sau ^^
Trong phạm vi bài viết mình chỉ đang đề cập tới flow của Redux thuần, và action được đề cập cũng là thụnk action của redux. Còn createAsyncThunk là một API của redux toolkit dùng để đơn giản hóa những flow đề cập trong bài viết, bạn không cần quan tâm tới action creator, dispatch,... bạn chỉ cần một action dạng string, và một callback (tất nhiên là trả về một promise vì đây là async action 😀) và một reducer để resolve cái promise đó. Nhưng nay đã là 2025 rồi 😀 , bạn có thể thử những thư viện hỗ trợ data fetching khác tôt hơn như như React-query, swr hoặc nếu vẫn muốn ở lại với Redux thì có thể thử Redux Toolkit's RTK.
Hiện tại mô hình mình đang sử dụng cũng giống bạn, khác ở chỗ mình dùng Apache thay cho Nginx. Theo kiến thức nông cạn của mình, Traefik KHÔNG dùng trực tiếp với php, tính đến thời điểm mình bình luận thì Chưa có giải pháp cho vấn đề này. Traefik hoạt động như Proxy, minh chứng là cái tên đầy của của Traefik là "Traefik proxy" nó không phải là Webserver🫢. Nên mình nghĩ là bạn đã cấu hình đúng. Nhưng nếu giải quyết vấn đề này, hãy thử dùng cách sau: Như bạn đã biết "artisan serv" của laravel sẽ start 1 server, sau đó ta chỉ cần expose ra cho Traefik hứng và proxy ra ngoài (nhưng artisan serve chỉ nên dùng ở môi trường DEV phải không?) vì thế hãy tìm một library php có chức năng tương tự và đảm bảo đủ an toàn để chạy cho môi trường Prod, mình thấy cũng có khá nhiều library hỗ trợ. Nhưng riêng cá nhân mình thấy sử dụng mô hình này để tận dụng những webserver có sẵn (nginx, apache) chỉ tốn thêm miếng dung lượng lưu trữ thôi chứ chất lượng thì chỉ có tốt và tốt hơn thôi. Cho dù tốn thêm vài chục vài hoặc trăm millisecond để đảm bảo sự an toàn và thông suốt cho hệ thống là hoàn toàn hợp lí.
Bài viết chi tiết, dễ hiểu rất phù hợp cho người mới học như mình. Nhưng postman chỉ báo lỗi 401, làm sao để fix được lỗi 403 nữa ạ. Mong bạn hướng dẫn
@ichhoa129 Ok bạn
À mình chỉ demo lúc viết bài thôi ạ, xong rồi thì mình tắt máy đi để tiết kiệm chi phí 😅
Cảm ơn bài viết của bạn, bạn kiểm tra lại site app.ichhoa.dev hiện tại không thể truy cập vào được
Bạn nói đúng, từ đầu nên làm rõ requirements và khả năng phát triển của hệ thống.
Trả lời câu hỏi đầu tiên, sử dụng Gemini API đánh nhãn để train AI hoàn toàn được. Cái này là mình train theo data được tạo từ máy, từ khóa cho cái này là synthetic data. Theo mình bạn nên nghiên cứu thử nhiều mô hình khác để đánh giá xem chất lượng đánh label ổn không (Groq hỗ trợ mixtral, llama3, ... hoặc sử dụng Ollama cho máy local).
Trả lời cho câu hỏi thứ hai, theo mình biết, cho tới hiện tại, thì Gemini có giới số lượng token (tùy theo model) và nội dung mà bạn request (Google có cho ra một bộ tiêu chuẩn đạo đức cho AI, nếu response từ Gemini mà vi phạm điều đó, thì nó sẽ không trả về cho bạn, bạn có thể điều chỉnh được các thông số đó).
Bài viết rất chi tiết, hóng phần 2
👍️
Nhìn ở góc khác thì vấn đề bạn đang gặp là ở bước lấy requirement. Team phải xác định được size của tham số (số người dùng, số post mỗi người đăng, số cmt mỗi post) thì việc quyết định phương án sẽ có cơ sở giải thích hơn.
👍️