Một năm trước đây, lúc đó tôi có học một môn là Lập trình mạng. Do dính một chữ “mạng” trong cái tên nên nó bị xếp qua cho ngành Mạng máy tính được học, còn bên Phần mềm thì không học tới. Nhiều khi tôi thấy buồn cười cái cách chúng ta dán nhãn, đánh giá một cái gì đó chỉ bằng cái tên hay cảm nhận ban đầu.

Bạn phải tiếp xúc nhiều, mới thấy được nó đúng thật khốn nạn chứ không phải cảm tính ban đầu mà thấy nó khốn nạn =))))))

Nói chung môn Lập trình mạng là một môn hay và đáng để đào sâu tiếp nếu có cơ hội. Mà thật ra cơ hội là do ta tự tạo ra thôi, chẳng qua là do tôi lười. Ngày học môn đó tôi đã thấy được tiềm năng thú vị của mớ kiến thức đó. Nếu so với tất cả những cái tôi è cổ code từ năm 1 tới lúc đó thì chỉ có lập trình mạng là cái khiến tôi thấy thích thú nhất. Tới bây giờ, tròn 1 năm tôi không đụng tới nó nhưng như ngọn lửa cháy âm ỉ, lúc nào tôi cũng muốn bắt tay làm lại nó.

Lúc ấy tôi làm sản phẩm hết môn là lập trình ra một trò chơi trắc nghiệm cho nhiều người cùng chơi qua mạng LAN. Nói thật đó là sản phẩm đầu tiên tôi dồn nhiều công sức như vậy, chứ không phải chỉ code một module rồi đem ghép với các thành viên khác như trước giờ. Lần này là tôi ‘ôm show’ toàn bộ từ ý tưởng tới nguyên lý, thiết kế, thực nghiệm và sửa lỗi. Trong lúc làm cái sản phẩm đó, tôi đã lôi cả kiến thức về cơ sở dữ liệu phân tán áp dụng vào, mặc dù lúc ấy tôi không thể gọi tên nó là cái gì. Nhưng nói chung kỹ năng trình bày của tôi không đến nỗi nào, nên lúc đem cái ý tưởng của mình nói với mấy đứa bạn bên Cơ sở dữ liệu, nó biết ngay tôi muốn làm cái trò gì với database của tôi.

Cụ thể là lúc ấy tôi chỉ mới lập trình cho người dùng trong mạng nội bộ (cục bộ) LAN chơi với nhau. Nhưng phải tìm ra một giải pháp nào đó giúp lưu trữ đồng bộ kết quả chơi của họ vào một chỗ duy nhất để xử lý điểm số và thắng thua. Trước giờ học database, tôi chỉ toàn được dạy làm trên một máy local duy nhất. Tới lúc làm cái này, tư duy tôi bắt buộc phải mở ra thêm một tí. Đó là quá trình ngồi tự vấn bản thân. Vậy làm thế quái nào để toàn bộ người chơi cùng móc vào một database được không?

Chính lúc đó tôi mới biết tới vụ cho kết nối tới database bằng địa chỉ IP.

Nhưng lúc ấy tôi vẫn chưa nhìn xa thêm được tí nữa. Thế còn nếu là môi trường Internet thì sao?

Câu hỏi và đáp án cho vấn đề đó, tới tận 1 năm sau tôi mới tự hỏi lại bản thân trong một chiều vừa chạy xe vừa buồn ngủ nên suy nghĩ vu vơ.

Và sau cùng tôi phát hiện ra chuyện này người phương Tây họ đã demo trên Youtube từ lâu lắm rồi hahaha….

Nhân dịp có sẵn cơ sở hạ tầng thiết bị và môi trường để làm, nên tôi quyết định thử luôn và mới làm ra được bài viết này.

Mô hình cho ý tưởng này như sau:

Drawing1.gif

Dĩ nhiên là tôi đã vẽ đơn giản đi một vài chỗ. Cụ thể là chả thấy cái modem/router nào cả. Càng không có thông tin IP gì hết. Mô hình chung thôi.

Cụ thể là tôi sẽ cài đặt một máy chủ chạy SQL Server 2014 trên Windows Server 2016. Trên đó tôi tạo một database có tên ChatAPP chẳng hạn.

Các bước cần làm sẽ là (phiên bản là tôi chọn để minh họa, không nhất thiết bắt buộc phải giống vậy):

– Cài đặt hệ điều hành Windows Server 2016.

– Cài đặt bộ SQL Server 2014.

– Cấu hình sử dụng SQL Server với dạng Mixed mode (tức là sử dụng cả account Windows lẫn SQL account).

– Cấu hình cho phép sử dụng giao thức TCP/IP với Port 1433.

– Lên Firewall của Windows cấu hình cho phép Inbound và Outbound với Port 1433 chuẩn TCP. Nếu có sử dụng thêm dịch vụ tường lửa khác trong mạng thì phải allow thêm một lần trên tường lửa đó.

– Lên router tạo NAT rule cho phép port 1433 được truy cập với địa chỉ IP private của máy server đó.

– Đứng ở môi trường khác ngoài Intenet, truy cập máy chủ database bằng địa chỉ IP WAN của máy chủ database đó.

Ta tiến hành cấu hình cho database được truy cập vào bằng Internet.

Đầu tiên là tạo ra một database để chỉ định được phép truy cập. Có thể cho phép truy cập toàn bộ cũng được. Nhưng tôi muốn làm cụ thể một trường hợp nên tạo riêng một database có tên ChatAPP.

sql connection internet1.jpg
Tạo sẵn một database có tên ChatAPP.

Tiếp theo, cấu hình Security cho database server như trong hình.

sql connection internet2.jpg

Tiếp tục là cấu hình chỉ định account nào sẽ được login vào. Bấm vào Security và chọn Login. Tiếp tục bấm chuột phải vào Login và chọn New login.

This slideshow requires JavaScript.

Tiếp tục, cấu hình dịch vụ cho phép đăng nhập qua mạng. Mở Sql Server Configuration Manager lên và lần lượt Enable ở các mục TCP/IP.

This slideshow requires JavaScript.

Sau khi xong các bước trên, ta cấu hình cho phép Port 1433 được mở trên Firewall.

This slideshow requires JavaScript.

Sau cùng, ta cấu hình NAT rule trên thiết bị router của hệ thống mạng đang chạy database server đó. Phần này tùy theo thiết bị mà sẽ có cách cấu hình khác nhau. Tôi minh họa trong bài viết này bằng thiết bị Mikrotik router.

sql connection internet10.jpg

Và như vậy, bây giờ ta đứng ở phía người dùng ngoài Internet, thử truy cập vào database server bằng địa chỉ IP WAN của nó. Để xác định được địa chỉ IP WAN của database server, có thể dùng dịch vụ what is my ip trên Google để xác định nhanh chóng, hoặc tìm trong cấu hình của router.

sql connection internet11.jpg

Và kết quả đây!

sql connection internet125.jpg

Tôi viết bài này khi mà trong lòng vẫn ấp ủ sẽ làm nên một cái gì đó thật ý nghĩa và phát triển nó lên thành sản phẩm mà ai cũng dùng cũng thích. Nhưng nó vẫn còn rời rạc và chưa tìm được người cùng đồng hành, nên là tôi không tiện giải thích chi tiết idea đó ở đây.

Nếu có duyên thì hãy cứ gửi mail, biết đâu chúng ta lại cùng chung ý tưởng và khát vọng.

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com