Kom ihåg mig?
Home Menu

Menu


Massutskick av E-post

 
Ämnesverktyg Visningsalternativ
Oläst 2005-05-03, 09:54 #1
StefanBergfeldts avatar
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2004
Inlägg: 1 535
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
StefanBergfeldts avatar
 
Reg.datum: Sep 2004
Inlägg: 1 535
Hallå!

Vi har nyligen byggt om vår nyhetsbrev-funktion för att kunna inkludera namn och liknande uppgifter i utskicket. Detta har medfört att vi måste skicka ett mail per mottagare, och inte som tidigare lägga till alla i BCC. Detta pressar naturligtvis servern mycket mer, faktiskt alldeles för mycket.

Jag har genom lite tester kommit fram till att det är själva skicka-förfarandet som belastar servern, och tar lång tid. Jag är nu ute efter en lösning som dels minskar belastningen på servern (har en idé om att flytta bearbetningen till en annan server) och dels minskar tiden som webbläsaren blir upplåst. Det senare löser sig ju inte bara för att vi belastar en annan server istället för webbservern.

Teknik som används idag är ASP på Windows 2000 Server, och mailen skickas med CDONTS.
StefanBergfeldt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-03, 11:11 #2
heyday heyday är inte uppkopplad
Medlem
 
Reg.datum: Jun 2004
Inlägg: 60
heyday heyday är inte uppkopplad
Medlem
 
Reg.datum: Jun 2004
Inlägg: 60
Vilken server är det som det belastar för mycket? Webbservern? Måste klienten vänta medan alla mail skapas och skickas?

Vi löser samma problematik med en demon (service) som skapar mailen och lägger dessa i ut-kön på smtp servern direkt. Demonen uppdaterar statistik som klienten ser.

Det enda klienten måste vänta på är att urvalet skapas och ett jobb initieras.

EDIT:
Tillägg

Arbetet är naturligtvis lika hårt för maskinen som skapar mailen... Men det kan vara en helt annan maskin.
heyday är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-03, 11:14 #3
StefanBergfeldts avatar
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2004
Inlägg: 1 535
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
StefanBergfeldts avatar
 
Reg.datum: Sep 2004
Inlägg: 1 535
Citat:
Originally posted by heyday@May 3 2005, 11:11
Vilken server är det som det belastar för mycket? Webbservern? Måste klienten vänta medan alla mail skapas och skickas?

Vi löser samma problematik med en demon (service) som skapar mailen och lägger dessa i ut-kön på smtp servern direkt. Demonen uppdaterar statistik som klienten ser.

Det enda klienten måste vänta på är att urvalet skapas och ett jobb initieras.
Det är ju precis detta jag är ute efter. Det är webbservern som belastas, och klienten måste vänta medan alla mail skickas. Själva skapandet, och urvalet tar ca 10 sekunder, och presenteras i ett formulär, men skickandet tar betydligt längre.

Hur är detta löst, vad ska jag göra för att hantera detta?
SMTP-servern är och IIS ligger på samma maskin.
StefanBergfeldt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-03, 20:06 #4
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Att göra ett urval för ett utskick på 10s låter mycket. hur många poster handlar det om egentligen?
Och eftersom det känns som om urvalet tar lång tid misstänker jag att index inte används korrekt i databasen och om mailen skall "fixas till" för resp mottagare innebär det ju en del DB access även när breven skall skickas och om index även härt används fel så...

Så det kan ju vara värt att kika på exakt vad det är som tar tid.

Givet att det verkligen är skickandet som tar tid (pga att det är väldigt många mail som skall skickas), så föreslår jag att du "köar" utskicken och låter en demon/service beta av kön på låg prioritet så att du får iväg mailen under en längre period, men utan att sänka servern.

Men som sagt, jag är lite skeptisk till att DBn verkligen är optimerad i den omfattning som behövs.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-04, 07:37 #5
StefanBergfeldts avatar
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2004
Inlägg: 1 535
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
StefanBergfeldts avatar
 
Reg.datum: Sep 2004
Inlägg: 1 535
Citat:
Att göra ett urval för ett utskick på 10s låter mycket. hur många poster handlar det om egentligen?
Det rör sig om ca 60000 kunder som ska utvärderas utifrån ett urval av antal ordrar under en viss tidsperiod, total ordersumma under en viss period, registrerad inom en viss period, leveransadress inom en viss zon mm. Alltså ett ganska komplext urval.

Citat:
Jag har genom lite tester kommit fram till att det är själva skicka-förfarandet som belastar servern, och tar lång tid.
Det är alltså detta jag vill förbättra prestandan på. Att skapa mailet och att göra urvalet tar några sekunder, beroende på vilket urval man har valt. Att skicka mailet tar en evighet.

Två förslag säger här att man kan "köa" utskicken, och det låter som en jättebra idé, men hur gör jag det?

Att skicka förfrågan till en annan dator skulle ju minska belastningen på webbservern, vilket skulle vara väldigt positivt, men jag vill fortfarande slippa ha klienten upplåst tills alla mail är skickade.
StefanBergfeldt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-04, 10:15 #6
webbtekniks avatar
webbteknik webbteknik är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2005
Inlägg: 571
webbteknik webbteknik är inte uppkopplad
Mycket flitig postare
webbtekniks avatar
 
Reg.datum: Apr 2005
Inlägg: 571
Antar att du redan (om möjligt) kör utskicken den tid på dygnet då belastningen på din webbserver är som minst, tex kl 04 på natten?
webbteknik är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-04, 10:23 #7
StefanBergfeldts avatar
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2004
Inlägg: 1 535
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
StefanBergfeldts avatar
 
Reg.datum: Sep 2004
Inlägg: 1 535
Citat:
Originally posted by webbteknik.se@May 4 2005, 10:15
Antar att du redan (om möjligt) kör utskicken den tid på dygnet då belastningen på din webbserver är som minst, tex kl 04 på natten?
Nej det gör jag inte.. Eller "om möjligt" kanske. Det är inte riktigt möjligt. Dessutom har vi ganska bra belastning på servern dygnet runt. Klockan fyra börjar vi sammanställa dagens ordrar för att planera budbilarnas rutter, beställa hem färskvaror, och plocka ihop beställningar.
StefanBergfeldt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-04, 10:41 #8
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Citat:
Det rör sig om ca 60000 kunder som ska utvärderas utifrån ett urval av antal ordrar under en viss tidsperiod, total ordersumma under en viss period, registrerad inom en viss period, leveransadress inom en viss zon mm. Alltså ett ganska komplext urval.
Ett urval på 60000 poster är inte speciellt stort egentligen. Jag låter kanske som en trasig skiva, men 10s låter fortfarande som alldeles för länge. Jag tror fortfarande att något går att göra åt den delen. Dock är ju detta inte det största problemet om jag förstår dig rätt att du inte behöver DB access för att skicka mailen.
Citat:
Två förslag säger här att man kan "köa" utskicken, och det låter som en jättebra idé, men hur gör jag det?
Lägg in den info som krävs för att skapa ett mail (dvs innehåll/mall, mottagare, ev. parametrar för DB access för att customisera mailet) i en tabell i din databas.
Skriv ett nytt program som:
1) Sätter sin egen process prioritet till låg.
2) Hämtar rad för rad i "kötabellen" i databasen och skickar mailet.
Detta program kan antingen gå som en service/demon (dvs hela tiden i bakgrunden) eller så låter du ditt skicka script starta programmet när någon gör ett utskick. Alt. använder du windows scheduleraren (för du kör väl på windows om jag förstått rätt) som startar programmet var 5:e minut för att kolla kön. I de två senare fallen är det väl bra att programmet kollar så det inte redan körs när det startas också.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-04, 11:03 #9
heyday heyday är inte uppkopplad
Medlem
 
Reg.datum: Jun 2004
Inlägg: 60
heyday heyday är inte uppkopplad
Medlem
 
Reg.datum: Jun 2004
Inlägg: 60
Enkelt uttryckt:
Vi kör en process som tar urvalet (namn, epost, kategorier, whatever you have) och tar en kompilerad mall av mailet, och mergar dessa data och lägger det i en utkö som "färdigt mail". Denna utkö är i vårt fall en katalog som vår smtpserver tar ifrån och skickar iväg.

Så själva köandet av mailen är bara ett skrivande av en fil.

Vi använder en javaapplikation för detta.

Men du kan lika gärna som någon tidigare föreslog, skriva ett php-skript som körs varje minut, och betar av en bit av urvalet.

Om du inte har möjlighet att som vi skriva direkt till utkön på smtp-servern, så kan du skicka mailen som du gör nu.
heyday är inte uppkopplad   Svara med citatSvara med citat
Oläst 2005-05-04, 12:36 #10
StefanBergfeldts avatar
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2004
Inlägg: 1 535
StefanBergfeldt StefanBergfeldt är inte uppkopplad
Bara ett inlägg till!
StefanBergfeldts avatar
 
Reg.datum: Sep 2004
Inlägg: 1 535
Hmm, jag funderar lite..
Eftersom mailen redan är klara här, ska det verkligen vara så mycket effektivare att lägga det i en kö, än att skicka ett mail?
Jag tycker det verkar konstigt.

Fast det är klart, när jag bara kommenterar bort raden objMail.send() på den sida som loopar igenom alla adresser och mail, och skickar dom, så går den också fort.

Jag ska göra lite tester..
StefanBergfeldt är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:33.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017