常用的通信协议接口,api接口类型有哪些

  

     

  

  轻量级分布式文件系统入门教程FastDFS (1) 1.1为什么要有分布式文件系统单机时代?   

  

  优点:存取文件很方便。项目可以直接报价。实现起来很简单,不需要任何复杂的技术。保存和访问文件很方便。   

  

  缺点:一方面,文件和代码是耦合在一起的,文件存储得越多,它们就越混乱。另一方面,如果流量比较大,静态的文件访问会占用一定的资源,影响正常的业务,不利于网站的快速发展。   

  

  独立文件服务器   

  

  优点:网络/应用服务器可以更专注于动态处理。独立存储,更方便扩容、容灾和数据迁移;方便负载均衡图片等资源请求,应用各种缓存策略(HTTP头、代理缓存等。)并迁移到CDN。   

  

  缺点:单机存在性能瓶颈,容灾和纵向可扩展性略差。   

  

  分布式文件系统   

  

  优点:可伸缩性3360毫无疑问,可伸缩性是分布式文件系统最重要的特性;高可用性:在分布式文件系统中,高可用性包括两层,一是整个文件系统的可用性,二是数据的完整性和一致性;弹性存储:可以根据业务需求灵活地增加或减少数据存储,增加或删除存储池中的资源,而不会中断系统运行。   

  

  缺点:系统的复杂程度稍高,需要更多的服务器。   

  

  1.2分布式存储解决方案与指标的比较   

  

  适合类型   

  

  文件分布   

  

  复杂度   

  

  FUSE   

  

  POSIX   

  

  备份机制   

  

  通讯协议接口   

  

  社区支持   

  

  开发语言   

  

  分布式存储   

  

  4KB~500MB   

  

  小文件被合并和存储,没有碎片。   

  

  简单的   

  

  不支持   

  

  不支持   

  

  组内冗余备份   

  

  Api http   

  

  国内用户群   

  

  C   

  

  TFS   

  

  所有文档   

  

  小文件被合并,并分成块。   

  

  复杂的   

  

  不支持   

  

  不支持   

  

  存储数据块、主和辅助灾难恢复的多个拷贝   

  

  API http   

  

  很少的   

  

  C   

  

  马凡综合征   

  

  大于64K   

  

  片段存储   

  

  复杂的   

  

  支持   

  

  支持   

  

  多点备份动态冗余   

  

  使用保险丝   

  

  更大的   

  

  Perl语言   

  

  分布式文件系统   

  

  大文件   

  

  大文件碎片和块存储   

  

  简单的   

  

  支持   

  

  支持   

  

  多份拷贝   

  

  本机api   

  

  更大的   

  

  爪哇   

  

  Ceph   

  

  目标文件块   

  

  一主多从的OSD   

  

  复杂的   

  

  支持   

  

  支持   

  

  多份拷贝   

  

  本机api   

  

  较少的   

  

  C   

  

  MogileFS   

  

  大量小图片   

  

  非碎片存储   

  

  复杂的   

  

  可以支持   

  

  不支持   

  

  动态冗余   

  

  Http本机api   

  

  较少的文档   

  

  Perl语言   

  

  1.3什么是FastDFSFastDFS是用c语言编写的开源轻量级分布式文件系统。它管理文件,其功能包括文件存储、文件同步、文件访问(文件上传和文件下载)等。解决了大容量存储和负载均衡的问题。特别适合基于文件的在线服务,如相册网站、视频网站等。   

  

  FastDFS为互联网量身定制,充分考虑冗余备份、负载均衡、线性扩容等机制,注重高可用、高性能等指标。使用FastDFS,很容易构建一组高性能的文件服务器集群,提供文件上传、下载等服务。   

  

  1.4 FastDFS具有分组存储、灵活、简洁和对等结构的特点。没有块就没有单点文件存储。上传文件和OS文件系统中文件的文件ID由FastDFS生成。作为文件访问证书,FastDFS不需要传统的名称服务器。   

er和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块中、小文件均可以很好支持,支持海量小文件存储支持多块磁盘,支持单盘数据恢复支持相同内容的文件只保存一份,节约磁盘空间支持在线扩容 支持主从文件存储服务器上可以保存文件属性(meta-data)V2.0网络通信采用libevent,支持大并发访问,整 体性能更好下载文件支持多线程方式,支持断点续传1.5 FastDFS的构成

  

FastDFS由客户端(Client)、 跟踪服务器(Tracker Server)和存储服务器(Storage Server)构成。

  

客户端(client)

  

客户端(client),作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节 点进行数据交互。

  

跟踪器(tracker)

  

Trackerserver作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。

  

跟踪器在访问上起负载均衡的作用。可以随时增加或下线而不会影响线上服务。

  

存储节点(storage)

  

Storageserver作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

  

存储节点中的服务器均可以随时增加或下线而不会影响线上服务。

  

1.6 Linux下FastDFS 安装1. 安装编译环境yum install git gcc gcc-c++ make automake vim wget libevent -y复制代码2.安装libfastcommon 基础库mkdir /root/fastdfs cd/root/fastdfsgit clone https://github.com/happyfish100/libfastcommon.git --depth 1 cd libfastcommon/./make.sh && ./make.sh install复制代码3.安装FastDFScd /root/fastdfswget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz tar -zxvf V5.11.tar.gzcd fastdfs-5.11./make.sh && ./make.sh install#配置文件准备cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf cp /root/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs cp /root/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs复制代码vim /etc/fdfs/tracker.conf #需要修改的内容如下port=22122 base_path=/home/fastdfs复制代码vim /etc/fdfs/storage.conf #需要修改的内容如下port=23000base_path=/home/fastdfs # 数据和日志文件存储根目录store_path0=/home/fastdfs # 第一个存储目录tracker_server=192.168.59.9:22122# http访问文件的端口(默认8888,看情况修改,和nginx中保持一致) http.server_port=8888复制代码4.启动mkdir /home/fastdfs -p/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart#查看所有运行的端口netstat -ntlp复制代码5.测试上传vim /etc/fdfs/client.conf #需要修改的内容如下base_path=/home/fastdfs #tracker服务器IP和端口tracker_server=192.168.59.9:22122#保存后测试,返回ID表示成功 如:group1/M00/00/00/xxx.png/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/1.png group1/M00/00/00/wKjTiF7h5EWASb5aAACGZa9JdFo611.png复制代码6.安装fastdfs-nginx-module

  

cd /root/fastdfswget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz#解压tar -xvf V1.20.tar.gzcd fastdfs-nginx-module-1.20/src vim config#修改第5 行 和 15 行 修改成ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/" CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"复制代码cp mod_fastdfs.conf /etc/fdfs/复制代码vim /etc/fdfs/mod_fastdfs.conf #需要修改的内容如下tracker_server=192.168.59.9:22122 url_have_group_name=true store_path0=/home/fastdfs复制代码mkdir -p /var/temp/nginx/client复制代码7.安装nginxcd /root/fastdfswget http://nginx.org/download/nginx-1.15.6.tar.gz tar -zxvf nginx-1.15.6.tar.gzcd nginx-1.15.6/复制代码yum -y install pcre-devel openssl openssl-devel # 添加fastdfs-nginx-module模块./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src复制代码#编译安装make && make install#查看模块是否安装上/usr/local/nginx/sbin/nginx -V复制代码vim /usr/local/nginx/conf/nginx.conf复制代码#添加如下配置server { listen 8888; server_name localhost;location ~/group<0-9>/ {ngx_fastdfs_module;}}复制代码/usr/local/nginx/sbin/nginx复制代码8.测试下载#关闭防火墙systemctl stop firewalld http://192.168.59.9:8888/group1/M00/00/00/xxx.pnghttp://192.168.59.9:8888/group1/M00/00/00/wKjTiF7h5EWASb5aAACGZa9JdFo611.png复制代码1.7 java 访问FastDFS可以参考官方案例 github.com/happyfish10…

  

建立maven 工程 引入jar包<!--fastdfs的java客户端--><dependency><groupId>cn.bestwu</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27</version></dependency>复制代码引入配置文件#fastdfs-client.properties fastdfs.connect_timeout_in_seconds = 5fastdfs.network_timeout_in_seconds = 30 fastdfs.charset = UTF-8fastdfs.tracker_servers = 192.168.59.9:22122复制代码编写测试类@Test public void testUpload() throws IOException, MyException { //加载配置文件 ClientGlobal.initByProperties("fastdfs.properties"); //创建tracker客户端 TrackerClient trackerClient = new TrackerClient(); //根据tracker客户端创建连接,获取到跟踪服务器对象 TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; //定义storage客户端 StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer); //文件元信息 NameValuePair<> nameValuePairs = new NameValuePair<1>; nameValuePairs<0> = new NameValuePair("fileName", "1.jpg"); //上传,返回fileId String fileId = storageClient1.upload_file1("D:\\fastdfs\\1.jpg", "jpg", nameValuePairs); System.out.println(fileId); }复制代码@Test public void testQuery() throws IOException, MyException { //加载配置文件 ClientGlobal.initByProperties("fastdfs.properties"); //创建tracker客户端 TrackerClient trackerClient = new TrackerClient(); //根据tracker客户端创建连接,获取到跟踪服务器对象 TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; //定义storage客户端 StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer); //查询文件信息 FileInfo fileInfo = storageClient1.query_file_info1("group1/M00/00/00/wKjjCWKXdAWAEE6JAALGTZN_RFo075.jpg"); System.out.println(fileInfo); }复制代码@Test public void testDownload() throws IOException, MyException { //加载配置文件 ClientGlobal.initByProperties("fastdfs.properties"); //创建tracker客户端 TrackerClient trackerClient = new TrackerClient(); //根据tracker客户端创建连接 TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storageServer = null; //定义storage客户端 StorageClient1 storageClient = new StorageClient1(trackerServer, storageServer); //下载 byte<> bytes = storageClient.download_file1("group1/M00/00/00/wKjjCWKXdAWAEE6JAALGTZN_RFo075.jpg"); FileOutputStream fileOutputStream = new FileOutputStream("D:\\fastdfs\\download_01.jpg"); fileOutputStream.write(bytes); fileOutputStream.close(); }

  

原文链接:https://juejin.cn/post/7105296825825656839

相关文章