Back to Blog
2 min read

Dapr vs Service Mesh: Choosing the Right Approach

Dapr and service meshes both help with microservices communication but serve different purposes. Understanding their strengths helps choose the right tool.

Key Differences

AspectDaprService Mesh
FocusApplication building blocksNetwork infrastructure
mTLSVia mesh integrationNative
State ManagementBuilt-inNot provided
Pub/SubBuilt-inNot provided
RetriesApplication-levelNetwork-level

When to Use Dapr

# Dapr provides application capabilities
apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
spec:
  template:
    metadata:
      annotations:
        dapr.io/enabled: "true"
        dapr.io/app-id: "order-service"
    spec:
      containers:
      - name: order-service
        image: order-service:v1

Dapr usage:

// State management
await daprClient.SaveStateAsync("statestore", "order-1", order);

// Pub/sub
await daprClient.PublishEventAsync("pubsub", "orders", order);

// Service invocation
var result = await daprClient.InvokeMethodAsync<Order>("payment-service", "process", order);

When to Use Service Mesh

# Service mesh provides network capabilities
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: order-service
spec:
  hosts:
  - order-service
  http:
  - timeout: 10s
    retries:
      attempts: 3
    route:
    - destination:
        host: order-service

Using Both Together

Dapr can run with a service mesh for comprehensive capabilities:

annotations:
  dapr.io/enabled: "true"
  sidecar.istio.io/inject: "true"

Summary

Use Dapr for application building blocks, service mesh for network security and traffic management. They complement each other well.


References:

Michael John Peña

Michael John Peña

Senior Data Engineer based in Sydney. Writing about data, cloud, and technology.