/images/avatar.png

Schaepher's Blog

Repository 模式

从模型的角度看问题。站在调用 Repository 的用户的角度去看待这个东西。

从代码结构来看: Repository -> ORM(Store)

例如 Laravel 中的 Cache 用到的 Store。每个 Store 的存储介质不一样,但提供统一的接口。

用 CURL 命令分析请求时间

https://stackoverflow.com/questions/18215389/how-do-i-measure-request-and-response-times-at-once-using-curl

curl-format.txt

          域名解析结束时间:  %{time_namelookup}\n
  与远程主机建立连接完成时间:  %{time_connect}\n
      SSL/SSH握手结束时间:  %{time_appconnect}\n
          数据发送开始时间:  %{time_pretransfer}\n
发送结束前所有重定向所需时间:  %{time_redirect}\n
  接收返回的第一个字节的时间:  %{time_starttransfer}\n
                            ----------\n
                    总耗时:  %{time_total}\n

curl -w "@curl-format.txt" -o /dev/null -s "https://www.baidu.com"

load-balance

简介

  • Keepalived 实现 VIP 漂移到正常的机器
  • Nginx 用 stream 模块实现 TCP 层(四层)的负载均衡

Keepalived是一款高可用软件,它的功能主要包括两方面: 1)通过IP漂移,实现服务的高可用:服务器集群共享一个虚拟IP,同一时间只有一个服务器占有虚拟IP并对外提供服务,若该服务器不可用,则虚拟IP漂移至另一台服务器并对外提供服务; 2)对LVS应用服务层的应用服务器集群进行状态监控:若应用服务器不可用,则keepalived将其从集群中摘除,若应用服务器恢复,则keepalived将其重新加入集群中。

nginx-multiple-domain

问题:Laravel 的配置里面域名只能配置一个,但是现实要求多个域名能够访问。

因此使用 Nginx 做转发。

server {
    listen 80;
    server_name another-api.mydomain.com;

    location / {
      proxy_read_timeout 600s;
      fastcgi_read_timeout 600s;
      proxy_set_header        Host api.mydomain.com;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_pass http://api.mydomain.com;
    }
}

注意 header 里面的 Host 要设置为代理的域名