Giter Site home page Giter Site logo

zhu327 / doge Goto Github PK

View Code? Open in Web Editor NEW
165.0 8.0 27.0 123 KB

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

License: Apache License 2.0

Python 99.47% Shell 0.53%
doge rpc rpc-framework service-oriented service-registry service-discovery microservices

doge's Introduction

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配置的监听端口一致

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

doge's People

Contributors

zhu327 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

doge's Issues

这个是啥原因呢?

etcd.EtcdConnectionFailed: Connection to etcd failed due to MaxRetryError("HTTPConnectionPool(host='127.0.0.1', port=2379): Max retries exceeded with url: /v2/keys/doge/rpc/test/n1 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x105c855c0>: Failed to establish a new connection: [Errno 61] Connection refused'))")

2个小问题

使用的时候用的direct模式,在client.call的时候报下面的错误,不知道是什么情况?
doge.rpc.client:socket error or bad method

还有个问题就是,我用的python3,在yaml的配置下是无法进行new_server创建的,改成json格式就可以了,这个转换是不是有点问题

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.