\pgfdeclarelayer{background layer}
\pgfsetlayers{background layer,main}

\begin{tikzpicture}
  \tikzstyle{getstyle}=[fill opacity=1,draw opacity=1]
  \tikzstyle{programnode}=[minimum height=0.75cm, text width=1.8cm, text centered, draw=black,fill opacity=0.8];
  \useasboundingbox (0,-4) rectangle (13,3);
  \draw (2,1) node[name=mail_in,style=programnode,style=getstyle,anchor=west,fill=blue!60] {\small Mail In};
  \draw (2,0) node[name=spamscan,style=programnode,style=getstyle,anchor=west,fill=green!60] {\small spamscan};
  \draw (2,0) node[name=spam,style=programnode,style=getstyle,anchor=west,fill=red!60] {\small spam};
  \draw (2,-1) node[name=processall,style=programnode,style=getstyle,anchor=west,fill=green!60] {\small processall};
  \draw (0.75,-2) node[name=service,style=programnode,style=getstyle,anchor=west,fill=green!60] {\small service};
  \draw (3.25,-2) node[name=process,style=programnode,style=getstyle,anchor=west,fill=green!60] {\small process};
  \draw[style=getstyle,-stealth,line width = 1pt] (mail_in.-90) -- (spamscan.90);
  \draw[style=getstyle,-stealth,line width = 1pt] (spamscan.-90) -- (processall.90);
  \draw[style=getstyle,-stealth,line width = 1pt] (processall.-120) -- (service.60);
  \draw[style=getstyle,-stealth,line width = 1pt] (processall.-60) -- (process.60);
  
  \draw (5.5,-2) node[name=db-h,style=programnode,style=getstyle,anchor=west,fill=yellow!60] {\small db-h};
  \draw[style=getstyle,-stealth,line width = 1pt] (process.-90) |- (6.4,-2.75) -- (db-h.-120);
  \draw[style=getstyle,-stealth,line width = 1pt] (service.-90) |- (6.85,-3) -- (db-h.-60);
  \draw (5,-0.5) node[name=updatesql,style=programnode,style=getstyle,text width=2.5cm,anchor=west,fill=green!60] {\small debbugs-updatesqlcache};
  \draw[style=getstyle,-stealth,line width = 1pt] (db-h.90) -- (updatesql.-90);
  \draw (5.5,1) node[name=cgi,style=programnode,style=getstyle,anchor=west,fill=blue!20] {\small cgi/...};

  \draw (8,-2) node[name=loadsql,style=programnode,style=getstyle,anchor=west,fill=green!60] {\small debbugs-loadsql};
  \draw[style=getstyle,-stealth,line width = 1pt] (db-h.0) -- (loadsql.180);
  \draw (8,-2) node[name=loadsql,style=programnode,style=getstyle,anchor=west,fill=green!60] {\small debbugs-loadsql};
  \draw[style=getstyle,-stealth,line width = 1pt] (db-h.0) -- (loadsql.180);
  \draw (8,0) node[name=database,style=programnode,style=getstyle,anchor=west,fill=yellow!60] {\small Database};
  \draw[style=getstyle,-stealth,line width = 1pt] (loadsql.90) -- (database.-90);
  \draw[style=getstyle,-stealth,line width = 1pt] (updatesql.0) -- (database.-180);
  \draw[style=getstyle,-stealth,line width = 1pt] (database.90) |- (cgi.0);

\end{tikzpicture}

% Use only<>{} to get the above to change appropriately