Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Overview

Any language, any framework, anywhere

Go Report Card Docker Pulls Build Status Scheduled e2e test codecov Discord License: MIT TODOs Follow on Twitter

Dapr is a portable, serverless, event-driven runtime that makes it easy for developers to build resilient, stateless and stateful microservices that run on the cloud and edge and embraces the diversity of languages and developer frameworks.

Dapr codifies the best practices for building microservice applications into open, independent, building blocks that enable you to build portable applications with the language and framework of your choice. Each building block is independent and you can use one, some, or all of them in your application.

Dapr overview

Goals

  • Enable developers using any language or framework to write distributed applications
  • Solve the hard problems developers face building microservice applications by providing best practice building blocks
  • Be community driven, open and vendor neutral
  • Gain new contributors
  • Provide consistency and portability through open APIs
  • Be platform agnostic across cloud and edge
  • Embrace extensibility and provide pluggable components without vendor lock-in
  • Enable IoT and edge scenarios by being highly performant and lightweight
  • Be incrementally adoptable from existing code, with no runtime dependency

How it works

Dapr injects a side-car (container or process) to each compute unit. The side-car interacts with event triggers and communicates with the compute unit via standard HTTP or gRPC protocols. This enables Dapr to support all existing and future programming languages without requiring you to import frameworks or libraries.

Dapr offers built-in state management, reliable messaging (at least once delivery), triggers and bindings through standard HTTP verbs or gRPC interfaces. This allows you to write stateless, stateful and actor-like services following the same programming paradigm. You can freely choose consistency model, threading model and message delivery patterns.

Dapr runs natively on Kubernetes, as a self hosted binary on your machine, on an IoT device, or as a container that can be injected into any system, in the cloud or on-premises.

Dapr uses pluggable component state stores and message buses such as Redis as well as gRPC to offer a wide range of communication methods, including direct dapr-to-dapr using gRPC and async Pub-Sub with guaranteed delivery and at-least-once semantics.

Why Dapr?

Writing high performance, scalable and reliable distributed application is hard. Dapr brings proven patterns and practices to you. It unifies event-driven and actors semantics into a simple, consistent programming model. It supports all programming languages without framework lock-in. You are not exposed to low-level primitives such as threading, concurrency control, partitioning and scaling. Instead, you can write your code by implementing a simple web server using familiar web frameworks of your choice.

Dapr is flexible in threading and state consistency models. You can leverage multi-threading if you choose to, and you can choose among different consistency models. This flexibility enables to implement advanced scenarios without artificial constraints. Dapr is unique because you can transition seamlessly between platforms and underlying implementations without rewriting your code.

Features

  • Event-driven Pub-Sub system with pluggable providers and at-least-once semantics
  • Input and output bindings with pluggable providers
  • State management with pluggable data stores
  • Consistent service-to-service discovery and invocation
  • Opt-in stateful models: Strong/Eventual consistency, First-write/Last-write wins
  • Cross platform virtual actors
  • Secrets management to retrieve secrets from secure key vaults
  • Rate limiting
  • Built-in Observability support
  • Runs natively on Kubernetes using a dedicated Operator and CRDs
  • Supports all programming languages via HTTP and gRPC
  • Multi-Cloud, open components (bindings, pub-sub, state) from Azure, AWS, GCP
  • Runs anywhere, as a process or containerized
  • Lightweight (58MB binary, 4MB physical memory)
  • Runs as a sidecar - removes the need for special SDKs or libraries
  • Dedicated CLI - developer friendly experience with easy debugging
  • Clients for Java, .NET Core, Go, Javascript, Python, Rust and C++

Get Started using Dapr

See our Getting Started guide over in our docs.

Quickstarts and Samples

Community

We want your contributions and suggestions! One of the easiest ways to contribute is to participate in discussions on the mailing list, chat on IM or the bi-weekly community calls. For more information on the community engagement, developer and contributing guidelines and more, head over to the Dapr community repo

Contact Us

Reach out with any questions you may have and we'll make sure to answer then as soon as possible!

Platform Link
💬 Instant Message Chat (preferred) Discord Banner
📧 Mailing List https://groups.google.com/forum/#!forum/dapr-dev
🐤 Twitter @daprdev

Community Call

Every two weeks we host a community call to showcase new features, review upcoming milestones, and engage in a Q&A. All are welcome!

📞 Visit https://aka.ms/dapr-community-call for upcoming dates and the meeting link.

Videos and Podcasts

Engagement Link
📺 Channel 9 Azure Friday - Learn All About Distributed Application Runtime Dapr: Part 1 and Part 2
🌎 Conferences - Dapr, Rudr, OAM: Mark Russinovich presents next gen app development & deployment
- Mark Russinovich presents "The Future of Cloud Native Applications with OAM and Dapr"
- Build 2020: Mark Fussell presents Dapr
🎤 Hanselminutes Dapr Distributed Application Runtime with Mark Russinovich
💻 Azure Community Live Build microservice applications using DAPR with Mark Fussell

Contributing to Dapr

See the Development Guide to get started with building and developing.

Repositories

Repo Description
Dapr The main repository that you are currently in. Contains the Dapr runtime code and overview documentation.
CLI The Dapr CLI allows you to setup Dapr on your local dev machine or on a Kubernetes cluster, provides debugging support, launches and manages Dapr instances.
Docs The documentation for Dapr.
Quickstarts This repository contains a series of simple code samples that highlight the main Dapr capabilities
Samples This repository holds community maintained samples for various Dapr use cases.
Components-contrib The purpose of components contrib is to provide open, community driven reusable components for building distributed applications.
Dashboard General purpose dashboard for Dapr
Go-sdk Dapr SDK for Go
Java-sdk Dapr SDK for Java
JS-sdk Dapr SDK for JavaScript
Python-sdk Dapr SDK for Python
Dotnet-sdk Dapr SDK for .NET Core
Rust-sdk Dapr SDK for Rust
Cpp-sdk Dapr SDK for C++
PHP-sdk Dapr SDK for PHP

Code of Conduct

Please refer to our Dapr Community Code of Conduct

Issues
  • Fixes sidecar injection instability. Removes job_test E2E on AKS win and linux. Other E2E stability fixes for linux.

    Fixes sidecar injection instability. Removes job_test E2E on AKS win and linux. Other E2E stability fixes for linux.

    Description

    Fixes sidecar injection instability. Removes job_test E2E on AKS win and linux. Other E2E stability fixes for linux.

    Windows E2E is still unstable. See this run, for example: https://github.com/dapr/dapr/actions/runs/696284536

    DO NOT RERUN the run above since we want to keep that for post mortem.

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: N/A

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by artursouza 136
  • Enable SDK E2E test on Windows.

    Enable SDK E2E test on Windows.

    Description

    Enable SDK E2E test on Windows.

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: #2695

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by artursouza 129
  • Increase leader election retry interval

    Increase leader election retry interval

    Description

    Please explain the changes you've made

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: #[issue number]

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by wcs1only 100
  • Hack to read Tcpip\Parameters

    Hack to read Tcpip\Parameters

    Description

    Please explain the changes you've made

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: #[issue number]

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    do-not-merge 
    opened by wcs1only 95
  • Initial commit of state store transactional API

    Initial commit of state store transactional API

    Description

    I noticed a good first issue with a closed incomplete PR Thus I created a new PR and referenced the previous PR.

    Things to Note

    1. https://github.com/dapr/components-contrib/issues/375 If you upsert and delete and upsert the key, a GetRequest will return nothing because Get Request executes a HGETALL first before using GET. HGETALL returns empty value or or none which is set by the other test via HSET.
    2. I also converted the values from bytes to string in the gRPC implementation since Redis inserts an string representation of integers and string.

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: #924

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [x] Code compiles correctly
    • [x] Created/updated tests
    • [x] Unit tests passing
    • [x] End-to-end tests passing
    • [x] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs/issues/661
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    do-not-merge 
    opened by chinzhiweiblank 79
  • enable dapr connecting to non local app

    enable dapr connecting to non local app

    Description

    enable dapr to connect to a non-local application read APPLICATION_HOST from environment var.

    tested standalone mode. added e2e tests for kubernetes.

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: #1972

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [x] Code compiles correctly
    • [x] Created/updated tests
    • [x] Unit tests passing
    • [x] End-to-end tests passing
    • [x] Extended the documentation / Created issue in the https://github.com/dapr/docs/issues/893
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by mukundansundar 79
  • create dapr-operator-admin cluster role and change sa binding

    create dapr-operator-admin cluster role and change sa binding

    Description

    Created a new ClusterRole, dapr-operator-admin, and bound the dapr-operator ServiceAccount to that role in favor of cluster-admin.

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: #1997

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by gunniwho 77
  • Write reminders in multiple partitions

    Write reminders in multiple partitions

    Description

    Split actor reminders storage into multiple keys.

    Issue reference

    We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

    Please reference the issue this PR will close: #2889

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    automerge 
    opened by artursouza 70
  • Fix windows to the patched cluster

    Fix windows to the patched cluster

    Description

    After weeks of testing, we've confirmed that our Windows AKS clusters have been experiencing the upstream k8s bug: https://github.com/kubernetes/kubernetes/issues/100384

    The kube-proxy version 1.19.12-rc.0 binary is confirmed to address the above. AKS team reports that this fix won't be downstreamed for several more weeks, so in the mean time, I will manually patch our AKS clusters. To simplify this effort, I'm going to separate our 4 existing AKS clusters into 2 linux and 2 Windows. When we used to share these clusters with the perf tests, it made sense to have one big pool. Now that they are separate, we have have 2 & 2. We can probably leave it this way going forward to save us some $$$ (we don't need Windows nodes running in our linux clusters anymore).

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by wcs1only 68
  • Adding Metric Specification in Dapr Configuration

    Adding Metric Specification in Dapr Configuration

    Description

    Adding Metric Specification to enable/disable the metrics similar to Tracing Configuration.

    So by default, metrics is turned on. Only when user turns off metrics in configuration, Dapr will not generate the metrics.

    e.g.

    apiVersion: dapr.io/v1alpha1 kind: Configuration metadata: name: tracing namespace: default spec: tracing: samplingRate: "1" metric: enabled: false

    Issue reference

    Closes #1643

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [x] Code compiles correctly
    • [x] Created/updated tests
    • [x] Unit tests passing
    • [x] End-to-end tests passing
    • [x] Extended the documentation / Created issue in the https://github.com/dapr/docs/issues/778
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by shalabhms 65
  • Currently state management already supports TTL. Can refresh TTL be supported?

    Currently state management already supports TTL. Can refresh TTL be supported?

    /area runtime

    Describe the proposal

    Currently refreshing TTL requires saving the state again, which will cause unnecessary loss

    opened by saber-wang 0
  • Unusually high CPU utilization waiting for app to come up

    Unusually high CPU utilization waiting for app to come up

    In what area(s)?

    /area runtime

    /area operator

    /area placement

    /area docs

    /area test-and-release

    What version of Dapr?

    <=1.4.x

    Expected Behavior

    Before the application comes up, I'd expect nearly 0 CPU utilization once it reaches the waiting state.

    Actual Behavior

    30MHz, continuous, is being utilized in my cluster until the app comes up, for each waiting sidecar. This is really only an issue when the cluster is spinning up a ton of app instances at once, and thus sidecars, waiting for the app to boot.

    Steps to Reproduce the Problem

    Launch the daprd sidecar with no app.

    Release Note

    RELEASE NOTE:

    kind/bug 
    opened by withinboredom 0
  • Updated the charts so that a user can add custom Pod labels globally

    Updated the charts so that a user can add custom Pod labels globally

    Description

    Provide the ability to provide the custom labels globally when deploying the helm chart. In some environments users need to set values for custom labels which are required by policies enforced by OPA. It's not possible to do this today which requires us to manually make modifications before deploying, but this PR makes it possible and easier to do so.

    Issue reference

    Please reference the issue this PR will close: #3435

    Checklist

    Please make sure you've completed the relevant tasks for this PR, out of the following list:

    • [ ] Code compiles correctly
    • [ ] Created/updated tests
    • [ ] Unit tests passing
    • [ ] End-to-end tests passing
    • [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Specification has been updated / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    • [ ] Provided sample for the feature / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#[issue number]
    opened by workfigure 4
  • OpenFunction does not work in Dapr 1.4.0 or 1.4.1

    OpenFunction does not work in Dapr 1.4.0 or 1.4.1

    As per https://github.com/OpenFunction/samples/issues/16, Dapr 1.4.0 or 1.4.1 does not work and gives the following error (reported by @lizzzcai):

    error message:

      - lastTransitionTime: '2021-09-24T07:48:19Z'
        message: >-
          failed to create task run pod
          "function-sample-builder-cgmn8-buildrun-nfkb8-nlbjs": admission webhook
          "sidecar-injector.dapr.io" denied the request: service account
          'system:serviceaccount:tekton-pipelines:tekton-pipelines-controller' not
          on the list of allowed controller accounts. Maybe invalid TaskSpec
        reason: CouldntGetTask
        status: 'False'
        type: Succeeded
    
    kind/bug 
    opened by artursouza 2
  • Create unit test for admission control

    Create unit test for admission control

    We had two bug fixes in 1.4, both related to a change in admission control handler. We must write unit test to validate the expected behavior, so changes do not create a regression. Testing all the scenarios end-to-end is ideal, but we should at least have unit test for the handleRequest method in pkg/injector/injector.go.

    good first issue size/XS triaged/resolved platform/kubernetes area/test/unit 
    opened by artursouza 1
  • helm charts dashboard ingress

    helm charts dashboard ingress

    opened by HongjiangHuang 0
  • Cannot call API with large header

    Cannot call API with large header

    In what area(s)?

    /area runtime

    What version of Dapr?

    Version 1.2.2

    Expected Behavior

    2 Microservices communicate with each other with using DapR sidecar successful as same as directly communication

    Actual Behavior

    If any header field is over 3818 Byte , we got error 431 Request Header Fields Too Large.

    Steps to Reproduce the Problem

    • Install Dapr
    • 2 Microservices that can be call to other by using a large header field
    • Inject Dapr sidecar to 2 Microservices and then using sidecar url to communication (http://localhost:3500/v1.0/invoke/micorservice1/method)
    • Look at the microservice logs

    Any thoughts?

    Thanks

    kind/bug 
    opened by tieudaotu90 14
  • [Proposal] file API

    [Proposal] file API

    Does dapr plan to increase the API for file operation? It can realize the basic addition, deletion, modification and checking operations of files。The interface looks like the following

    // Get file with stream
      rpc GetFile(GetFileRequest) returns (stream GetFileResponse) {}
    
      // Put file with stream
      rpc PutFile(stream PutFileRequest) returns (google.protobuf.Empty) {}
    
      // List all files
      rpc ListFile(ListFileRequest) returns (ListFileResp){}
    
      //Delete specific file
      rpc DelFile(DelFileRequest) returns (google.protobuf.Empty){}
    }
    
    message GetFileRequest {
      //
      string store_name = 1;
      // The name of the file or object want to get.
      string name = 2;
      // The metadata for user extension.
      map<string,string> metadata = 3;
    }
    
    message GetFileResponse {
      bytes data = 1;
    }
    
    message PutFileRequest {
      string store_name = 1;
      // The name of the file or object want to put.
      string name = 2;
      // The data will be store.
      bytes data = 3;
      // The metadata for user extension.
      map<string,string> metadata = 4;
    }
    
    message FileRequest {
      string store_name = 1;
      // The name of the directory
      string name = 2;
      // The metadata for user extension.
      map<string,string> metadata = 3;
    }
    
    message ListFileRequest {
      FileRequest request = 1;
    }
    
    message ListFileResp {
      repeated string file_name = 1;
    }
    
    message DelFileRequest {
      FileRequest request = 1;
    }
    
    opened by wenxuwan 1
  • middleware.http.opa Error at dapr run: invalid memory address or nil pointer dereference

    middleware.http.opa Error at dapr run: invalid memory address or nil pointer dereference

    In what area(s)?

    /area runtime

    What version of Dapr?

    1.4.0

    Expected Behavior

    Normal start

    Actual Behavior

    panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x15a444d]

    goroutine 1 [running]: github.com/dapr/dapr/pkg/middleware/http.Pipeline.Apply({{0xc000cafa30, 0x17, 0x368d6ff}}, 0x4) /home/runner/work/dapr/dapr/pkg/middleware/http/http_pipeline.go:27 +0x2d github.com/dapr/dapr/pkg/http.(*server).useComponents(...) /home/runner/work/dapr/dapr/pkg/http/server.go:183 github.com/dapr/dapr/pkg/http.(*server).StartNonBlocking(0xc000cf8360) /home/runner/work/dapr/dapr/pkg/http/server.go:68 +0x65 github.com/dapr/dapr/pkg/runtime.(*DaprRuntime).startHTTPServer(0xc0007d7400, 0xdac, 0x0, 0x1e61, {0x3c5abd8, 0x1}, {{0xc000cafa30, 0x0, 0x7}}) /home/runner/work/dapr/dapr/pkg/runtime/runtime.go:904 +0x61b github.com/dapr/dapr/pkg/runtime.(*DaprRuntime).initRuntime(0xc0007d7400, 0xc000355130) /home/runner/work/dapr/dapr/pkg/runtime/runtime.go:358 +0x815 github.com/dapr/dapr/pkg/runtime.(*DaprRuntime).Run(0xc0007d7400, {0xc000bbf5a8, 0x7, 0x2}) /home/runner/work/dapr/dapr/pkg/runtime/runtime.go:230 +0x208 main.main() /home/runner/work/dapr/dapr/cmd/daprd/main.go:155 +0x14df ❌ The daprd process exited with error code: exit status 2 ⚠ Could not update sidecar metadata for cliPID: PUT http://127.0.0.1:3500/v1.0/metadata/cliPID giving up after 5 attempts ✅ You're up and running! Dapr logs will appear here.

    Steps to Reproduce the Problem

    1. component

    2021-09-22_10-41

    1. configuration 2021-09-22_10-44

    2. run dapr run --app-id dapr-learn --components-path ./components --config ./dapr-config.yaml --app-port 8060 --dapr-http-port 3500 --dapr-grpc-port 50001

    P.S.If I delete the definition of my-policy in the dapr-config.yaml file and only use uppercase, there is no problem

    kind/bug 
    opened by melodicdeath 1
  • Should Dapr provide an endpoint for structured application logging?

    Should Dapr provide an endpoint for structured application logging?

    The benefits of structured logging (searchability, avoiding data parsing errors etc) are well-known. Most logging libraries, log shippers such as fluentD, and log storage/indexing systems preserve and use log structure. The weak link is the way how application logs are captured: from the standard output of the service container. This requires the log scraper/shipper to parse the data, making the whole log pipeline less robust and less efficient than necessary.

    Dapr could improve on the status quo by exposing an endpoint that accepts logs in well-known, structured format, such as JSON or MessagePack. By natively supporting common log destinations via pluggable sinks, Dapr deliver an approachable, complete solution for log shipping that eliminates the data fidelity issues associated with stdout-based logging.

    Devil is, as usually, in the details, especially if resiliency and performance are considered.

    • For high performance, logging should use efficient data format(s). Support vary between platforms/logging libraries.
    • For high performance, log data should be gathered and formatted in memory and directly sent to log aggregator or final destination in chunks. Cross-process network communication within a pod (how Dapr sidecar works today) is not the best.
    • For resiliency, the design should account for situations where log aggregator/sink is not available. Log data should then be cached (with size limits) on the local filesystem (if r/w filesystem is available), and re-played when the log aggregator becomes available.

    In other words, Dapr probably should not attempt to become another log shipper like Fluent Bit or Vector ☺️ But at the same time the structured log fidelity is a real issue and current log shippers do not address it well.

    @paulyuk FYI

    opened by karolz-ms 3
Releases(v1.4.2)
Owner
Dapr
Distributed Application Runtime. An event-driven, portable runtime for building microservices on cloud and edge.
Dapr
Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly.

Gleam Gleam is a high performance and efficient distributed execution system, and also simple, generic, flexible and easy to customize. Gleam is built

Chris Lu 2.9k Sep 18, 2021
Go Micro is a framework for distributed systems development

Go Micro Go Micro is a framework for distributed systems development. Overview Go Micro provides the core requirements for distributed systems develop

Asim Aslam 16.8k Sep 22, 2021
Go Micro is a standalone framework for distributed systems development

Go Micro Go Micro is a framework for distributed systems development. Overview Go Micro provides the core requirements for distributed systems develop

Asim Aslam 16.8k Sep 22, 2021
CockroachDB - the open source, cloud-native distributed SQL database.

CockroachDB is a cloud-native distributed SQL database designed to build, scale, and manage modern, data-intensive applications. What is CockroachDB?

CockroachDB 22.1k Sep 17, 2021
a dynamic configuration framework used in distributed system

go-archaius This is a light weight configuration management framework which helps to manage configurations in distributed system The main objective of

null 164 Sep 5, 2021
A distributed key-value storage system developed by Alibaba Group

Product Overview Tair is fast-access memory (MDB)/persistent (LDB) storage service. Using a high-performance and high-availability distributed cluster

Alibaba 1.8k Sep 14, 2021
Golang client library for adding support for interacting and monitoring Celery workers, tasks and events.

Celeriac Golang client library for adding support for interacting and monitoring Celery workers and tasks. It provides functionality to place tasks on

Stefan von Cavallar 67 Jun 13, 2021
A library that implements the outboxer pattern in go

Outboxer Outboxer is a go library that implements the outbox pattern. Getting Started Outboxer was designed to simplify the tough work of orchestratin

Ítalo Vietro 55 Aug 31, 2021
Distributed Named Pipes

dnpipes Distributed Named Pipes (or: dnpipes) are essentially a distributed version of Unix named pipes comparable to, for example, SQS in AWS or the

Michael Hausenblas 451 Aug 17, 2021
The lightweight, distributed relational database built on SQLite

rqlite is a lightweight, distributed relational database, which uses SQLite as its storage engine. Forming a cluster is very straightforward, it grace

rqlite 8.9k Sep 17, 2021
An actor framework for Go

gosiris is an actor framework for Golang. Features Manage a hierarchy of actors (each actor has its own: state, behavior, mailbox, child actors) Deplo

Teiva Harsanyi 233 Sep 17, 2021
Golimit is Uber ringpop based distributed and decentralized rate limiter

Golimit A Distributed Rate limiter Golimit is Uber ringpop based distributed and decentralized rate limiter. It is horizontally scalable and is based

Myntra 591 Sep 8, 2021
Dkron - Distributed, fault tolerant job scheduling system https://dkron.io

Dkron - Distributed, fault tolerant job scheduling system for cloud native environments Website: http://dkron.io/ Dkron is a distributed cron service,

Distributed Works 2.8k Sep 23, 2021
Micro is a platform for cloud native development

Micro Overview Micro addresses the key requirements for building services in the cloud. It leverages the microservices architecture pattern and provid

Micro 10.4k Sep 16, 2021
High-Performance server for NATS, the cloud native messaging system.

NATS is a simple, secure and performant communications system for digital systems, services and devices. NATS is part of the Cloud Native Computing Fo

NATS - The Cloud Native Messaging System 9.8k Sep 16, 2021
Build share and run your distributed applications.

sealer[ˈsiːlər] provides the way for distributed application package and delivery based on kubernetes.

Alibaba 608 Sep 19, 2021
JuiceFS is a distributed POSIX file system built on top of Redis and S3.

JuiceFS is a high-performance POSIX file system released under GNU Affero General Public License v3.0. It is specially optimized for the cloud-native

Juicedata, Inc 3.7k Sep 24, 2021
A standard library for microservices.

Go kit Go kit is a programming toolkit for building microservices (or elegant monoliths) in Go. We solve common problems in distributed systems and ap

Go kit 21.3k Sep 18, 2021
Kafka implemented in Golang with built-in coordination (No ZK dep, single binary install, Cloud Native)

Jocko Kafka/distributed commit log service in Go. Goals of this project: Implement Kafka in Go Protocol compatible with Kafka so Kafka clients and ser

Travis Jeffery 4.4k Sep 18, 2021