Git Product home page Git Product logo

harpc's Introduction

harpc是什么

HARPC(High Availability RPC)是基于Thrift的跨语言、高可用的RPC框架。具备高性能、高可用、轻量级等特点,在百分点科技内部服务中广泛使用。

使用指南:HARPC简介
QQ讨论群:398091913
高可用RPC

功能介绍

  • 跨语言通信
    • 方便的使Java、Python、C++三种程序可以相互通信
  • 负载均衡和容灾处理
    • 方便的实现任务的分布式处理
    • 支持服务的水平扩展,自动发现新的服务节点
    • 能够兼容各种异常情况,如节点的异常down机
  • 可视化管理
    • 通过服务管理系统可以方便查看服务状态和统计信息
  • 与原生thrift通信
    • 支持与原生thrift服务进行通信

与业内方案的对比

  • 与thrift、avro、hessian相比,harpc支持了高可用,并且更加易用
  • 与dubbo相比,harpc支持了跨语言,并且更轻量级
  • 与ice相比,harpc性能更高,并且更轻量级

设计思路

HARPC的核心**是高可用,那么在保证高可用的基础上,还需要具备跨语言、高性能、可视化及轻量级等特性。于是,我们在设计之初就选择了基于thrift开发的方案,底层通信使用thrift来保证高性能和跨语言,然后HARPC来保证高可用和可视化,并且尽量保持简单,来达到轻量级的需求。

  • 整体结构

整体结构

* 说明
    * 四个部分:client(客户端)、server(服务端)、registry(注册中心,目前为zookeeper集群)、admin(服务管理系统)
    * client和server又包括: your code(用户代码)、harpc(核心框架,包含Java、Python、C++三个版本)、thrift gen(thrift生成的源码文件,用于底层通信)

如何使用

测试结论

harpc的Java、Python、C++版本的性能略有差别,由高到低为:C++版本 ≈ Java版本 > Python版本,下面仅给出Java版本的测试数据和结论。

  • Java版本容错性测试 java版本容错性测试

  • Java版本性能测试 java版本性能测试

harpc's People

Contributors

dsfan avatar matrix2011 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  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

harpc's Issues

No handlers could be found for logger "bfd.harpc.loadbalancer"

client side 随机出现, 每一次出错 在 server 那里 ,同样的方法会被调用 多次

怎么破?

有时会伴有以下“错误”

No handlers could be found for logger "bfd.harpc.loadbalancer"
Traceback (most recent call last):
  File "/home/steven/gits/deploy_lda/server_test_hrpc.py", line 61, in <module>
    rv=proxy_client.train(X[0:9000],y[0:9000],32,'justtest')
  File "/usr/local/lib/python2.7/dist-packages/bfd/harpc/client.py", line 181, in _method_proxy
    return self._method_call(method_name, *args)
  File "/usr/local/lib/python2.7/dist-packages/bfd/harpc/client.py", line 217, in _method_call
    raise RpcException("Connection request timeout!")
bfd.harpc.exceptions.RpcException
Exception in thread Thread-3 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
  File "/usr/lib/python2.7/threading.py", line 763, in run
  File "/usr/local/lib/python2.7/dist-packages/kazoo-2.2.1-py2.7.egg/kazoo/protocol/connection.py", line 477, in zk_loop
  File "/usr/lib/python2.7/threading.py", line 586, in set
  File "/usr/lib/python2.7/threading.py", line 407, in notifyAll
<type 'exceptions.TypeError'>: 'NoneType' object is not callable

通过web端开启的server无法被删除?

如果通过本地直接启动服务端,在页面上是可以有“查看/删除”两个选项的。
但是一旦通过web的“+server”按钮添加之后,这个服务就没办法删除掉了(删除按钮不见了)。同时,在zookeeper中的地址 /harpc/service$name/servers/ip:port 是无法被rmr命令删除的。

我不理解这是设计上的问题,还是我操作不正确?

Java Client api方式通过zk字符串连接失败, 似乎创建时没有带上/harpc根节点

部分报错信息, 直连address的方式没有以下问题:

2017-06-20 00:35:35,969 INFO [main-EventThread] org.apache.curator.framework.state.ConnectionStateManager: State change: CONNECTED
2017-06-20 00:35:36,049 ERROR [main] com.bfd.harpc.registry.ZkClientRegistry: Create node error in the path : ${服务全名}/clients/${host}:0:i_
java.lang.IllegalArgumentException: Path must start with / character
at org.apache.curator.utils.PathUtils.validatePath(PathUtils.java:54)
at org.apache.curator.utils.PathUtils.validatePath(PathUtils.java:37)
at org.apache.curator.utils.ZKPaths.fixForNamespace(ZKPaths.java:63)
at org.apache.curator.framework.imps.NamespaceImpl.fixForNamespace(NamespaceImpl.java:82)
at org.apache.curator.framework.imps.CuratorFrameworkImpl.fixForNamespace(CuratorFrameworkImpl.java:579)
at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:434)
at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:44)
at com.bfd.harpc.registry.ZkClientRegistry.buildPathClients(ZkClientRegistry.java:125)
at com.bfd.harpc.registry.ZkClientRegistry.register(ZkClientRegistry.java:98)
at com.bfd.harpc.config.ClientConfig.createProxy(ClientConfig.java:149)
.......

harpc能支持广播吗

一个场景,一个codis放着数据D,然后我在多台机器里起着进程,每个进程里存在这么一份D,
我期望当codis被修改的时候,他们来调一下我的函数,这个函数会重读这个D。

我期望所有harpc控制的进程都执行这样的操作,而不是选一个。

对性能测试指标表示疑惑

读者使用原生的thrift的java版本,内网10M的带宽平均每1k的请求数据也要1~2ms左右,请问您的0.32秒是怎么测出来的,有具体的测试代码示例吗

handleRuntimeExceptions

RT:
使用0.10.0编译Thrift文件的时候生成的java文件实现了org.apache.thrift.ProcessFunction的handleRuntimeExceptions函数,但是0.10.0的java包里面的org.apache.thrift.ProcessFunction是没有handleRuntimeExceptions这个函数的,请问怎么解决生成的时候不生成handleRuntimeExceptions这个函数?

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.