I have a application that can be broken down into multiple communicating services. My current implementation is monolithic and I want to reorganize it so that individual components can be deployed,iterated upon, scaled independently. I see two ways to do this with Azure:
- Service Fabric service composed of set of communicating micro-services (stateless, web-api etc.)
- A collection of individual Azure Web Apps/ Cloud Services that call each other at the http end points.
Are there any obvious advantages of 1 over 2? Any rule of thumb to chose one over the other would also be very helpful.
I think this page compares it well: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cloud-services-migration-differences/
I can't tell it better than this.
There is not really a rule of thumb. Service Fabric might seem more complex but offers some things that Cloud Services / Web Apps don't.
A quick summary (taken from the link provided):
Service Fabric itself is an application platform layer that runs on Windows or Linux, whereas Cloud Services is a system for deploying Azure-managed VMs with workloads attached. The Service Fabric application model has a number of advantages:
- Fast deployment times. Creating VM instances can be time consuming. In Service Fabric, VMs are only deployed once to form a cluster that hosts the Service Fabric application platform. From that point on, application packages can be deployed to the cluster very quickly.
- High-density hosting. In Cloud Services, a Worker Role VM hosts one workload. In Service Fabric, applications are separate from the VMs that run them, meaning you can deploy a large number of applications to a small number of VMs, which can lower overall cost for larger deployments.
- The Service Fabric platform can run anywhere that has Windows Server or Linux machines, whether it's Azure or on-premises. The platform provides an abstraction layer over the underlying infrastructure so your application can run on different environments.
- Distributed application management. Service Fabric is a platform that not only hosts distributed applications, but also helps manage their lifecycle independently of the hosting VM or machine lifecycle.
Peter has done a great summary. And here are my additional points:
Cloud Service is not designed for micro service pattern, while Service Fabric is. If you want to enjoy the benefits brought by micros service, Service Fabric is your best choice. With Cloud Service, if you want separate your application into autonomous services, you either
- Create multiple cloud services. Which is difficult to monitor and manage since there is not a unified interface for a group of cloud services, Cloud Service is just not designed for this pattern.
- Or add multiple roles into a single cloud service, this will lead to a) bloat of your cloud service configuration file, because all service configurations are in a single config file; and b) to upgrade a single role, you end up redeploy the whole cloud service!
Cloud Service doesn't support cross region/DC deployment, while Service Fabric does. That means you can turn a DC level disaster recovery into a normal failover, which automatically handled by Service Fabric, see this.
来源:https://stackoverflow.com/questions/39615381/advantages-of-service-fabric-microservices-vs-collection-of-azure-cloud-services