Supabase ਤੋਂ Production Go ਤੱਕ: ਮਹੀਨਾ 1
ਦੋ ਮਹੀਨੇ ਪਹਿਲਾਂ, ਮੈਂ Info Links ਬਣਾਇਆ ਸੀ। ਇਹ Le CNAM Lebanon ਦੇ ਵਿਦਿਆਰਥੀਆਂ ਲਈ ਇੱਕ ਮੁਫ਼ਤ ਸਰੋਤ ਪਲੇਟਫਾਰਮ ਹੈ। ਇਹ 300 ਵਿਦਿਆਰਥੀਆਂ ਅਤੇ 50 ਕੋਰਸਾਂ ਦੀ ਸੇਵਾ ਕਰਦਾ ਹੈ।
ਸ਼ੁਰੂ ਵਿੱਚ, ਬੈਕਐਂਡ (backend) ਸਿੱਧੇ ਤੌਰ 'ਤੇ Supabase ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਸੀ। ਇਹ ਕੰਮ ਕਰ ਰਿਹਾ ਸੀ, ਪਰ ਮੈਂ ਇੱਕ ਤਕਨੀਕੀ ਇੰਟਰਵਿਊ ਵਿੱਚ ਇਸਦਾ ਬਚਾਅ ਨਹੀਂ ਕਰ ਸਕਿਆ। ਮੇਰਾ ਮਹੀਨਾ 1 ਲਈ ਉਦੇਸ਼ ਸਿਰਫ਼ Go syntax ਸਿੱਖਣਾ ਨਹੀਂ ਸੀ। ਮੈਂ ਇੱਕ ਅਜਿਹਾ ਸਿਸਟਮ ਬਣਾਉਣਾ ਚਾਹੁੰਦਾ ਸੀ ਜਿਸਦਾ ਇੱਕ ਸੀਨੀਅਰ ਇੰਜੀਨੀਅਰ ਸਤਿਕਾਰ ਕਰੇ।
ਇੱਥੇ ਉਹ ਚੀਜ਼ਾਂ ਹਨ ਜੋ ਬਦਲ ਗਈਆਂ ਹਨ:
- ਬੈਕਐਂਡ Supabase-only ਤੋਂ Go REST API ਵਿੱਚ ਬਦਲ ਗਿਆ।
- ਕੋਡਬੇਸ (codebase) 6 ਫਾਈਲਾਂ ਤੋਂ ਵਧ ਕੇ 100 ਤੋਂ ਵੱਧ ਫਾਈਲਾਂ ਹੋ ਗਈਆਂ।
- ਮੈਂ ਇੱਕ ਲੇਅਰਡ ਆਰਕੀਟੈਕਚਰ (layered architecture) ਲਾਗੂ ਕੀਤਾ: API, Service, Repository, ਅਤੇ Middleware।
- ਮੈਂ ਗਲੋਬਲ ਵੇਰੀਏਬਲਜ਼ (global variables) ਨੂੰ ਹਟਾਉਣ ਲਈ dependency injection ਜੋੜਿਆ।
- ਮੈਂ ਆਪਣੇ ਚੋਣਾਂ ਦੀ ਵਿਆਖਿਆ ਕਰਨ ਲਈ 6 Architecture Decision Records (ADRs) ਲਿਖੇ।
ਨਵਾਂ ਢਾਂਚਾ ਇੱਕ ਸਪੱਸ਼ਟ ਮਾਰਗ ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ: HTTP request → Router → Handler → Service → Repository → Postgres।
ਮੈਂ ਇਹਨਾਂ ਵਾਧਿਆਂ ਰਾਹੀਂ production readiness 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕੀਤਾ:
- slog ਦੇ ਨਾਲ structured logging।
- Health checks ਅਤੇ metrics।
- ਦੁਰਵਰਤੋਂ ਨੂੰ ਰੋਕਣ ਲਈ rate limiting।
- race detection ਅਤੇ linting ਦੇ ਨਾਲ CI।
- Multi-stage Docker builds।
- ਉੱਚ ਟੈਸਟ ਕਵਰੇਜ (API ਲਈ 93% ਅਤੇ Service ਲਈ 96%)।
ਮੈਂ k6 ਦੇ ਨਾਲ load testing ਵੀ ਕੀਤੀ। ਮੈਂ ਪ੍ਰਤੀ ਸੈਕਿੰਡ 4,400 ਰਿਕਵੈਸਟਾਂ ਨਾਲ API 'ਤੇ ਲੋਡ ਪਾਇਆ। Rate limiter ਨੇ 1ms ਤੋਂ ਵੀ ਘੱਟ ਸਮੇਂ ਵਿੱਚ ਵਾਧੂ ਟ੍ਰੈਫਿਕ ਨੂੰ ਰੋਕ ਦਿੱਤਾ। ਸਿਸਟਮ ਕ੍ਰੈਸ਼ ਨਹੀਂ ਹੋਇਆ।
ਇੱਕ ਵੱਡਾ ਸਬਕ AI ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਮੇਰਾ ਨਿਯਮ ਸੀ। ਮੈਂ ਹਰ ਰੋਜ਼ 45 ਮਿੰਟ AI ਤੋਂ ਬਿਨਾਂ ਕੰਮ ਕਰਨ ਵਿੱਚ ਬਿਤਾਉਂਦਾ ਹਾਂ। ਮੈਂ ਇਸ ਸਮੇਂ ਦੀ ਵਰਤੋਂ ਕੋਡ ਨੂੰ refactor ਕਰਨ ਜਾਂ ਕਿਸੇ ਫਾਈਲ ਨੂੰ ਉੱਚੀ ਆਵਾਜ਼ ਵਿੱਚ ਸਮਝਾਉਣ ਲਈ ਕਰਦਾ ਹਾਂ। ਜੇਕਰ ਮੈਂ ਇਸਨੂੰ ਨਹੀਂ ਸਮਝਾ ਸਕਦਾ, ਤਾਂ ਮੈਂ ਇਸਨੂੰ ਸ਼ਿਪ (ship) ਨਹੀਂ ਕਰਦਾ। ਇਹ "ਇਹ ਕੰਮ ਕਰਦਾ ਹੈ" ਅਤੇ "ਮੈਂ ਸਮਝਦਾ ਹਾਂ ਕਿ ਇਹ ਕਿਉਂ ਕੰਮ ਕਰਦਾ ਹੈ" ਦੇ ਵਿਚਕਾਰਲੇ ਪਾੜੇ ਨੂੰ ਖਤਮ ਕਰਦਾ ਹੈ।
ਇੰਜੀਨੀਅਰਿੰਗ ਹੁਣ ਮਿਸ਼ਨ ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਹੈ। ਉਤਪਾਦ ਵਿਦਿਆਰਥੀਆਂ ਲਈ ਮੁਫ਼ਤ ਰਹਿੰਦਾ ਹੈ, ਪਰ ਬੈਕਐਂਡ ਹੁਣ interview-grade ਹੈ।
ਅਗਲੇ ਮਹੀਨੇ, ਮੈਂ goroutines ਅਤੇ context ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਿੰਕ ਦੀ ਸਿਹਤ (link health) ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਇੱਕ ਸਾਥੀ Go service ਬਣਾਵਾਂਗਾ।
Live site: infolinks.app GitHub: github.com/MohamadObeid9/Info_Links Telegram: @Info_Links9