分布式是写出来的(二)

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

概述

接口服务层对外提供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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式是写出来的(五)

数据冗余策略 RS(Reed Solomon Coding)纠删码 在存储系统中&#xff0c;需要采用数据冗余技术来保证数据的可靠性&#xff0c;相比使用多副本复制机外&#xff0c;使用纠删码能够以更小的数据冗余度获得更高的数据可靠性。 RS纠删码将原文件分成n个数据块&#xff0c;同时为这…

java在acm中的一些应用

这两天遇到了一些关于大数据处理的题目&#xff0c;发现Java对于这方面的优势很大。最重要的是代码量小了。于是针对这两天对Java的摸索&#xff0c;写一篇日志。记录一下针对ACM来说常用的Java方面的东西。1、输入首先要想输入需要先包括&#xff1a;[java] view plaincopyimp…

Codeforces 55D Beautiful Number (数位统计)

把数位dp写成记忆化搜索的形式&#xff0c;方法很赞&#xff0c;代码量少了很多。 下面为转载内容&#xff1a; a positive integer number is beautiful if and only if it is divisible by each of its nonzero digits. 问一个区间内[l,r]有多少个Beautiful数字 范围9*…

埃拉托斯特尼筛法 快速查找素数

埃拉托斯特尼筛法快速查找素数时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述现在给你一个正整数N&#xff0c;要你快速的找出在2.....N这些数里面所有的素数。输入给出一个正整数数N(N<2000000)但N为0时结束程序。测试数据不超过100组…

教主们:虽然这道题我不会,但Ac还是没问题的。

wywcgs&#xff1a;亦称Lord Wu&#xff0c;俗名吴垠&#xff0c;2009级厦门大学智能科学与技术学院研究生&#xff0c;本科就读于哈尔滨工业大学。因其深厚的算法功底与独到的思维方式&#xff0c;被尊为“吴教主”&#xff0c;至今声威犹存。2006年起参加ACM/ICPC竞赛&#x…

引用 Map 数据结构的排序问题

用过map吧&#xff1f;map提供一个很常用的功能&#xff0c;那就是提供key-value的存储和查找功能。例如&#xff0c;我要记录一个人名和相应的存储&#xff0c;而且随时增加&#xff0c;要快速查找和修改&#xff1a; 岳不群&#xff0d;华山派掌门人&#xff0c;人称君子剑 …

程序猿不能错过的十部电影

不同的行业领域中很多时候都分享着共同的思想和理念。比如&#xff0c;大量的计算机编程中涉及到的概念都被运用到了电影里。有些概念出现在电影里后变得如此之酷&#xff0c;甚至反过来能帮助我们程序员更好的理解这些概念。下面就是小编最喜欢的10大电影&#xff0c;它们都在…

goland远程调试Docker

开发环境 goland windows10 Docker centos IP:123.57.43.91 操作原理及流程 goland通过tcp/8080(应该选取2375&#xff0c;登录阿里云开启这个端口&#xff0c;这里临时采用)端口与docker-host通信&#xff0c; 发送docker指令&#xff0c;然后让linux执行&#xff0c;通过d…

紫书的训练计划——一点点来,坚持到底!

先做 第10章3 数论的一点补充。然后趁热温习 10.1 和10.2 &#xff08;可能会有重的题目&#xff09; &#xff08;期望&#xff0c;概率的题目还要过段时间回来补坑&#xff09;然后 第7、8.1&#xff0c;8.2 章做暴力求解和高效算法&#xff08;可以适当的加快步伐&#…

go设计模式思维导图

go设计模式思维导图

【转载】最短路径之Dijkstra算法详细讲解

&#xff11; 最短路径算法 在日常生活中&#xff0c;我们如果需要常常往返A地区和B地区之间&#xff0c;我们最希望知道的可能是从A地区到B地区间的众多路径中&#xff0c;那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题&#xff0c; 旨在寻找图&#xf…

Intelij 添加php注释

没有methodParameters()) groovyScript("def result; def params\"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList(); for(i 0; i < params.size(); i) {result * param params[i] ((i < params.size() - 1) ? \\n:)}; return result…

为什么LeetCode过一段时间又不会了

怎么从这个迷宫的左上角走到右下角&#xff1f; 看起来好像很简单&#xff0c;花时间还是可以找得到答案。 看了答案之后可以很清楚&#xff0c;这是正解。 只有一个问题&#xff1a; 我怎么就没立刻想到&#xff1f; 当在看题解或者听别人讲授思路的时候&#xff0c;你就是…

148. 排序链表

148. 排序链表 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示…

HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)

畅通工程续 题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1874 Problem Description 某省自从实行了很多年的畅通工程计划后&#xff0c;终于修建了很多路。不过路多了也不好&#xff0c;每次要从一个城镇到另一个城镇时&#xff0c;都有许多种道路方案可以…

vim如何自动补全,ycm配置

vimplus已经很完善了&#xff0c;现在安装已经很容易了。 git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ~/.vimplus ./install.sh Ubuntu配置vim 更新2018年11月8号 用了一段时间的Ubuntu 18简直太方便了。 三步操作全部配完&#xff01;&#xff01;&a…

Cake -- ACM解决方法

一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食. Input 每行有两个数p和q. Output 输出最少要将蛋糕切成多少块. Sample Input 2 3 Sample Output 4 …

【转载】ACM中矩阵乘法的应用

copied from 大神s blog 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中&#xff0c;一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵&#xff0c;得到的结果是一个n行p列的矩阵&#xff0c;其中的第i行第j列位置上的数等于前一…

线程控制(一)

1. 线程执行顺序问题 #include <stdio.h> #include <string.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h>void *thread1(void *); void *thread2(void *);pthread_key_t key;void *thread1(void *arg){int a 1, *tsd &a…

C++学习笔记(一)

本文主要内容为C下的输入输出函数以及for循环中的C11新特性。 一、输入输出函数 1. cin cin 遇到 空格、回车、Tab结束输入&#xff0c; 且会将读到的空格、回车、Tab 丢弃&#xff0c;例&#xff1a; #include<iostream> using namespace std;int main(void) {char a…