微前端架构如何改变企业的开发模式与效率提升
1299
2022-10-29
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~