எளிய Live Chat இந்த வெளியீட்டைப் பெரிய அளவில் பாதித்தது
ஒரு சாதாரண Live Chat அமைப்பு எனது சமீபத்திய வெளியீட்டைப் பெரிய அளவில் பாதித்தது.
இது எளிமையாகத் தோன்றலாம். அருகில் உள்ள பயனர்களைக் காண்பித்து அவர்களைப் பேச வைப்பதுதான். ஆனால் தொழில்நுட்ப ரீதியாக இது மிகவும் கடினமானது. நான் Live Chat-ஐ Geolocation மற்றும் ஒரு Rating System-உடன் இணைக்க வேண்டியிருந்தது. இது பின்னணியில் மிகப்பெரிய சிக்கல்களை உருவாக்கியது.
கட்டமைப்பு (Architecture):
• Frontend: React மற்றும் TypeScript. • Backend: Node.js உடன் Express மற்றும் WebSockets. • Database: பயனர்கள் மற்றும் மதிப்பீடுகளுக்காக PostgreSQL. • Cache: செயல்பாட்டில் உள்ள Sessions மற்றும் Presence-க்காக Redis.
Geolocation சிக்கல்
இருப்பிடத்தின் அடிப்படையில் பயனர்களைப் பொருத்துவது (Matching) எளிதல்ல. நான் பல விளிம்புநிலைச் சிக்கல்களை (edge cases) கையாள வேண்டியிருந்தது:
- Latitude மற்றும் Longitude-ஐச் சேமித்தல்.
- தூரத்தைக் கண்டறிய (query) Postgres extensions-களைப் பயன்படுத்துதல்.
- இருப்பிட அனுமதியை மறுக்கும் பயனர்களைக் கையாளுதல்.
- பயனர் செயலியைத் திறக்காமல் நகரும்போது பழைய தரவுகளை (stale data) நிர்வகித்தல்.
நான் இதை மீண்டும் செய்தால், இருப்பிடத் தகவல்களைச் சேகரிப்பதையும், பயனர்களைப் பொருத்துவதையும் (matching) தனித்தனி சேவைகளாகப் பிரிப்பேன்.
Live Chat-ன் நிதர்சனம்
WebSockets நிகழ்நேர (real-time) வசதிகளைத் தருகின்றன, ஆனால் அவை குழப்பத்தையும் கொண்டு வருகின்றன. வெவ்வேறு சர்வர்களுக்கிடையே செய்திகளை அனுப்ப நான் Redis pub/sub-ஐப் பயன்படுத்தினேன்.
கடினமான பகுதிகள் இவைதான்:
- பயனர்கள் எதிர்பாராதவிதமாகத் துண்டிக்கப்படும்போது (disconnect), இணைப்புகளைச் சுத்தம் செய்தல்.
- ஒரு பயனர் வெளியேறிய அறைகளுக்கு (rooms) செய்திகள் அனுப்பப்படுவதைத் தடுத்தல்.
- 'ghost sessions'-களை உருவாக்காமல் மீண்டும் இணைப்புகளை (reconnects) கையாளுதல்.
சாதாரண 'flags'-களைப் பயன்படுத்துவதை விட, முறையான 'state machine' பயன்படுத்துவது சிறந்தது என்பதை நான் கற்றுக்கொண்டேன்.
மதிப்பீட்டு முறை (Rating System)
மதிப்பீடுகளை உருவாக்கும் வரை அவை மிகச் சாதாரணமானவை என்று தோன்றும். நான் இவற்றை உறுதி செய்ய வேண்டியிருந்தது:
- பயனர்கள் ஒரே Session-க்கு இரண்டு முறை மதிப்பீடு செய்ய முடியாது.
- Profile பார்வைகளுக்காக மதிப்பீடுகள் விரைவாகத் தொகுக்கப்பட வேண்டும் (aggregate).
- செயலி முழுவதும் தரவு சீராக (consistent) இருக்க வேண்டும்.
நகல்களைத் தவிர்க்க Session ID-களில் 'unique constraints'-களைப் பயன்படுத்தினேன் மற்றும் செயல்திறனை மேம்படுத்த சராசரியைத் தனித்தனியாகச் சேமித்து வைத்தேன் (cached).
கற்றுக்கொண்ட பாடங்கள்
நான் இதை இன்று மீண்டும் உருவாக்கினால், மூன்று விஷயங்களை மாற்றுவேன்:
- Matching மற்றும் Chat ஆகியவற்றைத் தனித்தனி தொகுதிகளாக (modules) பிரிப்பேன்.
- WebSocket இணைப்பின் நிலைகளுக்காக (connection states) தெளிவான மாதிரியாக்கத்தைப் (explicit modeling) பயன்படுத்துவேன்.
- முதல் நாளிலிருந்தே Chat மற்றும் Matching ஆகியவற்றிற்காகச் சிறந்த Logs மற்றும் Metrics-களைச் சேர்ப்பேன்.
மென்பொருளை உருவாக்குவது என்பது சிறிய முடிவுகளின் தொடர்ச்சியாகும். உங்கள் அமைப்பு நேர்த்தியானதா அல்லது எளிதில் உடையக்கூடியதா என்பதை இந்த முடிவுகளே தீர்மானிக்கின்றன.
நீங்கள் ஒரு Live Chat அல்லது Matching முறையை உருவாக்கியிருக்கிறீர்களா? நீங்கள் வேறு என்ன செய்வீர்கள்?
மூலம்: https://dev.to/jaeger974/simple-live-chat-almost-sank-this-release-2pn7