Định hướng một server cho hệ thống lớn
Chào các bác,
Mình là new member. Hiện tại mình đang có ý định build một server để quản lí hệ thống vd như smarthome, smartfarm…Mình lại không xuất thân từ IT, mình bên embedded nhưng mình lại cũng biết chút ít về server, service và một số giao thức như tcp/ip, html và mqtt. Cái mình đang đau đầu là có một người nào đó định hướng cho mình để build một server lâu dài. Chẳng hạn như mình đang băn khoăn giữa việc chọn linux hay window, ngôn ngữ java, c++ hay python, compiler visual studio hay qt creator… Hiện tại em đang mơ hồ, không biết vì em không có kinh nghiệm trong lĩnh vực này, chỉ sợ đi vào hướng dở thì cả system sau này sửa rất cực. Hi vọng có ai đó quan tâm và nói ra điểm mạnh yếu của các giải pháp để e có thể cân nhắc tốt hơn.
Em xin cám ơn nhiều!
Nếu đi vào hướng dở thì bạn không cần sửa cả system, mà hãy đập đi xây lại. IT cũng phải học hỏi dần dần, có mentor tận răng thì cũng phải đập đi xây lại nhiều mà.
Nhưng ít ra cũng đi một hướng nào đó hợp lý hơn khi có mentor, mình chỉ giảm rủi ro thôi. Chỉ là mình đang chọn giải pháp tốt cho hệ thống thôi, hoặc là giải pháp nào đó người ta đang xài nhiều? đi theo số đóng cũng là một giải pháp tốt mà
Một lời khuyên thiếu kiến thức, không có trách nhiệm thì tốt nhất nên im lặng.
Cho mình biết là bạn sử dụng giao thức gì để kết nổi giữa các thiết bị và server? TCP/IP hay HTTP?
Nếu server thì nên dùng hệ Linux: CentOS do nó rất ổn định so với Ubuntu về các bản cập nhật, tránh các server trong hệ thống không tương thích về phiên bản.Tránh dùng các ngôn ngữ hoặc OS nào tốn tiền license, điển hình là windows server.
Code đầu hứng dữ liệu thì có thể dùng Java hoặc NodeJS, ngoài ra có thể setup nginx hoặc Haproxy để phân tán các requests quá nhiều vào một hứng. Hiện tại, nếu bạn muốn sử dụng DB nhanh thì có thể dùng MongoDB để làm model nhanh và cũng có thể thay đổi nhanh trong quá trình phát triển.
Hi Nguyễn Hữu Chỉnh.
P/S Bạn có lẽ là người mới (visual studio hay qt creator là ide chứ không phải compiler) tốt nhất nên tập trung chuyên môn trước. Còn làm vui vui thì không vấn đề gì chọn cái nào cũng được.
Cám ơn góp ý của bạn.
Về phần giao thức mình sẽ sử dung TCP/IP. Còn về server mình cũng có nghe qua Linux có khả năng kiểm soát số lượng connection lớn hơn window đúng không bạn?
Còn phần sau bạn nói thật sự mình không hiểu, mình sẽ tìm hiểu về nhưng điều bạn nói
Một lần nữa cám ơn bạn nhé!
Mình là người mới (như đã nói ở trên), mình không phải lĩnh vực này nên các thuật ngữ các bạn sử dung mình còn chưa nắm rõ và nó quá nhiều thứ để mình tìm hiểu. Nếu có sai sót gì các bạn thông cảm, còn mình chỉ muốn hỏi để định hướng cho team đi theo hướng đó chứ có thể mình cũng không bắt tay vào làm. Nhưng ở cương vị một người định hướng ít ra mình cũng phải hiểu kết cấu hệ thống. Mình vẫn đang tìm hiểu ở nhiều nguồn nhiều nơi để nâng cao thêm, nếu bạn không phiền thì có thể giúp mình
Ồ, tức là các bạn fresher kiểu như trên có khả năng xây dựng một hệ thống tồn tại lâu dài, có khả năng nâng cấp chỉ với lời khuyên trên mạng và lý thuyết thuần tuý?
Thôi tôi xin, bước chân vào ngành này là chấp nhận thử sai. Mình đang có mentor hướng dẫn theo một framework của công ty xây cho tận mồm mà còn phải xây lại mấy lần, nếu anh chủ thread mà xây được luôn một hệ thống ngon lành thì thôi mình chịu, người ta tài năng thiên bẩm.
Bạn mới làm quen server thì cứ chọn ngôn ngữ có nhiều framework hỗ trợ sẵn, lại dễ code như Java, trong quá trình làm bạn sẽ gặp phải những khó khăn dị dị, tự mình giải quyết, kiểu gì cũng phải code lại server vài lần. Môi trường chạy server có thể ảnh hưởng đến hiệu năng server, nhưng không đến mức phải viết lại, thường là do cấu trúc phần mềm không tốt.
Nếu bạn chọn Java, hãy code bằng IntelliJ. Máy ảo JVM thì chạy ở Linux hay Server cũng được, nếu chuyển đổi giữa 2 môi trường mà có lỗi thì fix, toàn mấy lỗi kiểu như đường dẫn có dấu cách, đường dẫn case sensitive… khá dễ nắm bắt.
Xin lỗi hình như bạn không phân biệt được thay đổi hệ thống và sửa hệ thống? Mình chấp nhận sửa hệ thống nhưng thay đổi hệ thống là một hướng đi sai từ đầu. Còn chuyện làm hệ thống chạy ngon lành ổn định mình không có đề cập đến trong bài viết. Bạn có đọc kĩ không vậy? Có thể mình ghi sai chỗ “sửa rất cực” và bạn bắt bẻ chỗ ấy thì mình đính chính lại “thay đổi rất cực”. Ok nhé!
Hi Nguyễn Hữu Chỉnh.
P/S Mình tưởng bên nhúng thì phân biệt rõ IDE với compile hơn với bên phần mềm chứ ???
Ok bạn, câu hỏi cũng nhằm mục đích tìm hiểu xem hiện tại các hệ thống đang ưu tiên xài như thế nào? Mình nghĩ nếu đa phần ngta sử dụng giải pháp nào đó cũng có lí do của nó
Hi Nguyễn Hữu Chỉnh.
Cái này bạn không nên hỏi ở đây vì các thông tin đó là bí mật của công ti. Bạn nên dùng thử các hệ thống tương tự và phân tích các giải pháp của họ.
Windows thì mình không rõ, nhưng Linux thì có thể tùy chỉnh dựa vào file open để tăng connection.
Các phần sau là mình nói về hệ thống lưu trữ dữ liệu, đối với các startup team thì nên chọn các DB nào ứng phó nhanh như MongoDB hoặc Elasticsearch, riêng mình thì hướng về MongoDB hơn.
Sử dụng các RMDB thì cũng được nhưng việc thay đổi cấu trúc dữ liệu sẽ nhằn hơn, đặc biệt với team bạn startup thì việc này là chuyện thường xuyên. Ngoài ra output từ hệ thống của bạn ra users thì cũng nên đặt vấn đề, ví với mỗi output của dữ liệu thì phải có những chiến thuật thiết kế hệ thống khác nhau. Ví dự như:
Việc sử dụng TCP/IP thì cost các lần transfer dữ liệu sẽ đỡ tốn kém hơn HTTP hơn, nhưng nếu các điểm dữ liệu transfer với tần suất thấp cỡ 1 phút hoặc 30s/ 1 lần thì nên nghía lại HTTP, vì đối với TCP/IP thì một điểm dữ liệu đồng nghĩa với 1 connection trên server, 1000 điểm = 1000 connections, còn đối với HTTP thì đó chỉ là 1000 requests. Lưu ý điều đó.
Nếu ko chê thì .net core nha, e cũng đã từng code mqtt cho web server rồi. Cảm thấy code .net cũng khá dễ, bác mà thắc mắc về mqtt của .net core thì cod thể bảo e
Công ty nơi e đang thực tập cũng code .net core. Nên yên tâm nó có thể build dự án cực lớn, còn những ngôn ngữ khác có support mqtt tiện cho bác ko thì e ko biết, nodejs có support nhưng cá nhân e cảm thấy nodejs code khá bung lụa khó maintain code.
Wow, cái cách bạn trả lời đúng những gì mình đang cần. Nếu bạn ở HCM có thể ib mình sđt để mình gặp nhau và biết thêm được không? Cám ơn bạn lần nữa nhé
Cám ơn bác nhiều, bác cho mình cái contact để tiện trao đổi được không? Fb hay sđt gì cũng được hihi
Bạn có thể liên hệ mình qua nick skype pnthang01
mình thấy bạn nên đặt ra những mục tiêu mà server bạn cần phải đạt được , xử lí đa luồng , thích nghi với việc thay đổi cập nhật , thích nghi với môi trường cụ thể mà sau này nó phải làm việc v.v… bạn phải xác định rõ những điểm mà server cần đạt được , đương nhiên không có hệ thống nào siêu việt tới nổi có thể đáp ứng được tất cả yêu cầu , nên mình thấy tại thời điểm t xác định thì nó phải đáp ứng những gì tương lại sẽ phải phát triển như thế nào giới hạn của server là ở đâu . Mình thấy thường những điều này sẽ phải trải qua nhiều lần phát triển trên nhiều dự án rồi mới rút ra được >>> cần 1 kĩ sư hệ thống để xây dựng , chứ nếu đưa vào tay những người chưa có tí kn gì thì phải xác định kiểu gì sau này cũng phải gặp phải vấn đề mở rộng hệ thống mà cũng có khi phải đập hết toàn bộ xây dựng lại
Dạ em lắng nghe ý kiến của bác, để em tìm hiểu kĩ một thời gian nữa rồi em lại trở về đây nhờ bác giúp nha! Cám ơn bác