WRITING LOG · 03

技术博客

记录技术实践、问题排查和持续成长,把每一次解决问题的过程留下来。

WORKSPACE

文章阅读

初窥负载均衡
2023-01-29
一直以来接触的都是些量小的小项目,早期的大项目用到负载均衡都是运维在搞没机会接触,今天搞了搞华为的ELB。
最开始以为服务商提供的负载均衡会自动创建镜像服务器,结果是我多虑了。拿华为的ELB来说就只是提供了请求转发和负载调度,服务器还是得自己开。
由于传统负载均衡只是创建一台带公网ip的机器来进行请求转发我遇到了第一个坑:负载均衡的请求转发跟我业务服务器上的nginx 请求转发有冲突。一方面我配置的nginx 是根据域名和端口以及请求路由规则来转发的,另一方面是我业务服务器上有多个ssl证书和服务,nginx 默认监听了全域的443端口。第二坑是业务代码上的:小型服务接口写习惯了按常规做法为了避免像爬虫或者无穷枚举暴力破解这类高频请求对服务造成影响通常都做了限流。也就是同一个ip 在短时间内疯狂请求的话直接拒绝。但是由于负载均衡是所有请求都由一个ip 转发过来的请求导致限流被误触服务等同于瘫痪,我不得不取消了限流。第三个坑是传统服务转负载均衡基本都肯定会遇到的:代码部署和日志服务分散的问题,由于请求是分散到多台服务器上的,每台服务器上的服务都是独立的,这让代码部署和日志收集变得复杂困难,总不能每台服务器都单独去处理一遍。由于时间紧急这个问题暂时还没解决,感觉更多的坑等着我踩……
laravel hasMany 限制取出的关联数据条数问题
2023-01-10
最近写代码的时候发现hasMany一对多的关联关系需要限制取出的关联数据条数,于是想当然地在关联方法里面写
$this->hasMany(mymodel::clss,$pk,$fk)->limit(10)->orderBy('created_at');
然后发现取出来的数据不对比预想的少,查了下资料应该这样做:
$feed= Feed::whereUserId($userId)
  ->with(['comments'])
  ->get()
  ->map(function ($query) {
    $query->setRelation('comments', $query->comments->take(10));
    return $query;
  });