Asked Jun 8th, 2018 1:53 AM 352 0 4
  • 352 0 4
0

Lựa chọn technical stack cho dự án chat

Share
  • 352 0 4

Chào mọi người, mình chuẩn bị start một dự án khá lớn về chat, đại loại là gần giống chatwork, chỉ có 1 page duy nhất, dự án làm trên 3 side (Web, Android, IOS). Nên mình muốn tham khảo ý kiến mọi người về technical stack ạ. Bên mình hiện đang theo 2 hướng, một là dùng expressJS + MySQL để viết API, còn client thì dùng VueJS, caching thì dùng redis, dùng socket.io realtime. Hướng thứ 2 là dùng Firebase để lưu trữ dữ liệu vì mình thấy mấy dự án liên quan đến realtime thì sữ dụng cái này vì Firebase nó làm hết cho mình rồi, mình chỉ làm client thôi, ở Client thì dùng VueJS thôi là đủ. Với 2 hướng trên thì mong nhận được suggest của mọi người, cảm ơn

4 ANSWERS


Answered Jun 8th, 2018 8:41 AM
Accepted
+4

Mình sẽ phân tích một số ưu nhược điểm của 2 phương án để bạn dễ chọn nhé:

Phương án 1: Viết API backend hỗ trợ Real-time chat bằng ExpressJS+MongoDB+socketio (Mình refer dùng MongoDB hơn là MySQL vì dữ liệu chat rất đơn giản không có quan hệ nhiều giữa các bảng, viết kiểu No-SQL sẽ load nhanh hơn).

Ưu điểm ExpressJS+MongoDB+socketio:

  • Dễ nâng cấp và bảo trì về sau, data là lưu trữ ở server của mình quản lý, cần thiết nâng cấp store (lưu ảnh, video, db...) thì tự mua thêm ssd về cắm vào (hoặc mua VPS)
  • Dễ code, nhiều code base về chat sử dụng stack technologies này, bạn có thể search ra code ngay trên github.com
  • Dễ dàng sửa đổi api để phù hợp với FrontEnd, vì bạn code cả 2 giao diện. Bạn có thể sử dụng thêm React hoặc Angular cho Frontend.

Nhược điểm ExpressJS+MongoDB+socketio:

  • Phần push notification là phần khoai chuối nhất. Nếu bạn từng làm phần này thì sẽ thấy phần setup của Google và Apple là khác nhau và phải sử dụng API của họ để push được thông báo chat đến từng devices android hoặc iOS. Notification trên web thì dễ thở hơn vì có thể thông qua API được. Nhưng trên mobile thì k đơn giản như vậy.
  • Phần quản lý User cũng là 1 phần nặng nhọc. Phải hỗ trợ token authentication để đăng nhập đăng ký được chát bằng google, facebook. Rồi phải tự bảo mật app của bạn để chống hack. Ví dụ cơ chế chống hack bằng upload fire lên server, XSS...
  • Bạn phải code cả Backend và FrontEnd. Nặng nhọc. 2 team mà độc lập là dễ cãi nhau.
  • Cần phải tự hosting Backend-API.

Phương án 2: Sử dụng API sẵn có của Firebase realtime database. Chả phải làm gì sất, kiếm cái theme chát ngon ngon và xử lý code client là chủ yếu.

Ưu điểm:

  • Bớt được phần code Backend.
  • Firebase hỗ trợ tận răng, có Push notification sang mobile+web luông. Có luông phần quản lý email user.
  • Code base cũng gần như có sẵn rất nhiều trên github.
  • Không mất phí hosting API.
  • Hỗ trợ luôn cơ chế offline-sync DB (ở cả web, android và ios). Nghĩa là mất mạng chát cứ chát, có mạng lại nó sẽ tự cập nhật.

Nhược điểm:

  • Giá cả đắt đỏ và leo thang. Bạn đừng dại mà nghĩ nó tính rẻ, cứ mỗi ngày mười nhìn lượt dòng chat thôi là tèo.

Nhìn thì có vẻ dùng firebase sẽ nhanh và ngon hơn nhưng thật ra nó đắng hơn đấy. Mình khuyên bạn là nếu app cho công ty bạn dùng thì dùng firebase.Còn làm app cho khách hàng của bạn dùng thì nên dùng bộ kia. Have fun!

Share
phumaster @phumaster.dev
Jun 18th, 2018 2:59 AM

Kỹ như này mà chẳng ai like 😃). Mình vote cách đầu dù làm cho ai đi nữa. Vừa học được, về lâu dài tốt hơn.

0
| Reply
Share
Answered Jun 8th, 2018 6:54 AM
+2

Firebase thì cũng chỉ support bạn được một phần thôi, còn rất nhiều logic backend bạn vẫn phải xử lý chứ nhỉ 🤔

Theo mình thì bạn nên theo cách 1, tự dùng của mình xem sao 😄 Nhiều thử thách hơn, nhưng sẽ học hỏi được nhiều hơn 😄

Share
Van Hung @vhung
Jun 8th, 2018 7:34 AM

Nếu theo cách 1 và dùng dùng expressJS + MySQL thì sau này dữ liệu lớn lên nó có ok không bạn nhỉ, hay là dùng expressJS + MongoDB nhỉ

0
| Reply
Share
Answered Jun 8th, 2018 7:36 AM
+2

Theo mình thì với dự án lớn (hoặc có thể mở rộng trong tương lai) thì nên tự làm bạn ạ. Firebase gần như support được cho bạn mọi thứ nhưng để mở rộng hoặc custom theo ý bạn thì rất khó + tốn kha khá tiền.

Share
Answered Jun 8th, 2018 3:07 AM
+1

Nếu bạn dùng Firebase thì bạn giảm được thời gian của dự án xuống phần nào, vì vậy mình chọn Hướng 2.

Share
Van Hung @vhung
Jun 8th, 2018 7:30 AM

(y)

0
| Reply
Share