ttserver+nginx构建高并发高可用性应用

Easter79
• 阅读 636

ttserver+nginx构建高并发高可用性应用 ttserver一款兼容memcached协议,也可以通过HTTP协议进行数据交换,支持故障转移,高可用性,高并发的分布式key-value持久存储系统。key-value分布式存储系统的特点是查询快,存储数量大,高并发,非常适合通过主键进行查询的操作。 下面的案例是将图片以二进制的方式存入到ttserver中,并通过http方式读取图片。 一.配置nginx nginx_upstream_check_module模块地址: https://github.com/yaoweibin/nginx\_upstream\_check\_module nginx需要添加nginx_upstream_check_module模块,用于对后端服务器的健康情况检测,如果后端服务器不可用,则把这台服务器移除负载均衡轮循集群,所有的请求不往这台服务器上转发,待这台服务器恢复正常后,再把这台加入到负载均衡集群。这是LB的基本功能。 # vi nginx.conf user www-data; worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; error_log /var/log/nginx/error.log crit; pid /var/run/nginx.pid; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server_tokens off; access_log off; sendfile on; tcp_nopush on; keepalive_timeout 0; tcp_nodelay on; client_max_body_size 200m; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 5; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_types text/plain application/x-javascript text/css application/xml text/javascript; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } # vi default server { listen 80; server_name 192.168.1.213; memcached_connect_timeout 1s; location / { root /www/web/tmp; error_page 404 = @fallback ; } location ~ ^/ttlsa/ttlsa_([0-9a-zA-Z]\.+)$ { set $memcached_key $1; //memcached键值 add_header X-ttserver-key $memcached_key; //添加一个header信息 memcached_pass ttserver; memcached_next_upstream error timeout; //当发生错误或超时时,将请求转发到upstream下一个服务器 default_type text/html; error_page 404 = @fallback ; } location @fallback { rewrite ^ http://www.ttlsa.com redirect; } } # vi upstream.conf upstream ttserver { server 192.168.1.60:1978; server 192.168.1.60:1979; check interval=3000 rise=2 fall=2 timeout=1000; //interval检测周期3s一次,fall宕机标记2次失败后标记不可用 } 二.配置ttserver 需要将ttserver配置成主主结构。 ttserver的介绍,安装,配置参见: http://www.ttlsa.com/html/1220.html 三.测试 1.上传界面 # vi upload.php Upload Files

Select files to upload


2.存入ttserver # vi store.php [codesyntax lang="php"] "; if($\_FILES\['file'\]\['error'\] !== 0){ die('Error upload file. Error code '.$\_FILES\['file'\]\['error'\]); } $filename=$\_FILES\['file'\]\['name'\]; $tmpfilepath=$\_FILES\['file'\]\['tmp\_name'\]; $content=file\_get\_contents($tmpfilepath); echo 'ttserver+nginx构建高并发高可用性应用 '; echo "
"; $ttserver=new Memcache; $ttserver->addServer('192.168.1.60',1978); $ttserver->addServer('192.168.1.60',1979); $rt=$ttserver->set($filename,$content,0,0); if($rt){ echo "存储成功!\\n"; }else{ echo "存储失败!\\n"; } ?> [/codesyntax] 3.结果截图 上传图片: ttserver+nginx构建高并发高可用性应用 通过HTTP从ttserver中取图片: ttserver+nginx构建高并发高可用性应用 存在问题: 1.二进制传输问题: 二进制数据通过非纯8-bit的传输层传输时,会出现错误。最好是经过base64_encode编码后再传输。 2.序列化问题: Tokyo Tyrant使用memcached协议连接,用php的memcached客户端读取时不会自动反序列化。可使用unserialize()函数进行反序列化操作。此问题稍后再议。 表情图片,用户头像等等场景都可以使用此种方案。比如以用户ID号作为键值等等。 如需转载请注明出处: http://www.ttlsa.com/html/1429.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
程昱 程昱
2个月前
PHP+Go 开发仿简书,实战高并发高可用微服务架构
PHPGo开发仿简书,实战高并发高可用微服务架构download》quangneng.com/2105/导言随着互联网的快速发展,高并发和高可用性已成为现代Web应用的基本要求。仿简书的应用是一个很好的例子,它需要处理大量的用户请求,并且对可用性要求极高
乐和 乐和
2个月前
PHP+Go 开发仿简书,实战高并发高可用微服务架构
PHPGo开发仿简书,实战高并发高可用微服务架构download》itzx666.com/9054/PHPGo开发仿简书:实战高并发高可用微服务架构随着互联网的发展,高并发、高可用性的需求已经成为现代应用的必备特性。为了满足这些需求,微服务架构应运而生
彭玘 彭玘
3星期前
PHP+Go 开发仿简书,实战高并发高可用微服务架构
PHPGo开发仿简书,实战高并发高可用微服务架构download》chaoxingit.com/2105/PHPGo:开发仿简书,实战高并发高可用微服务架构在当今的互联网时代,高并发和高可用性已成为应用程序的基本要求。为了满足这些需求,越来越多的开发人
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k