bkonia
02-03-2009, 07:29 AM
I have installed hf2668 on my grid to enable oversubscription of network bandwidth. My reasoning was that I felt that enforcing bandwidth limits at the appliance level would create artificial bottlenecks. While there may be certain situations where it's beneficial to limit bandwidth at the appliance level, I believe that in most cases, it's better to simply allow each appliance to use however much bandwidth it needs.
On the other hand, I believe that it's highly beneficial to enforce bandwidth limits at the application level. Within a given application, all the appliances are working together to accomplish a common goal. Therefore, you want to allow bandwidth to flow to where it's needed most. However, by enabling bandwidth oversubscription, that opens the door to the possibility of one application hogging all the bandwidth, to the detriment of other applications running on the same grid. For example, I have one application that does streaming video and I can easily envision this application sucking up all the bandwidth on the grid.
The bottom line is that I would like to have the ability to limit total bandwidth usage of an application, while at the same time, allowing bandwidth to flow unrestricted within each application. Additionally, it would be nice to be able to selectively enforce bandwidth limits on certain appliances, while leaving other appliances within the same application, unrestricted. For example, my video streaming application includes a Flash Media Server appliance. I might want to limit this appliance to a certain maximum bandwidth to ensure that the FMS doesn't suck up all the bandwidth and choke off the web server. However, I would want to allow traffic to flow freely between the web server, the NAS and the MySQL server.
As I'm writing this, I'm thinking that perhaps the real problem is that AppLogic allocates the bandwidth whether you use it or not. So, if you allocate 100M bandwidth for an appliance, that amount gets deducted from your total available bandwidth. Then you run into situations where applications fail to start because there's not enough bandwidth resources available on the grid. So you then have to go around to each appliance and manually reduce its bandwidth allocation. Additionally, you're forced to make arbitrary choices of how bandwidth is allocated between appliances that act as a group, such as my example of Web+NAS+MySQL. In this example, even if you really knew for sure that the NAS required more bandwidth than MySQL, there would certainly be times when MySQL would be busier than NAS and due to the arbitrary bandwidth limit on MySQL, overall performance of the application would suffer.
Given all of the above considerations, I think the best solution would be to have the ability to limit maximum bandwidth at both the appliance level and at the application level, while allowing actual bandwidth usage to adjust dynamically, so that appliances experiencing peak loads could use the extra bandwidth as long as they didn't exceed their max. As a practical matter, this would mean that AppLogic would no longer enforce a total bandwidth limit for the grid as a whole. You could enter 1GB bandwidth for 100 different appliances and the only effect would be that each appliance would be limited to 1GB. The applications would still start even though the amount of bandwidth allocated would greatly exceed what the grid can handle. Of course, I realize that other users may think differently and would want the total bandwidth limits enforced. Therefore, I would suggest creating a preference setting in the grid configuration to enforce or not enforce total bandwidth usage.
On the other hand, I believe that it's highly beneficial to enforce bandwidth limits at the application level. Within a given application, all the appliances are working together to accomplish a common goal. Therefore, you want to allow bandwidth to flow to where it's needed most. However, by enabling bandwidth oversubscription, that opens the door to the possibility of one application hogging all the bandwidth, to the detriment of other applications running on the same grid. For example, I have one application that does streaming video and I can easily envision this application sucking up all the bandwidth on the grid.
The bottom line is that I would like to have the ability to limit total bandwidth usage of an application, while at the same time, allowing bandwidth to flow unrestricted within each application. Additionally, it would be nice to be able to selectively enforce bandwidth limits on certain appliances, while leaving other appliances within the same application, unrestricted. For example, my video streaming application includes a Flash Media Server appliance. I might want to limit this appliance to a certain maximum bandwidth to ensure that the FMS doesn't suck up all the bandwidth and choke off the web server. However, I would want to allow traffic to flow freely between the web server, the NAS and the MySQL server.
As I'm writing this, I'm thinking that perhaps the real problem is that AppLogic allocates the bandwidth whether you use it or not. So, if you allocate 100M bandwidth for an appliance, that amount gets deducted from your total available bandwidth. Then you run into situations where applications fail to start because there's not enough bandwidth resources available on the grid. So you then have to go around to each appliance and manually reduce its bandwidth allocation. Additionally, you're forced to make arbitrary choices of how bandwidth is allocated between appliances that act as a group, such as my example of Web+NAS+MySQL. In this example, even if you really knew for sure that the NAS required more bandwidth than MySQL, there would certainly be times when MySQL would be busier than NAS and due to the arbitrary bandwidth limit on MySQL, overall performance of the application would suffer.
Given all of the above considerations, I think the best solution would be to have the ability to limit maximum bandwidth at both the appliance level and at the application level, while allowing actual bandwidth usage to adjust dynamically, so that appliances experiencing peak loads could use the extra bandwidth as long as they didn't exceed their max. As a practical matter, this would mean that AppLogic would no longer enforce a total bandwidth limit for the grid as a whole. You could enter 1GB bandwidth for 100 different appliances and the only effect would be that each appliance would be limited to 1GB. The applications would still start even though the amount of bandwidth allocated would greatly exceed what the grid can handle. Of course, I realize that other users may think differently and would want the total bandwidth limits enforced. Therefore, I would suggest creating a preference setting in the grid configuration to enforce or not enforce total bandwidth usage.