Transcription

Programming MicrosoftAzure Service FabricSecond EditionHaishi Bai

PROGRAMMING MICROSOFT AZURE SERVICE FABRIC (Second edition)Published with the authorization of Microsoft Corporation by:Pearson Education, Inc.Copyright 2018 by Pearson Education, Inc.All rights reserved. This publication is protected by copyright, and permissionmust be obtained from the publisher prior to any prohibited reproduction,storage in a retrieval system, or transmission in any form or by any means,electronic, mechanical, photocopying, recording, or likewise. For informationregarding permissions, request forms, and the appropriate contacts withinthe Pearson Education Global Rights & Permissions Department, please visitwww.pearsoned.com/permissions/.No patent liability is assumed with respect to the use of the informationcontained herein. Although every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errorsor omissions. Nor is any liability assumed for damages resulting from the useof the information contained herein.ISBN-13: 978-1-5093-0709-8ISBN-10: 1-5093-0709-5Library of Congress Control Number: 20189392521 18TRADEMARKSMicrosoft and the trademarks listed at http://www.microsoft.com on the“Trademarks” webpage are trademarks of the Microsoft group of companies.All other marks are property of their respective owners.WARNING AND DISCLAIMEREvery effort has been made to make this book as complete and as accurate aspossible, but no warranty or fitness is implied. The information provided is onan “as is” basis. The author(s), the publisher, and Microsoft Corporation shallhave neither liability nor responsibility to any person or entity with respect toany loss or damages arising from the information contained in this book orfrom the use of the CD or programs accompanying it.SPECIAL SALESFor information about buying this title in bulk quantities, or for specialsales opportunities (which may include electronic versions; custom coverdesigns; and content particular to your business, training goals, marketingfocus, or branding interests), please contact our corporate sales departmentat [email protected] or (800) 382-3419.For government sales inquiries, please [email protected] questions about sales outside the U.S., please [email protected]: Greg WiegandExecutive Editor: Laura NormanDevelopment Editor: Kate Shoup/Polymath PublishingManaging Editor: Sandra SchroederSenior Project Editor: Tracey Croom/Danielle FosterCopy Editor: Dan FosterIndexer: Valerie Haynes PerryProofreader: Scout FestaEditorial Assistant: Cindy TeetersCover Designer: Twist Creative, SeattleCompositor: Danielle FosterGraphics: Vived Graphics

To the entire Microsoft Service Fabric team, who made sucha great product.—Haishi Bai

Contents at a GlanceIntroductionxxiiiPART IFUNDAMENTALSCHAPTER 1Hello, Service Fabric!CHAPTER 2Stateless Services27CHAPTER 3Stateful Services49CHAPTER 4Actor Pattern67CHAPTER 5Service Deployments and UpgradesCHAPTER 6Availability and Reliability117CHAPTER 7Scalability and Performance145PART IISERVICE LIFE CYCLE MANAGEMENTCHAPTER 8Service Fabric Scripting173CHAPTER 9Cluster Management199CHAPTER 10Diagnostics and Monitoring213CHAPTER 11Continuous Delivery239PART IIILINUX AND CONTAINERSCHAPTER 12Service Fabric on LinuxCHAPTER 13Containers279CHAPTER 14Container Orchestration299PART IVWORKLOADS AND DESIGN PATTERNSCHAPTER 15Scalable Web325CHAPTER 16Scalable Interactive Systems343CHAPTER 17System Integration367PART VADVANCED TOPICSCHAPTER 18Serverless Computing393CHAPTER 19Artificial Intelligence409CHAPTER 20Orchestrating an Organic Compute Plane437391265

PART VIviContents at a GlanceAPPENDICESAppendix A: Using Microsoft AzurePowerShell Commands473Appendix B: Pattern Index479Index483

ContentsAbout the Author. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xixForeword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiIntroduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiiiPART IFUNDAMENTALSChapter 1Hello, Service Fabric!3Microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Containerization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Scheduling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4State Reconciliation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Data Replication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Service Partitioning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Service Fabric Concepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Nodes and Clusters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Applications and Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Partitions and Replicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Programming Modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Stateless vs. Stateful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Guest Applications and Containers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Getting Started. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Setting Up a Development Environment in Windows. . . . . . . . . . . . . . 10Provisioning a Service Fabric Cluster on Azure. . . . . . . . . . . . . . . . . . . . . 11Hello, World!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Managing Your Local Cluster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Visual Studio Cloud Explorer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Service Fabric Explorer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Windows PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Service Fabric CLI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26vii

Chapter 2Stateless Services27Implementing ASP.NET Core Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Scalability and Availability of a Stateless Service. . . . . . . . . . . . . . . . . . . . . . . . . 31Availability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Scalability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Implementing Communication Stacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Default Communication Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32WCF Communication Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Custom Communication Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Chapter 3Stateful Services49Architecture of Service Fabric Stateful Services. . . . . . . . . . . . . . . . . . . . . . . . . 49Reliable Collections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Reliable State Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Transactional Replicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Logger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Consistency. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52The Simple Store Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52The Shopping-Cart Service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52The Simple Store Website. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Service Partition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Partitions and Replicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Replica Roles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Resource Load Balancing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Chapter 4Actor Pattern67Service Fabric Reliable Actors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Actors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Actor Lifetime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Actor States. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Actor Communications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69viiiContents

An Actor-Based Tic-Tac-Toe Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Actor Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Creating the Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Defining the Actor Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Implementing the Game Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Implementing the Player Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Implementing the Test Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75Testing the Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Additional Thoughts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Timers, Reminders, and Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Actor Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Actor Reminders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Actor Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Service Diagnostics and Performance-Monitoring Basics . . . . . . . . . . . . . . . . 81Event Tracing For Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Performance Counters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83Actors and Reliable Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Actor State Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Chapter 5Service Deployments and Upgrades91The Service Fabric Application-Deployment Process. . . . . . . . . . . . . . . . . . . . . 91Package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Upload. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Register/Provision. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Create/Replace/Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97The Service Fabric Health Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Health States. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Health Policy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Health Reporting and Aggregation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Rolling Upgrades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Upgrade Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Upgrade Modes and Upgrade Parameters. . . . . . . . . . . . . . . . . . . . . . 104Contentsix

Multiple Environments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Application Parameters and Parameter Files . . . . . . . . . . . . . . . . . . . . . 107Application Publish Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108Using Implicit Hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108Defining Implicit Hosts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108RunAs Policies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Hosting a Node.js Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Resource Governance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Chapter 6Availability and Reliability117“Broken” Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117Improving Availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Improving Reliability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Service Fabric Services Availability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Replicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Service Placements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Service Failovers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Routing and Load-Balancing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Advanced Rolling Upgrades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Service Fabric Services Reliability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Event Tracing for Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Azure Diagnostics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Chaos Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Service State Backup and Restore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Chapter 7Scalability and Performance145Scalability Concepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Vertical Scaling vs. Horizontal Scaling. . . . . . . . . . . . . . . . . . . . . . . . . . . 145Stateless Services vs. Stateful Services. . . . . . . . . . . . . . . . . . . . . . . . . . . 146Homogeneous Instances vs. Heterogeneous Instances . . . . . . . . . . 146Single Tenancy vs. Multi-Tenancy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147Manual Scaling vs. Autoscaling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148xContents

Scaling a Service Fabric Cluster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151Azure Resource Manager and Azure Virtual MachineScale Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151Manually Scaling a Service Fabric Cluster . . . . . . . . . . . . . . . . . . . . . . . . 152Autoscaling a Service Fabric Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Scaling with Content Delivery Network. . . . . . . . . . . . . . . . . . . . . . . . . . 157Resolving Bottlenecks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159State Bottlenecks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159Communication Bottlenecks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Orchestration Bottlenecks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165PART IISERVICE LIFE CYCLE MANAGEMENTChapter 8Service Fabric Scripting173Azure Cloud Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Creating a Secured Service Fabric Cluster Using PowerShell. . . . . . . . . . . . . 174Using a Certificate to Protect Your Cluster. . . . . . . . . . . . . . . . . . . . . . . . 174Using a Certificate for Client Authentication. . . . . . . . . . . . . . . . . . . . . . 178Using Azure Active Directory for Client Authentication. . . . . . . . . . . 178Publishing Applications to a Secured Cluster fromVisual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Cluster Management Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181Query Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181Node Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Application-Management Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Deploying an Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Upgrading an Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193Rolling Back an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Decommissioning an Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Azure CLI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195sfctl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197Contentsxi

Chapter 9Cluster Management199Anatomy of a Service Fabric Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199Virtual Machine Scale Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Virtual Machines and Virtual Network Cards. . . . . . . . . . . . . . . . . . . . 201Virtual Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Load Balancers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203Storage Accounts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Advanced Service Fabric Cluster Configuration. . . . . . . . . . . . . . . . . . . . . . . . 206Role-Based Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Network Security Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207Internal Load Balancer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Updating Cluster Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Chapter 10 Diagnostics and Monitoring213Diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Diagnostics Data Pipeline. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Configure Azure Diagnostics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215Microsoft Diagnostics EventFlow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Using Elasticsearch, Kibana, and EventFlow. . . . . . . . . . . . . . . . . . . . . . 221Azure Operations Management Suite. . . . . . . . . . . . . . . . . . . . . . . . . . . 225Troubleshooting on Service Fabric Nodes. . . . . . . . . . . . . . . . . . . . . . . 229Monitoring. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229Service Fabric Explorer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230Application Insights. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232Chapter 11 Continuous Delivery239CI, CD, and DevOps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Continuous Integration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Continuous Delivery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240DevOps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Setting Up Continuous Integration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242Preparing the Visual Studio Team Services Project. . . . . . . . . . . . . . . 242Creating a Build Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246xiiContents

Setting Up Continuous Delivery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Creating a Release Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Requesting Deployment Approvals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251Software Testability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Controllability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Observability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253Isolability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Clarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Setting Up Automated Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Implementing Unit Tests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Setting Up Gated Check-Ins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Running Load Tests with VSTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259PART IIILINUX AND CONTAINERSChapter 12 Service Fabric on Linux265Service Fabric Hello, World! on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Setting Up Your Linux Development Environment. . . . . . . . . . . . . . . 265Hello, World! Again. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267Using Communication Listeners. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270Other Service Types and Frameworks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Stateful Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Actor Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275Guest Binary Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Using Yeoman. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277Chapter 13 Containers279Docker Primer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Containerization on Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Windows Containers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281Getting Started. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282Running Docker on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282Running Docker on Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286Running Docker on Azure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286Contentsxiii

Service Fabric and Docker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286Hosting an ASP.NET Core Container on Windows. . . . . . . . . . . . . . . . 287Hosting a Minecraft Server Container on Linux. . . . . . . . . . . . . . . . . . 290Continuous Deployment with Jenkins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297Chapter 14 Container Orchestration299Microservices Application and Orchestration Engines . . . . . . . . . . . . . . . . . 299A Generic Microservice Application Model. . . . . . . . . . . . . . . . . . . . . . 299Orchestration Engines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300Container Orchestration with Service Fabric. . . . . . . . . . . . . . . . . . . . . . . . . . . 301DNS Service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301Watchdogs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306Docker Compose with Service Fabric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309Defining the Master Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310Defining the Slave Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311Composing the Services with Docker Compose. . . . . . . . . . . . . . . . . . . 312Deploying and Testing the Application . . . . . . . . . . . . . . . . . . . . . . . . . . 312Service Meshes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314Envoy and Service Meshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314Deploying Envoy on Service Fabric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316PART IVWORKLOADS AND DESIGN PATTERNSChapter 15 Scalable Web325The Azure PaaS Ecosystem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325App Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325Azure Container Service (AKS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Virtual Machine Scale Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Service Fabric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Choosing a PaaS Platform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Scaling with Reduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328CDN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Home Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330xivContents

Precomputed Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Data Manipulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Scaling with Partition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Tenant Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Service Meshes (Part 2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335Scaling with Bursting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338Designing an Extensible Control Plane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339A Generic Control Plane Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . 340Workload Scheduling. . . . . . . . . . . . . . . . . .

Contents at a Glance Introduction xxiii PART I FUNDAMENTALS CHAPTER 1 Hello, Service Fabric! 3 CHAPTER 2 Stateless Services 27 CHAPTER 3 Stateful Services 49 CHAPTER 4 Actor Pattern 67 CHAPTER 5 Service Deployments and Upgrades 91 CHAPTER 6 Availability and Reliability 117 CHAPTER 7 Sca