服务调用框架DataStrom
根据以前的命名服务,从新构建了下服务框架;
结构模式;c-center-s;
1.服务端:
服务端启动,讲自己的IP,端口注册到注册中心节点(master),然后注册自己的处理类(需要继承对应接口);
同时需要设置服务类型(是否是主从服务,如果是主从服务还需要设置自己是否是master);
如果不是主从服务则中心采用hash负载均衡进行服务调度;
同时有心跳给注册中心;
2.注册中心
启动注册中心,注册中心是主从方式存在,启动时选举自己为master;然后接收其余注册中心回应,2秒没有收到则认为自己是master进行发布,收到master的回复则更新信息;
master节点实时有心跳;
主要工作:
1.判断服务状态是否可以用,调度服务;
主从服务时判断master服务,进行数据处理;
多服务认为是需要选择调度,则使用均衡方式;
2.负载均衡服务,调度服务;
3.判断注册中心master节点,随时准备选举新master
3.客户端
客户端直接向注册中心请求:1.请求服务地址,直接与服务通讯 2.请求数据传输,直接由中心传递数据 ;同时需要设置是否需要回执数据;
4.通讯
整个框架考虑到数据实时传输,大数据量处理,直接采用udp通讯;提供了高层封装;
封装的通讯层使用了数据分包,按照udp适合的传输包大小设置,你也可以自己调用接口设置分包大小;每包分配了一个ID,同时一次传输认为是一个session,分配seesion的id;
接收端按照数据接收,同时有包丢失时会再次向发送端请求再次发送;
接收端设计了接收发送;
发送端进行了数据缓存,内存中缓存一定时间,接收到接收端完成的ack就清除,否则保持1分钟;直到内存耗尽;
如果是注册中心,数据内存缓存到期还会缓存到本地数据库中(持久化),在本地保持最近10分钟数据;都是timer清除;
采用udp同样也是基于框架功能,不需要连接,可以在使用时可以直接反向发送数据;也可以不发送;
整个通讯已经测完成;
5.使用包
本框架使用了goolge工具包guava-22.0,界面库JTattoo-1.6.11,公共序列化包fastjson-1.2.9;持久化数据库BerkeleyDB
服务调用框架DataStrom的更多相关文章
- 【原创】自己动手实现RPC服务调用框架
自己动手实现rpc服务调用框架 本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者).battercake- ...
- 自己动手实现RPC服务调用框架
转自:http://www.cnblogs.com/rjzheng/p/8971629.html#3977269 担心后面忘了,先转了,后面借鉴实现一下RPC -------------------- ...
- java使用netty模拟实现一个类dubbo的分布式服务调用框架
本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...
- Spring Cloud微服务系列文,服务调用框架Feign
之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON. 这种 ...
- WebService服务调用方法介绍
1 背景概述 由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法. 2 ...
- ZooKeeper伪分布集群安装及使用 RMI+ZooKeeper实现远程调用框架
使用 RMI + ZooKeeper 实现远程调用框架,包括ZooKeeper伪集群安装和代码实现两部分. 一.ZooKeeper伪集群安装: 1>获取ZooKeeper安装包 下载地址:ht ...
- Windows服务调用Quartz.net 实现消息调度
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...
- RPC调用框架比较分析
什么是RPC: RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC ...
- alibaba远程调用框架dubbo原理
alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个框架/工具/产 ...
随机推荐
- 初用jdbc来运行事务
dao层 public Connection getConnection() throws Exception { Class.forName(driver); if (con == null || ...
- Unity中对系统类进行扩展的方法
Unity扩展系统类,整合简化代码 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Codeforces1100F. Ivan and Burgers(离线+线性基)
题目链接:传送门 思路: 按查询的右端点离线. 然后从左到右维护线性基. 每个基底更新为最右边的方案,可以让尽量多的查询享受到这个基底. 用ci维护后更新右端点为i的答案. 代码(析构1000ms,别 ...
- 兄弟连学python---网络简介
网络简介 1.什么是网络 网络是辅助双方能够连接在一起的工具 使用网络的目的 为了联通多方然后进行通讯,能够让软件在不同的电脑上运行,相互传输数据 网络的发展 网络协议 什么是协议 约定俗成的,没有理 ...
- bootstrap4.0
1.CDN库引用: <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4 ...
- P1181 数列分段Section I
题目描述(跳转) 对于给定的一个长度为NN的正整数数列A_iAi,现要将其分成连续的若干段,并且每段和不超过MM(可以等于MM),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 第1 ...
- 将连接数据库的JDBC提成BaseDao
package com.shangke; import java.io.FileReader;import java.io.IOException;import java.io.InputStream ...
- 学习笔记(三)--Lucene分词器详解
Lucene-分词器API org.apache.lucene.analysi.Analyzer 分析器,分词器组件的核心API,它的职责:构建真正对文本进行分词处理的TokenStream(分词处理 ...
- vue---条件与循环语句
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...
- 虚拟机安装精简版centos7过程
虚拟机配置工作如下所示 1.创建虚拟机 使用键盘组合键CTRL+N2.选择自定义(高级) 如图所示: 3.默认如何所示: 4.选择 稍后安装操作系统 如图所示: 5.选择对应的操作系统 如何所示 6 ...