function rateConfig()
{
return [
1 => 0.397,
2 => 0.400,
3 => 0.203,
];
}

function randRate()
{
$rateConfig = rateConfig();
foreach ($rateConfig as $k => $v) {
$rateConfig[$k] = $v * 10000;
}

//概率数组的总概率精度
$proSum = array_sum($rateConfig);

//概率数组循环
foreach ($rateConfig as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}

server
{
listen 80;
server_name xx.com;
index index.html index.php;
root /www/xx.com;

location /
{
index index.php;
if (!-e $request_filename) {
#多入口这几行也不需要
#rewrite /admin.php(.*)$ /admin.php$1 last;
#rewrite ^(.*)$ /index.php/$1;
#break;
rewrite ^/(.*)$ /index.php?s=$1 last;
}
}
location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
#try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi5.6.sock;
fastcgi_index index.php;
include fastcgi.conf;
#注意pathinfo.conf不需要
#include pathinfo.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 12h;
}

access_log off;
}


            //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调用