Need help with doge?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

zhu327
150 Stars 26 Forks Apache License 2.0 62 Commits 2 Opened issues

Description

Doge is a high-performance, Python based, open source RPC framework

Services available

!
?

Need anything else?

Contributors list

# 102,364
HTML
wechat-...
wechat
CSS
59 commits

Doge

License Build Status codecov codebeat badge

Doge is a Python RPC framework like Alibaba Dubbo and Weibo Motan.

Features

doge

  • 服务治理, 服务注册, 服务发现
  • 高可用策略, failover, backupRequestHA
  • 负载均衡策略, RandomLB, RoundrobinLB
  • 限流策略, gevent Pool
  • 功能扩展, Opentracing, Prometheus

Quick Start

Installation

pip install dogerpc

你可以在examples找到以下实例

Doge server

  1. 新建server端配置文件
registry:  # 注册中心
  protocol: etcd  # 注册协议, 支持 etcd 与 direct, 默认 etcd
  host: 127.0.0.1  # 注册中心 host
  port: 2379  # 注册中心 port
  # "address": "127.0.0.1:2379,127.0.0.1:4001",  # 注册中心地址, 如果有etcd集群, 可配置多个node
  ttl: 10  # etcd注册ttl, 用于server的心跳检查, 默认10s
service:
  name: test  # 服务名称
  node: n1  # 节点名称
  host: 127.0.0.1  # 服务暴露ip
  port: 4399  # 服务暴露port
  limitConn: 100  # 服务最大连接数, 可选, 默认不限制
  filters:  # 服务端扩展中间件
    - doge.filter.tracing.TracingServerFilter  # opentracing
    - doge.filter.metrics.MetricsServerFilter  # prometheus
  1. 定义RPC methods类, 启动服务
# coding: utf-8

from gevent import monkey monkey.patch_socket() # 依赖gevent

import logging logging.basicConfig(level=logging.DEBUG)

from doge.rpc.server import new_server

定义rpc方法类

class Sum(object): def sum(self, x, y): return x + y

if name == 'main': server = new_server('server.yaml') # 基于配置文件实例化server对象 server.load(Sum) # 加载暴露rpc方法类 server.run() # 启动服务并注册节点信息到注册中心

Doge client

  1. 新建client端配置文件
registry:  # 注册中心
  protocol: etcd  # 注册协议, 支持 etcd 与 direct, 默认 etcd
  host: 127.0.0.1  # 注册中心 host
  port: 2379  # 注册中心 port
  # "address": "127.0.0.1:2379,127.0.0.1:4001",  # 注册中心地址, 如果有etcd集群, 可配置多个node
  ttl: 10  # etcd注册ttl, 用于server的心跳检查, 默认10s
refer:
  haStrategy: failover  # 高可用策略, 支持 failover backupRequestHA, 默认failover
  loadBalance: RoundrobinLB  # 负载均衡策略, 支持 RandomLB RoundrobinLB, 默认RoundrobinLB
  filters:  # 客户端扩展中间件
    - doge.filter.tracing.TracingClientFilter  # opentracing
    - doge.filter.metrics.MetricsClientFilter  # prometheus
  1. 创建client并call远程方法
# coding: utf-8

from future import print_function

from gevent import monkey monkey.patch_socket()

import logging logging.basicConfig(level=logging.DEBUG)

from doge.rpc.client import Cluster

if name == 'main': cluster = Cluster('client.yaml') # 基于配置文件实例化Cluster对象 client = cluster.get_client("test") # 获取服务名对应的Client对象 print(client.call('sum', 1, 2)) # 远程调用服务Sum类下的sum方法

Doge filter

filter
是Doge提供的自定义中间件扩展机制, 当前提供了
jaeger
链路跟踪与
Prometheus
的metrics,
filter
分为客户端
filter
与服务端
filter
, 具体的实例可以参考
filter
目录下的
tracing.py

Metrics

在使用

Prometheus
监控时, 需要在服务节点上配置环境变量
prometheus_multiproc_dir
用于存储
Gunicorn
启动多进程时的
metrics
数据, 然后在服务节点启动
Prometheus Python Exporter

https://gist.github.com/zhu327/56cdb58a21a750fb5ca5ae7ccd3e0112

如何在多进程下使用

Prometheus
参考这里

Doge json gateway

基于Bottle实现的json rpc gateway

https://gist.github.com/zhu327/24c8262dc40c5de7eeaddbfc572f4215

Gunicorn server

创建

app.py
, 沿用example中的配置文件
server.json
# coding: utf-8

from doge.rpc.server import new_server

定义rpc方法类

class Sum(object): def sum(self, x, y): return x + y

server = new_server('server.yaml') # 基于配置文件实例化server对象 server.load(Sum) # 加载暴露rpc方法类

创建

configs.py
, 填写的bind必须与
server.yaml
配置的监听端口一致 ```python from doge.gunicorn.configs import *

bind = "127.0.0.1:4399" ```

启动Gunicorn

gunicorn app:server -c configs.py

Requirements

License

Apache License, Version 2.0

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.