thrift、avro、grpc之类的rpc框架默认都没有提供负载均衡的实现,生产环境中如果server只有一台,显然不靠谱,于是有了下面的设计,这其实是前一阵跟北京一个朋友在qq群里交流的结果,分享一下:

主要思路:

1、rpc server端以多实例方式运行(多端口或多机部署均可),启动时每个实例向zk集群以临时节点方式注册(这样,遍历zk上/server下有多少个临时节点就知道有哪些server实例在线)

2、客户端自己实现一个连接池,连接池初始化时,从zk将在线的server实例信息同步到本地并缓存,同时监听zk下的节点变化,然后建立连接若干(简单考虑的话,可以与每个server实例建立一个连接)

3、客户端需要与Server通讯时,从连接池中取一个可用的连接,用它实现远程调用。

需要考虑的细节:

连接池其实是关键,要设计完善的话,还是有很多细节要认真考虑:

a) 连接池的初始连接数、最低连接数、最大连接数,这些都是要考虑的。

b) 如果长时间没有client调用,要有额外机制来释放闲置连接(可以额外开一个线程定时检测)

c) 如果server端,某个实例down掉,要考虑将对应的连接置为不可用,或者直接释放。

d) 没有可用连接时,如果池中的连接数<最大连接数,要考虑主动创建新连接。

e) 所有连接都占用,也无法创建新连接时,要有通知机制(邮件、短信之类的都行)及时通知运维人员,提示新增server实例。

最新文章

  1. 如何静态添加toolbar到datagrid
  2. cs11_c++_lab6
  3. 【转载】dirs、pushd、popd指令
  4. Xcode 性能优化
  5. 8.Methods(一)
  6. IOC(控制反转和依赖注入)之Autofac
  7. Codeforces Round #330 (Div. 1) A. Warrior and Archer 贪心 数学
  8. ASP.NET内部原理(HttpHandler和HttpModule)
  9. TypeScript环境搭建
  10. 在python文本编辑器里如何设置Tab为4个空格
  11. spice for openstack
  12. Mybatis一对多查询得不到多方结果
  13. Angular4---认证---使用HttpClient拦截器,解决循环依赖引用的问题
  14. 数字信号处理专题(2)——利用FPGA进行基本运算及特殊函数定点运算
  15. 理解ECS的概念和Unity中的ECS设计
  16. Python中的一些小技巧
  17. 批量导出hive表的建表语句
  18. jQuery -- 光阴似箭(三):jQuery 操作 HTML 元素和属性
  19. mysql插入数据会变中文
  20. vim中的分屏操作

热门文章

  1. [ASP.NET Core] Static File Middleware
  2. js事件委托
  3. 让网站动起来!12款优秀的 jQuery 动画插件推荐
  4. 这个jQuery导航菜单怎么样
  5. javascript中DOM部分基础知识总结
  6. SAP中需要记住的一些标准表
  7. Linux0.11内核--引导程序分析
  8. java读取txt/pdf/xls/xlsx/doc/docx/ppt/pptx
  9. jquery通过class验证表单不能为空
  10. Maven基础配置—本地Maven配置