或者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调用

location匹配命令

1. “= ”,字面精确匹配, 如果匹配,则跳出匹配过程。(不再进行正则匹配)

2. “^~ ”,最大前缀匹配,如果匹配,则跳出匹配过程。(不再进行正则匹配)

3. 不带任何前缀:最大前缀匹配,举例如下:

location / 代表以”/”开头的搜索匹配, 再没有正则表达式匹配的情况下才进行这个匹配(优先级最低)

4. “~ ”,大小写相关的正则匹配

5. “~* ” , 大小写无关的正则匹配

6. “@”, Named location 不是普通的location匹配,而是用于location内部重定向的变量。

其中: 1、2、3 三种情况属于 location using literal string, 即使用普通字符串的location匹配;

4、5 二种情况属于 location using regular expresstion,即使用正则表达式的location匹配;

 

location = / {
# 只匹配”/”.
[ configuration A ]
}
location / {
# 匹配任何请求,因为所有请求都是以”/”开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
[ configuration D ]
}