software engineering 项目软件问题
stack overflow
database administrators 数据库问题
系统问题 ask ubuntu | unix& linux
1. 生产绝对不能让用户调用内部系统
不能给app服务指定公网访问域名, 必须走网关;
网关可以有token拦截,可以有 ip 角度 接口角度限制访问的频率;
生产差点事故;
给app 配置了域名, app.upower.sg; 这样导致短信发送接口被攻击了;
在nginx中去掉 app.upower.sg的server配置,又导致了服务调用不可用,
没有创建订单成功,那么用户可以一直租借充电宝!!!
2. linux
docker启动的容器,检查到底是docker compose启动的,还是docker run启动的
Docker Compose会设置com.docker.compose.project、com.docker.compose.service等标签。用户可以通过docker inspect命令查看容器的详细信息,然后过滤出Labels部分。如果有这些特定的标签,尤其是项目名称相关的,那么很可能是通过Compose启动的。
docker inspect --format='{{json .Config.Labels}}' <容器名或ID> | jq
docker inspect --format='{{json .Config.Labels}}' 00c49e58fb1f | jq
jq是Linux系统中把文本字符串格式化成json格式的工具
{
“com.docker.compose.config-hash”: “cd7f0553be6ad133873f564afbef8aef4fa1917d37a1f55b0c787c1133939913”,
“com.docker.compose.container-number”: “1”,
“com.docker.compose.oneoff”: “False”,
“com.docker.compose.project”: “mysql8036”,
“com.docker.compose.project.config_files”: “docker-compose.yml”,
“com.docker.compose.project.working_dir”: “/opt/docker/mysql8.0.36”,
“com.docker.compose.service”: “db”,
“com.docker.compose.version”: “1.25.0”
}
docker run 启动的容器: ◦ 默认不包含上述标签(除非手动添加了类似的 --label 参数)
用find 搜索到docker compose yml
3. 生产环境
4. 编码
本地debug测试服务器代码
nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5004 -jar /opt/apisix/fundation-test-1.0-SNAPSHOT.jar &
JDK 8 及其一下:-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
解释
transport=dt_socket:使用 Socket 通信。
server=y:JVM 作为调试服务器。
suspend=n:不阻塞 JVM 启动(设为 y 会等待调试器连接后再启动应用)。
address=*:5005:监听所有网卡的 5005 端口。
docker
dockerfile中设置参数
ENV JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
启动镜像做好端口的映射
docker run -p 5005:5005 -p 8080:8080 your-image
k8s
env:
- name: JAVA_TOOL_OPTIONS
value: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
kubectl port-forward pod/your-pod 5005:5005
流量转发逻辑
ssh -L 5005:serverhost:5005 user@test-server
link
新版本:
5.
Arthas:通过阿里开源的 Arthas 工具动态修改字节码(不重启服务)。
IDEA HotSwap:在调试模式下,修改代码后使用 Ctrl+F10 热更新(仅支持方法体修改)…
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: <你的Admin Key>' -X PUT -d '
{
"uri": "/*",
"plugins": {
"coraza-wasm": {
"conf": {
"rules": [
"Include @modsecurity.conf",
"Include crs-setup.conf",
"Include rules/*.conf"
]
}
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"backend:80": 1
}
}
}'
6. 网关
java发版出现502⇒ 有人发版;
7. json
序列化对象,手动指定 serialVersionUID ,有版本要求
@Data
public class TrustedDevice implements Serializable {
private static final long serialVersionUID = -6243351240857227829L;
8. 定时调度
quz
idleWaitTime 扫描任务的时间间隔
# Job Scheduler,处理定时任务
quartz:
job-store-type: jdbc
properties:
org:
quartz:
threadPool:
threadCount: 10
scheduler:
idleWaitTime: 3000
scheduler-name: backend_scheduler
9.
sequenceDiagram
participant Client
participant APISIX
participant Redis
Client->>APISIX: 携带Token请求API
APISIX->>Redis: 查询Token对应的userId
alt Token有效
Redis-->>APISIX: 返回userId
APISIX->>APISIX: 生成限流Key(userId+路径)
APISIX->>APISIX: 执行限流计数
alt 未超限
APISIX->>Client: 正常响应
else 超限
APISIX->>Client: 返回超限结果
end
else Token无效
APISIX->>Client: 返回token无效结果
end