Hosting SaaS si alte detalii

Salut,

Aveti ceva recomandari/cunostinte pentru hostarea unui saas mic (cu un singur client :rofl:), fara prea multe batai de cap, pentru 2 3 aplicatii scrise in .NET 5 (db mssql) si Angular? Pentru ca n-am mai avut motivatie sa lucrez la produsul unui prieten, si am decis sa il ofer sub forma de saas, s-ar putea sa ajung sa am costuri lunare care sa nu poata fi auto-sustinute :))

Pana acum aveam aplicatiile hostate pe un vps cu windows (4cpu, 8gb ram, 200gb ssd), server IIS, destul de usor configurabil, insa nu-mi place ca OSul ocupa cred ca 1/3 din spatiu, la un pret de 250e pe an (~ 12 lunar). Ma uitam la DigitalOcean (daca ar fi o varianta), insa nu stiu ce configuratie s-ar potrivi :unamused:

SaaS-ul este un configurator de produs, cu posibilitati mici sa creasca foarte mult in volum, insa as vrea ca fiecare client sa aibe propria baza de date in spate. Faptul ca aplicatia se va plia pe necesitatile unui client real, ma face sa iau in calcul foarte mult cerintele venite.

Am ales .NET pe backend in principal pentru ca am mai lucrat cu el si pot genera dinamic bazele de date (cu ajutorul EF si al migrarilor), fara interventie manuala (plus ca trebuie sa livrez ceva functional in maxim 1 2 saptamani). Vreau lucrul asta pentru ca produsul poate fi extins destul de usor la un mic magazin online cu mai multe tipuri de produse (in imaginea de mai jos, daca ramane un singur pas cu 10 carduri pe post de produse poate deveni un shop online de mici dimensiuni)

La alte detalii, eram curios daca exista printre noi persoane care au lansat servicii ce au reusit sa se sustina singure in timp pe baza de planuri lunare.

La un calcul simplu, cheltuielile lunare ar fi undeva la 100$ (hostare, infiintare/intretinere srl, serviciu google maps, serviciu sms), deci probabil cu un plan basic de 25$ as avea nevoie de 4 clienti pentru a fi pe 0 :rofl: sunt calcule ipotetice, realitatea probabil o sa fie alta, insa ar ajuta foarte mult cateva povesti din partea comunitatii :grin: Si n-am luat in calcul reclama :grimacing:

multam

Poti sa le pui si pe Linux.

EDIT: personal eu m-as duce pe Postgre in loc de SQL Server.

1 Like

Nu am experienta pe stackul .NET, dar anul trecut am dat de deta.sh. Deocamdata poti face deploy la aplicatii scrise in Python sau node.js. Iti ofera propria lor DB (non-relationala) si ceva stocare de fisiere, si e gratis. Am acolo deployat un side project de cateva luni si merge foarte ok.

Inca nu mi foarte clar business modelul lor si de unde o sa scoata bani, asa ca side-projectul e facut ca sa pot sa il migrez pe un VPS clasic cu schimbari minimale :)))

din nevoia de a face ceva functional cat mai rapid, am ales tehnologiile astea (mai am vreo 10 idei incepute pe git la care am renuntat pe parcurs, si de’acolo am luat bucati de cod :slight_smile:)

cautasem in istoricul forumului si am gasit ca mai deschisesem un topic in care primeam ca recomandari ca astfel de servicii sa nu fie facute in js (as fi incercat Blazor dupa ce ajunge in prod, dar poate doar pe partea de admin).

ca db, deoarece acei pasi de configurare pot avea diverse forme, ma gandeam ca mongo ar fi fost cel mai bun (insa nici cu asta nu am lucrat si voiam ceva 100% ca merge cu .NET si Entity Framework - am patit in Scala ca un ORM sa nu fie total compatibil cu baza de date si sa dau de probleme de care abia iti dai seama). Insa, am ales mssql si am facut un artificiu, acele diverse forme le salvez ca json si am rezolvat problema momentan.

la locul de munca deployul il fac pe linux prin jenkins, cred ca as reusi sa ma descurc cu asta. ah, ca uitasem, probabil la costuri va intra si ci/cd git :rofl:

ce-mi place la un vps cu windows este ca-mi pot instala toolurile de dezvoltare acolo, din Visual Studio putand face deploy automat. Insa 100gb se duc doar pe OS + tools daca fac asta, plus faptul ca imi pare ca se misca destul de greu (sacadat). De ex, hostul actual, de la 2gb ram si 40gb spatiu (unde se umplea constant la 1 saptamana) marisem la 8gb ram si 200gb ssd (o foarte mare imbunatatire, cu doar 200 lei in plus pe an, nu stiu ce calcule au facut cei de ofera serviciul).

Dupa ce va ajunge functional, ideea mea ar fi sa sparg backendul in servicii, si momentan am in minte Scala pentru ca lucrez cu el in momentul de fata si-mi pare usor de folosit pentru taskuri in background.

Cam asta cred ca-i problem, am o multitudine de tehnologii diferite si nu stiu ce serviciu le-ar integra cu usurinta pe toate :rofl:

nu-mi dau seama daca face referire la client sau la ei cand spun de generat venituri :rofl:

Poti sa faci build-ul si prin CLI, nu trebuie sa ai Visual Studio instalat neaparat, doar SDK-ul. Nu sunt familiar cu Jenkins, nu poti sa il pui pe server si sa faci ceva job care iti face pull la repo, build si deploy? Asa ai putea sa rulezi job-ul manual de pe server cand vrei sa faci deploy. Asta nu te-ar costa nimic si probabil ar ocupa mai putin spatiu (sa se ruleze automat probabil ar fi nevoie de ceva webhooks dar nu stiu unde hostezi source code-ul si ce iti ofera din punctul asta de vedere).

fix asa e :grimacing: :rofl: :man_facepalming:

Daca vrei sa ramai pe windows totusi, incearca un Azure ca au si credite la inceput.
S-ar putea sa iesi mai bine acolo.

Sau. Daca e doar o singura aplicatie, s-ar putea sa-ti intre in planul free de la Heroku :smiley:

Spor!

1 Like

La AWS am mai incercat un cont gratuit si aveam fobie noaptea ca intru pe cost fara sa stiu si ajung sa fac credit pentru asta :joy: O sa ma uit la Azure, la fostul loc de munca il foloseam si era destul de intuitiv.

Nu-i doar o aplicatie, deoarece frontendul incerc sa-l sparg in cat mai multe bucati:

  • siteul de prezentare al serviciului
  • admin panelul serviciului (unde tin toate datele clientului si setarile serviciului: planuri/blog/etc)
  • siteul propriu-zis al clientului (configuratorul)
  • siteul de administrare al clientului
    pentru primul poate n-am nevoie de un framework, dar celelalte 3 mai mult ca sigur voi incepe cu ce stiu mai bine … angular :grimacing: chiar daca pe partea de SEO e dezastru initial (angular universal parca face ssr)

Personal as alege Azure (+1 Floris_Stoica_Marcu):

  1. Azure SQL (10 DTU) → $14.72 / luna. Un singur DB pentru toti.
  2. VM pe Linux. Prima data m-as uita sa vad daca aplicatia mea se muleaza pe un B-series VM pentru ca sunt mult mai ieftine. Un B1s (1 vCPU / 1 GiB RAM) costa la $7.59 / luna. Daca il rezervi pe un an atunci costa $4.42 / luna. Pe 3 ani este $2.86. Nu iti recomand sa rezervi decat daca esti 100% sigur ca B-series este in regula pentru tine.
  3. Daca ai fisiere de stocat, as folosi Blob Storage / File Storage. Atentie ca si bandwidth-ul se plateste!

Avantaje:

  • latency mic intre VM si Azure SQL
  • toate avantajele de la Azure SQL (point-in-time restore, scale-up rapid si aproape fara downtime, automatic tuning, etc.)

Avand in vedere ca ai putina memorie la dispozitie eu as acorda atentie sporita la:

  1. EF → foloseste Projections + AsNoTracking; daca ai procesari de lunga durata, sa nu ai long-lived DbContext pentru ca iti incarca memoria. Procesare pe batch-uri + dispose la DB la fiecare batch.
  2. Middleware-uri

Uita-te sa vezi daca nu este mai rentabil sa folosesti Azure Storage pentru un website static →

PS: Daca faci resize la imagini si folosesti System.Drawing pe .NET 5, atentie mare daca rulezi pe Linux. mono/libgdiplus are memory leak-uri native. In .NET 6, System.Drawing.Common este suportat doar pe Windows.

1 Like

pentru imagini ma gandeam la cloudinary, ofera 25gb spatiu pentru contul free, mi se pare mai mult decat suficient pentru inceput, tinand cont ca am doar un client momentan. Chiar daca as schimba pe viitor, nu cred ca asta ar afecta scalabilitatea.

Insa, cu baza de date, daca as incepe acum cu una (sa tin produsele clientilor), in momentul in care ar creste in volum, s-ar simti in performanta. EF ajuta la faptul ca pot initia contextul cu DBul clientului (parca tine in memorie doar schema, nu si datele brute, insa tot as vrea sa separ partea clientului de partea de administrare a serviciului).

AsNoTracking sfant, insa o optimizare pentru selecturi stiu ca poate fi scrierea queryului manual si executat cu ajutorul EF. Asta deja e problema de optimizare, macar de-as ajunge la stadiul ala :))

Fisiere de stocat nu, momentan. Generez o proforma din aplicatie, insa o trimit clientului pe mail, iar in admin panel e de tip formular, insa poate fi generat pdf la cerere. Pentru moment e ok asa.

Ce consum de resurse estimezi / client?

  • Spatiu initial necesar si cat estimezi ca va creste in timp
  • Trafic generat (in/out ca sunt taxate diferit)
  • Procesare necesara

pot doar sa ma refer la “clientul” actual, care are un magazin online, dar pe post de portofoliu mai mult, seo deloc, traficul vine doar din paginile lui de pe retelele de socializare. 100 vizitatori unici pe luna, 1000 vizite, ca idee baza de date are doar 22mb pe ultimul an. n-are nici macar server side rendering, indexarea pe google nu exista.

procese complicate nu sunt. as putea zice ca-i o aplicatie crud putin mai intortochiata si cam atat. ca spatiu, in momentul de fata, un api si 2 aplicatii web ocupa 500mb.

Am folosit recent Cloud Run de la Google Cloud.
Eu cu un SaaS mediu, 1600 useri, undeva la aproape 10 milioane de request-uri pe luna, platesc undeva la $20/luna.

Ca avantaje: are load balancing/scaling automat, genereaza certificate pentru domenii custom, merge pe orice poti rula in docker.

Eu am un API relativ micut scris in typescript. Partea de client e servita static din firebase.

1 Like

multam de raspuns. Am fost retinut de covidut cateva zile :rofl:

Suna foarte bine si nu este deloc scump.

Intre timp, am vazut ca Azure ofera pana la 200$ credit si 12 luni free pentru web services. Am pus aplicatia de frontend si pare ca merge destul de bine. Imi place ca-i usor de customizat.

Ce o sa fie o adevarata provocare (si sper ca Azure, Cloud Run, AWS ofera asta), sa pot atribui in mod programatic domenii pentru aplicatiile clientilor (si aici s-ar putea sa am eu o problema de arhitectura):

De ce spun ca ar fi o problema … faptul ca in spate, eu o sa am o singura instanta client, ce va fi servita utilizatorilor, la fel si in cazul backendului. Am renuntat la baza de date per utilizator pentru inceput (aduce costuri si nici nu se impune la un numar atat de redus de useri/produse). Astfel ca backendul va sti ce date sa furnizeze fiecarui client in functie de domeniul de la care se face requestul. Ce sper eu sa suporte Azure este ca daca ionel are/cumpara un domeniu, sa il poata seta din admin panelul aplicatiei.

1 Like

Sau wildcard dns entry și rezolvi în aplicație dacă există clientul sau nu.

3 Likes

Nu merge pe shared hosting de Windows? Ai și MS SQL Server: