一个简单易读的微服务框架,提供统一交互模型以及模块化的构建

地址 github.com/pojol/braid

Braid 提供统一的模块 服务交互模型,通过注册插件(支持自定义),构建属于自己的微服务。

  • 微服务组件
  • 交互模型
  • 构建方式
  • 文档
  • 流向图

微服务

braid 提供常用的微服务组件

服务 简介
Discover 发现插件,主要提供 Add Rmv Update 等接口
Elector 选举插件,主要提供 Wait Slave Master 等接口
Rpc RPC插件,主要用于发起RPC请求 Invoke 和开启RPC Server
Tracer 分布式追踪插件,监控分布式系统中的调用细节,目前有grpc echo redis 等追踪
LinkCache 服务访问链路缓存插件,主要用于缓存token(用户唯一凭证)的链路信息

交互模型

  • 同步

    在braid中目前只提供了这唯一的一个同步语义的接口,用于发起rpc调用

    // ctx 上下文
    // targetService 目标服务 例(`login`
    // methon 请求目标函数
    // token 用户唯一凭证(可为空
    braid.Invoke(ctx, targetService, methon, token, args, reply)
  • 异步

    braid中异步语义的简介,在内部或是将来功能的扩充,都应该优先使用异步语义

共享(多个消息副本 竞争(只被消费一次 进程内 集群内 发布 订阅
Shared Competition Proc Cluster Pub Sub

范例 在集群内订阅一个共享型的消息

consumer := braid.Mailbox().ClusterSub(`topic`).AddShared()
consumer.OnArrived(func (msg *mailbox.Message) error {
  return nil
})

构建

通过注册插件(注:这里的插件并非go plugin),构建braid的运行环境。

b, _ := braid.New(ServiceName)

// 注册插件
b.RegistPlugin(
  braid.Discover(         // Discover 插件
    discoverconsul.Name,  // 插件名(基于consul实现的discover插件,通过插件名可以获取到插件的构建器
    discoverconsul.WithConsulAddr(consulAddr)), // 插件的可选项
  braid.GRPCClient(grpcclient.Name),
  braid.Elector(
    electorconsul.Name,
    electorconsul.WithConsulAddr(consulAddr),
  ),
  braid.LinkCache(linkerredis.Name),
  braid.JaegerTracing(tracer.WithHTTP(jaegerAddr), tracer.WithProbabilistic(0.01)))

b.Init()  // 初始化注册在braid中的插件
b.Run()   // 运行
defer b.Close() // 释放

Wiki

Wiki 中提供了一个较为详细的Guide,用于帮助用户更加全面的理解braid的设计理念

github.com/pojol/braid/wiki

Sample

github.com/pojol/braid-sample

Web

  • 流向图

    用于监控链路上的连接数以及分布情况

$ docker pull braidgo/sankey:latest
$ docker run -d -p 8888:8888/tcp braidgo/sankey:latest \
    -consul http://172.17.0.1:8500 \
    -redis redis://172.17.0.1:6379/0

image.png

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!