Multiple worker processes for a single application in a applicationpool

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Abhishek Srivastava

    Multiple worker processes for a single application in a applicationpool

    Hello All,

    In IIS 6.0 We have a concept of worker processes and application pools.

    As I understand it, we can have multiple worker process per appliction
    pool. Each worker process is dedicated to a pool. If I assign only one
    application to a applicaton pool and have multiple worker processes
    assigned to that pool. Will my application be processed by many worker
    processes?

    Why I am asking this question is because there are certain resources
    which are in-memory and are shared at an application level. For example
    the database connection pool, or some XML files initialized via a static
    contructor.

    Now if multiple process are executing my requests, then how do they
    share data (if they do at all). Or each process replicates its own
    resources.

    This is important to me, because lets say I am connection to a
    datasource for which I have a 20 concurrent user license. So I create a
    pool of 20 connections and manage it. This pool is in-memory initialized
    via a static constructor. Now if each worker process tries to load its
    own in-memory pool, then only one process would function because rest
    will be denied the connection. I also have no way of knowing how many
    worker process will run at any moment because they are run based on
    demand by the IIS so I cannot split the load amongst multiple processes
    at an application level.

    To me it appears that different worker processes cannot be used to
    execute the requests for one application ... but then MS documentation
    talks about Web Garden where different worker processes execute requests
    for an application domain.

    I will be very gratefull if you could share some knowledge on this
    matter. Thanks for your help in advance.

    regards,
    Abhishek.
  • Ken Schaefer

    #2
    Re: Multiple worker processes for a single application in a application pool

    Each worker process keeps its own in-memory state. You would need some kind
    of out-of-process state management if you want to share data between
    processes.

    Additionally, I would suggest that you are best of managing database
    connections via built-in MDAC connection pooling, not through your own
    home-grown system. You can limit the number of connections in the pool.

    Cheers
    Ken

    "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
    news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
    : Hello All,
    :
    : In IIS 6.0 We have a concept of worker processes and application pools.
    :
    : As I understand it, we can have multiple worker process per appliction
    : pool. Each worker process is dedicated to a pool. If I assign only one
    : application to a applicaton pool and have multiple worker processes
    : assigned to that pool. Will my application be processed by many worker
    : processes?
    :
    : Why I am asking this question is because there are certain resources
    : which are in-memory and are shared at an application level. For example
    : the database connection pool, or some XML files initialized via a static
    : contructor.
    :
    : Now if multiple process are executing my requests, then how do they
    : share data (if they do at all). Or each process replicates its own
    : resources.
    :
    : This is important to me, because lets say I am connection to a
    : datasource for which I have a 20 concurrent user license. So I create a
    : pool of 20 connections and manage it. This pool is in-memory initialized
    : via a static constructor. Now if each worker process tries to load its
    : own in-memory pool, then only one process would function because rest
    : will be denied the connection. I also have no way of knowing how many
    : worker process will run at any moment because they are run based on
    : demand by the IIS so I cannot split the load amongst multiple processes
    : at an application level.
    :
    : To me it appears that different worker processes cannot be used to
    : execute the requests for one application ... but then MS documentation
    : talks about Web Garden where different worker processes execute requests
    : for an application domain.
    :
    : I will be very gratefull if you could share some knowledge on this
    : matter. Thanks for your help in advance.
    :
    : regards,
    : Abhishek.


    Comment

    • Abhishek Srivastava

      #3
      Re: Multiple worker processes for a single application in a applicationpool

      How do the workers synchronize the data? suppose I keep a DOM tree in
      the application object.

      Now one worker process updates a node in the dom tree. Will other worker
      processes (who have thier own version of the in-memory state) see the
      changes? What is the mechanism of synchronization .

      One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it is a
      set of DLLs which run in the memory of the application.(Us ed MDAC many
      times... but never saw a separate exe or DLLHOST begining to run upon
      querying my DB) Even if I let the MDAC manage my pool, if multiple
      processes are creating their own pools, then what is the total number of
      connections beging opened to the database? If I have a limitation on the
      max number of connections, then how do I manage it?

      Can you please confirm that multiple processes can definetly run execute
      the requests for a single application.

      regards,
      Abhishek.

      Ken Schaefer wrote:[color=blue]
      > Each worker process keeps its own in-memory state. You would need some kind
      > of out-of-process state management if you want to share data between
      > processes.
      >
      > Additionally, I would suggest that you are best of managing database
      > connections via built-in MDAC connection pooling, not through your own
      > home-grown system. You can limit the number of connections in the pool.
      >
      > Cheers
      > Ken
      >
      > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
      > news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
      > : Hello All,
      > :
      > : In IIS 6.0 We have a concept of worker processes and application pools.
      > :
      > : As I understand it, we can have multiple worker process per appliction
      > : pool. Each worker process is dedicated to a pool. If I assign only one
      > : application to a applicaton pool and have multiple worker processes
      > : assigned to that pool. Will my application be processed by many worker
      > : processes?
      > :
      > : Why I am asking this question is because there are certain resources
      > : which are in-memory and are shared at an application level. For example
      > : the database connection pool, or some XML files initialized via a static
      > : contructor.
      > :
      > : Now if multiple process are executing my requests, then how do they
      > : share data (if they do at all). Or each process replicates its own
      > : resources.
      > :
      > : This is important to me, because lets say I am connection to a
      > : datasource for which I have a 20 concurrent user license. So I create a
      > : pool of 20 connections and manage it. This pool is in-memory initialized
      > : via a static constructor. Now if each worker process tries to load its
      > : own in-memory pool, then only one process would function because rest
      > : will be denied the connection. I also have no way of knowing how many
      > : worker process will run at any moment because they are run based on
      > : demand by the IIS so I cannot split the load amongst multiple processes
      > : at an application level.
      > :
      > : To me it appears that different worker processes cannot be used to
      > : execute the requests for one application ... but then MS documentation
      > : talks about Web Garden where different worker processes execute requests
      > : for an application domain.
      > :
      > : I will be very gratefull if you could share some knowledge on this
      > : matter. Thanks for your help in advance.
      > :
      > : regards,
      > : Abhishek.
      >
      >[/color]

      Comment

      • Jerry III

        #4
        Re: Multiple worker processes for a single application in a application pool

        The fact that MDAC does not have it's process does not mean that it can't
        share connection pools across different applications. I don't know how you
        came to that conclusion.

        Jerry

        "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
        news:u2hRrox5DH A.2404@TK2MSFTN GP12.phx.gbl...[color=blue]
        > How do the workers synchronize the data? suppose I keep a DOM tree in
        > the application object.
        >
        > Now one worker process updates a node in the dom tree. Will other worker
        > processes (who have thier own version of the in-memory state) see the
        > changes? What is the mechanism of synchronization .
        >
        > One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it is a
        > set of DLLs which run in the memory of the application.(Us ed MDAC many
        > times... but never saw a separate exe or DLLHOST begining to run upon
        > querying my DB) Even if I let the MDAC manage my pool, if multiple
        > processes are creating their own pools, then what is the total number of
        > connections beging opened to the database? If I have a limitation on the
        > max number of connections, then how do I manage it?
        >
        > Can you please confirm that multiple processes can definetly run execute
        > the requests for a single application.
        >
        > regards,
        > Abhishek.
        >
        > Ken Schaefer wrote:[color=green]
        > > Each worker process keeps its own in-memory state. You would need some[/color][/color]
        kind[color=blue][color=green]
        > > of out-of-process state management if you want to share data between
        > > processes.
        > >
        > > Additionally, I would suggest that you are best of managing database
        > > connections via built-in MDAC connection pooling, not through your own
        > > home-grown system. You can limit the number of connections in the pool.
        > >
        > > Cheers
        > > Ken
        > >
        > > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
        > > news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
        > > : Hello All,
        > > :
        > > : In IIS 6.0 We have a concept of worker processes and application[/color][/color]
        pools.[color=blue][color=green]
        > > :
        > > : As I understand it, we can have multiple worker process per appliction
        > > : pool. Each worker process is dedicated to a pool. If I assign only one
        > > : application to a applicaton pool and have multiple worker processes
        > > : assigned to that pool. Will my application be processed by many worker
        > > : processes?
        > > :
        > > : Why I am asking this question is because there are certain resources
        > > : which are in-memory and are shared at an application level. For[/color][/color]
        example[color=blue][color=green]
        > > : the database connection pool, or some XML files initialized via a[/color][/color]
        static[color=blue][color=green]
        > > : contructor.
        > > :
        > > : Now if multiple process are executing my requests, then how do they
        > > : share data (if they do at all). Or each process replicates its own
        > > : resources.
        > > :
        > > : This is important to me, because lets say I am connection to a
        > > : datasource for which I have a 20 concurrent user license. So I create[/color][/color]
        a[color=blue][color=green]
        > > : pool of 20 connections and manage it. This pool is in-memory[/color][/color]
        initialized[color=blue][color=green]
        > > : via a static constructor. Now if each worker process tries to load its
        > > : own in-memory pool, then only one process would function because rest
        > > : will be denied the connection. I also have no way of knowing how many
        > > : worker process will run at any moment because they are run based on
        > > : demand by the IIS so I cannot split the load amongst multiple[/color][/color]
        processes[color=blue][color=green]
        > > : at an application level.
        > > :
        > > : To me it appears that different worker processes cannot be used to
        > > : execute the requests for one application ... but then MS documentation
        > > : talks about Web Garden where different worker processes execute[/color][/color]
        requests[color=blue][color=green]
        > > : for an application domain.
        > > :
        > > : I will be very gratefull if you could share some knowledge on this
        > > : matter. Thanks for your help in advance.
        > > :
        > > : regards,
        > > : Abhishek.
        > >
        > >[/color][/color]


        Comment

        • Scott Allen

          #5
          Re: Multiple worker processes for a single application in a application pool

          Jerry: To share a connection from an exisitng pool you need to be in
          the same process, have the same security context, and use the exact
          same connection string as the pool. In .NET you also need to be in the
          same app domain which can further subdivide a process.

          --
          Scott


          On Fri, 30 Jan 2004 10:26:12 -0800, "Jerry III" <jerryiii@hotma il.com>
          wrote:
          [color=blue]
          >The fact that MDAC does not have it's process does not mean that it can't
          >share connection pools across different applications. I don't know how you
          >came to that conclusion.
          >
          >Jerry
          >
          >"Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
          >news:u2hRrox5D HA.2404@TK2MSFT NGP12.phx.gbl.. .[color=green]
          >> How do the workers synchronize the data? suppose I keep a DOM tree in
          >> the application object.
          >>
          >> Now one worker process updates a node in the dom tree. Will other worker
          >> processes (who have thier own version of the in-memory state) see the
          >> changes? What is the mechanism of synchronization .
          >>
          >> One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it is a
          >> set of DLLs which run in the memory of the application.(Us ed MDAC many
          >> times... but never saw a separate exe or DLLHOST begining to run upon
          >> querying my DB) Even if I let the MDAC manage my pool, if multiple
          >> processes are creating their own pools, then what is the total number of
          >> connections beging opened to the database? If I have a limitation on the
          >> max number of connections, then how do I manage it?
          >>
          >> Can you please confirm that multiple processes can definetly run execute
          >> the requests for a single application.
          >>
          >> regards,
          >> Abhishek.
          >>
          >> Ken Schaefer wrote:[color=darkred]
          >> > Each worker process keeps its own in-memory state. You would need some[/color][/color]
          >kind[color=green][color=darkred]
          >> > of out-of-process state management if you want to share data between
          >> > processes.
          >> >
          >> > Additionally, I would suggest that you are best of managing database
          >> > connections via built-in MDAC connection pooling, not through your own
          >> > home-grown system. You can limit the number of connections in the pool.
          >> >
          >> > Cheers
          >> > Ken
          >> >
          >> > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
          >> > news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
          >> > : Hello All,
          >> > :
          >> > : In IIS 6.0 We have a concept of worker processes and application[/color][/color]
          >pools.[color=green][color=darkred]
          >> > :
          >> > : As I understand it, we can have multiple worker process per appliction
          >> > : pool. Each worker process is dedicated to a pool. If I assign only one
          >> > : application to a applicaton pool and have multiple worker processes
          >> > : assigned to that pool. Will my application be processed by many worker
          >> > : processes?
          >> > :
          >> > : Why I am asking this question is because there are certain resources
          >> > : which are in-memory and are shared at an application level. For[/color][/color]
          >example[color=green][color=darkred]
          >> > : the database connection pool, or some XML files initialized via a[/color][/color]
          >static[color=green][color=darkred]
          >> > : contructor.
          >> > :
          >> > : Now if multiple process are executing my requests, then how do they
          >> > : share data (if they do at all). Or each process replicates its own
          >> > : resources.
          >> > :
          >> > : This is important to me, because lets say I am connection to a
          >> > : datasource for which I have a 20 concurrent user license. So I create[/color][/color]
          >a[color=green][color=darkred]
          >> > : pool of 20 connections and manage it. This pool is in-memory[/color][/color]
          >initialized[color=green][color=darkred]
          >> > : via a static constructor. Now if each worker process tries to load its
          >> > : own in-memory pool, then only one process would function because rest
          >> > : will be denied the connection. I also have no way of knowing how many
          >> > : worker process will run at any moment because they are run based on
          >> > : demand by the IIS so I cannot split the load amongst multiple[/color][/color]
          >processes[color=green][color=darkred]
          >> > : at an application level.
          >> > :
          >> > : To me it appears that different worker processes cannot be used to
          >> > : execute the requests for one application ... but then MS documentation
          >> > : talks about Web Garden where different worker processes execute[/color][/color]
          >requests[color=green][color=darkred]
          >> > : for an application domain.
          >> > :
          >> > : I will be very gratefull if you could share some knowledge on this
          >> > : matter. Thanks for your help in advance.
          >> > :
          >> > : regards,
          >> > : Abhishek.
          >> >
          >> >[/color][/color]
          >[/color]

          Comment

          • Jerry III

            #6
            Re: Multiple worker processes for a single application in a application pool

            You're kidding, right? What good is connection pooling if it can't be shared
            across multiple instances of the same code? How exactly are we supposed to
            tune the connection pool size if we (as developers) have no idea how many
            connection pools are there going to be since some customers will setup their
            web site to run in multiple processes?

            Jerry

            "Scott Allen" <bitmask@[nospam].fred.net> wrote in message
            news:v5cl101atg j8pgduo0ikt6bm6 2n4kkrhfd@4ax.c om...[color=blue]
            > Jerry: To share a connection from an exisitng pool you need to be in
            > the same process, have the same security context, and use the exact
            > same connection string as the pool. In .NET you also need to be in the
            > same app domain which can further subdivide a process.
            >
            > --
            > Scott
            > http://www.OdeToCode.com
            >
            > On Fri, 30 Jan 2004 10:26:12 -0800, "Jerry III" <jerryiii@hotma il.com>
            > wrote:
            >[color=green]
            > >The fact that MDAC does not have it's process does not mean that it can't
            > >share connection pools across different applications. I don't know how[/color][/color]
            you[color=blue][color=green]
            > >came to that conclusion.
            > >
            > >Jerry
            > >
            > >"Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
            > >news:u2hRrox5D HA.2404@TK2MSFT NGP12.phx.gbl.. .[color=darkred]
            > >> How do the workers synchronize the data? suppose I keep a DOM tree in
            > >> the application object.
            > >>
            > >> Now one worker process updates a node in the dom tree. Will other[/color][/color][/color]
            worker[color=blue][color=green][color=darkred]
            > >> processes (who have thier own version of the in-memory state) see the
            > >> changes? What is the mechanism of synchronization .
            > >>
            > >> One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it is[/color][/color][/color]
            a[color=blue][color=green][color=darkred]
            > >> set of DLLs which run in the memory of the application.(Us ed MDAC many
            > >> times... but never saw a separate exe or DLLHOST begining to run upon
            > >> querying my DB) Even if I let the MDAC manage my pool, if multiple
            > >> processes are creating their own pools, then what is the total number[/color][/color][/color]
            of[color=blue][color=green][color=darkred]
            > >> connections beging opened to the database? If I have a limitation on[/color][/color][/color]
            the[color=blue][color=green][color=darkred]
            > >> max number of connections, then how do I manage it?
            > >>
            > >> Can you please confirm that multiple processes can definetly run[/color][/color][/color]
            execute[color=blue][color=green][color=darkred]
            > >> the requests for a single application.
            > >>
            > >> regards,
            > >> Abhishek.
            > >>
            > >> Ken Schaefer wrote:
            > >> > Each worker process keeps its own in-memory state. You would need[/color][/color][/color]
            some[color=blue][color=green]
            > >kind[color=darkred]
            > >> > of out-of-process state management if you want to share data between
            > >> > processes.
            > >> >
            > >> > Additionally, I would suggest that you are best of managing database
            > >> > connections via built-in MDAC connection pooling, not through your[/color][/color][/color]
            own[color=blue][color=green][color=darkred]
            > >> > home-grown system. You can limit the number of connections in the[/color][/color][/color]
            pool.[color=blue][color=green][color=darkred]
            > >> >
            > >> > Cheers
            > >> > Ken
            > >> >
            > >> > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in[/color][/color][/color]
            message[color=blue][color=green][color=darkred]
            > >> > news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
            > >> > : Hello All,
            > >> > :
            > >> > : In IIS 6.0 We have a concept of worker processes and application[/color]
            > >pools.[color=darkred]
            > >> > :
            > >> > : As I understand it, we can have multiple worker process per[/color][/color][/color]
            appliction[color=blue][color=green][color=darkred]
            > >> > : pool. Each worker process is dedicated to a pool. If I assign only[/color][/color][/color]
            one[color=blue][color=green][color=darkred]
            > >> > : application to a applicaton pool and have multiple worker processes
            > >> > : assigned to that pool. Will my application be processed by many[/color][/color][/color]
            worker[color=blue][color=green][color=darkred]
            > >> > : processes?
            > >> > :
            > >> > : Why I am asking this question is because there are certain[/color][/color][/color]
            resources[color=blue][color=green][color=darkred]
            > >> > : which are in-memory and are shared at an application level. For[/color]
            > >example[color=darkred]
            > >> > : the database connection pool, or some XML files initialized via a[/color]
            > >static[color=darkred]
            > >> > : contructor.
            > >> > :
            > >> > : Now if multiple process are executing my requests, then how do they
            > >> > : share data (if they do at all). Or each process replicates its own
            > >> > : resources.
            > >> > :
            > >> > : This is important to me, because lets say I am connection to a
            > >> > : datasource for which I have a 20 concurrent user license. So I[/color][/color][/color]
            create[color=blue][color=green]
            > >a[color=darkred]
            > >> > : pool of 20 connections and manage it. This pool is in-memory[/color]
            > >initialized[color=darkred]
            > >> > : via a static constructor. Now if each worker process tries to load[/color][/color][/color]
            its[color=blue][color=green][color=darkred]
            > >> > : own in-memory pool, then only one process would function because[/color][/color][/color]
            rest[color=blue][color=green][color=darkred]
            > >> > : will be denied the connection. I also have no way of knowing how[/color][/color][/color]
            many[color=blue][color=green][color=darkred]
            > >> > : worker process will run at any moment because they are run based on
            > >> > : demand by the IIS so I cannot split the load amongst multiple[/color]
            > >processes[color=darkred]
            > >> > : at an application level.
            > >> > :
            > >> > : To me it appears that different worker processes cannot be used to
            > >> > : execute the requests for one application ... but then MS[/color][/color][/color]
            documentation[color=blue][color=green][color=darkred]
            > >> > : talks about Web Garden where different worker processes execute[/color]
            > >requests[color=darkred]
            > >> > : for an application domain.
            > >> > :
            > >> > : I will be very gratefull if you could share some knowledge on this
            > >> > : matter. Thanks for your help in advance.
            > >> > :
            > >> > : regards,
            > >> > : Abhishek.
            > >> >
            > >> >[/color]
            > >[/color]
            >[/color]


            Comment

            • Scott Allen

              #7
              Re: Multiple worker processes for a single application in a application pool

              Well, I guess it boils down to this:

              It's close to impossible to write a web app without connection
              pooling. The overhead of seting up, handshaking, authenticating,
              tearing down, etc., is a big hit on perf and scalability.

              I could write my own pooling algorithm, but some smart people already
              worked on the problem for me and did a tremendous amount of testing.
              The pooling in most managed providers is already effecient, secure,
              and well behaved.

              The built in pooling won't "waste" connections. That is, it wont open
              more than it needs at any one moment (unless you've given it a minimum
              number to use), and with most of the providers you can set a min and
              max pool size. If the pool reaches the max size, additional requests
              queue up and wait for a connection to become free.

              Now, I realize this doesn't help someone control the *total* number of
              connections from thier code in cases where a data access layer appears
              in more > 1 processes on a server, but, it is suprising how many
              "active" users a .NET app can support when the application is using
              then returning a connection to the pool as quickly as possible. With n
              connections in a pool an app can service the requests of n or more
              users, generally a 'lot' more than n, but again it depends on the
              application. You just have to test and benchmark and test again.

              If I was in a scenario where I needed to have total control over the
              number of connections on a machine, I'd write a ServicedCompone nt for
              data access and host it in a COM+ server package. Of course this would
              require marshalling of DataSets across processes, which can be a hit.
              I'd think this type of scenario is an exceptional case, but I'm sure
              it exists somewhere.

              --
              Scott



              On Fri, 30 Jan 2004 14:30:35 -0800, "Jerry III" <jerryiii@hotma il.com>
              wrote:
              [color=blue]
              >You're kidding, right? What good is connection pooling if it can't be shared
              >across multiple instances of the same code? How exactly are we supposed to
              >tune the connection pool size if we (as developers) have no idea how many
              >connection pools are there going to be since some customers will setup their
              >web site to run in multiple processes?
              >
              >Jerry
              >
              >"Scott Allen" <bitmask@[nospam].fred.net> wrote in message
              >news:v5cl101at gj8pgduo0ikt6bm 62n4kkrhfd@4ax. com...[color=green]
              >> Jerry: To share a connection from an exisitng pool you need to be in
              >> the same process, have the same security context, and use the exact
              >> same connection string as the pool. In .NET you also need to be in the
              >> same app domain which can further subdivide a process.
              >>
              >> --
              >> Scott
              >> http://www.OdeToCode.com
              >>
              >> On Fri, 30 Jan 2004 10:26:12 -0800, "Jerry III" <jerryiii@hotma il.com>
              >> wrote:
              >>[color=darkred]
              >> >The fact that MDAC does not have it's process does not mean that it can't
              >> >share connection pools across different applications. I don't know how[/color][/color]
              >you[color=green][color=darkred]
              >> >came to that conclusion.
              >> >
              >> >Jerry
              >> >
              >> >"Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
              >> >news:u2hRrox5D HA.2404@TK2MSFT NGP12.phx.gbl.. .
              >> >> How do the workers synchronize the data? suppose I keep a DOM tree in
              >> >> the application object.
              >> >>
              >> >> Now one worker process updates a node in the dom tree. Will other[/color][/color]
              >worker[color=green][color=darkred]
              >> >> processes (who have thier own version of the in-memory state) see the
              >> >> changes? What is the mechanism of synchronization .
              >> >>
              >> >> One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it is[/color][/color]
              >a[color=green][color=darkred]
              >> >> set of DLLs which run in the memory of the application.(Us ed MDAC many
              >> >> times... but never saw a separate exe or DLLHOST begining to run upon
              >> >> querying my DB) Even if I let the MDAC manage my pool, if multiple
              >> >> processes are creating their own pools, then what is the total number[/color][/color]
              >of[color=green][color=darkred]
              >> >> connections beging opened to the database? If I have a limitation on[/color][/color]
              >the[color=green][color=darkred]
              >> >> max number of connections, then how do I manage it?
              >> >>
              >> >> Can you please confirm that multiple processes can definetly run[/color][/color]
              >execute[color=green][color=darkred]
              >> >> the requests for a single application.
              >> >>
              >> >> regards,
              >> >> Abhishek.
              >> >>
              >> >> Ken Schaefer wrote:
              >> >> > Each worker process keeps its own in-memory state. You would need[/color][/color]
              >some[color=green][color=darkred]
              >> >kind
              >> >> > of out-of-process state management if you want to share data between
              >> >> > processes.
              >> >> >
              >> >> > Additionally, I would suggest that you are best of managing database
              >> >> > connections via built-in MDAC connection pooling, not through your[/color][/color]
              >own[color=green][color=darkred]
              >> >> > home-grown system. You can limit the number of connections in the[/color][/color]
              >pool.[color=green][color=darkred]
              >> >> >
              >> >> > Cheers
              >> >> > Ken
              >> >> >
              >> >> > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in[/color][/color]
              >message[color=green][color=darkred]
              >> >> > news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
              >> >> > : Hello All,
              >> >> > :
              >> >> > : In IIS 6.0 We have a concept of worker processes and application
              >> >pools.
              >> >> > :
              >> >> > : As I understand it, we can have multiple worker process per[/color][/color]
              >appliction[color=green][color=darkred]
              >> >> > : pool. Each worker process is dedicated to a pool. If I assign only[/color][/color]
              >one[color=green][color=darkred]
              >> >> > : application to a applicaton pool and have multiple worker processes
              >> >> > : assigned to that pool. Will my application be processed by many[/color][/color]
              >worker[color=green][color=darkred]
              >> >> > : processes?
              >> >> > :
              >> >> > : Why I am asking this question is because there are certain[/color][/color]
              >resources[color=green][color=darkred]
              >> >> > : which are in-memory and are shared at an application level. For
              >> >example
              >> >> > : the database connection pool, or some XML files initialized via a
              >> >static
              >> >> > : contructor.
              >> >> > :
              >> >> > : Now if multiple process are executing my requests, then how do they
              >> >> > : share data (if they do at all). Or each process replicates its own
              >> >> > : resources.
              >> >> > :
              >> >> > : This is important to me, because lets say I am connection to a
              >> >> > : datasource for which I have a 20 concurrent user license. So I[/color][/color]
              >create[color=green][color=darkred]
              >> >a
              >> >> > : pool of 20 connections and manage it. This pool is in-memory
              >> >initialized
              >> >> > : via a static constructor. Now if each worker process tries to load[/color][/color]
              >its[color=green][color=darkred]
              >> >> > : own in-memory pool, then only one process would function because[/color][/color]
              >rest[color=green][color=darkred]
              >> >> > : will be denied the connection. I also have no way of knowing how[/color][/color]
              >many[color=green][color=darkred]
              >> >> > : worker process will run at any moment because they are run based on
              >> >> > : demand by the IIS so I cannot split the load amongst multiple
              >> >processes
              >> >> > : at an application level.
              >> >> > :
              >> >> > : To me it appears that different worker processes cannot be used to
              >> >> > : execute the requests for one application ... but then MS[/color][/color]
              >documentatio n[color=green][color=darkred]
              >> >> > : talks about Web Garden where different worker processes execute
              >> >requests
              >> >> > : for an application domain.
              >> >> > :
              >> >> > : I will be very gratefull if you could share some knowledge on this
              >> >> > : matter. Thanks for your help in advance.
              >> >> > :
              >> >> > : regards,
              >> >> > : Abhishek.
              >> >> >
              >> >> >
              >> >[/color]
              >>[/color]
              >[/color]

              Comment

              • Ken Schaefer

                #8
                Re: Multiple worker processes for a single application in a application pool

                A given worker process can have multiple threads servicing requests. These
                will all share the same connection pool. I don't understand how two
                arbitrary w3wp.exe processes would share the same connection pool however.

                If you're writing an application that requires multiple w3wp.exe (web
                garden), then you probably already have a internet connector-type licence
                for SQL Server (rather than 10 CALs or similar). The connection pooling
                provided by the MDAC components is quite good IMHO.

                Cheers
                Ken


                "Jerry III" <jerryiii@hotma il.com> wrote in message
                news:%23AfSuC45 DHA.3304@tk2msf tngp13.phx.gbl. ..
                : You're kidding, right? What good is connection pooling if it can't be
                shared
                : across multiple instances of the same code? How exactly are we supposed to
                : tune the connection pool size if we (as developers) have no idea how many
                : connection pools are there going to be since some customers will setup
                their
                : web site to run in multiple processes?
                :
                : Jerry
                :
                : "Scott Allen" <bitmask@[nospam].fred.net> wrote in message
                : news:v5cl101atg j8pgduo0ikt6bm6 2n4kkrhfd@4ax.c om...
                : > Jerry: To share a connection from an exisitng pool you need to be in
                : > the same process, have the same security context, and use the exact
                : > same connection string as the pool. In .NET you also need to be in the
                : > same app domain which can further subdivide a process.
                : >
                : > --
                : > Scott
                : > http://www.OdeToCode.com
                : >
                : > On Fri, 30 Jan 2004 10:26:12 -0800, "Jerry III" <jerryiii@hotma il.com>
                : > wrote:
                : >
                : > >The fact that MDAC does not have it's process does not mean that it
                can't
                : > >share connection pools across different applications. I don't know how
                : you
                : > >came to that conclusion.
                : > >
                : > >Jerry
                : > >
                : > >"Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
                : > >news:u2hRrox5D HA.2404@TK2MSFT NGP12.phx.gbl.. .
                : > >> How do the workers synchronize the data? suppose I keep a DOM tree in
                : > >> the application object.
                : > >>
                : > >> Now one worker process updates a node in the dom tree. Will other
                : worker
                : > >> processes (who have thier own version of the in-memory state) see the
                : > >> changes? What is the mechanism of synchronization .
                : > >>
                : > >> One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it
                is
                : a
                : > >> set of DLLs which run in the memory of the application.(Us ed MDAC
                many
                : > >> times... but never saw a separate exe or DLLHOST begining to run upon
                : > >> querying my DB) Even if I let the MDAC manage my pool, if multiple
                : > >> processes are creating their own pools, then what is the total number
                : of
                : > >> connections beging opened to the database? If I have a limitation on
                : the
                : > >> max number of connections, then how do I manage it?
                : > >>
                : > >> Can you please confirm that multiple processes can definetly run
                : execute
                : > >> the requests for a single application.
                : > >>
                : > >> regards,
                : > >> Abhishek.
                : > >>
                : > >> Ken Schaefer wrote:
                : > >> > Each worker process keeps its own in-memory state. You would need
                : some
                : > >kind
                : > >> > of out-of-process state management if you want to share data
                between
                : > >> > processes.
                : > >> >
                : > >> > Additionally, I would suggest that you are best of managing
                database
                : > >> > connections via built-in MDAC connection pooling, not through your
                : own
                : > >> > home-grown system. You can limit the number of connections in the
                : pool.
                : > >> >
                : > >> > Cheers
                : > >> > Ken
                : > >> >
                : > >> > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in
                : message
                : > >> > news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
                : > >> > : Hello All,
                : > >> > :
                : > >> > : In IIS 6.0 We have a concept of worker processes and application
                : > >pools.
                : > >> > :
                : > >> > : As I understand it, we can have multiple worker process per
                : appliction
                : > >> > : pool. Each worker process is dedicated to a pool. If I assign
                only
                : one
                : > >> > : application to a applicaton pool and have multiple worker
                processes
                : > >> > : assigned to that pool. Will my application be processed by many
                : worker
                : > >> > : processes?
                : > >> > :
                : > >> > : Why I am asking this question is because there are certain
                : resources
                : > >> > : which are in-memory and are shared at an application level. For
                : > >example
                : > >> > : the database connection pool, or some XML files initialized via a
                : > >static
                : > >> > : contructor.
                : > >> > :
                : > >> > : Now if multiple process are executing my requests, then how do
                they
                : > >> > : share data (if they do at all). Or each process replicates its
                own
                : > >> > : resources.
                : > >> > :
                : > >> > : This is important to me, because lets say I am connection to a
                : > >> > : datasource for which I have a 20 concurrent user license. So I
                : create
                : > >a
                : > >> > : pool of 20 connections and manage it. This pool is in-memory
                : > >initialized
                : > >> > : via a static constructor. Now if each worker process tries to
                load
                : its
                : > >> > : own in-memory pool, then only one process would function because
                : rest
                : > >> > : will be denied the connection. I also have no way of knowing how
                : many
                : > >> > : worker process will run at any moment because they are run based
                on
                : > >> > : demand by the IIS so I cannot split the load amongst multiple
                : > >processes
                : > >> > : at an application level.
                : > >> > :
                : > >> > : To me it appears that different worker processes cannot be used
                to
                : > >> > : execute the requests for one application ... but then MS
                : documentation
                : > >> > : talks about Web Garden where different worker processes execute
                : > >requests
                : > >> > : for an application domain.
                : > >> > :
                : > >> > : I will be very gratefull if you could share some knowledge on
                this
                : > >> > : matter. Thanks for your help in advance.
                : > >> > :
                : > >> > : regards,
                : > >> > : Abhishek.
                : > >> >
                : > >> >
                : > >
                : >
                :
                :


                Comment

                • Abhishek Srivastava

                  #9
                  Re: Multiple worker processes for a single application in a applicationpool

                  Thanks everyone for replying. Does anyone know someone who has much more
                  internal knowledge of IIS ?

                  If different worker process run in full isolation from each other, then
                  application programmers must be careful in managing static resources.
                  because updates made in one process may not be visible to another.

                  If the processes do talk to one another and synchronize data from time
                  to time, then we must know some details about how this is being done.
                  Otherwise the application can behave unpredictably because of data
                  synchronization issues.

                  Take another example:

                  I make a request to the IIS and wp1 picks up the request from the
                  http.sys queue for the first time. When next call was made wp2 picks up
                  the request from the queue. But wp2 does not have my session data so it
                  cannot process my second request.

                  If the data from wp1 is replicated to wp2 (by some unknown means) then
                  it would bean that each worker process replicates its data into all
                  other worker processes. This would really impact scalability of each
                  worker process.

                  The other solution can be that there is a worker process sticky-ness. so
                  that the request goes to the same worker process which had the session.
                  But this would defeat the purpose of having a http.sys queue based
                  request processing approach.

                  So unless something very magical is happening inside, I feel that only
                  one worker process can process requests for a application (the worker
                  process can be shared by many applications inside the same application
                  pool). I also discussed this with a friend who felt that the concept of
                  web-garden means multiple "processors " (CPU) not multiple processes.

                  I am really confused now.... please advise.

                  regards,
                  Abhishek.

                  Ken Schaefer wrote:[color=blue]
                  > A given worker process can have multiple threads servicing requests. These
                  > will all share the same connection pool. I don't understand how two
                  > arbitrary w3wp.exe processes would share the same connection pool however.
                  >
                  > If you're writing an application that requires multiple w3wp.exe (web
                  > garden), then you probably already have a internet connector-type licence
                  > for SQL Server (rather than 10 CALs or similar). The connection pooling
                  > provided by the MDAC components is quite good IMHO.
                  >
                  > Cheers
                  > Ken
                  >
                  >
                  > "Jerry III" <jerryiii@hotma il.com> wrote in message
                  > news:%23AfSuC45 DHA.3304@tk2msf tngp13.phx.gbl. ..
                  > : You're kidding, right? What good is connection pooling if it can't be
                  > shared
                  > : across multiple instances of the same code? How exactly are we supposed to
                  > : tune the connection pool size if we (as developers) have no idea how many
                  > : connection pools are there going to be since some customers will setup
                  > their
                  > : web site to run in multiple processes?
                  > :
                  > : Jerry
                  > :
                  > : "Scott Allen" <bitmask@[nospam].fred.net> wrote in message
                  > : news:v5cl101atg j8pgduo0ikt6bm6 2n4kkrhfd@4ax.c om...
                  > : > Jerry: To share a connection from an exisitng pool you need to be in
                  > : > the same process, have the same security context, and use the exact
                  > : > same connection string as the pool. In .NET you also need to be in the
                  > : > same app domain which can further subdivide a process.
                  > : >
                  > : > --
                  > : > Scott
                  > : > http://www.OdeToCode.com
                  > : >
                  > : > On Fri, 30 Jan 2004 10:26:12 -0800, "Jerry III" <jerryiii@hotma il.com>
                  > : > wrote:
                  > : >
                  > : > >The fact that MDAC does not have it's process does not mean that it
                  > can't
                  > : > >share connection pools across different applications. I don't know how
                  > : you
                  > : > >came to that conclusion.
                  > : > >
                  > : > >Jerry
                  > : > >
                  > : > >"Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
                  > : > >news:u2hRrox5D HA.2404@TK2MSFT NGP12.phx.gbl.. .
                  > : > >> How do the workers synchronize the data? suppose I keep a DOM tree in
                  > : > >> the application object.
                  > : > >>
                  > : > >> Now one worker process updates a node in the dom tree. Will other
                  > : worker
                  > : > >> processes (who have thier own version of the in-memory state) see the
                  > : > >> changes? What is the mechanism of synchronization .
                  > : > >>
                  > : > >> One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it
                  > is
                  > : a
                  > : > >> set of DLLs which run in the memory of the application.(Us ed MDAC
                  > many
                  > : > >> times... but never saw a separate exe or DLLHOST begining to run upon
                  > : > >> querying my DB) Even if I let the MDAC manage my pool, if multiple
                  > : > >> processes are creating their own pools, then what is the total number
                  > : of
                  > : > >> connections beging opened to the database? If I have a limitation on
                  > : the
                  > : > >> max number of connections, then how do I manage it?
                  > : > >>
                  > : > >> Can you please confirm that multiple processes can definetly run
                  > : execute
                  > : > >> the requests for a single application.
                  > : > >>
                  > : > >> regards,
                  > : > >> Abhishek.
                  > : > >>
                  > : > >> Ken Schaefer wrote:
                  > : > >> > Each worker process keeps its own in-memory state. You would need
                  > : some
                  > : > >kind
                  > : > >> > of out-of-process state management if you want to share data
                  > between
                  > : > >> > processes.
                  > : > >> >
                  > : > >> > Additionally, I would suggest that you are best of managing
                  > database
                  > : > >> > connections via built-in MDAC connection pooling, not through your
                  > : own
                  > : > >> > home-grown system. You can limit the number of connections in the
                  > : pool.
                  > : > >> >
                  > : > >> > Cheers
                  > : > >> > Ken
                  > : > >> >
                  > : > >> > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in
                  > : message
                  > : > >> > news:OEyyWwu5DH A.2392@TK2MSFTN GP11.phx.gbl...
                  > : > >> > : Hello All,
                  > : > >> > :
                  > : > >> > : In IIS 6.0 We have a concept of worker processes and application
                  > : > >pools.
                  > : > >> > :
                  > : > >> > : As I understand it, we can have multiple worker process per
                  > : appliction
                  > : > >> > : pool. Each worker process is dedicated to a pool. If I assign
                  > only
                  > : one
                  > : > >> > : application to a applicaton pool and have multiple worker
                  > processes
                  > : > >> > : assigned to that pool. Will my application be processed by many
                  > : worker
                  > : > >> > : processes?
                  > : > >> > :
                  > : > >> > : Why I am asking this question is because there are certain
                  > : resources
                  > : > >> > : which are in-memory and are shared at an application level. For
                  > : > >example
                  > : > >> > : the database connection pool, or some XML files initialized via a
                  > : > >static
                  > : > >> > : contructor.
                  > : > >> > :
                  > : > >> > : Now if multiple process are executing my requests, then how do
                  > they
                  > : > >> > : share data (if they do at all). Or each process replicates its
                  > own
                  > : > >> > : resources.
                  > : > >> > :
                  > : > >> > : This is important to me, because lets say I am connection to a
                  > : > >> > : datasource for which I have a 20 concurrent user license. So I
                  > : create
                  > : > >a
                  > : > >> > : pool of 20 connections and manage it. This pool is in-memory
                  > : > >initialized
                  > : > >> > : via a static constructor. Now if each worker process tries to
                  > load
                  > : its
                  > : > >> > : own in-memory pool, then only one process would function because
                  > : rest
                  > : > >> > : will be denied the connection. I also have no way of knowing how
                  > : many
                  > : > >> > : worker process will run at any moment because they are run based
                  > on
                  > : > >> > : demand by the IIS so I cannot split the load amongst multiple
                  > : > >processes
                  > : > >> > : at an application level.
                  > : > >> > :
                  > : > >> > : To me it appears that different worker processes cannot be used
                  > to
                  > : > >> > : execute the requests for one application ... but then MS
                  > : documentation
                  > : > >> > : talks about Web Garden where different worker processes execute
                  > : > >requests
                  > : > >> > : for an application domain.
                  > : > >> > :
                  > : > >> > : I will be very gratefull if you could share some knowledge on
                  > this
                  > : > >> > : matter. Thanks for your help in advance.
                  > : > >> > :
                  > : > >> > : regards,
                  > : > >> > : Abhishek.
                  > : > >> >
                  > : > >> >
                  > : > >
                  > : >
                  > :
                  > :
                  >
                  >[/color]

                  Comment

                  • Ashish

                    #10
                    Re: Multiple worker processes for a single application in a applicationpool

                    Jerry III wrote:[color=blue]
                    > The fact that MDAC does not have it's process does not mean that it can't
                    > share connection pools across different applications. I don't know how you
                    > came to that conclusion.
                    >
                    > Jerry
                    >
                    > "Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
                    > news:u2hRrox5DH A.2404@TK2MSFTN GP12.phx.gbl...
                    >[color=green]
                    >>How do the workers synchronize the data? suppose I keep a DOM tree in
                    >>the application object.
                    >>
                    >>Now one worker process updates a node in the dom tree. Will other worker
                    >>processes (who have thier own version of the in-memory state) see the
                    >>changes? What is the mechanism of synchronization .
                    >>
                    >>One question about MDAC. Is MDAC an out-of-process thing? AFAIK, it is a
                    >>set of DLLs which run in the memory of the application.(Us ed MDAC many
                    >>times... but never saw a separate exe or DLLHOST begining to run upon
                    >>querying my DB) Even if I let the MDAC manage my pool, if multiple
                    >>processes are creating their own pools, then what is the total number of
                    >>connections beging opened to the database? If I have a limitation on the
                    >>max number of connections, then how do I manage it?
                    >>
                    >>Can you please confirm that multiple processes can definetly run execute
                    >>the requests for a single application.
                    >>
                    >>regards,
                    >>Abhishek.
                    >>
                    >>Ken Schaefer wrote:
                    >>[color=darkred]
                    >>>Each worker process keeps its own in-memory state. You would need some[/color][/color]
                    >
                    > kind
                    >[color=green][color=darkred]
                    >>>of out-of-process state management if you want to share data between
                    >>>processes.
                    >>>
                    >>>Additionally , I would suggest that you are best of managing database
                    >>>connection s via built-in MDAC connection pooling, not through your own
                    >>>home-grown system. You can limit the number of connections in the pool.
                    >>>
                    >>>Cheers
                    >>>Ken
                    >>>
                    >>>"Abhishek Srivastava" <abhishek-srivastava@nosp am.net> wrote in message
                    >>>news:OEyyWwu 5DHA.2392@TK2MS FTNGP11.phx.gbl ...
                    >>>: Hello All,
                    >>>:
                    >>>: In IIS 6.0 We have a concept of worker processes and application[/color][/color]
                    >
                    > pools.
                    >[color=green][color=darkred]
                    >>>:
                    >>>: As I understand it, we can have multiple worker process per appliction
                    >>>: pool. Each worker process is dedicated to a pool. If I assign only one
                    >>>: application to a applicaton pool and have multiple worker processes
                    >>>: assigned to that pool. Will my application be processed by many worker
                    >>>: processes?
                    >>>:
                    >>>: Why I am asking this question is because there are certain resources
                    >>>: which are in-memory and are shared at an application level. For[/color][/color]
                    >
                    > example
                    >[color=green][color=darkred]
                    >>>: the database connection pool, or some XML files initialized via a[/color][/color]
                    >
                    > static
                    >[color=green][color=darkred]
                    >>>: contructor.
                    >>>:
                    >>>: Now if multiple process are executing my requests, then how do they
                    >>>: share data (if they do at all). Or each process replicates its own
                    >>>: resources.
                    >>>:
                    >>>: This is important to me, because lets say I am connection to a
                    >>>: datasource for which I have a 20 concurrent user license. So I create[/color][/color]
                    >
                    > a
                    >[color=green][color=darkred]
                    >>>: pool of 20 connections and manage it. This pool is in-memory[/color][/color]
                    >
                    > initialized
                    >[color=green][color=darkred]
                    >>>: via a static constructor. Now if each worker process tries to load its
                    >>>: own in-memory pool, then only one process would function because rest
                    >>>: will be denied the connection. I also have no way of knowing how many
                    >>>: worker process will run at any moment because they are run based on
                    >>>: demand by the IIS so I cannot split the load amongst multiple[/color][/color]
                    >
                    > processes
                    >[color=green][color=darkred]
                    >>>: at an application level.
                    >>>:
                    >>>: To me it appears that different worker processes cannot be used to
                    >>>: execute the requests for one application ... but then MS documentation
                    >>>: talks about Web Garden where different worker processes execute[/color][/color]
                    >
                    > requests
                    >[color=green][color=darkred]
                    >>>: for an application domain.
                    >>>:
                    >>>: I will be very gratefull if you could share some knowledge on this
                    >>>: matter. Thanks for your help in advance.
                    >>>:
                    >>>: regards,
                    >>>: Abhishek.
                    >>>
                    >>>[/color][/color]
                    >
                    >
                    >[/color]
                    just for my knowledge, does mdac or ado.net operates on some shared
                    memory between processes ?
                    how can i see how much that shared memory is

                    we are running an web application and trying to chase some lost memory,
                    some people have also talked about some issue recognised by microsoft as
                    abug ( gc not returning large object heap to OS ) . but i did not find
                    any article on microsofts website on this

                    Thanks
                    -ashish

                    Comment

                    Working...