Doge是一个基于Python的高性能开源RPC框架

网友投稿 1185 2022-10-29

Doge是一个基于Python的高性能开源RPC框架

Doge是一个基于Python的高性能开源RPC框架

Doge

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

Features

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

Quick Start

Installation

pip install dogerpc

你可以在examples找到以下实例

Doge server

新建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的心跳检查, 默认10sservice: 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

定义RPC methods类, 启动服务

# coding: utf-8from gevent import monkeymonkey.patch_socket() # 依赖geventimport logginglogging.basicConfig(level=logging.DEBUG)from doge.rpc.server import new_server# 定义rpc方法类class Sum(object): def sum(self, x, y): return x + yif __name__ == '__main__': server = new_server('server.yaml') # 基于配置文件实例化server对象 server.load(Sum) # 加载暴露rpc方法类 server.run() # 启动服务并注册节点信息到注册中心

Doge client

新建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的心跳检查, 默认10srefer: haStrategy: failover # 高可用策略, 支持 failover backupRequestHA, 默认failover loadBalance: RoundrobinLB # 负载均衡策略, 支持 RandomLB RoundrobinLB, 默认RoundrobinLB filters: # 客户端扩展中间件 - doge.filter.tracing.TracingClientFilter # opentracing - doge.filter.metrics.MetricsClientFilter # prometheus

创建client并call远程方法

# coding: utf-8from __future__ import print_functionfrom gevent import monkeymonkey.patch_socket()import logginglogging.basicConfig(level=logging.DEBUG)from doge.rpc.client import Clusterif __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-8from doge.rpc.server import new_server# 定义rpc方法类class Sum(object): def sum(self, x, y): return x + yserver = 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

geventmprpcpython-etcdpyformancepyyamlprometheus_clientjaeger-client

License

Apache License, Version 2.0

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:萌妹子Python入门指北(五)
下一篇:封装了okhttp的网络框架,简化Android网络请求
相关文章

 发表评论

暂时没有评论,来抢沙发吧~