最近实现了一个http的接口 ~ http的方式,访问结果为json
nginx做负载,web分离,url转发 ~
tornado做数据操作和异步调用lua的接口 ~
memcached做session的共享 (为啥不用redis做session,一方面是为了不和redis有kv冲突,服务器的中断冗余,更主要的方面是用redis存储session我没有做出来,郁闷呀。。。。)
redis做kv数据库和队列系统
后端的nginx lua是mysql的http方式的json展现接口
nginx 的配置大家都懂的,就是利用upstream负载。
worker_processes 4; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 30000; useepoll; } http { charset utf-8; # Enumerate all the Tornado servers here upstream frontends { server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; } include/path/to/nginx.mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; keepalive_timeout 65; proxy_read_timeout 200; sendfile on; tcp_nopush on; tcp_nodelay on; gzip on; gzip_min_length 1000; gzip_proxied any; gzip_types text/plain text/css text/xml application/x-javascript application/xml application/atom+xml text/javascript; # Only retry ifthere was a communication error, not a timeout # on the Tornado server (to avoid propagating "queries of death" # to all frontends) proxy_next_upstream error; server { listen 80; location ^~ /static/ { root /path/to/app; if($query_string) { expires max; } } location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://frontends; } } }
对于后端节点,监控的检查请用nginx的check模块 ~
模块下载地址:https://github.com/cep21/healthcheck_nginx_upstreams;模块名称:ngx_http_healthcheck_module
upstream myhttpd { server 127.0.0.1:8800weight=5; server 127.0.0.1:8801weight=5; healthcheck_enabled; 开启健康检查功能 healthcheck_delay 1000; 对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000。 healthcheck_timeout 1000; 进行一次健康检测的超时时间,单位为毫秒,默认值2000。 healthcheck_failcount 3; 对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器 healthcheck_send "GET/.health HTTP/1.0"; 对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器,只支持http 1.0的协议
uwsgi tornado的对比:
有朋友问过我,uwsgi的性能也可以呀。。。
以前我用flask的时候,经常要和uwsgi配合一起用,但是我和群里的人多方面测试压力,uwsgi不是很稳定,经常出现访问错误的情况,看debug也是看不出啥东西来。
这么多的tornado进程该如何开启?
用screen ,用 >/dev/null,用nohup ? 太搓了点吧~
推荐大家用supervisord管理杂乱的tornado服务和别的python服务。
源地址 http://rfyiamcool.blog.51cto.com/1030776/1301410
这里是centos supervisord 的配置
配置supervisor
yum install supervisor pip install supervisor
echo_supervisord_conf > /etc/supervisord.conf
vim /etc/supervisord.conf
[program:tornado8000] command=python /ops/tornado8000.py process_name=%(program_name)s stdout_logfile=/ops/access.log stderr_logfile=/ops/error.log [program:tornado8001] command=python /ops/tornado8001.py process_name=%(program_name)s stdout_logfile=/ops/access.log stderr_logfile=/ops/error.log [program:tornado8002] command=python /ops/tornado8002.py process_name=%(program_name)s stdout_logfile=/ops/access.log stderr_logfile=/ops/error.log [program:tornado8003] command=python /ops/tornado8003.py process_name=%(program_name)s stdout_logfile=/ops/access.log stderr_logfile=/ops/error.log
保存完配置后,咱们启动下: run~
/usr/bin/supervisord -c /etc/supervisord.conf
Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:
supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]
里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
然后用装饰器判断状态。。。
@tornado.web.authenticated
代码在这里 ,大家配置自己的系统搞一下。
https://github.com/mmejia27/tornado-memcached-sessions
关于lua的用法,大家可以看看我以前的博文,对于mysql有详细的用法的。
模块代码:
https://github.com/agentzh/lua-resty-mysql
实例代码:
upstream nginxbackend { drizzle_server 127.0.0.1:3306 dbname=nginx password=youpassword user=yourdbname protocol=mysql charset=utf8; drizzle_keepalive max=100 mode=single overflow=reject; } location = /getuser { internal; set_unescape_uri $user $remote_user; set_unescape_uri $passwd $remote_passwd; set_quote_sql_str $user $user; set_quote_sql_str $passwd $passwd; drizzle_query "select count(*) as count from user where user=$user and passwd=$passwd"; drizzle_pass nginxbackend; rds_json on; }
总之,我们要多方面的测试压力,才能找到适合自己业务的框架。
1.误差分析(Bias and Variance)当我们以非常复杂的模型去进行测试的时候,可能得到的结果并不理想影响结果的主要有两个因素:Bias 偏差、Variance 方差Bias 偏差在这里,我们定义偏差是指与目标结果的偏移量,这个偏移量是我们选出来的函数的期望 E ( f ∗ ) 。如图所示:与目标距离远的是大偏差,与目标距离近的是小偏差Variance 方差而方差描述的的是我们选出来的函数,他的稳定性,是否集中在目标区域与相对分散的是高方差,相对集中的是低方..
公司项目代码中,某枚举字段数据库表中类型是char(1),在代码中,误以为是TINYINT,所以用数字筛选,后来发现结果不对。发现了一个现象,用数字0筛选会把所有的记录给筛选出来。经过排查发现是在MySQL查询语句中,'abc'如果和'0'比较结果显然是不等的,但如果'abc'和0比较呢?结果居然是相等的。随意测试了几下,结果如下:mysql> select 'abc'=0;+---
主要是有几个地方的文件要修改一下config/swin下的配置文件,我用的是mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_1x_coco.py_base_ = [ '../_base_/models/mask_rcnn_swin_fpn.py', # '../_base_/datasets/coco_instance.py', '../_base_/datasets/coco_detection.py',
1:.NET框架运行在操作系统之上,是.NET最基础的框架。它提供了创建,部署和运行.NET应用的环境,主要包含公共语言运行时(CLR)和框架类库(.NET Framwork 类库,FCL),并且支持多种开发语言。.NET框架可以安装在Windows操作系统上,支持C#,C++,VB,.NET等开发语言,也就是我们所说的跨语言开发。2:.NET框架具有两个主要组件:CLR和FCL。CLR是.......
原文:http://chaoyouzhuo.blog.163.com/blog/static/12637600120118222631978/一、简介适配器模式,将一个类装换成客户期望的另外一个接口。Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作。二、解决的问题1、使用第三方组件,而这个组件的接口与目前系统接口不兼容(如方法与系统方法不一致等),可以使用
下载完成后,我们得到了文件mu_visual_cpp_build_tools_2015_update_3_x64_dvd_dfd9a39c.iso,解压后,双击VisualCppBuildTools_Full.exe即可自动进行安装。但是一方面安装Visual Studio需要时间很久,另外一方面会占用大量的磁盘空间,让空间原本就不富裕的固态硬盘雪上加霜。点击Visual Studio 2015 update 3后,下载对应的文件即可,约1.1G,这里需要将格式修改为DVD。
PHP 的真正威力源自于它的函数。在 PHP 中,提供了超过 1000 个内建的函数PHP内建函数PHP 有很多标准的函数和结构。还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。例如,要使用image函数比如 imagecreatetruecolor(),需要在编译PHP 的时候加上 GD 的支持。或者,要使用 mysql_connec...
基于Haar+Adaboost人脸识别特征1 什么是特征? 特征 = 像素经过运算后得到的结果(结果可以是具体值 向量 矩阵 多维)2 如何利用特征来区分目标? 阈值判决3 如何得到判决? 机器学习总结:1 特征 2 判决 3 得到判决Haar 特征计算原理十四种同分别对应十四种特征以第一种为例:蓝色背景:表明所定义的图片黑白矩形宽:表明特征模板例如:共...
sRGB代表色彩域的选择,一般终端预览都采用RGB格式, 其他对应了另一个选项为adobeRGB一般机器学习中与RAW为非压缩欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,
DescriptionFarmer John completed his new barn just last week, complete with all the latest milking technology. Unfortunately, due to engineering problems, all the stalls in the new barn are differ
1,首先要求内核4.9以上 uname -r 升级内核方法: 去http://kernel.ubuntu.com/~kernel-ppa/mainline/去找一个合适的内核 如4.16,下载三个文件 wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.16/linux-headers-4.16.0-041600_4.16.0-04...
问题在docker build 的过程中会出现中间镜像。中间镜像不一定会自动删除。会占用存储空间可以通过以下命令查找悬空的镜像docker images -f dangling=truedocker images更多用法可以看我的这篇博客https://blog.csdn.net/petrel2015/article/details/120450308积少成多,悬空镜像还是很占用空间的。具体占用系统哪块空间可以使用以下命令docker image inspect <IMAGE_ID&