All Projects โ†’ Dasync โ†’ Dasync

Dasync / Dasync

Licence: apache-2.0
Every developer deserves the right of creating microservices without using any framework ๐Ÿค

Programming Languages

csharp
926 projects

Projects that are alternatives of or similar to Dasync

Cloudi
A Cloud at the lowest level!
Stars: โœญ 352 (+128.57%)
Mutual labels:  microservices, cloud, cloud-computing, actor-model, distributed-systems
Pulumi
Pulumi - Developer-First Infrastructure as Code. Your Cloud, Your Language, Your Way ๐Ÿš€
Stars: โœญ 10,887 (+6969.48%)
Mutual labels:  serverless, cloud, azure, cloud-computing
Cloud Custodian
Rules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources
Stars: โœญ 3,926 (+2449.35%)
Mutual labels:  serverless, cloud, azure, cloud-computing
Nact
nact โ‡’ node.js + actors โ‡’ your services have never been so ยต
Stars: โœญ 848 (+450.65%)
Mutual labels:  microservices, actor-model, distributed-systems
Midway
๐Ÿ” A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. ๐ŸŒˆ
Stars: โœญ 5,080 (+3198.7%)
Mutual labels:  serverless, cloud, azure
Scalecube Services
ScaleCube Services is a high throughput, low latency reactive microservices library built to scale. it features: API-Gateways, service-discovery, service-load-balancing, the architecture supports plug-and-play service communication modules and features. built to provide performance and low-latency real-time stream-processing. its open and designed to accommodate changes. (no sidecar in a form of broker or any kind)
Stars: โœญ 482 (+212.99%)
Mutual labels:  microservices, actor-model, distributed-systems
Orleans
Orleans is a cross-platform framework for building distributed applications with .NET
Stars: โœญ 8,131 (+5179.87%)
Mutual labels:  cloud-computing, actor-model, distributed-systems
Hexa
Hexa: The ultimate companion for Azure. Setup and deploy in seconds
Stars: โœญ 56 (-63.64%)
Mutual labels:  serverless, cloud, azure
Orleans.clustering.kubernetes
Orleans Membership provider for Kubernetes
Stars: โœญ 140 (-9.09%)
Mutual labels:  azure, actor-model, distributed-systems
Nats Server
High-Performance server for NATS.io, the cloud and edge native messaging system.
Stars: โœญ 10,223 (+6538.31%)
Mutual labels:  cloud, cloud-computing, distributed-systems
Tensorflow Lambda Layer
Lets you import Tensorflow + Keras from an AWS lambda
Stars: โœญ 79 (-48.7%)
Mutual labels:  serverless, cloud, cloud-computing
Seldon Server
Machine Learning Platform and Recommendation Engine built on Kubernetes
Stars: โœญ 1,435 (+831.82%)
Mutual labels:  microservices, cloud, azure
Azos
A to Z Sky Operating System / Microservice Chassis Framework
Stars: โœญ 137 (-11.04%)
Mutual labels:  microservices, cloud, actor-model
Swim
Distributed software platform for building stateful, massively real-time streaming applications.
Stars: โœญ 368 (+138.96%)
Mutual labels:  serverless, actor-model, distributed-systems
Open Lambda
An open source serverless computing platform
Stars: โœญ 718 (+366.23%)
Mutual labels:  microservices, serverless, distributed-systems
Genie
Distributed Big Data Orchestration Service
Stars: โœญ 1,544 (+902.6%)
Mutual labels:  microservices, cloud, distributed-systems
Service Fabric
Service Fabric is a distributed systems platform for packaging, deploying, and managing stateless and stateful distributed applications and containers at large scale.
Stars: โœญ 2,874 (+1766.23%)
Mutual labels:  microservices, cloud-computing, distributed-systems
Cqrs
A lightweight enterprise Function as a Service (FaaS) framework to write function based serverless and micro-service applications in hybrid multi-datacentre, on-premise and Azure environments.
Stars: โœญ 310 (+101.3%)
Mutual labels:  microservices, serverless, azure
Azure
Azure-related repository
Stars: โœญ 78 (-49.35%)
Mutual labels:  serverless, cloud, azure
Micro
Micro is a distributed cloud operating system
Stars: โœญ 10,778 (+6898.7%)
Mutual labels:  microservices, cloud, distributed-systems

Build Status Follow on Twitter Stories on Medium D-ASYNC | Cloud-Native Apps Without Frameworks

Sign up for the early invite to the fully managed experience with D-ASYNC Platform.

D-ASYNC: Zero-Cost Microservices

D-ASYNC is a multifaceted and comprehensive solution for building service-oriented applications. It is based on the new Service-Oriented Programming Language paradigms, which provide an extendible framework for inter-service communication (HTTP, gRPC, message queues, event streams), a unique language-integrated stateful workflow engine, implementation of best microservice practices, a unified approach for distributed tracing, API generator and versioning capabilities, error-handler free clean code.

D-ASYNC Concept

The mission of D-ASYNC is to give developers a superpower of zero-cost development of scalable, reliable, and secure microservices. The ability to use the language itself helps to focus on the core value of your application, making it easy to write, read, evolve, and maintain.

Basic Programming Concepts in C#

The following examples may look trivial and as for a single-process application, but D-ASYNC technology makes them run (without any modifications) in a resilient, persistent, scalable, and distributed manner. The new service-oriented syntax will be introduced with the CloudSharp project.

  1. Inter-Service Communication.
// Declaration of the interface of another service
// that might be deployed in a different environment.
public interface IPaymentTerminal
{
  Task Pay(Order order, CreditCard card);
}

public class BaristaWorker
{
  private IPaymentTerminal _paymentTerminal;

  // Another service can be used with the dependency
  // injection. All calls to that service will use
  // its communication mechanism. All replies will
  // be routed back to this service.
  public BaristaWorker(IPaymentTerminal paymentTerminal)
  {
    _paymentTerminal = paymentTerminal;
  }
  
  protected virtual async Task<Order> TakeOrder()
  {
    Order order = ...;
    CreditCard card = ...;
    
    // Simple call to another service may ensure
    // consistency between two. That complexity is
    // hidden to help you focus on the business logic.
    await _paymentTerminal.Pay(order, card);
    
    // Unlike any RPC, the state of execution is saved,
    // and restored when the service replies. If the call
    // fails, it is automatically retried and an exception
    // is never seen in this method.
    
    // There is no need to create API controllers and service
    // clients, and no need to worry about asynchronous APIs.
  }
}
  1. Service Events and Reactive Programming.
public class CustomerManagementService : ICustomerManagementService
{
  // Implement the domain event simply as a C# event.
  public virtual event EventHandler<CustomerInfo> CustomerRegistered;

  public virtual async Task RegisterCustomer(CustomerInfo customerInfo)
  {
    // ... (register a new customer in the system here)

    // Then notify observers about successful registration.
    // The event may not fire immediately, but will get scheduled
    // when this method exits to guarantee consistency.
    CustomerRegistered?.Invoke(this, customerInfo);
  }
}

public class RewardProgramService : IRewardProgramService
{
  public RewardProgramService(
    ICustomerManagementService customerService)
  {
    // Subscribe to the domain event.
    customerService.CustomerRegistered += OnCustomerRegistered;
  }

  protected virtual void OnCustomerRegistered(
    object sender, CustomerInfo customerInfo)
  {
    // This method is executed in a resilient manner
    // and can be a workflow (see next example).
  }
}
  1. Stateful Workflows.
// This is a service with a workflow.
public class BaristaWorker
{
  // This is a 'routine' of a workflow.
  public virtual async Task PerformDuties()
  {
    // This will call a sub-routine and save the state
    // of the current one.
    var order = await TakeOrder();
    
    // If the process terminates abruptly here, after restart
    // the routine continue at exact point without executing
    // previous steps. Any async method is compiled into a
    // state machine, so it's possible to save and restore
    // its state and context.
    
    var cup = await MakeCoffee(order);
    
    // Essentially this is an Actor Model of a scalable
    // distributed system. A routine maps to an actor,
    // because an async method compiles into a state
    // machine (which has its state), and a routine can
    // call sub-routines - same as an actor can invoke
    // other actors.
        
    await Serve(cup);
    
    // Workflows are not limited to one service and
    // its methods, and can span across many services
    // (as shown in the very first example and below).
    
    // Varies degrees of consistency can be guaranteed
    // in case of failures, and that settings does not
    // change the business logic.
  }
  
  // This is a 'sub-routine' of a workflow.
  protected virtual async Task<Order> TakeOrder();
  
  protected virtual async Task<Cup> MakeCoffee(Order order);
  
  protected virtual async Task Serve(Cup cup);
}
  1. Saga Pattern.
// This method represents a workflow with
// application-specific error-handling.
public async Task PlaceOrder()
{
  // Hard-coded sample input.
  var price = 10;
  var itemId = "Whole Coffee Beans 1lb";
  var quantity = 1;

  // Generate unique ID which will be persisted in this routine.
  var transationId = Guid.NewGuid();

  // 1. First, make sure that payment can be made.
  // This is a call to a service #1.
  await _paymentProcessor.Credit(transationId, price);
  try
  {
    // 2. Then, reserve the item being purchased.
    // This is a call to a service #2.
    await _warehouse.ReserveItem(transationId, itemId, quantity);
  }
  catch (OutOfStockException)
  {
    // 3. If they are out of stock, refund the cost of an item.
    // Perform a compensating action on service #1.
    await _paymentProcessor.Debit(transationId, price);
  }

  // This method acts as an orchestrator and represents clear
  // business logic of placing an order without a need to
  // decompose it into dozens of message classes and their
  // respective handlers.
}
  1. Parallel execution.
public class CoffeeMachine
{
  public virtual async Task PourCoffeeAndMilk(Cup cup)
  {
    // You can execute multiple methods in parallel
    // to 'horizontally scale out' the application.
    Task coffeeTask = PourCoffee(cup);
    Task milkTask = PourMilk(cup);
    
    // Then just await all of them, as you would
    // normally do with TPL.
    await Task.WhenAll(coffeeTask, milkTask);
    
    // This is translated into a such series of steps:
    // 1. Save state of current method;
    // 2. Schedule PourCoffee
    // 3. Schedule PourMilk
    // 4. PourCoffee signals 'WhenAll' on completion
    // 5. PourMilk signals 'WhenAll' on completion
    // 6. 'WhenAll' resumes the current method from saved state.
    
    // The built-in concurrency control removes the
    // complexity of writing a synchronization logic
    // of distributed workflows.
  }
}

Quick Start

The technology currently matures with early adopters in a closed environment. You can self-start by following these guides:

Cannot find what you are looking for? Ask me a question!
drawing
โ€” Serge Semenov

Problems it Solves

High-level language-integrated abstractions hide a lot of implementation details like:

  1. Unified Service Communication - both external and internal; HTTP, gRPC, message queues, event streams.
  2. API specification is auto-generated.
  3. Pub-Sub is simply declarative in the code.
  4. Transparent serialization and wire format.
  5. Stateful workflows are merely methods.
  6. Minimal learning curve.
  7. Clean Code up to 5x smaller in size.
  8. Near-zero cost of programming microservices.
  9. Delays design decisions.
  10. No specific framework is needed.
  11. Exactly once execution for mission-critical apps.
  12. No error handlers in the code.
  13. Simplified testing due to the absence of non-functional code.
  14. Easy API and workflow versioning.
  15. Unified approach for distributed tracing.

More Info

Publications:

"Conquest of Distributed Systems":

References:

Why D-ASYNC

We believe that every developer deserves the right of creating microservices without using any framework ๐Ÿค

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].