不灭的焱

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

作者:php-note.com  发布于:2017-12-10 22:59  分类:系统设计/架构  编辑

利用HTTP重定向协议实现负载均衡大概工作原理如下图:

作者:php-note.com  发布于:2017-12-08 17:35  分类:系统设计/架构  编辑

简介

开源、高性能、基于TCP均衡负载器、HTTP应用反向代理器;HAproxy是均衡负载和反向代理器,ha名字源于其可以对后端进行健康检查,保证后端的可用性。

HAproxy 1.2.5以上版本2.6以上内核支持epoll,基于事件驱动的单进程多路复用模型,具有很强的并发能力。

作者:php-note.com  发布于:2017-12-07 23:49  分类:系统设计/架构  编辑
作者:php-note.com  发布于:2017-09-17 21:15  分类:系统设计/架构  编辑
作者:php-note.com  发布于:2017-05-17 20:42  分类:系统设计/架构  编辑

最近公司买了台 阿里云主机(CentOS 6.8),按照惯例,需要配置一下 常用的开放的端口,在文件 /etc/sysconfig/iptables 中配置一下即可。

但是,竟然没有找到该文件(2年前买的阿里云主机是有的)。

作者: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服务器繁杂的功能,更加轻量高效,同时也使部署和运维难度降低。