{"id":35671,"date":"2024-08-13T08:00:00","date_gmt":"2024-08-13T15:00:00","guid":{"rendered":""},"modified":"2025-05-30T15:51:02","modified_gmt":"2025-05-30T22:51:02","slug":"github-scales-on-demand-with-azure-functions","status":"publish","type":"post","link":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/","title":{"rendered":"GitHub scales on demand with Azure Functions"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">GitHub is the home of the world\u2019s software developers, with more than 100 million developers and 420 million total repositories across the platform. To keep everything running smoothly and securely, GitHub collects a tremendous amount of data through an in-house pipeline made up of several components. But even though it was built for fault tolerance and scalability, the ongoing growth of GitHub led the company to reevaluate the pipeline to ensure it meets both current and future demands.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;<em>We had a scalability problem, currently, we collect about 700 terabytes a day of data, which is heavily used for detecting malicious behavior against our infrastructure and for troubleshooting. This internal system was limiting our growth<\/em>.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014Stephan Miehe, GitHub Senior Director of Platform Security<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub worked with its parent company, Microsoft, to find a solution. To process the event stream at scale, the GitHub team built a function app that runs in <a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/flex-consumption-plan\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Functions Flex Consumption<\/a>, a plan recently released for public preview. Flex Consumption delivers fast and large scale-out features on a serverless model and supports long function execution times, private networking, instance size selection, and concurrency control.<\/p>\n\n\n\n<aside class=\"cta-block cta-block--align-left cta-block--has-image wp-block-msx-cta\" data-bi-an=\"CTA Block\">\n\t<div class=\"cta-block__content\">\n\t\t\t\t\t<div class=\"cta-block__image-container\">\n\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"575\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/05\/Azure_Hero_Cylinder_OffWhite_MagentaGrad_cropped-1024x575.webp\" class=\"cta-block__image\" alt=\"Abstract image\" srcset=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/05\/Azure_Hero_Cylinder_OffWhite_MagentaGrad_cropped-1024x575.webp 1024w, https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/05\/Azure_Hero_Cylinder_OffWhite_MagentaGrad_cropped-300x169.webp 300w, https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/05\/Azure_Hero_Cylinder_OffWhite_MagentaGrad_cropped-768x432.webp 768w, https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/05\/Azure_Hero_Cylinder_OffWhite_MagentaGrad_cropped.webp 1260w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t<\/div>\n\t\t\n\t\t<div class=\"cta-block__body\">\n\t\t\t<h2 class=\"cta-block__headline\">Azure Functions Flex Consumption<\/h2>\n\t\t\t<p class=\"cta-block__text\">Find out how can scale fast with Azure Functions Flex Consumption Plan<\/p>\n\t\t\t\t\t\t\t<div class=\"cta-block__actions\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/flex-consumption-plan\"\n\t\t\t\t\t\tclass=\"btn cta-block__link btn-link\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\tLearn more\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/aside>\n\n\n\n<p class=\"wp-block-paragraph\">In a recent test, GitHub sustained 1.6 million events per second using one Flex Consumption app triggered from a network-restricted event hub.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;<em>What really matters to us is that the app scales up and down based on demand. Azure Functions Flex Consumption is very appealing to us because of how it dynamically scales based on the number of messages that are queued up in Azure Event Hubs<\/em>.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014Stephan Miehe, GitHub Senior Director of Platform Security<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/07\/GitHub-graph.webp\" alt=\"A graph showing the number of messages processed per second in GitHub's new function app, from zero to 2 million.\" class=\"wp-image-35712 webp-format\" data-orig-src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/07\/GitHub-graph.webp\"><figcaption class=\"wp-element-caption\"><em>In a recent test, GitHub&rsquo;s new function app processed 1.6 million messages per second in the Azure Functions Flex Consumption plan.<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"a-look-back\">A look back<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub\u2019s problem lay in an internal messaging app orchestrating the flow between the telemetry producers and consumers. The app was originally deployed using Java-based binaries and <a href=\"https:\/\/azure.microsoft.com\/en-gb\/products\/event-hubs\/\">Azure Event Hubs<\/a>. But as it began handling up to 460 gigabytes (GB) of events per day, the app was reaching its design limits, and its availability began to degrade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For best performance, each consumer of the old platform required its own environment and time-consuming manual tuning. In addition, the Java codebase was prone to breakage and hard to troubleshoot, and those environments were getting expensive to maintain as the compute overhead grew.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><strong><strong>&#8220;<\/strong><\/strong><em>We couldn\u2019t accept the risk and scalability challenges of the current solution<\/em>,<strong><strong>&#8220;<\/strong><\/strong><\/strong> Miehe says. He and his team began to weigh the alternatives. <strong><strong><strong>&#8220;<\/strong><\/strong><em>We were already using Azure Event Hubs, so it made sense to explore other Azure services. Given the simple nature of our need\u2014HTTP POST request\u2014we wanted something serverless that carries minimal overhead<\/em><strong>.&#8221;<\/strong><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Familiar with serverless code development, the team focused on similar Azure-native solutions and arrived at <a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/functions\/\">Azure Functions<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;<em>Both platforms are well known for being good for simple data crunching at large scale, but we don\u2019t want to migrate to another product in six months because we\u2019ve reached a ceiling<\/em>.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014Stephan Miehe, GitHub Senior Director of Platform Security<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A function app can automatically scale the queue based on the amount of logging traffic. The question was how much it could scale. At the time GitHub began working with the Azure Functions team, the Flex Consumption plan had just entered private preview. Based on a new underlying architecture, Flex Consumption supports up to 1,000 partitions and provides a faster target-based scaling experience. The product team built a proof of concept that scaled to more than double the legacy platform\u2019s largest topic at the time, showing that Flex Consumption could handle the pipeline.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;<em>Azure Functions Flex Consumption gives us a serverless solution with 100% of the capacity we need now, plus all the headroom we need as we grow<\/em>.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014Stephan Miehe, GitHub Senior Director of Platform Security<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"making-a-good-solution-great\">Making a good solution great<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub joined the private preview and worked closely with the Azure Functions product team to see what else Flex Consumption could do. The new function app is written in Python to consume events from Event Hubs. It consolidates large batches of messages into one large message and sends it on to the consumers for processing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finding the right number for each batch took some experimentation, as every function execution has at least a small percentage of overhead. At peak usage times, the platform will process more than 1 million events per second. Knowing this, the GitHub team needed to find the sweet spot in function execution. Too high a number and there\u2019s not enough memory to process the batch. Too small a number and it takes too many executions to process the batch and slows performance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The right number proved to be 5,000 messages per batch. <strong><strong>&#8220;<\/strong><em>Our execution times are already incredibly low\u2014in the 100\u2013200 millisecond range<\/em><strong>,&#8221;<\/strong><\/strong> Miehe reports.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This solution has built-in flexibility. The team can vary the number of messages per batch for different use cases and can trust that the target-based scaling capabilities will scale out to the ideal number of instances. In this scaling model, Azure Functions determines the number of unprocessed messages on the event hub and then immediately scales to an appropriate instance count based on the batch size and partition count. At the upper bound, the function app scales up to one instance per event hub partition, which can work out to be 1,000 instances for very large event hub deployments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;<em>If other customers want to do something similar and trigger a function app from Event Hubs, they need to be very deliberate in the number of partitions to use based on the size of their workload, if you don\u2019t have enough, you\u2019ll constrain consumption<\/em>.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2014Stephan Miehe, GitHub Senior Director of Platform Security<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Azure Functions supports several event sources in addition to Event Hubs, including <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/event-hubs\/azure-event-hubs-kafka-overview\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Kafka<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/cosmos-db\/\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Cosmos DB<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/service-bus-messaging\/service-bus-messaging-overview\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Service Bus<\/a> queues and topics, and <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/storage\/queues\/storage-queues-introduction\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Queue Storage<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"reaching-behind-the-virtual-network\">Reaching behind the virtual network<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The function as a service model frees developers from the overhead of managing many infrastructure-related tasks. But even serverless code can be constrained by the limitations of the networks where it runs. Flex Consumption addresses the issue with improved virtual network (VNet) support. Function apps can be secured behind a VNet and can reach other services secured behind a VNet\u2014without degrading performance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As an early adopter of Flex Consumption, GitHub benefited from improvements being made behind the scenes to the Azure Functions platform. Flex Consumption runs on Legion, a newly architected, internal platform as a service (PaaS) backbone that improves network capabilities and performance for high-demand scenarios. For example, Legion is capable of <a href=\"https:\/\/techcommunity.microsoft.com\/t5\/apps-on-azure-blog\/how-to-achieve-high-http-scale-with-azure-functions-flex\/ba-p\/4169736\" target=\"_blank\" rel=\"noreferrer noopener\">injecting compute<\/a> into an existing VNet in milliseconds\u2014when a function app scales up, each new compute instance that is allocated starts up and is ready for execution, including outbound VNet connectivity, within 624\u00a0milliseconds (ms) at the 50 percentile and 1,022\u00a0ms at the 90 percentile. That\u2019s how GitHub\u2019s messaging processing app can reach Event Hubs secured behind a virtual network without incurring significant delays. In the past 18 months, the Azure Functions platform has <a href=\"https:\/\/techcommunity.microsoft.com\/t5\/apps-on-azure-blog\/our-latest-work-to-improve-azure-functions-cold-starts\/ba-p\/4164500\">reduced cold start latency<\/a> by approximately 53% across all regions and for all supported languages and platforms.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"working-through-challenges\">Working through challenges<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This project pushed the boundaries for both the GitHub and Azure Functions engineering teams. Together, they worked through several challenges to achieve this level of throughput:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">In the first test run, GitHub had so many messages pending for processing that it caused an integer overflow in the Azure Functions scaling logic, which was immediately fixed.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">In the second run, throughput was severely limited due to a lack of connection pooling. The team rewrote the function code to correctly reuse connections from one execution to the next.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">At about 800,000 events per second, the system appeared to be throttled at the network level, but the cause was unclear. After weeks of investigation, the Azure Functions team found a bug in the receive buffer configuration in the Azure SDK Advanced Message Queuing Protocol (AMQP) transport implementation. This was <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/pull\/40521\" target=\"_blank\" rel=\"noreferrer noopener\">promptly fixed by the Azure SDK team<\/a> and allowed GitHub to push beyond 1&nbsp;million events per second.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"best-practices-in-meeting-a-throughput-milestone\">Best practices in meeting a throughput milestone<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With more power comes more responsibility, and Miehe acknowledges that Flex Consumption gave his team \u201ca lot of knobs to turn,\u201d as he put it. <strong><strong>&#8220;<\/strong><em>There&#8217;s a balance between flexibility and the effort you have to put in to set it up right<\/em>.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To that end, he recommends testing early and often, a familiar part of the GitHub pull request culture. The following best practices helped GitHub meet its milestones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>Batch it if you can<\/strong>: Receiving messages in batches boosts performance. Processing thousands of event hub messages in a single function execution significantly improves the system throughput.<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><strong>Experiment with batch size<\/strong>: Miehe\u2019s team tested batches as large as 100,000 events and as small as 100 before landing on 5,000 as the max batch size for fastest execution.<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><strong>Automate your pipelines<\/strong>: GitHub uses Terraform to build the function app and the Event Hubs instances. Provisioning both components together reduces the amount of manual intervention needed to manage the ingestion pipeline. Plus, Miehe\u2019s team could iterate incredibly quickly in response to feedback from the product team.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The GitHub team continues to run the new platform in parallel with the legacy solution while it monitors performance and determines a cutover date.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><strong><strong>&#8220;<\/strong><\/strong>We\u2019ve been running them side by side deliberately to find where the ceiling is<\/em><strong>,&#8221;<\/strong> <\/strong>Miehe explains.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The team was delighted. As Miehe says, <strong><strong>&#8220;<\/strong><em>We\u2019re pleased with the results and will soon be sunsetting all the operational overhead of the old solution<\/em>.<strong>&#8220;<\/strong><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"explore-solutions-with-azure-functions\">Explore solutions with Azure Functions<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/learn.microsoft.com\/azure\/azure-functions\/flex-consumption-plan\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Functions Flex Consumption<\/a><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/functions\/\">Azure Functions<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Flex Consumption delivers fast and large scale-out features on a serverless model and supports long function execution times, private networking, instance size selection, and concurrency control.<\/p>\n","protected":false},"author":42,"featured_media":35857,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","footnotes":"","msx_community_cta_settings":[]},"categories":[1474,1467,1470,1473,1498,1485,1491],"tags":[],"audience":[3055],"content-type":[1465],"product":[1538,1536,1622,1586],"tech-community":[2967],"topic":[],"coauthors":[3090],"class_list":["post-35671","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","category-compute","category-containers","category-databases","category-integration","category-internet-of-things","category-storage","audience-developers","content-type-announcements","product-azure-cosmos-db","product-azure-functions","product-event-hubs","product-service-bus","review-flag-1-1680286581-825","review-flag-5-1680286581-950","review-flag-6-1680286581-909","review-flag-new-1680286579-546","review-flag-priva-1680286584-258","review-flag-publi-1680286584-566"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GitHub scales on demand with Azure Functions | Microsoft Azure Blog<\/title>\n<meta name=\"description\" content=\"GitHub, with the help of Microsoft, built a function app that runs in Azure Functions Flex Consumption\u2014delivering fast and large scale-out features.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GitHub scales on demand with Azure Functions | Microsoft Azure Blog\" \/>\n<meta property=\"og:description\" content=\"GitHub, with the help of Microsoft, built a function app that runs in Azure Functions Flex Consumption\u2014delivering fast and large scale-out features.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Azure Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/microsoftazure\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-13T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-30T22:51:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Scott Hunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.png\" \/>\n<meta name=\"twitter:creator\" content=\"@azure\" \/>\n<meta name=\"twitter:site\" content=\"@azure\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Scott Hunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/\"},\"author\":[{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/scott-hunter\/\",\"@type\":\"Person\",\"@name\":\"Scott Hunter\"}],\"headline\":\"GitHub scales on demand with Azure Functions\",\"datePublished\":\"2024-08-13T15:00:00+00:00\",\"dateModified\":\"2025-05-30T22:51:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/\"},\"wordCount\":1599,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp\",\"articleSection\":[\"Analytics\",\"Compute\",\"Containers\",\"Databases\",\"Integration\",\"Internet of things\",\"Storage\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/\",\"name\":\"GitHub scales on demand with Azure Functions | Microsoft Azure Blog\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp\",\"datePublished\":\"2024-08-13T15:00:00+00:00\",\"dateModified\":\"2025-05-30T22:51:02+00:00\",\"description\":\"GitHub, with the help of Microsoft, built a function app that runs in Azure Functions Flex Consumption\u2014delivering fast and large scale-out features.\",\"breadcrumb\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp\",\"width\":1200,\"height\":675,\"caption\":\"Real people, real offices. Developer manager collaborates with developer in enterprise developer work space.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog home\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analytics\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/analytics\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GitHub scales on demand with Azure Functions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"name\":\"Microsoft Azure Blog\",\"description\":\"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.\",\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\",\"name\":\"Microsoft Azure Blog\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"width\":512,\"height\":512,\"caption\":\"Microsoft Azure Blog\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/microsoftazure\",\"https:\/\/x.com\/azure\",\"https:\/\/www.instagram.com\/microsoftdeveloper\/\",\"https:\/\/www.linkedin.com\/company\/16188386\",\"https:\/\/www.youtube.com\/user\/windowsazure\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/b2603da1afac705823964361ce9072c0\",\"name\":\"Kristin Gallagher\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/295fa37b6bb2bbf59603c38b6ac7a7b4b86cd0f736387182fa9d0117f52cdf5e?s=96&d=mm&r=gb83eb8c5c3f8feea9763b473dabe8524\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/295fa37b6bb2bbf59603c38b6ac7a7b4b86cd0f736387182fa9d0117f52cdf5e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/295fa37b6bb2bbf59603c38b6ac7a7b4b86cd0f736387182fa9d0117f52cdf5e?s=96&d=mm&r=g\",\"caption\":\"Kristin Gallagher\"},\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/kristingallagher\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GitHub scales on demand with Azure Functions | Microsoft Azure Blog","description":"GitHub, with the help of Microsoft, built a function app that runs in Azure Functions Flex Consumption\u2014delivering fast and large scale-out features.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/","og_locale":"en_US","og_type":"article","og_title":"GitHub scales on demand with Azure Functions | Microsoft Azure Blog","og_description":"GitHub, with the help of Microsoft, built a function app that runs in Azure Functions Flex Consumption\u2014delivering fast and large scale-out features.","og_url":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/","og_site_name":"Microsoft Azure Blog","article_publisher":"https:\/\/www.facebook.com\/microsoftazure","article_published_time":"2024-08-13T15:00:00+00:00","article_modified_time":"2025-05-30T22:51:02+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.png","type":"image\/png"}],"author":"Scott Hunter","twitter_card":"summary_large_image","twitter_image":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.png","twitter_creator":"@azure","twitter_site":"@azure","twitter_misc":{"Written by":"Scott Hunter","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#article","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/"},"author":[{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/scott-hunter\/","@type":"Person","@name":"Scott Hunter"}],"headline":"GitHub scales on demand with Azure Functions","datePublished":"2024-08-13T15:00:00+00:00","dateModified":"2025-05-30T22:51:02+00:00","mainEntityOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/"},"wordCount":1599,"commentCount":0,"publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp","articleSection":["Analytics","Compute","Containers","Databases","Integration","Internet of things","Storage"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/","name":"GitHub scales on demand with Azure Functions | Microsoft Azure Blog","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp","datePublished":"2024-08-13T15:00:00+00:00","dateModified":"2025-05-30T22:51:02+00:00","description":"GitHub, with the help of Microsoft, built a function app that runs in Azure Functions Flex Consumption\u2014delivering fast and large scale-out features.","breadcrumb":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#primaryimage","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/08\/Azure_358635_Blog_240805.webp","width":1200,"height":675,"caption":"Real people, real offices. Developer manager collaborates with developer in enterprise developer work space."},{"@type":"BreadcrumbList","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/github-scales-on-demand-with-azure-functions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog home","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/"},{"@type":"ListItem","position":2,"name":"Analytics","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/analytics\/"},{"@type":"ListItem","position":3,"name":"GitHub scales on demand with Azure Functions"}]},{"@type":"WebSite","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","name":"Microsoft Azure Blog","description":"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.","publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization","name":"Microsoft Azure Blog","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","width":512,"height":512,"caption":"Microsoft Azure Blog"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/microsoftazure","https:\/\/x.com\/azure","https:\/\/www.instagram.com\/microsoftdeveloper\/","https:\/\/www.linkedin.com\/company\/16188386","https:\/\/www.youtube.com\/user\/windowsazure"]},{"@type":"Person","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/b2603da1afac705823964361ce9072c0","name":"Kristin Gallagher","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/295fa37b6bb2bbf59603c38b6ac7a7b4b86cd0f736387182fa9d0117f52cdf5e?s=96&d=mm&r=gb83eb8c5c3f8feea9763b473dabe8524","url":"https:\/\/secure.gravatar.com\/avatar\/295fa37b6bb2bbf59603c38b6ac7a7b4b86cd0f736387182fa9d0117f52cdf5e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/295fa37b6bb2bbf59603c38b6ac7a7b4b86cd0f736387182fa9d0117f52cdf5e?s=96&d=mm&r=g","caption":"Kristin Gallagher"},"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/kristingallagher\/"}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Azure Blog","distributor_original_site_url":"https:\/\/azure.microsoft.com\/en-us\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/35671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/comments?post=35671"}],"version-history":[{"count":0,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/35671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/media\/35857"}],"wp:attachment":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/media?parent=35671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/categories?post=35671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tags?post=35671"},{"taxonomy":"audience","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/audience?post=35671"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/content-type?post=35671"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/product?post=35671"},{"taxonomy":"tech-community","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tech-community?post=35671"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/topic?post=35671"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/coauthors?post=35671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}