从单机存储进化为接口和存储的分离

概述

接口服务层对外提供REST服务,数据服务层提供数据存储功能。两者之间通过消息队列进行通信,数据服务层的所有数据服务注册dataServer Exchange, 以便client给接口服务层发消息后,接口服务收到GET请求时,定位对象被保存在哪一个数据服务节点,通过dataServer Exchange找到对应的数据服务。为保证dataServer Exchange中所有的数据服务都是有效,也为了让接口服务层知道数据服务节点。建立另一个apiServers Exchange作为心跳检测,由每一个数据服务节点持续发送心跳消息。

架构图

测试代码及步骤

配置好unbuntu环境后

 2010  sudo apt install golang-go2011  sudo apt install gccgo-go 2012  sudo apt-get install rabbitmq-server2014  sudo rabbitmq-plugins enable rabbitmq_management2015  wget localhost:15672/cli/rabbitmqadmin2017  python3 rabbitmqadmin declare exchange name=apiServers type=fanout2018  python3 rabbitmqadmin declare exchange name=dataServers type=fanout2019  sudo rabbitmqctl add_user test test2020  sudo rabbitmqctl set_permissions -p / test ".*" ".*" ".*"

配置运行环境变量

export GOPATH=~/go-implement-your-object-storage-master
go get github.com/streadway/amqp
sh ./tools/starttestenv.sh chapter2

测试代码

输入
curl -v 10.29.2.2:12345/objects/1234.txt -XPUT -d “add test 123”
查看
curl -v 10.29.2.2:12345/objects/1234.txt
定位在哪个服务器存储
curl -v 10.29.2.2:12345/locate/1234.txt
从服务器10.29.2.2:12345直接拿数据
curl -v 10.29.1.2:12345/objects/1234.txt

 $ curl -v 10.29.2.2:12345/objects/1234.txt -XPUT -d "add test 123"
*   Trying 10.29.2.2...
* TCP_NODELAY set
* Connected to 10.29.2.2 (10.29.2.2) port 12345 (#0)
> PUT /objects/1234.txt HTTP/1.1
> Host: 10.29.2.2:12345
> User-Agent: curl/7.58.0
> Accept: */*
> Content-Length: 12
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 12 out of 12 bytes
< HTTP/1.1 200 OK
< Date: Fri, 10 Apr 2020 12:35:21 GMT
< Content-Length: 0
<
* Connection #0 to host 10.29.2.2 left intact
kou@ubuntu:~/go-implement-your-object-storage-master$ curl -v 10.29.2.2:12345/objects/1234.txt
*   Trying 10.29.2.2...
* TCP_NODELAY set
* Connected to 10.29.2.2 (10.29.2.2) port 12345 (#0)
> GET /objects/1234.txt HTTP/1.1
> Host: 10.29.2.2:12345
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 10 Apr 2020 12:35:27 GMT
< Content-Length: 12
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 10.29.2.2 left intact
add test 123kou@ubuntu:~/go-implement-your-object-storage-master$ curl -v 10.29.2.2:12345/locate/1234.*   Trying 10.29.2.2...
* TCP_NODELAY set
* Connected to 10.29.2.2 (10.29.2.2) port 12345 (#0)
> GET /locate/1234.txt HTTP/1.1
> Host: 10.29.2.2:12345
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 10 Apr 2020 12:35:35 GMT
< Content-Length: 17
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 10.29.2.2 left intact
"10.29.1.2:12345" $curl -v 10.29.1.2:12345/objects/1234.txt
*   Trying 10.29.1.2...
* TCP_NODELAY set
* Connected to 10.29.1.2 (10.29.1.2) port 12345 (#0)
> GET /objects/1234.txt HTTP/1.1
> Host: 10.29.1.2:12345
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 10 Apr 2020 12:38:13 GMT
< Content-Type: text/plain; charset=utf-8
< Transfer-Encoding: chunked
<
* Connection #0 to host 10.29.1.2 left intact

goland添加环境变量

Edit congratulation>environment

rabbitmq监控

http://127.0.0.1:15672/

分布式是写出来的(二)相关推荐

  1. .NET 分布式架构开发实战之二 草稿设计

    前言: 本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下: 1) 第一个数据层草图的提出 2) 对数据访问层的思考 3) 第二个数据层草图的提出 1.数据层 ...

  2. 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 灰度图像的二维傅里叶变换(cv_gray_fft ...

  3. SpringBatch顺序读取多文件(MultiResourceItemReader)和顺序写文件(MultiResourceItemWriter)(二)

    文章目录 一.抽取顺序读取多文件公共reader 二.抽取写文件公共基于MultiResourceItemWriter 三.实现自己的ResourceSuffixCreator 四.读取多文件job ...

  4. 小白兔写话_二年级写话小白兔

    看图写话 小白兔韩奕哲夏天到了,小白兔拿着锄头到田地里种白菜.小白兔先刨土,一直干到了晚上,累得小白兔大汗淋漓.一天又一天过去了,白菜的种子发芽了,可是发芽的种子已经枯萎了,小白兔急忙拿来水壶给白菜浇 ...

  5. 【Android项目实战 | 从零开始写app(十二)】实现app首页智慧服务热门推荐热门主题、新闻

    说在前面,由于各种adapter,xml布局,bean实体类,Activity,也为了让看懂,代码基本都是"简单粗暴直接不好看",没啥okhttp和util工具类之类的封装,本篇幅 ...

  6. 为我的女儿小雪写的小学二年级数学练习程序

    最近看到大家还是对这篇文章感兴趣,如果哪位的孩子在上小学,需要类似的练习程序.在评论里详细说一下,有时间的话,就给大家写一下. 女儿二年级了,数学开始学习加减与乘除混合运算了 只好再写一个自动编写相应 ...

  7. 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)

    [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...

  8. 微电网分布式电源逆变器DROOP控制二次调频模型,加入二次控制实现二次调频控制,及二次调压控制

    微电网分布式电源逆变器DROOP控制二次调频模型,加入二次控制实现二次调频控制,及二次调压控制,程序可实现上图功能,工况有所改变. 需要matlab2021A版本 ID:545596735172708 ...

  9. Python分布式爬虫详解(二)

    上一章Python分布式爬虫详解(一)简单的介绍了什么是分布式爬虫,废话不多说,本章开始从零搭建一个爬取电影天堂电影信息的分布式爬虫. 本章知识点: a.CrawlSpider爬取电影天堂动作片第一页 ...

最新文章

  1. 长期使用中型Access数据库的一点经验
  2. jQuery学习笔记(四)——表单选择
  3. 网易严选高段位的“超级用户”数据运营法则
  4. maven 安装m2e 报错
  5. SQL Server 连接超时案例一则
  6. JavaScript异步编程之事件
  7. 【转】如何在win10(64位系统)上安装apache服务器
  8. crt怎么退出编辑模式_securecrt怎么退出当前指令
  9. android4.4.3版本root,ROOT大师:支持安卓4.3、4.4机型root
  10. iis php环境安装包下载,php5 环境集成安装包 for IIS6
  11. 最新美团Java面试题目(共3面)
  12. 【每日学习3.31】 筹备腾讯三面 - 阿V
  13. 网课答题查题公众号助手搭建教程
  14. 计算机幂函数xn,幂函数
  15. FIL世界全新板块——DeFi震撼来袭
  16. 小白刷LeeCode(算法篇)6
  17. android侧滑删除框架,Android 侧滑菜单(侧滑删除)总结
  18. Jscex没有xxxAsync().stop()怎么办?
  19. m=m++到底发生了什么
  20. ant design vue table 高度自适应_很受欢迎的vue前端UI框架

热门文章

  1. Java on Windows Mobile
  2. Android学习(七)—— Android布局
  3. 网络基础之 Nmap 命令
  4. link-cut-tree 简单介绍
  5. 其他团队对本团队评价的总结
  6. ubuntu系统下如何修改host
  7. django第二个项目--使用模板做一个站点访问计数器
  8. HDOJ 1896 Stones 解题报告
  9. PowerSocket对象与HostName
  10. 剑灵系统推荐加点_剑灵重制修炼系统 无定式加点打造自我风格