//usort 更适合处理
usort($list,function ($a,$b){
return $a[‘original_price’] == $b[‘original_price’] && $a[‘desc’] > $b[‘desc’];
});

// $count = count($list);
// for ($k = 1; $k < $count; $k++) { // for ($i = 0; $i < $count - $k; $i++) { // if (isset($list[$i + 1])) { // if ($list[$i]['original_price'] == $list[$i + 1]['original_price'] && $list[$i]['desc'] > $list[$i + 1][‘desc’]) {
// $temp = $list[$i];
// $list[$i] = $list[$i + 1];
// $list[$i + 1] = $temp;
// }
// }
// }
// }

或者session没有可写权限

主要答案有修改runtime目录权限,还有关闭debug。其实这两个是共通的,tp5的默认log目录在runtime里面,并且tp5 默认打开debug的情况下生成日志。

所以目录权限不足,会导致500报错,应该是文件在写入的时候,没有权限导致,但是我的业务流程却是正常执行,说明tp5并没有把日志写入失败作为异常抛出,却改变了它的状态码。所以导致了数据正常返回,但是状态码却离奇变成了500。

微服务架构的设计原则

拆分足够微
轻量级通信
领域驱动原则
单一职责原则

DevOps(开发/运维)及两个披萨

不限于技术栈
微服务模块设计
服务拆分
服务注册
服务发现
服务消费
统一入口
配置管理
熔断机制
自动扩展

微服务拆分的意义

易于实现
易于维护
易于部署
易于更新

微服务拆分的方法

横向拆分:根据业务功能进行拆分。
纵向拆分:对于一个业务功能,根据不同层次进行拆分,如应用层、表现层、数据模型层等。

 

微服务拆分
1.根据服务职责拆分。把一个项目拆成多个服务,也就是多个单体应用
2.定义公用的输入输出。
3.定义公共库。比如说log,config,errors等基础库,还有redis,mongo,mysql等db的连接池初始化和rpc的连接池初始化
4.定义组件之间接口定义。比如说统一API网关,网关内部GRPC调用