{"action":"closed","issue":{"url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/issues/249","repository_url":"https://api.github.com/repos/Azure/azure-functions-durable-extension","labels_url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/issues/249/labels{/name}","comments_url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/issues/249/comments","events_url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/issues/249/events","html_url":"https://github.com/Azure/azure-functions-durable-extension/issues/249","id":313875607,"number":249,"title":"Detailed Performance Documentation","user":{"login":"cgillum","id":2704139,"avatar_url":"https://avatars2.githubusercontent.com/u/2704139?v=4","gravatar_id":"","url":"https://api.github.com/users/cgillum","html_url":"https://github.com/cgillum","followers_url":"https://api.github.com/users/cgillum/followers","following_url":"https://api.github.com/users/cgillum/following{/other_user}","gists_url":"https://api.github.com/users/cgillum/gists{/gist_id}","starred_url":"https://api.github.com/users/cgillum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgillum/subscriptions","organizations_url":"https://api.github.com/users/cgillum/orgs","repos_url":"https://api.github.com/users/cgillum/repos","events_url":"https://api.github.com/users/cgillum/events{/privacy}","received_events_url":"https://api.github.com/users/cgillum/received_events","type":"User","site_admin":false},"labels":[{"id":646775068,"url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/labels/documentation","name":"documentation","color":"fbca04","default":false},{"id":735465547,"url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/labels/performance","name":"performance","color":"5505c4","default":false}],"state":"closed","locked":false,"assignee":{"login":"cgillum","id":2704139,"avatar_url":"https://avatars2.githubusercontent.com/u/2704139?v=4","gravatar_id":"","url":"https://api.github.com/users/cgillum","html_url":"https://github.com/cgillum","followers_url":"https://api.github.com/users/cgillum/followers","following_url":"https://api.github.com/users/cgillum/following{/other_user}","gists_url":"https://api.github.com/users/cgillum/gists{/gist_id}","starred_url":"https://api.github.com/users/cgillum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgillum/subscriptions","organizations_url":"https://api.github.com/users/cgillum/orgs","repos_url":"https://api.github.com/users/cgillum/repos","events_url":"https://api.github.com/users/cgillum/events{/privacy}","received_events_url":"https://api.github.com/users/cgillum/received_events","type":"User","site_admin":false},"assignees":[{"login":"cgillum","id":2704139,"avatar_url":"https://avatars2.githubusercontent.com/u/2704139?v=4","gravatar_id":"","url":"https://api.github.com/users/cgillum","html_url":"https://github.com/cgillum","followers_url":"https://api.github.com/users/cgillum/followers","following_url":"https://api.github.com/users/cgillum/following{/other_user}","gists_url":"https://api.github.com/users/cgillum/gists{/gist_id}","starred_url":"https://api.github.com/users/cgillum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgillum/subscriptions","organizations_url":"https://api.github.com/users/cgillum/orgs","repos_url":"https://api.github.com/users/cgillum/repos","events_url":"https://api.github.com/users/cgillum/events{/privacy}","received_events_url":"https://api.github.com/users/cgillum/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/milestones/3","html_url":"https://github.com/Azure/azure-functions-durable-extension/milestone/3","labels_url":"https://api.github.com/repos/Azure/azure-functions-durable-extension/milestones/3/labels","id":3015683,"number":3,"title":"General Availability (GA)","description":"This will be the first \"go-live\" version that will be fully supported in production. In addition to all planned features being completed, documentation and samples should be fully up-to-date as well.","creator":{"login":"cgillum","id":2704139,"avatar_url":"https://avatars2.githubusercontent.com/u/2704139?v=4","gravatar_id":"","url":"https://api.github.com/users/cgillum","html_url":"https://github.com/cgillum","followers_url":"https://api.github.com/users/cgillum/followers","following_url":"https://api.github.com/users/cgillum/following{/other_user}","gists_url":"https://api.github.com/users/cgillum/gists{/gist_id}","starred_url":"https://api.github.com/users/cgillum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgillum/subscriptions","organizations_url":"https://api.github.com/users/cgillum/orgs","repos_url":"https://api.github.com/users/cgillum/repos","events_url":"https://api.github.com/users/cgillum/events{/privacy}","received_events_url":"https://api.github.com/users/cgillum/received_events","type":"User","site_admin":false},"open_issues":23,"closed_issues":10,"state":"open","created_at":"2018-01-05T18:36:41Z","updated_at":"2018-05-01T05:44:19Z","due_on":null,"closed_at":null},"comments":2,"created_at":"2018-04-12T20:27:41Z","updated_at":"2018-05-01T05:44:19Z","closed_at":"2018-05-01T05:44:19Z","author_association":"COLLABORATOR","body":"It's going to be very important to set appropriate expectations for performance for Durable Functions. For that reason, we should include some detailed analysis and numbers in our docs.  Here are some numbers I think we want to track:\r\n\r\n## Throughput Numbers\r\nThese are numbers that customers will be interested in knowing when determining whether Durable Functions can meet the needs of their scenario. It might also be worth mentioning how many workers that users can expect a single function app to scale to within a particular region.\r\n\r\n- [x] Max activity executions per second per worker\r\n- [x] Max orchestrator executions per second per worker (note: replay plays an important role here for long chains)\r\n\r\n## Configuration Parameters\r\nThe following **host.json** configuration parameters need to be thoroughly documented. Information should include when to use and when not to use a particular configuration knob.\r\n\r\n- [x] Number of partitions\r\n- [x] Max activity function concurrency\r\n- [x] Max orchestrator function concurrency (is this useful?)\r\n\r\n## Best Practices\r\nThere are several best practices we should also document which can have an impact on performance.\r\n- [x] Using sub-orchestrations to distribute large fan-out/fan-in.\r\n- [x] Configuring per-worker max activity concurrency to avoid out-of-memory issues.\r\n- [ ] Large message considerations (large messages introduce significant overhead)\r\n- [ ] Considerations for orchestrations with really long histories (CPU, memory, and mitigation strategies including  `ContinueAsNew`, sub-orchestrations, etc.)\r\n- [ ] Limiting the maximum number of workers (not specific to durable, but worth calling out in this context).\r\n\r\n## Internal Architecture Details\r\nTo provide context for the performance constraints, it will be useful to describe the Durable Functions architecture in the context of Azure Functions. It would also be useful to call-out how the scale controller monitors the queues to make scale decisions.\r\n\r\n- [x] The **History** table and our use of [Event Sourcing](https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing)\r\n- [x] The **Instances** table and our use of [CQRS](https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs)\r\n- [x] The **control queues** for partitioning stateful orchestrations.\r\n- [x] The **work-item queue** for load-balancing stateless activity functions.\r\n\r\n## Samples\r\nFor each of the measurements we take, we should include the sample code used to generate the data."}}
{"actor":{"display_login":"cgillum"}}