{"id":1445,"date":"2019-04-08T00:00:00","date_gmt":"2019-04-08T00:00:00","guid":{"rendered":"https:\/\/azure.microsoft.com\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2"},"modified":"2025-06-19T22:17:34","modified_gmt":"2025-06-20T05:17:34","slug":"how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2","status":"publish","type":"post","link":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/","title":{"rendered":"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>This is a three-part blog post series about how organizations are using Azure Cosmos DB to meet real world needs, and the difference it\u2019s making to them. In <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-1\/\">part 1<\/a>, we explored the challenges Skype faced that led them to take action. In this post (part 2 of 3), we examine how Skype implemented Azure Cosmos DB to modernize its backend infrastructure. In <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-3\/\">part 3<\/a>, we\u2019ll cover the outcomes resulting from those efforts.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Note:<\/strong> Comments in italics\/parenthesis are the author&#8217;s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"the-solution\">The solution<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"putting-data-closer-to-users\">Putting data closer to users<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"initial-design-decisions\">Initial design decisions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Prototyping began in May 2017. Some early choices made by the team included the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><strong>Geo-replication:<\/strong> The team started by deploying Azure Cosmos DB in one <a href=\"https:\/\/azure.microsoft.com\/en-us\/global-infrastructure\/regions\/\" target=\"_blank\" rel=\"noopener\">Azure region<\/a>, then used its <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cosmos-db\/distribute-data-globally\" target=\"_blank\" rel=\"noopener\">pushbutton geo-replication<\/a> to replicate it to a total of seven Azure regions: three in North America, two in Europe, and two in the Asia Pacific (APAC) region. However, it later turned out that a single presence in each of those three geographies was enough to meet all SLAs.<\/li>\n\n\n\n<li class=\"wp-block-list-item\"><strong>Consistency level:<\/strong> In setting up geo-replication, the team chose session consistency from among the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cosmos-db\/consistency-levels\" target=\"_blank\" rel=\"noopener\">five consistency levels supported by Azure Cosmos DB<\/a>. <em>(Session consistency is often ideal for scenarios where a device or user session is involved because it guarantees monotonic reads, monotonic writes, and read-your-own-writes.)<\/em><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><strong>Partitioning:<\/strong> Skype chose UserID as the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cosmos-db\/partition-data\" target=\"_blank\" rel=\"noopener\">partition key<\/a>, thereby ensuring that all data for each user would reside on the same physical partition. <em>(With Azure Cosmos DB, each collection must have a partition key, which acts as a logical partition for the data and provides Azure Cosmos DB with a natural boundary for transparently distributing it internally, across physical partitions.)<\/em><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"event-driven-architecture-based-on-azure-cosmos-db-change-feed\">Event-driven architecture based on Azure Cosmos DB change feed<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In building the new PCS service, Skype developers implemented a micro-services, event-driven architecture based on <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cosmos-db\/change-feed\" target=\"_blank\" rel=\"noopener\">change feed support<\/a> in Azure Cosmos DB. Change feed works by \u201clistening\u201d to an Azure Cosmos DB container for any changes and outputting a sorted list of documents that were changed, in the order in which they were modified. The changes are persisted, can be processed asynchronously and incrementally, and the output can be distributed across one or more consumers for parallel processing. <em>(Change Feed in Azure Cosmos DB is enabled by default for all accounts, and it does not incur any additional costs. You can use provisioned RU\/s to read from the feed, just like any other operation in Azure Cosmos DB.)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cGenerally, an event-driven architecture uses Kafka, Event Hub, or some other event source,\u201d explains Kaduk. \u201cBut with Azure Cosmos DB, change feed provided a built-in event source that simplified our overall architecture.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To meet the solution\u2019s audit history requirements, developers implemented an <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/event-sourcing\" target=\"_blank\" rel=\"noopener\">event sourcing with capture state pattern<\/a>. Instead of storing just the current state of the data in a domain, this pattern uses an append-only store to record the full series of actions taken on the data (the \u201cevent sourcing\u201d part of the pattern), along with the mutated state (i.e. the \u201ccapture state\u201d). The append-only store acts as the system of record and can be used to materialize domain objects. It also provides consistency for transactional data, and maintains full audit trails and history that can enable compensating actions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"separate-read-and-write-paths-and-data-models-for-optimal-performance\">Separate read and write paths and data models for optimal performance<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Developers used the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/cqrs\" target=\"_blank\" rel=\"noopener\">Command and Query Responsibility Segregation (CQRS) pattern<\/a> together with the event sourcing pattern to implement separate write and read paths, interfaces, and data models, each tailored to their relevant tasks. \u201cWhen CQRS is used with the Event Sourcing pattern, the store of events is the write model, and is the official source of information capturing what has happened or changed, what was the intention, and who was the originator,\u201d explains Kaduk. \u201cAll of this is stored on one JSON document for each changed domain aggregate\u2014user, person, and group. The read model provides materialized views that are optimized for querying and are stored in a second, smaller JSON documents. This is all enabled by the Azure Cosmos DB document format and the ability to store different types of documents with different data structures within a single collection.\u201d Find more information on <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/architecture\/patterns\/cqrs#event-sourcing-and-cqrs\" target=\"_blank\" rel=\"noopener\">using Event Sourcing together with CQRS<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"custom-change-feed-processing\">Custom change feed processing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of using Azure Functions to handle change feed processing, the development team chose to implement its own change feed processing using the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cosmos-db\/change-feed-processor\" target=\"_blank\" rel=\"noopener\">Azure Cosmos DB change feed processor library<\/a>\u2014the same code used internally by Azure Functions. This gave developers more granular control over change feed processing, including the ability to implement retrying over queues, dead-letter event support, and deeper monitoring. The custom change feed processors run on Azure Virtual Machines (VMs) under the \u201cPaaS v1\u201d model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cUsing the change feed processor library gave us superior control in ensuring all SLAs were met,\u201d explains Kaduk. \u201cFor example, with Azure Functions, a function can either fail or spin-and-wait while it retries. We can\u2019t afford to spin-and-wait, so we used the change feed processor library to implement a queue that retries periodically and, if still unsuccessful after a day or two, sends the request to a \u2018dead letter collection\u2019 for review. We also implemented extensive monitoring\u2014such as how fast requests are processed, which nodes are processing them, and estimated work remaining for each partition.\u201d <em>(See <\/em><a href=\"https:\/\/blogs.msdn.microsoft.com\/fkaduk\/tag\/changefeed\/\" target=\"_blank\" rel=\"noopener\"><em>Frantisek\u2019s blog article<\/em><\/a><em> for a deeper dive into how all this works.)<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"cross-partition-transactions-and-integration-with-other-services\">Cross-partition transactions and integration with other services<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Change feed also provided a foundation for implementing background post-processing, such as cross-partition transactions that span the data of more than one user. The case of John blocking Sally from sending him messages is a good example. The system accepts the command from user John to block user Sally, upon which the request is validated and dispatched to the appropriate handler, which stores the event history and updates the query able data for user John. A postprocessor responsible for cross-partition transactions monitors the change feed, copying the information that John blocked Sally into the data for Sally (which likely resides in a different partition) as a reverse block. This information is used for determining the relationship between peers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Similarly, developers used change feed to support integration with other services, such as notification, graph search, and chat. The event is received on background by all running change feed processors, one of which is responsible for publishing a notification to external event consumers, such as Azure Event Hub, using a public schema.<\/p>\n\n\n\n<figure class=\"wp-block-image has-custom-border\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp\" alt=\"Azure Cosmos DB flowchart\" style=\"border-radius:0px\" title=\"Azure Cosmos DB flowchart\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"migration-of-user-data\">Migration of user data<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To facilitate the migration of user data from SQL Server to Azure Cosmos DB, developers wrote a service that iterated over all the user data in the old PCS service to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">Query the data in SQL Server and transform it into the new data models for Azure Cosmos DB.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Insert the data into Azure Cosmos DB and mark the user\u2019s address book as mastered in the new database.<\/li>\n\n\n\n<li class=\"wp-block-list-item\">Update a lookup table for the migration status of each user.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To make the entire process seamless to users, developers also implemented a proxy service that checked the migration status in the lookup table for a user and routed requests to the appropriate data store, old or new. After all users were migrated, the old PCS service, the lookup table, and the temporary proxy service were removed from production.<\/p>\n\n\n\n<figure class=\"wp-block-image has-custom-border\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/f8e1f1ad-6544-47d8-b750-89d6a439a5da.webp\" alt=\"Migration for production flowchart\" style=\"border-radius:0px\" title=\"Migration for production flowchart\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Migration for production users began in October 2017 and took approximately two months. Today, all requests are processed by Azure Cosmos DB, which contains more than 140 terabytes of data in each of the replicated regions. The new PCS service processes up to 15,000 reads and 6,000 writes per second. A process monitors that RU usage scales allocated RUs as needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-3\/\">Continue on to part 3<\/a>, which covers the outcomes resulting from Skype\u2019s implementation of Azure Cosmos DB. <\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.<\/p>\n","protected":false},"author":1,"featured_media":0,"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":[1473,1485],"tags":[],"audience":[3057,3055,3053,3056],"content-type":[1527],"product":[1538],"tech-community":[],"topic":[],"coauthors":[177],"class_list":["post-1445","post","type-post","status-publish","format-standard","hentry","category-databases","category-internet-of-things","audience-data-professionals","audience-developers","audience-it-decision-makers","audience-it-implementors","content-type-customer-stories","product-azure-cosmos-db","review-flag-1680286581-295","review-flag-1-1680286581-825","review-flag-2-1680286581-601","review-flag-3-1680286581-173","review-flag-6-1680286581-909","review-flag-new-1680286579-546"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2 | Microsoft Azure Blog<\/title>\n<meta name=\"description\" content=\"Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.\" \/>\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\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2 | Microsoft Azure Blog\" \/>\n<meta property=\"og:description\" content=\"Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/\" \/>\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=\"2019-04-08T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-20T05:17:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp\" \/>\n<meta name=\"author\" content=\"Parul Matah\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\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=\"Parul Matah\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 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\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/\"},\"author\":[{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/parul-matah\/\",\"@type\":\"Person\",\"@name\":\"Parul Matah\"}],\"headline\":\"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2\",\"datePublished\":\"2019-04-08T00:00:00+00:00\",\"dateModified\":\"2025-06-20T05:17:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/\"},\"wordCount\":1350,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp\",\"articleSection\":[\"Databases\",\"Internet of things\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/\",\"name\":\"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2 | Microsoft Azure Blog\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp\",\"datePublished\":\"2019-04-08T00:00:00+00:00\",\"dateModified\":\"2025-06-20T05:17:34+00:00\",\"description\":\"Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.\",\"breadcrumb\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog home\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Databases\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/databases\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2\"}]},{\"@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\/c702e5edd662b328b49b7e1180cab117\",\"name\":\"shakir\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"caption\":\"shakir\"},\"sameAs\":[\"https:\/\/azure.microsoft.com\"],\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2 | Microsoft Azure Blog","description":"Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.","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\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/","og_locale":"en_US","og_type":"article","og_title":"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2 | Microsoft Azure Blog","og_description":"Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.","og_url":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/","og_site_name":"Microsoft Azure Blog","article_publisher":"https:\/\/www.facebook.com\/microsoftazure","article_published_time":"2019-04-08T00:00:00+00:00","article_modified_time":"2025-06-20T05:17:34+00:00","og_image":[{"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp","type":"","width":"","height":""}],"author":"Parul Matah","twitter_card":"summary_large_image","twitter_creator":"@azure","twitter_site":"@azure","twitter_misc":{"Written by":"Parul Matah","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#article","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/"},"author":[{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/parul-matah\/","@type":"Person","@name":"Parul Matah"}],"headline":"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2","datePublished":"2019-04-08T00:00:00+00:00","dateModified":"2025-06-20T05:17:34+00:00","mainEntityOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/"},"wordCount":1350,"commentCount":0,"publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp","articleSection":["Databases","Internet of things"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/","name":"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2 | Microsoft Azure Blog","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp","datePublished":"2019-04-08T00:00:00+00:00","dateModified":"2025-06-20T05:17:34+00:00","description":"Skype found the perfect fit in Azure Cosmos DB, the globally distributed NoSQL database service from Microsoft. It gave Skype everything needed for its new People Core Service (PCS), including turnkey global distribution and elastic scaling of throughput and storage, making it an ideal foundation for distributed apps like Skype that require extremely low latency at global scale.","breadcrumb":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#primaryimage","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2019\/04\/30f41c76-fbac-40e0-9511-fedb034505b6.webp"},{"@type":"BreadcrumbList","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/how-skype-modernized-its-backend-infrastructure-using-azure-cosmos-db-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog home","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/"},{"@type":"ListItem","position":2,"name":"Databases","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/databases\/"},{"@type":"ListItem","position":3,"name":"How Skype modernized its backend infrastructure using Azure Cosmos DB \u2013 Part 2"}]},{"@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\/c702e5edd662b328b49b7e1180cab117","name":"shakir","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4","url":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","caption":"shakir"},"sameAs":["https:\/\/azure.microsoft.com"],"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/"}]}},"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\/1445","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/comments?post=1445"}],"version-history":[{"count":2,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/1445\/revisions"}],"predecessor-version":[{"id":42595,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/1445\/revisions\/42595"}],"wp:attachment":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/media?parent=1445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/categories?post=1445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tags?post=1445"},{"taxonomy":"audience","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/audience?post=1445"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/content-type?post=1445"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/product?post=1445"},{"taxonomy":"tech-community","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tech-community?post=1445"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/topic?post=1445"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/coauthors?post=1445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}