Limits on the numbers of input and internal endpoints
Dear all
I am checking the number of internal endpoint on a worker role that are allowed. I have different opinions there
1) http://nmackenzie.spaces.live.com/blog/cns!B863FF075995D18A!616.entry?sa=537767884, seems very creditable to me, claims that a webrole has 2 input endpoints (http and https) and a worker role has up to 5 input endpoints. For internal endpoints it is written tha ta web role may have only one internal endpoint (http) and a workerrole an unlimited endpoints.
2) http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/42670f73-f181-4478-b536-4f458466b902 states there are only 5 internal endpoints.
What are the correct limitations?
Thanks!
Marc
rombooth -
UPDATE: Steve Marx writes, in a final comment on the thread, that Frank Siegemund is correct in the following.
The following is the entirety of a Ryan Dunn post in the thread you linked to:
-- You are limited to 5 endpoints per role. Additionally, you can have up to 5 input endpoints (external facing ones). So that means you have have 25 total endpoints, but only 5 of which can be input endpoints and the rest internal.
Given Ryan's role in the Azure team I would view this as definitive. However, Frank Siegemund, also of the Azure team, appears to correct Ryan in writing in the same thread:
-- You can have a maximum of 5 incoming endpoints per role (input or internal, doesn't matter). You can have a maximum of 5 roles. 5 * 5 = 25.
The difference being that Ryan states an Azure service can have a maximum of 5 input endpoints per service while Frank allows more than 5. This is easily testable - just create an Azure service with two worker roles and modify the number of input endpoints from 5 to 6.
As Rajesh points out the MSDN documentation differs - and is wrong.
It would probably be helpful if someone from the Azure team provided a definitive statement on the rules for the allowed numbers of endpoints per role and per service.
Marc,
Here is MSDN documentation with relevant information about end points,
http://msdn.microsoft.com/en-us/library/ee758711.aspx#InternalEndpoint
Web role: 1 HTTP input endpoint , 1 HTTPS input endpoint and 1 HTTP Internal end point
Worker role : Any number of HTTP/HTTPS/TCP input end points & any number of HTTP/TCP internal end points
HTH,
rombooth -
UPDATE: Steve Marx writes, in a final comment on the thread, that Frank Siegemund is correct in the following.
The following is the entirety of a Ryan Dunn post in the thread you linked to:
-- You are limited to 5 endpoints per role. Additionally, you can have up to 5 input endpoints (external facing ones). So that means you have have 25 total endpoints, but only 5 of which can be input endpoints and the rest internal.
Given Ryan's role in the Azure team I would view this as definitive. However, Frank Siegemund, also of the Azure team, appears to correct Ryan in writing in the same thread:
-- You can have a maximum of 5 incoming endpoints per role (input or internal, doesn't matter). You can have a maximum of 5 roles. 5 * 5 = 25.
The difference being that Ryan states an Azure service can have a maximum of 5 input endpoints per service while Frank allows more than 5. This is easily testable - just create an Azure service with two worker roles and modify the number of input endpoints from 5 to 6.
As Rajesh points out the MSDN documentation differs - and is wrong.
It would probably be helpful if someone from the Azure team provided a definitive statement on the rules for the allowed numbers of endpoints per role and per service.
I did verify by adding input and internal end points manually in both definition file and wizard. There was no restriction as we have with web role end points. Looks like, error could occur during deployment time as reported in the thread.
However, I expect MSDN documentation to be latest and greatest at least by now as endpoints feature has been there almost since initial version Azure release. I am going to add a comment on the documentation page.
Thanks Neil and Rajesh
I did a test myself as well (see Service definiton below). it seems that msdn documentation is wrong - unfortunately. I was able to add the endpoints and I was able to run it in development fabric but when I published to Azure it failed with this message:
HTTP Status Code: 400/nError Message: A parameter was incorrect. Details: Invalid number of endpoints for role AzureTalk.Service; maximum number permitted is 5.
The answer is I guess 5 endpoints in a worker role is the max.
Thanks for commenting MSDN docs, Rajesh.
Cheers,
Marc
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="AzureTalk" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WorkerRole name="AzureTalk.Service" enableNativeCodeExecution="true"> <ConfigurationSettings> <Setting name="DiagnosticsConnectionString" /> </ConfigurationSettings> <Endpoints> <InputEndpoint name="ChatService" port="3030" protocol="tcp" /> <InternalEndpoint name="NotificationService" protocol="tcp" /> <InputEndpoint name="Input2" port="81" protocol="tcp" /> <InternalEndpoint name="Internal1" protocol="tcp" /> <InternalEndpoint name="Internal2" protocol="tcp" /> <InternalEndpoint name="Internal3" protocol="tcp" /> <InternalEndpoint name="Internal4" protocol="tcp" /> <InternalEndpoint name="Internal5" protocol="tcp" /> <InternalEndpoint name="Internal6" protocol="tcp" /> </Endpoints> </WorkerRole> </ServiceDefinition>
I know this thread is a bit old, but just to make sure people who come across this see the definitive answer: Frank's answer on the linked thread is correct:
"You can have a maximum of 5 incoming endpoints per role (input or internal, doesn't matter). You can have a maximum of 5 roles. 5 * 5 = 25."
Are you publishing the exact same package, or are you sharing code with your partner who is then rebuilding? (I'm wondering if there's a different SDK version involved, but frankly, I don't see why that would cause this either.)
You might have to contact support on this: http://windowsazure.com/support.
Oh, it was pointed out that I misunderstood... both of you should be getting an error, because the limit on internal endpoints is five per role. (The limit for input endpoints is now 25 spread across everything.)
So the mystery is why your subscription is allowing this. Is it possible your subscription is special in some way? Drop me an email at Steve.Marx@microsoft.com if you want, or support should be able to check your subscription to see if there's something odd about it.
Personally, I thing these limits should be reversed.
It would seem that it is far more likely for a service to require a greater number of internal endpoints per role than 5, however I can't see having a single service that requires more than 25 input endpoints.
And, when you state "25 spread across everything" - does that mean:
(and one less if I turn on RDP access).
What I mean is that you can declare 25 input endpoints (ports that your app will listen on). You can allocate those across your roles however you want. E.g., You could have one role that has 25 endpoints, or you could have a web role with 2 endpoints (80 and 443?) and a worker role with 23 endpoints, etc.
It has nothing to do with the number of instances of each role. If you have a worker role with 25 endpoints, you could run one instance of that or 1,000, and it would still be fine.
Note that for internal endpoints, you can use port ranges. From http://msdn.microsoft.com/en-us/library/gg432980.aspx:
<InternalEndpoint name="InternalPoint1" protocol="tcp"> <FixedPortRange min="1000" max="2000" /> </InternalEndpoint>
That generally means that five internal endpoints is sufficient. (You can just open up broad ranges if you need to.)
Yes, the RDP plugin uses one input endpoint for the app as well as one internal endpoint on each role.