Mesh: A lightweight, distributed, relational network architecture for MPC
Introduction
Mesh is a MPC network solution to serve resource as service.
Also is A replacement for RPC Framework like dubbo, IOC Container like spring, Serialize Library like json_serializable.
Use easy and sample design to provide strong, robust, and type safe encoding experience.
Features
As an open source network proxy, Mesh has the following core functions:
- Support full dynamic resource configuration through xDS API integrated with Service Mesh.
- Support proxy with TCP, HTTP, and RPC protocols.
- Support rich routing features.
- Support reliable upstream management and load balancing capabilities.
- Support network and protocol layer observability.
- Support mTLS and protocols on TLS.
- Support rich extension mechanism to provide highly customizable expansion capabilities.
- Support process smooth upgrade.
Get Started
Install go compile time.
flutter pub get mesh
Documentation
Add dependencies.
dart pub add maas
dart pub add dev:build_runner
dart pub add dev:source_gen
Use with build_runner. Add below to your build.yaml file.
# Read about `build.yaml` at https://pub.dev/packages/build_config
builders:
mesh:
import: "package:maas/dyn/dyn.dart"
builder_factories: [ "dyn" ]
build_extensions: { ".dart": [ "mesh.g.dart" ] }
auto_apply: dependents
build_to: cache
applies_builders: [ "source_gen|combining_builder" ]
targets:
$default:
builders:
mesh:
enabled: true
options:
debug: true
log_level: fine
source_gen|combining_builder:
enabled: true
options:
debug: true
log_level: fine
Generate code by mesh dyn builder.
dart run build_runner build
Remote call and JSON codec example with mesh.
import 'package:maas/index.dart';
import 'package:maas/gen/index.g.dart';
@SPI(name: "foo")
abstract class IFoo {
Future<String?> doc(String name, String formatter, {Context? ctx});
}
@SPI(name: "foo")
class Foo implements IFoo {
@SPI(name: 'mpi')
late Builtin builtin;
@override
Future<String?> doc(String name, String formatter, {Context? ctx}) async {
return await builtin.doc(name, formatter, ctx: ctx);
}
}
Future<void> main() async {
maas();
final vars = Proxy.spi<Vars>();
vars.setenv('MESH_ADDRESS', 'https://127.0.0.1:443');
final builtin = Proxy.mpi<Builtin>();
final doc = await builtin.doc('', '');
info('$doc');
final foo = Proxy.spi<IFoo>();
final docx = await foo.doc('', '');
info('$docx');
final codec = Proxy.spi<Codec>();
final json = codec.encodeString(Body(codec: 'x', schema: 'y'));
info(json);
final body = codec.decodeString<Body>(json);
info(body.codec ?? '');
}
Libraries
- asm/index
- cause/cause
- cause/codes
- cause/index
- codec/index
- codec/json
- codec/types
- dyn/dyn
- dyn/idx
- dyn/mpi
- dyn/spi
- gen/index.g
- index
- jast/JSONBaseListener
- jast/JSONBaseVisitor
- jast/JSONLexer
- jast/JSONListener
- jast/JSONParser
- jast/JSONVisitor
- log/index
- log/nop
- log/types
- macro/ark
- macro/hook
- macro/idx
- macro/index
- macro/introspect
- macro/mpi
- macro/proxy
- macro/spi
- mesh/index
- mesh/urn
- mesh/vars
- mpc/consumer
- mpc/contextvars
- mpc/eden
- mpc/filter
- mpc/flags
- mpc/grpc/consumer
- mpc/grpc/index
- mpc/grpc/interceptor
- mpc/http/consumer
- mpc/http/index
- mpc/index
- mpc/invoker
- mpc/provider
- mpc/reference
- mpc/robust
- mpc/service
- psi/builtin
- psi/cache
- psi/cipher
- psi/cluster
- psi/commerce
- psi/context
- psi/cryptor
- psi/datahouse
- psi/dispatcher
- psi/endpoint
- psi/evaluator
- psi/graph
- psi/index
- psi/kms
- psi/kv
- psi/licenser
- psi/locker
- psi/network
- psi/pipeline
- psi/publisher
- psi/registry
- psi/routable
- psi/savepoint
- psi/scheduler
- psi/sequence
- psi/subscriber
- psi/tokenizer
- psi/transport
- psi/vfs
- psi/workflow
- tool/index
- tool/tool
- types/builtin
- types/cipher
- types/document
- types/entity
- types/enums
- types/environ
- types/event
- types/index
- types/keys
- types/license
- types/oauth2
- types/payload
- types/principal
- types/registration
- types/route
- types/savepoint
- types/script
- types/status
- types/transport
- types/version
- types/workflow