开发的服务集群部署方案,以etcd为基础(java)
当前有很多服务集群部署,但是对于我们自己开发的服务系统怎么样能够解决部署问题,对大家很麻烦和笨重.
首先,我想说对于我们国内,小公司小系统比较多。大型系统毕竟少数,向阿里云看齐的不多。其实所谓的需要集群部署,可能一般需要部署3个节点就差不多了。这么小的集群,采用企业级的大家伙是完全没有必要的。而且维护成本高,隔离不出来都很麻烦。也就是我们用了牛刀。
当然对于学习来说,了解企业级的大家伙是很有必要的,它的高大尚给我们很多空间,能够学习,能够增加饭碗的可靠。对于真实的部署却很难用到,或者说发挥其性能。说个简单例子,我们很多人都已经在使用zookeeper,但是这个真实的情况是,它是为了很大企业级的软件系统准备的,官方为了它能够支持很多很多的集群节点而不断改进,努力,但是我们普通用户哪里需要它那么强啊。虽然也在使用,但是我们就几个节点啊。它的性能根本发挥不出来。并且还得保持更新,为了那个出现的万一几率的问题。
最近空闲下来,不断给自己充电,慢慢积累了一些东西,感觉etcd是比较轻的,当然只是就眼前而言,很多组件类工具都是不断发展,最后很复杂笨重,希望它不会吧。但是etcd作为分布式K/V存储方案,具备很多基本功能,只需要自己简单组合,就能够用的很好。具体etcd是什么?有什么作用?什么原理?大家需要自己网上搜索。etcd3的监视功能,给我们的实时性带来很多优势。我感觉已经不错了。
经过上面的一段废话,让我们进入正题,很简单,看图:
我自己的服务就是服务节点1,2,3。只需要将自己的服务IP,端口注册到etcd集群中。我设计的格式是
服务系统名称/版本号/address/Leaseid作为key,值为服务的IP端口。同时每间隔一段时间(默认10s)向etcd集群刷新一次,作为心跳,告诉集群自己是活着的。太频繁我不建议,因为服务系统出现问题毕竟是少数,我们应该讲经历放在容错上。
我用java写了个例子,封装在项目etcd中的,其中的RegisterClusterServer即是服务节点注册,ClientCluster类是管理etcd集群节点的,该类会定时更新,获取etcd集群里面的所有节点地址。并且重新初始etcd集群访问客户端。ServerMonitor类则是监视新的服务节点加入和服务节点移除(异常),通过参数设置能够比较,更新文件。另外一个项目etcdmanager则是调用etcd项目,作为独立的查询系统,就是图上的独立代理。
当然另外还有一个hash一致方法的负载均衡,以供使用,项目已经上传git;这个项目只有一个类,还是来自网友的,只是测试了下,能够正常用我就没有研究了。总之,当前的一切只为小集群使用的,足够了。
好不容易休息,工作几年把自己身体整出问题了,感觉好尴尬。利用这个时间还是忍不住自己瞎捉摸了一下。希望今后有用吧,也说不定不会再弄程序了。我感觉做程序员真的累,有些时候顾不上家,而且房价一个劲涨的让人绝望。哎,发2句牢骚。希望所有程序员共勉。
HASH项目地址
https://github.com/jinyuttt/LoadBalance.git
封装项目地址
https://github.com/jinyuttt/etcdregister.git
---------------------
作者:jason成都
来源:CSDN
原文:https://blog.csdn.net/jinyuttt/article/details/82346909?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
开发的服务集群部署方案,以etcd为基础(java)的更多相关文章
- consul异地多数据中心以及集群部署方案
consul异地多数据中心以及集群部署方案目的实现consul 异地多数据中心环境部署,使得一个数据中心的服务可以从另一个数据中心的consul获取已注册的服务地址 环境准备两台 linux服务器,外 ...
- Redis 中常见的集群部署方案
Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redi ...
- 基于k8s集群部署prometheus监控etcd
目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...
- 高可用的K8S集群部署方案
涉及到的内容 LVS HAProxy Harbor etcd Kubernetes (Master Worker) 整体拓补图 以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少) ...
- MongoDB分片集群部署方案
前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...
- 基于Centos7xELK+Kafka集群部署方案
本次集群部署使用ELK版本统一为6.8.10,kafka为2.12-2.51 均可在官网下载 elasticsearch下载地址:https://www.elastic.co/cn/downloads ...
- kubeadm 线上集群部署(一) 外部 ETCD 集群搭建
IP Hostname 192.168.1.23 k8s-etcd-01 etcd集群节点,默认关于ETCD所有操作均在此节点上操作 192.168.1.24 k8s-etcd-02 etcd ...
- dubbo开发前戏--ZooKeeper集群部署(3.4.6)
最近在开发dubbo服务的时候一直用的是公司提供的zk平台,因为使用的人太多或者没人维护老是出问题,导致dubbo服务偶尔可以调通,偶尔调不通的情况,所以花点时间自己部署一套,后面出问题还方便看日志排 ...
- Mysql基于Mysql Cluster+MysqlRouter的集群部署方案
http://note.youdao.com/noteshare?id=a61c4a6ff2b76e5305430eb66eb116e2&sub=4B4B6E8D0E2849F9B0DFB67 ...
随机推荐
- Spring JdbcTemplate 使用总结
1.查询Object public Classify queryClassifById(int id){ String sql="select * from t_classify where ...
- vba SpecialCells(Type,Value) 参数说明
Range.SpecialCells 方法可以返回一个 Range 对象,该对象代表与指定类型和值匹配的所有单元格. 其语法如下: 表达式.SpecialCells(Type,Value) 其Type ...
- vue使用qrcode生成二维码,可以自定义大小
1,qrcanvas-vue插件,https://gera2ld.github.io/qrcanvas-vue/#logo.只支持像素大小的二维码 2,qrcode支持移动端自定义大小二维码 &quo ...
- Javascript:各种宽高
Javascript: IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度d ...
- js贪食蛇
<!DOCTYPE html><head><title>canvas贪食蛇</title><style>.canvas{ backgr ...
- Spring应用开发常见规范
1.Spring应用开发常见包命名规范 controller:控制器 service:服务-接口 impl:服务-实现 integration sao:调用其他模块的,把feign的调用放到这个下面 ...
- Android FlycoDialog 简单实用的自定义Android弹窗对话框之Dialog篇
效果图镇楼 FlycoDialog是一款非常棒的弹窗对话框处理框架,今天在这里主要讲一下他的自定义弹出对话框的功能,这里以第二幅效果图为例,图片已经放在博客最下方,X号自己随便找一个东西代替吧. ...
- Not able to find Java executable or version转载
转载地址:https://blog.csdn.net/qq_40902122/article/details/79437991 findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件.N ...
- Sharepoint学习笔记--如何定位网站集所在的w3wp进程
我们在调试WebPart或者EventHandler之类的自定义组件时会遇到如何定位部署的网站集所对应的w3wp.exe进程的问题,方法如下 : 方法1. 直接开始运行,输入cmd,再输入iisap ...
- js:JSON对象与JSON字符串转换
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式. 同时,JSON是 JavaScript 原生格式,这 ...