不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2016-12-12 19:35  分类:系统设计/架构 
作者:php-note.com  发布于:2016-07-19 14:21  分类:系统设计/架构 

如题:如何设计业务模块返回结果的结构?

一个业务函数/方法执行后,对外输出数据的结构通常有以下几种:

1、返回数字,如 成功时返回 0,失败时返回 -1,有的还会用一个全局变量输出错误信息:

<?php
class UserLogic extends \Think\Model {
	protected $error;

	/**
	 * 更改用户名称
	 *
	 * @param int    $userId   用户ID
	 * @param string $userName 用户名
	 * @return int -1: 操作失败, 0: 操作成功
	 */
	public function updateUserName($userId = 0, $userName = '') {
		if (empty($userId)) {
			$this->error = '用户ID不能为空';
			return -1;
		}

		if (empty($userName)) {
			$this->error = '用户名不能为空';
			return -1;
		}

		$where = array(
			'userId' => $userId
		);

		$data = array(
			'userName' => $userName
		);

		$res = $this->where($where)->save($data);
		if ($res !== false) {
			return 0;
		}

		return -1;
	}
}
作者:php-note.com  发布于:2016-01-10 08:59  分类:系统设计/架构 

现在,大部分App的接口都采用RESTful架构,RESTFul最重要的一个设计原则就是,客户端与服务器的交互在请求之间是无状态的,也就是说,当涉及到用户状态时,每次请求都要带上身份验证信息。实现上,大部分都采用token的认证方式,一般流程是:

  1. 用户用密码登录成功后,服务器返回token给客户端;
  2. 客户端将token保存在本地,发起后续的相关请求时,将token发回给服务器;
  3. 服务器检查token的有效性,有效则返回数据,若无效,分两种情况:
    • token错误,这时需要用户重新登录,获取正确的token
    • token过期,这时客户端需要再发起一次认证请求,获取新的token
作者:php-note.com  发布于:2015-07-09 12:48  分类:系统设计/架构 

一般一个大规模Linux服务器请求数可能是几十万上百万的情况,需要足够的连接数来使用,所以务必进行相应的设置。

默认的Linux服务器文件描述符等打开最大是1024,用 ulimit -a 查看:

[viewuser@~]$ ulimit -a
core file size          (blocks, -c) 0   #coredump 文件大小
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 255622
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024   #打开文件数量,root账户无限制
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096   #root用户本项是无限
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

如果超过了连接数量,可以在 /var/log/message 里面看到类似:

May 14 16:13:52 hostname kernel: nf_conntrack: table full, dropping packet

的信息,基本可以判定是fd不够用引起的。(服务器受到攻击也会有这个信息)

作者:php-note.com  发布于:2015-03-09 19:29  分类:系统设计/架构 

图片服务器被独立出来之后,会面临两个选择,主流的方案是前端采用Nginx,中间是PHP或者自己开发的模块,后端是物理存储;比较特别一些的,比如Facebook,他们把图片的请求处理和存储合并成一体,叫做haystack,这样做的好处是,haystack只会处理与图片相关的请求,剥离了普通http服务器繁杂的功能,更加轻量高效,同时也使部署和运维难度降低。

作者:php-note.com  发布于:2015-01-29 21:39  分类:系统设计/架构 

电商的秒杀和抢购,从技术的角度来说,会对Web系统产生巨大的考验。本文带大家关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因。

作者:php-note.com  发布于:2014-10-15 17:41  分类:系统设计/架构 

需要用到Shell脚本每隔3秒钟去监控一个软件进程的运行状态,发现crond似乎只支持到分,那么如何使用计划任务来直接实现呢?

最后解决方案如下,经验证,脚本运行非常稳定。

crontab -e

## For excuting scripts.sh every 3 seconds##on 2014-10-15
#-----------------------------------------------------------------
*/1 * * * *  /home/somedir/scripts.sh
*/1 * * * * sleep 3 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 6 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 9 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 12 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 15 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 18 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 21 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 24 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 27 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 30 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 33 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 36 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 39 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 42 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 45 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 48 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 51 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 54 &&  /home/somedir/scripts.sh
*/1 * * * * sleep 57 &&  /home/somedir/scripts.sh
#-----------------------------------------------------------------
作者:php-note.com  发布于:2014-09-20 11:46  分类:系统设计/架构 

几个常用操作:

1、备份

# 只导出表结构

d:/PHP/xampp/mysql/bin/mysqldump -h127.0.0.1 -uroot -p123456 snsgou_sns_test --no-data --default_character-set=utf8 > d:/Python/data/snsgou_sns_test_table.sql

# 只导出数据

d:/PHP/xampp/mysql/bin/mysqldump -h127.0.0.1 -uroot -p123456 snsgou_sns_test --no-create-info --default_character-set=utf8 > d:/Python/data/snsgou_sns_test_data.sql

# 全部导出(包含表结构及数据)

d:/PHP/xampp/mysql/bin/mysqldump -h127.0.0.1 -uroot -p123456 snsgou_sns_test --default_character-set=utf8 > d:/Python/data/snsgou_sns_test.sql

2、还原 (注:--force 参数,表示遇到错误时将继续执行)

d:/PHP/xampp/mysql/bin/mysql -h127.0.0.1 -uroot -p123456 snsgou_sns_test2 --force < d:/Python/data/snsgou_sns_table.sql 

d:/PHP/xampp/mysql/bin/mysql -h127.0.0.1 -uroot -p123456 snsgou_sns_test2  --force < d:/Python/data/snsgou_sns_data.sql

注意:mysqldump只能备份导出,而还原的话,则需要使用mysql命令。

作者:php-note.com  发布于:2014-07-18 13:53  分类:系统设计/架构 

一、sysbench安装篇

#源码下载,放到 /usr/local/src 目录下。

http://download.csdn.net/detail/wenjianbao/7648937

作者:php-note.com  发布于:2014-03-11 11:44  分类:系统设计/架构