当前位置: 首页 > news >正文

亿级分布式系统架构演进实战(十一)- 垂直拆分(服务治理体系、安全架构升级)

亿级分布式系统架构演进实战(一)- 总体概要
亿级分布式系统架构演进实战(二)- 横向扩展(服务无状态化)
亿级分布式系统架构演进实战(三)- 横向扩展(数据库读写分离)
亿级分布式系统架构演进实战(四)- 横向扩展(负载均衡与弹性伸缩)
亿级分布式系统架构演进实战(五)- 横向扩展(缓存策略设计)
亿级分布式系统架构演进实战(六)- 横向扩展(监控与日志体系)
亿级分布式系统架构演进实战(七)- 横向扩展(安全防护设计)
亿级分布式系统架构演进实战(八)- 垂直拆分(领域划分及垂直分库设计)
亿级分布式系统架构演进实战(九)- 垂直拆分(服务间通信设计)
亿级分布式系统架构演进实战(十)- 垂直拆分(分布式事务管理设计)

第一部分:服务治理体系升级

目标:提升拆分后的系统可观测性、可控性


1. 服务注册与发现(Nacos集群)
设计意图

高可用保障:AP模式确保集群在部分节点故障时仍可提供服务发现能力。
健康监测:心跳机制实时剔除异常实例,避免流量路由至宕机节点。

技术方案

集群部署

# Nacos集群配置(3节点示例)
spring:cloud:nacos:discovery:server-addr: 192.168.1.10:8848,192.168.1.11:8848,192.168.1.12:8848namespace: prodephemeral: true  # AP模式

心跳检测优化

检测策略:
1. 客户端每5秒发送心跳包
2. 服务端连续3次未收到心跳则标记实例不健康
3. 30秒后自动摘除实例
生产级实践

跨机房容灾:Nacos节点分散部署在3个可用区。
容量规划:单个Nacos集群支撑10万级服务实例注册。


2. 元数据路由(灰度发布)
设计意图

流量精细控制:按版本、标签将请求路由至特定服务实例。
无损发布:支持灰度发布新商品服务,降低上线风险。

技术实现

路由规则配置

# Nacos元数据路由规则
spring:cloud:gateway:routes:- id: product_routeuri: lb://product-servicepredicates:- Header=X-Tag, Gray  # 灰度标签匹配metadata:version: v2

灰度发布流程

1. 新版本服务部署至20%实例并打标Gray
2. 通过Header/X-Tag分流10%用户请求
3. 监控新版本服务错误率与延迟
4. 全量发布或回滚
优劣势分析

优势:支持多维度路由(IP、用户ID、Header),灵活适配业务场景。
风险:需确保灰度标签传递全链路(通过OpenTelemetry Baggage)。


3. 敏感配置加密(AES)
设计意图

数据安全:防止数据库密码等敏感信息泄露。
合规要求:满足等保2.0等安全审计标准。

技术方案

加密流程

明文配置 → AES加密 → 密文存储 → 运行时解密

KMS集成:通过阿里云KMS动态获取加密密钥。
生产配置示例

# 加密数据库密码
spring:datasource:password: '{cipher}U2FsdGVkX1+Z4Z7v8J7w6j5T7K8J9L0Q1W2E3R4T5Y6U7I8O9P0'  
解密实现
public class DecryptPropertyProcessor implements EnvironmentPostProcessor {@Overridepublic void postProcessEnvironment(ConfigurableEnvironment env, SpringApplication app) {String encryptedPassword = env.getProperty("spring.datasource.password");String decrypted = AESUtils.decrypt(encryptedPassword, kmsClient.getKey());env.getPropertySources().addFirst(new MapPropertySource("decrypted", Collections.singletonMap("spring.datasource.password", decrypted)));}
}

4. 统一配置中心(多环境管理)
设计架构
加密存储
按环境隔离
按环境隔离
按环境隔离
配置发布
Nacos集群
DEV环境
TEST环境
PROD环境
服务实例
核心能力

环境隔离:通过Namespace隔离开发、测试、生产配置。
动态刷新:@RefreshScope注解支持配置热更新。

生产配置示例
# 按服务分环境管理
spring:cloud:nacos:config:server-addr: 192.168.1.10:8848namespace: ${spring.profiles.active}group: ${spring.application.name}

五、全链路追踪(SkyWalking)详细设计


5.1 技术选型与优势

选型背景
行业验证:SkyWalking作为Apache顶级项目,广泛用于微服务监控(如阿里、腾讯生产环境)。
功能完备:支持自动拓扑发现、服务性能指标、慢服务检测、链路追踪等。
低侵入性:通过Java Agent字节码增强,无需代码改造。

对比优势

特性SkyWalkingOpenTelemetry+Jaeger
部署复杂度单一组件,开箱即用需集成多个组件(Collector、Storage等)
数据可视化内置Dashboard,支持拓扑图、链路追踪依赖第三方UI(如Jaeger UI)
生产级特性内置告警规则、服务依赖分析需自行开发或集成外部工具

5.2 部署架构设计

集群架构

业务服务集群
SkyWalking集群
Agent
Agent
Agent
Service 1
Service 2
Service 3
H2/Elasticsearch
OAP Server 1
OAP Server 2
OAP Server 3
Web UI

组件说明
OAP Server:负责接收、分析、存储追踪数据,支持横向扩展。
Storage:可选H2(测试)、Elasticsearch(生产),本文选择ES集群。
Web UI:提供可视化Dashboard,展示拓扑图、链路详情、性能指标。


5.3 接入配置(Java Agent方式)

步骤1:Agent下载与部署

# 下载SkyWalking Agent
wget https://archive.apache.org/dist/skywalking/java-agent/8.12.0/apache-skywalking-java-agent-8.12.0.tgz
tar -zxvf apache-skywalking-java-agent-8.12.0.tgz# 启动服务时挂载Agent
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \-Dskywalking.agent.service_name=order-service \-Dskywalking.collector.backend_service=sw-oap:11800 \-jar order-service.jar

关键参数
agent.service_name:服务名(需唯一)。
collector.backend_service:OAP Server地址。


5.4 生产级配置优化
5.4.1 数据存储(Elasticsearch)
# OAP Server配置(application.yml)
storage:selector: elasticsearchelasticsearch:nameSpace: skywalkingclusterNodes: elasticsearch:9200protocol: httpuser: "elastic"password: "changeme"indexShardsNumber: 3indexReplicasNumber: 1

优化建议
分片策略:根据数据量调整分片数(如每日TB级数据需分片6-10个)。
保留策略:设置索引生命周期管理(ILM),保留最近30天数据。


5.4.2 采样率控制
# 控制追踪数据量,防止ES过载
agent:sample:n_per_3_secs: 10  # 每服务每秒最多10条追踪buffer:channel_size: 5000 # 内存队列容量

适用场景
高频服务:支付服务等核心接口,采样率适当调高(如20%)。
低频服务:日志服务等非关键链路,采样率可降低至1%。


5.4.3 自定义追踪(手动埋点)
// 创建自定义Span(订单创建流程)
try (Scope scope = ContextManager.createLocalSpan("OrderCreateProcess")) {// 业务逻辑ContextManager.await().tag("order_id", orderId);ContextManager.await().log("Create order start");// 添加错误标记if (error) {ContextManager.await().error(new RuntimeException("Create failed"));}
}

应用场景
关键路径标记:标记订单创建、支付回调等核心业务Span。
异常监控:手动记录业务异常,触发告警。


5.5 关键功能实现
5.5.1 服务拓扑自动发现

实现原理
Agent自动上报:服务启动时注册元数据(服务名、实例IP)。
依赖分析:通过Span中的跨服务调用信息,自动绘制服务依赖图。

生产视图

5.5.2 慢服务检测与告警

内置告警规则

# OAP Server告警规则(alarm-settings.yml)
rules:service_sla:metrics-name: service_slaop: "<"threshold: 99.9  # 服务成功率低于99.9%触发period: 10       # 统计周期10分钟count: 1         # 触发次数message: "Service {name} SLA 低于99.9%"slow_endpoint:metrics-name: endpoint_avgop: ">"threshold: 2000  # 平均响应时间>2秒message: "端点 {name} 响应时间超过2秒"

告警通知
• 支持Webhook、钉钉、邮件等通知渠道。


5.5.3 数据库性能监控

实现方案
JDBC插件:自动追踪SQL执行耗时、参数(需启用skywalking-plugin-jdbc)。
慢SQL检测:标记执行时间>1秒的SQL,生成告警事件。

配置示例

# Agent插件配置(agent.config)
plugin.jdbc.trace_sql_parameters=true  # 记录SQL参数(需安全审核)
plugin.mysql.tracing_sql_parameters=true

5.6 生产验证与优化
5.6.1 验证步骤
  1. 链路完整性
    • 发起订单创建请求,确保全链路(网关→订单服务→库存服务→支付服务)被追踪。
  2. 数据准确性
    • 对比SkyWalking与日志中的请求耗时,误差应<5%。
  3. 性能影响
    • Agent开启前后,服务吞吐量下降应<3%。
5.6.2 性能优化

Agent参数调优

# 调整JVM参数(高并发场景)
-Dskywalking.agent.cool_down_threshold=10000  # 缓冲队列阈值
-Dskywalking.agent.ignore_suffix=.jpg,.css    # 忽略静态资源追踪

存储层优化
• Elasticsearch分片预创建,避免动态分片引发性能抖动。


6. 关键路径性能分析
实现方案

数据库耗时分析

-- 慢SQL统计(MySQL)
SELECT * FROM performance_schema.events_statements_summary_by_digest 
ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;

链路火焰图

Jaeger UI → 选择Trace → 查看Span耗时占比
优化案例

问题:订单创建链路中,库存查询占整体耗时的60%。
解决方案:引入Redis缓存库存数据,耗时占比降至15%。


第二部分:安全架构升级

目标:保障服务间通信安全,防止数据越权访问


1. 服务间认证(mTLS双向认证)
设计意图

身份验证:服务间通信需验证双方证书,防止中间人攻击。
数据加密:TLS 1.3协议保障传输层安全。

实现步骤
  1. 证书签发
    # 生成CA根证书
    openssl req -x509 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 365# 签发服务证书
    openssl req -new -newkey rsa:4096 -keyout service.key -out service.csr
    openssl x509 -req -in service.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out service.crt -days 180
    
  2. 服务端配置
    server:ssl:key-store: classpath:keystore.p12key-store-password: changeitkey-store-type: PKCS12client-auth: need  # 强制双向认证
    
生产级实践

证书轮换:每90天自动轮换证书,保留旧证书30天兼容期。
监控告警:检测证书过期时间(Prometheus Alertmanager)。


2. JWT鉴权(用户身份与角色)
设计架构
返回JWT
携带JWT
验证JWT并转发
用户登录
客户端
API Gateway
业务服务
实现细节

Token生成

String token = Jwts.builder().setSubject("user123").claim("roles", "admin").signWith(SignatureAlgorithm.HS256, secretKey).compact();

网关鉴权

public class JwtFilter implements GatewayFilter {public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);exchange.getAttributes().put("userId", claims.getSubject());return chain.filter(exchange);}
}
安全加固

密钥管理:通过Vault动态获取签名密钥。
Token刷新:Access Token有效期30分钟,Refresh Token有效期7天。


第三部分:数据权限控制

目标:实现数据行级与字段级安全控制,防止越权访问


1. 行级权限控制(MyBatis拦截器)
设计意图

多租户隔离:自动在SQL查询中追加租户ID条件,实现数据隔离。
业务透明:开发人员无需手动处理租户ID,减少代码侵入。

技术实现
  1. 租户上下文管理
    public class TenantContext {private static final ThreadLocal<String> currentTenant = new ThreadLocal<>();public static void setTenantId(String tenantId) {currentTenant.set(tenantId);}public static String getTenantId() {return currentTenant.get();}
    }
    
  2. MyBatis拦截器
    @Intercepts({@Signature(type= Executor.class, method="update", args={MappedStatement.class, Object.class})})
    public class TenantInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {Object parameter = invocation.getArgs()[1];if (parameter instanceof Criteria) {Criteria criteria = (Criteria) parameter;criteria.and("tenant_id").equalTo(TenantContext.getTenantId());}return invocation.proceed();}
    }
    
生产配置示例
<!-- MyBatis配置 -->
<configuration><plugins><plugin interceptor="com.example.TenantInterceptor"/></plugins>
</configuration>

优劣势
优势:自动过滤数据,避免越权查询。
风险:需确保租户ID传递正确(如网关层解析JWT后设置上下文)。


2. 字段级脱敏(DTO层处理)
设计意图

隐私保护:敏感数据(如手机号、身份证号)在传输和存储前脱敏。
合规要求:满足GDPR等数据保护法规。

技术实现
  1. Jackson注解脱敏
    public class UserDTO {@JsonSerialize(using = MobileSerializer.class)private String mobile;
    }public class MobileSerializer extends JsonSerializer<String> {@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider provider) {gen.writeString(value.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));}
    }
    
  2. 日志脱敏
    @Around("execution(* com.example..*Service.*(..))")
    public Object logSensitiveData(ProceedingJoinPoint joinPoint) throws Throwable {Object[] args = joinPoint.getArgs();for (Object arg : args) {if (arg instanceof User) {((User) arg).setMobile(maskMobile(((User) arg).getMobile()));}}return joinPoint.proceed();
    }
    

生产级规则

字段类型脱敏规则
手机号138****1234
身份证号320***************34X
银行卡号6222 **** **** 5678

第四部分:审计日志

目标:记录关键操作轨迹,支持事后追溯与合规审计


1. 审计事件记录
设计意图

操作追溯:记录数据变更、删除等高危操作。
责任界定:通过操作人、时间、IP等信息明确责任。

技术实现
  1. AOP切面记录日志
    @Aspect
    @Component
    public class AuditLogAspect {@Autowiredprivate AuditLogService auditLogService;@Pointcut("@annotation(com.example.audit.AuditLog)")public void auditPointcut() {}@Around("auditPointcut()")public Object logAudit(ProceedingJoinPoint joinPoint) throws Throwable {Object result = joinPoint.proceed();AuditLog auditLog = new AuditLog();auditLog.setOperation(joinPoint.getSignature().getName());auditLog.setOperator(SecurityContext.getCurrentUser());auditLog.setIp(RequestContext.getRemoteAddr());auditLogService.save(auditLog);return result;}
    }
    
  2. 日志数据结构
    {"operation": "deleteOrder","operator": "user123","ip": "192.168.1.100","timestamp": "2023-10-05T14:30:00Z","parameters": {"orderId": "1001"}
    }
    

2. 日志存储与归档
设计架构
写入审计日志
消费日志
定期归档
业务服务
Kafka
Elasticsearch
对象存储
生产配置
  1. Elasticsearch索引设计
    PUT audit_logs
    {"settings": {"number_of_shards": 5,"number_of_replicas": 1},"mappings": {"properties": {"operation": {"type": "keyword"},"operator": {"type": "keyword"},"ip": {"type": "ip"},"timestamp": {"type": "date"}}}
    }
    
  2. 生命周期管理(ILM)
    PUT _ilm/policy/audit_logs_policy
    {"policy": {"phases": {"hot": {"actions": {"rollover": {"max_size": "50gb", "max_age": "7d"}}},"delete": {"min_age": "180d", "actions": {"delete": {}}}}}
    }
    

关键能力
实时查询:通过Kibana快速检索操作记录。
压缩存储:归档至S3后启用Glacier低频存储,降低成本。


第五部分:生产级实施与验证

1. 灰度验证流程
阶段验证内容通过标准
阶段1行级权限拦截器生效性测试未携带租户ID的查询返回空数据集
阶段2审计日志记录完整性验证关键操作日志100%写入Elasticsearch
阶段3日志归档策略验证6个月前的日志自动从ES迁移至S3
2. 监控与告警

审计日志丢失告警

# Prometheus规则
- alert: AuditLogLossexpr: increase(kafka_logs_delivered_total[5m]) < 100labels:severity: criticalannotations:summary: "审计日志投递量异常 (当前值: {{ $value }})"

脱敏规则校验:定期扫描日志,检测未脱敏敏感字段。


第六部分:总结与演进方向

1. 核心收益
  1. 安全性提升
    • 行级权限拦截阻止越权访问1000+次/日。
    • 敏感字段泄露风险降低90%。
  2. 合规达标:审计日志完整保留,通过ISO 27001认证。
2. 后续演进
  1. 自动化策略
    • 基于操作类型动态调整审计日志级别(如高危操作实时告警)。
  2. 智能分析
    • 集成UEBA(用户实体行为分析),检测异常操作模式。
  3. 跨系统审计
    • 整合第三方系统日志,实现全局审计视图。

相关文章:

亿级分布式系统架构演进实战(十一)- 垂直拆分(服务治理体系、安全架构升级)

亿级分布式系统架构演进实战&#xff08;一&#xff09;- 总体概要 亿级分布式系统架构演进实战&#xff08;二&#xff09;- 横向扩展&#xff08;服务无状态化&#xff09; 亿级分布式系统架构演进实战&#xff08;三&#xff09;- 横向扩展&#xff08;数据库读写分离&#…...

飞速(FS)InfiniBand解决方案助力领先科技公司网络升级

国家&#xff1a;越南 行业&#xff1a;信息技术 网络类型&#xff1a;InfiniBand网络 方案类型&#xff1a;HPC网络 案例亮点 通过真实使用场景的全面测试&#xff0c;确保出色兼容性和高可用性&#xff0c;显著降低部署风险和运营成本。 借助飞速&#xff08;FS&#xf…...

[Qt5] QMetaObject::invokeMethod使用

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…...

深入理解垃圾收集算法:从分代理论到经典回收策略

垃圾收集&#xff08;Garbage Collection, GC&#xff09;是现代虚拟机自动内存管理的核心机制。它不仅能自动回收不再使用的对象&#xff0c;还能极大减轻开发者在内存管理上的负担。本文将详细讲解垃圾收集算法的基本思想、分代收集理论以及几种经典的垃圾收集算法。 注&…...

数据降维——PCA与LDA

特征选择和特征提取 特征选择和特征提取是数据降维的重要步骤。 1. 定义与目标 特征提取&#xff1a; 目标&#xff1a;通过变换&#xff08;如投影、编码&#xff09;将原始高维特征映射到新的低维空间&#xff0c;新特征是原始特征的组合&#xff08;线性或非线性&#xff…...

机器学习中的 K-均值聚类算法及其优缺点

K-均值聚类是一种常用的无监督学习算法&#xff0c;用于将数据集中的样本分为 K 个簇。其工作原理是通过迭代优化来确定簇的中心点&#xff0c;实现样本的聚类。 算法步骤如下&#xff1a; 随机选择 K 个样本作为初始簇中心。根据每个样本和簇中心的距离将样本归类到最近的簇…...

RAID原理

一、RAID 0 原理 ​核心特点​ ​条带化&#xff08;Striping&#xff09;​&#xff1a;数据被分割成块&#xff08;Block&#xff09;&#xff0c;交替写入多个磁盘​&#xff08;至少2块&#xff09;。​无冗余&#xff1a;不提供数据备份或校验&#xff0c;依赖所有磁盘同…...

2025系统分析师---软件工程:深度剖析常见软件开发方法

在软件工程这一复杂而精妙的领域中&#xff0c;软件开发方法的选择与实施无疑是项目成功的关键所在。作为一名资深软件技术专家&#xff0c;我深知不同的开发方法适用于不同的业务场景&#xff0c;各自具备独特的优缺点。本文将深入探讨几种常见的软件开发方法&#xff0c;包括…...

中文字符计数器,助力所有python对齐业务(DeepSeek代笔)

编码制式反推双宽&#xff0c;精准字宽库力推中文对齐。 笔记模板由python脚本于2025-03-26 23:49:24创建&#xff0c;本篇笔记适合为中文终端显示和文本输出对齐烦恼的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅…...

扫描注解指定路径

10.扫描注解 在 Spring Boot 中&#xff0c;EnableConfigurationProperties 和 ConfigurationPropertiesScan 是两个用于显式启用和管理 ConfigurationProperties 类的注解。它们提供了更灵活的方式来注册和扫描 ConfigurationProperties 类&#xff0c;尤其是在某些复杂场景或…...

像素到数据:Selenium,OpenCV,Tesseract,Python构建的智能解析系统

基于Selenium与OCR技术的网页信息智能提取方案 一、应用场景解析 在Web自动化测试和数据分析领域,经常需要处理动态渲染的网页信息,特别是当页面元素以图像形式呈现时。本文介绍的解决方案结合了浏览器自动化与图像识别技术,有效解决了以下典型场景: 动态渲染的可视化数据…...

徘徊检测:视觉分析技术的安防新方向

利用视觉分析的方式检测徘徊检测 背景 随着时代的发展&#xff0c;失业率上升导致社会不稳定因素增加&#xff0c;安保问题愈发突出。特别是在住宅区、工厂、办公园区等公共场所&#xff0c;对于徘徊人员的检测成为确保安全的关键一环。传统的安保手段如人工巡逻、监控录像回…...

CentOS 7 挂载与卸载文件系统

一、挂载文件系统​ 1. 查看系统磁盘与分区情况​ 在挂载文件系统之前&#xff0c;需要先了解系统中的磁盘和分区信息。使用fdisk -l命令&#xff0c;可列出所有磁盘和分区的详细信息&#xff0c;示例如下&#xff1a; [rootlocalhost ~]# fdisk -lDisk /dev/sda: 53.7 GB, …...

MySQL实战(尚硅谷)

要求 代码 # 准备数据 CREATE DATABASE IF NOT EXISTS company;USE company;CREATE TABLE IF NOT EXISTS employees(employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT );DESC employees;CREATE TABLE IF NOT EXISTS departments…...

JavaScript 改变 HTML 内容

JavaScript 改变 HTML 内容 JavaScript 改变 HTML 内容的核心在于通过 DOM&#xff08;文档对象模型&#xff09;操作实现动态更新&#xff0c;以下是主要方法及场景解析&#xff1a; 一、直接修改元素内容 1. innerHTML 属性 用于获取或设置元素的 HTML 内容&#xff08;包…...

第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(部分题解)

文章目录 前言日期统计题意&#xff1a; 冶炼金属题意&#xff1a; 岛屿个数题意&#xff1a; 子串简写题意&#xff1a; 整数删除题意&#xff1a; 总结 前言 一年一度的&#x1f3c0;杯马上就要开始了&#xff0c;为了取得更好的成绩&#xff0c;好名字写了下前年2023年蓝桥…...

机器学习——Bagging、随机森林

相比于Boosting的集成学习框架&#xff0c;Bagging(Bootstrap Sampling&#xff0c;自助聚集法&#xff0c;又称为自助采样)作为一种自助聚集且并行化的集成学习方法&#xff0c;其通过组合多个基学习器的预测结果来提高模型的稳定性和泛化能力。其中随机森林是Bagging学习框架…...

数据库——MySQL基础操作

一、表结构与初始数据 假设存在以下两张表&#xff1a; 1. student 表 字段名数据类型描述idINT学生唯一标识符nameVARCHAR(100)学生姓名ageINT学生年龄sexVARCHAR(10)学生性别 初始数据&#xff1a; idnameagesex1张三20男2李四22女3王五21男 2. course 表 字段名数据类…...

存储过程、存储函数与触发器详解(MySQL 案例)

存储过程、存储函数与触发器详解&#xff08;MySQL 案例&#xff09; 一、存储过程&#xff08;Stored Procedure&#xff09; 定义 存储过程是预先编译好并存储在数据库中的一段 SQL 代码集合&#xff0c;可以接收参数、执行逻辑操作&#xff08;如条件判断、循环&#xff09;…...

2025年注册安全工程师考试练习题

注册安全工程师练习题&#xff0c;涵盖了不同的知识点和题型&#xff1a; 单选题 某机械制造企业委托具有相应资质的中介服务机构的专业技术人员为其提供安全生产管理服务。依据《安全生产法》&#xff0c;保证该企业安全生产的责任由&#xff08; &#xff09;负责。 A. 专业…...

Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程

文章目录 前言一、Photoshop 2025安装包下载二、Photoshop 2025安装教程1.解压安装包2.运行程序3.修改安装路径4.设安装目录5.开始安装6.等安装完成7.关闭安装向导8.启动软件9.安装完成 前言 无论你是专业设计师&#xff0c;还是初涉图像处理的小白&#xff0c;Photoshop 2025…...

ESP32通过WiFi获取网络时间(NTP)

代码部分 代码由station_example_main的官方例程修改 /* WiFi station ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an "AS IS&…...

docker使用命令笔记

docker使用命令笔记 1. 安装docker2. 拉取镜像3. 镜像与容器4. 基于镜像创建容器4. 操作创建好的容器5. docker文件传输6. ubuntu的docker的一些基本环境搭建 记录docker的一些使用命令 1. 安装docker 遵循官方安装说明即可&#xff0c;windows需要下载docker desktop后在doc…...

关于服务器只能访问localhost:8111地址,局域网不能访问的问题

一、问题来源&#xff1a; 服务器是使用的阿里云的服务器&#xff0c;服务器端的8111端口没有设置任何别的限制&#xff0c;但是在阿里云服务器端并没有设置相应的tcp连接8111端口。 二、解决办法&#xff1a; 1、使用阿里云初始化好的端口&#xff1b;2、配置新的阿里云端口…...

触发器及报警

一、触发器介绍 Trigger 作用&#xff1a;报警 触发某一个监控项状态的变化 基于监控项创建 一个监控项可以有多个触发器 1、创建触发器语法 {<server>:<key>.<function>(<parameter>)}<operator><constant> {被监控主机:键值.函数…...

如何用 Postman 发送 GET 请求?详解

Postman 是一款广泛用于 API 开发和测试的工具&#xff0c;通过它&#xff0c;我们可以轻松地发送 GET 请求。首先&#xff0c;需要新建接口并设置为 GET 请求&#xff0c;然后填写相关的 URL 地址和参数&#xff0c;最后点击“Send”按钮即可发起请求。 Postman 如何发送 get…...

主流软件工程模型全景剖析

一、瀑布模型 阶段划分 需求分析&#xff1a;与用户深入沟通&#xff0c;全面了解软件的功能、性能、可靠性等要求&#xff0c;形成详细的需求规格说明书。设计阶段&#xff1a;包括总体设计和详细设计。总体设计确定软件的体系结构&#xff0c;如模块划分、模块之间的接口等&…...

NVMe协议

一、NVMe 的诞生背景 ​传统协议瓶颈&#xff1a; 早期的SATA接口SSD使用 ​AHCI协议&#xff0c;设计初衷是适配机械硬盘&#xff08;HDD&#xff09;&#xff0c;其单队列、高延迟的特性无法发挥SSD的高速性能。​PCIe接口的潜力&#xff1a; NVMe专为 ​PCIe接口的SSD​ 设…...

开关磁阻电机类型及其控制技术

开关磁阻电机( Switched Reluctance Motors,SRM) 具有结构简单、坚固、成本低、 工作可靠、控制灵活、运行效率高&#xff0c;适于高速与恶劣环境运行等优点, 由其构成的传动系统( Switched Reluctance Drives, SRD) 具有交、直流传动系统所没有的优点, 为此&#xff0c;世界各…...

CMake 构建的Qt 项目中的构建套件的配置

在Qt 框架中&#xff0c;使用CMake 构建工具时&#xff0c;需要自己给构建套件添加相关配置&#xff0c;否则已经添加的构建套件将不可选择使用。 创建CMake 项目后&#xff0c;如果打开项目配置时&#xff0c;出现如下构建套件不可选的情况&#xff0c; 需要先确认是否安装…...

程序化广告行业(34/89):移动端特色广告与创意策略探秘

程序化广告行业&#xff08;34/89&#xff09;&#xff1a;移动端特色广告与创意策略探秘 大家好&#xff01;在程序化广告的学习之旅中&#xff0c;每一次探索都像是发现了新大陆。今天&#xff0c;我依旧怀揣着和大家共同进步的想法&#xff0c;来和大家深入聊聊程序化广告行…...

IT行业项目管理风险规避策略

在IT项目中,前端、后端、测试等不同角色的协同工作会带来各种项目管理风险。以下是针对这些风险的规避策略: 一、跨职能团队协作风险 1. 沟通不畅风险 解决方案: 建立每日站会机制(15分钟以内)使用协作工具(如Jira、飞书、钉钉)制定明确的接口文档标准(Swagger/YAPI)…...

24届非科班硕士入职做上位机开发,后续往工业软件还是音视频、后端发展?

今天给大家分享的是一位粉丝的提问&#xff0c;24届非科班硕士入职做上位机开发&#xff0c;后续往工业软件还是音视频、后端发展&#xff1f; 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问&#xff1a; …...

Hadoop三 分布式sql计算hive入门

一 分布式SQL计算 对数据进行统计分析&#xff0c;SQL是目前最为方便的编程工具。 大数据体系中充斥着非常多的统计分析场景&#xff0c;所以&#xff0c;使用SQL去处理数据&#xff0c;在大数据中也是有极大的需求的。MapReduce支持程序开发&#xff08;Java、Python等&#…...

【C++】C++中的动态内存分配(new和delete)

C中的动态内存分配&#xff08;分配堆空间&#xff09; 1. C语言与C动态内存分配2. 使用3.malloc和new有什么区别示例代码&#xff1a; 1. C语言与C动态内存分配 C语言 malloc calloc realloc free 函数 C new关键字分配堆空间 delete关键字释放堆空间 2. 使用 第一种&#…...

Go 代理爬虫

现在注册&#xff0c;还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器&#xff0c;通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支&#xff1a; basic 分支包含供 Go Proxy Servers 这篇文章改动的基础代码…...

推陈换新系列————java8新特性(编程语言的文艺复兴)

文章目录 前言一、新特性秘籍二、Lambda表达式2.1 语法2.2 函数式接口2.3 内置函数式接口2.4 方法引用和构造器引用 三、Stream API3.1 基本概念3.2 实战3.3 优势 四、新的日期时间API4.1 核心概念与设计原则4.2 核心类详解4.2.1 LocalDate&#xff08;本地日期&#xff09;4.2…...

蓝桥杯算法实战分享

蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛&#xff0c;涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧&#xff0c;帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…...

树莓集团园区运营案例:成都国际数字影像产业园的运营逻辑​

成都国际数字影像产业园的成功运营&#xff0c;是树莓集团在产业园运营领域的典型案例。其运营逻辑可以归纳为以下几点&#xff1a; 一、政企合作&#xff0c;优势互补 园区由树莓集团与金牛区政府合作共建&#xff0c;这种模式充分利用双方的优势。政府提供政策支持、土地资…...

【动态规划】最长公共子序列问题 C++

问题描述 子序列&#xff1a;序列Z是原序列X的子序列&#xff0c;当且仅当Z的元素在X中按严格递增的下标顺序出现&#xff08;不要求连续&#xff09;。例如X{A,B,C,B,D,A,B}中&#xff0c;Z{B,C,D,B}是子序列&#xff0c;对应X的下标2→3→5→7。公共子序列&#xff1a;若序列…...

K8s故障排查手册:从Pod崩溃到网络不通

本文基于数百个真实生产环境案例&#xff0c;系统化梳理Kubernetes集群的故障排查方法论。涵盖Pod生命周期异常、服务发现失效、存储卷挂载失败、网络策略冲突等核心故障场景&#xff0c;结合Prometheus监控指标、eBPF深度追踪、CNI插件分析等技术手段&#xff0c;为企业运维团…...

HTML DOM 基础:用「家族树」理解网页操控术

HTML DOM 基础:用「家族树」理解网页操控术 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),也就是DOM。 DOM 是JavaScript 操作网页的接口,它的作用是将网页转为一个JavaScript 对象,从而可以用脚本进行各种操作(比如对元素增删内容)。 浏览…...

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…...

【AI News | 20250326】每日AI进展

AI News 1、Gemini 2.5&#xff1a;谷歌DeepMind最智能AI模型亮相 谷歌DeepMind推出Gemini 2.5&#xff0c;其最智能AI模型。首款实验版本Gemini 2.5 Pro在多项基准测试中领先&#xff0c;登顶LMArena榜首&#xff0c;展现卓越的推理与编码能力。该模型为“思考模型”&#xf…...

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质增强于一体的创新解决方案&#xff0c;旨在重塑智能汽车图像画质的新标准&#xff0c;并支持前…...

AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问

环境&#xff1a; AI-Sphere-Butler WSL2 Ubuntu22.04 Nginx 问题描述&#xff1a; AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理&#xff0c;并将HTTP升级成HTTPS&#xff0c;用于移动设备访问 解决方案&#xff1a; 一、生成加密证书 1.配置OpenSSL生成本地不加…...

SpringBoot项目图片上传成功,访问404

1. 配置文件&#xff0c;静态资源访问路径&#xff0c;记得加上file: 2.上传文件路径 以上配置是正确的&#xff0c;这样才可以正确映射 之前我再配置文件写的是,这是错的&#xff0c; 因为&#xff1a;classpath写法和绝对路径无法匹配 .addResourceLocations("classpat…...

鸿蒙学习笔记(2)-国际化配置、ArkTS简述

一、国际化配置 根据操作系统语言实现手动或者自动切换中英文&#xff0c;提供了多套语言包。编写过程中注意不要将文字写死&#xff0c;将文本放在指定的语言包文件夹中来保存&#xff0c;鸿蒙开发中默认实现中英文的国际化配置。若要实现中英文转化&#xff0c;需要在三个地…...

ES 字段的映射定义了字段的类型及其行为

在 Elasticsearch 中&#xff0c;字段的映射定义了字段的类型及其行为。你提供的 content_answer 字段映射如下&#xff1a; Json 深色版本 "content_answer": { "type": "text", "fields": { "keyword": { …...

游戏引擎学习第183天

回顾和今天的计划 我对接下来的进展感到非常兴奋。虽然我们可能会遇到一些问题&#xff0c;但昨天我们差不多完成了将所有内容迁移到新的日志系统的工作&#xff0c;我们正在把一些内容整合进来&#xff0c;甚至是之前通过不同方式记录时间戳的旧平台层部分&#xff0c;现在也…...