软件架构/技术选型
文章平均质量分 90
技术选型、软件架构等文章
西京刀客
AI,Crypto/Web3.
A bug bounty hunting and a lot of coding is my passion!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
redis 大key使用 UNLINK 命令删除、Redis Set / ZSet 存储上限、ZRemRangeByRank命令
Redis 4.0引入的UNLINK命令实现了异步删除机制,相比DEL命令具有显著优势。UNLINK仅从keyspace中移除key(O(1)时间复杂度),实际内存释放由后台线程完成,特别适合删除大key或批量删除场景,避免主线程阻塞。生产环境中建议优先使用UNLINK替代DEL,但需注意内存释放存在延迟。对于集合类型数据,Redis不限制存储数量但需控制单key大小,建议单Value不超过10KB。ZSet通过ZREMRANGEBYRank可实现容量控制,相比无序的Set更适合需要淘汰机制的场景。合理使用原创 2026-05-16 22:48:55 · 705 阅读 · 0 评论 -
APISIX 中轻量级的“探针“之serverless-pre-function + serverless-post-function
serverless-pre-function + serverless-post-function 是 APISIX 的轻量级"探针"组合,本质是在请求生命周期的两端注入自定义逻辑。APISIX 的 serverless-pre-function 和 serverless-post-function 两个插件,允许在路由上直接注入 Lua 代码,零侵入地完成网关层诊断。假设你有一个电商平台,支付回调接口 /api/payment/callback/* 近期频繁超时,上游是第三方支付网关,无法修改其代码。原创 2026-03-16 09:26:25 · 154 阅读 · 0 评论 -
openclaw架构原理-单进程应用 + 插件式扩展
编辑(相对于 docker-compose.yml 目录)在channels"wecom": {"token": "<你的企业微信 Token>","encodingAESKey": "<你的企业微信 EncodingAESKey>"手动注册插件(关键步骤)这是最容易踩的坑!OpenClaw 的 doctor 会自动尝试在中以通道 ID(wecom)注册插件,但实际的插件 ID 是,导致错误。必须手动在注意的 key 必须是 openclaw-wecom(npm 包名去掉前缀),而不是。原创 2026-02-15 09:20:54 · 4034 阅读 · 0 评论 -
golang路由与框架选型(对比原生net/http、httprouter、Gin)
摘要:本文对比了Go语言中三种路由实现方案(原生net/http、httprouter和Gin框架)。Go 1.22+的原生net/http新增了方法匹配、路径参数等特性,适合高安全要求场景(如金融系统),具有最小依赖和可控性优势。httprouter基于前缀树实现,路由性能最优;Gin则提供完整开发体验,包含中间件、请求绑定等功能。建议根据场景选择:高性能网关用httprouter,业务系统用Gin,关键安全服务用原生net/http。实际可混合使用,通过微服务拆分兼顾性能与开发效率。原创 2026-01-11 21:46:27 · 1059 阅读 · 0 评论 -
生产Python Docker 镜像选择-Slim 版本(python:3.12-slim)
制作 Python Docker 镜像的最佳实践。不建议使用 Alpine 作为 Python 的基础镜像。原创 2025-11-09 08:04:16 · 2354 阅读 · 0 评论 -
AI时代BaaS | 开源的后端即服务(BaaS)平台Supaba
在AI应用爆发式增长的今天,BaaS(后端即服务)已成为开发者构建智能应用的核心基础设施。原创 2025-10-14 23:26:56 · 2105 阅读 · 1 评论 -
抗ASIC、抗GPU 的密码哈希算法(安全密钥派生)Argon2算法
Argon2是一种抗ASIC和GPU攻击的密码哈希算法,在2015年密码哈希竞赛中获得冠军。它通过内存密集型计算有效抵御定制硬件的暴力破解,相比PBKDF2、Bcrypt和Scrypt提供更强的安全性。Argon2有三种变体:Argon2d(抗GPU攻击)、Argon2i(抗侧信道攻击)和推荐的Argon2id(混合型)。该算法可配置内存大小、迭代次数和并行度等参数,适用于密码存储和密钥派生等场景,是当前最安全的密钥派生函数之一。原创 2025-09-09 09:36:32 · 1872 阅读 · 0 评论 -
浏览器环境下AES-GCM JavaScript 加解密程序
这篇文章介绍了一个在浏览器环境下实现AES-GCM加解密的JavaScript解决方案。由于crypto-js库不支持AES-GCM模式,作者推荐使用node-forge这个纯JavaScript加密库,它支持跨Node.js和浏览器环境运行,提供包括AES-GCM在内的多种加密功能。文章包含一个完整的HTML示例代码,展示了如何构建一个美观的AES-GCM加解密测试界面,包含输入框、功能按钮和结果显示区域,并提供了详细的CSS样式设计。原创 2025-08-14 20:45:13 · 1370 阅读 · 0 评论 -
APISIX 路由优先级
在 APISIX 的路由匹配机制中,优先级的判定犹如一场精密的竞赛裁决,直接决定着哪个路由规则能够在众多候选者中脱颖而出,成功匹配请求。深入理解优先级的判定依据,对于优化路由配置、确保系统行为的精准性至关重要。原创 2025-08-10 21:58:59 · 719 阅读 · 0 评论 -
开源列式分布式数据库clickhouse
ClickHouse 是一个开源列式数据库管理系统,专为在线分析处理(OLAP)而设计。它能够快速执行高并发、高效的数据查询,适合用于处理大量数据。原创 2025-08-02 21:26:01 · 1450 阅读 · 0 评论 -
Cloudflare CDN 中设置地域限制并返回特定界面
CDN 是一种优化网站请求处理的机制。它是在用户访问网站 (服务器) 时用户与网站服务器之间的中间层。CDN会在边缘节点检查用户IP的地理位置,根据配置的规则决定是否允许访问,**被拒绝的请求不会到达您的源服务器**。原创 2025-07-28 22:15:34 · 3093 阅读 · 0 评论 -
软删除设计:为什么使用 deleted_at = ‘1970-01-01 00:00:00‘ 表示未删除?
在现代数据库设计中,尤其是在处理用户数据、审计追踪和合规要求的应用中,软删除 已成为硬删除的标准替代方案。软删除是通过标记记录为已删除而不实际从数据库中移除它们。这种方法保留了数据以供潜在恢复、历史分析或监管用途。原创 2025-07-18 07:54:01 · 1315 阅读 · 0 评论 -
构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)
`golang:1.23.0-bullseye` 是官方 Go 镜像的一个 “build-stage” 版,用来构建 Go 可执行文件,而不是把它当成最终运行镜像。原创 2025-07-15 23:39:28 · 1467 阅读 · 0 评论 -
Provider模式:软件架构中的“供应商“设计哲学
在软件开发中,你是否遇到过这样的困扰:代码与特定的数据源、配置来源或服务紧密耦合,导致测试困难、扩展性差?Provider 模式正是解决这类问题的经典设计模式。原创 2025-07-14 21:05:22 · 1255 阅读 · 0 评论 -
Go语言中的组合式接口设计模式
在微服务架构和复杂业务系统中,我们经常需要调用多个外部服务或内部模块。传统的做法是将所有方法都放在一个大接口中,但这种设计会导致接口臃肿、职责不清。今天我们来探讨一种更优雅的设计模式:组合式接口设计。原创 2025-07-11 20:04:31 · 546 阅读 · 0 评论 -
开源功能开关(feature flags) 和管理平台之unleash
Unleash 是一个开源的功能标志(feature flags) 和管理平台,**允许您在不中断服务的情况下安全地发布和测试新功能**。它提供了一个集中式界面,用于管理和控制哪些用户可以看到哪些功能,以及如何启用这些功能。原创 2025-07-03 22:53:35 · 1727 阅读 · 0 评论 -
apisix-使用hmac-auth插件进行接口签名身份验证\apisix consumer
HMAC 是一种基于哈希函数的消息认证码,常用于验证消息的完整性和真实性。它需要一个密钥(secret key)和一个哈希算法(如 SHA-256)来生成签名。原创 2025-06-19 23:13:40 · 1768 阅读 · 0 评论 -
golang常用库之-go-feature-flag库(特性开关(Feature Flags))
GO Feature Flag 是一个简单、完整且轻量级的自托管特性开关解决方案,并且是 100% 开源的。**GO Feature Flag** 被设计为专门为 `GO` 语言提供的解决方案。 随着 [Openfeature](https://openfeature.dev/) 项目对 Feature Flag 的新标准化,该解决方案现在可以通过一个名为 relay proxy 的简单 API 服务器,用于多种语言。原创 2025-06-04 19:33:58 · 1878 阅读 · 0 评论 -
数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)
数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)原创 2025-05-31 10:26:13 · 1346 阅读 · 0 评论 -
python常用库-pandas、Hugging Face的datasets库(大模型之JSONL(JSON Lines))
如果你的项目更多地涉及到深度学习和模型训练,建议优先使用datasets库;如果涉及到多样化的数据处理和分析任务,则Pandas更为合适。原创 2025-05-30 10:41:29 · 2029 阅读 · 0 评论 -
开源 OIDC(OpenID Connect)身份提供方(IdP)、iam选型
Keycloak功能全面但较重,ORY Hydra轻量但需要自行构建UI,Dex适合Kubernetes环境,Gluu适合企业级需求等。原创 2025-05-25 08:14:33 · 809 阅读 · 0 评论 -
什么是Monorepo(单体仓库)(monolithic repository)
monorepo 是一种将多个项目代码存储在一个仓库里的软件开发策略(mono 意为单一,repo 意为 仓库)。与之相对的是另一种流行的代码管理方式 MultiRepo,即每个项目对应一个单独的仓库来分散管理。原创 2025-05-19 21:59:30 · 2915 阅读 · 0 评论 -
apisix透传客户端真实IP(real-ip插件)
**k8s 集群入口一般都需要过负载均衡,然后再到 apisix。**这时如果后台业务需要获取客户端 ip,可能拿到的是 lb 或者相关的内网 ip。这里一般要获取真实 ip 需要做几个处理。1. 负载均衡上,一般支持配置获取真实 ip 参数,需要配置上。然后 lb 会把客户真实 ip 写入 x-forwarded-for 参数。2. apisix 上配置 real-ip 插件。作用和 nginx 的 realip 插件相同。原创 2025-05-16 22:57:11 · 2174 阅读 · 0 评论 -
Go多服务项目结构优化:为何每个服务单独设置internal目录?
在实际开发生产型Go项目时,尤其是当项目采用微服务架构,往往会遇到以下挑战:如何合理划分每个服务的内部实现,防止跨服务依赖带来的混乱?如何做到服务内代码的“私有化”与责任边界清晰?原创 2025-05-10 23:34:27 · 1415 阅读 · 0 评论 -
Python的ASGI Web 服务器之uvicorn
Uvicorn 是由 Starlette 框架的作者编写的 ASGI 服务器,旨在提供高性能的异步请求处理能力。它使用 asyncio 库实现异步 I/O 操作,支持 HTTP 和 WebSocket 协议,可与各种 ASGI 应用程序框架(如 FastAPI、Django、Starlette 等)配合使用。原创 2025-03-29 13:20:02 · 1270 阅读 · 0 评论 -
使用yaml管理api接口之OpenAPI规范
OpenAPI(之前称为Swagger)是一种规范,用于描述、消费和可视化 RESTful web 服务。它提供了一种可读性强且易于理解的格式,可以让人和机器都能读懂。OpenAPI 规范允许开发人员设计、构建、记录和使用 RESTful 服务,同时还提供了可视化界面,方便测试和交互。原创 2025-03-26 23:34:09 · 3501 阅读 · 0 评论 -
什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)
PBKDF2(Password-Based Key Derivation Function 2)是一种基于密码的密钥派生函数。它的主要作用是从密码和盐(salt)**派生出固定长度的密钥**。PBKDF2 的设计目标是增加密码猜测攻击的成本,即使攻击者能够获得哈希函数的输出,也很难从中推导出原始密码。原创 2025-03-16 00:08:13 · 1244 阅读 · 0 评论 -
轻量级日志管理平台Grafana Loki
Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。Loki采用了分布式的架构,并且与Prometheus、Grafana密切集成,可以快速地处理大规模的日志数据。原创 2025-02-23 19:48:27 · 3800 阅读 · 0 评论 -
分词器(Tokenizer) | 有了分词器,为什么还需要嵌入模型
Tokenizer 的主要任务是将原始文本数据分割成更小的单元(如单词、子词或字符),并将这些单元转换为计算机可以处理的数值形式(通常是整数索引)。原创 2025-02-19 23:52:34 · 3130 阅读 · 0 评论 -
常用安全哈希算法bcrypt
Bcrypt算法是一种非常安全的密码加密算法,已经被广泛应用于各种编程语言和操作系统中。原创 2025-02-19 22:49:55 · 1692 阅读 · 0 评论 -
Apache APISIX 快速入门
Apache APISIX 是 Apache 软件基金会下的顶级项目,它是一个具有动态、实时、高性能等特点的云原生 API 网关。原创 2025-02-09 10:31:09 · 3402 阅读 · 0 评论 -
OAuth2 快速入门
OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。原创 2025-01-15 18:53:58 · 1482 阅读 · 0 评论 -
tsx 和 ts-node区别(node运行ts文件)
tsx 是一个更现代、更快速的选择,特别适合新项目和需要 ESM 支持的场景原创 2024-11-26 13:14:17 · 1843 阅读 · 0 评论 -
BIO、NIO、AIO的区别?
Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。原创 2024-11-16 05:47:41 · 1246 阅读 · 0 评论 -
CI/CD 流水线系统-开源框架Tekton
CI/CD 流水线系统-开源框架Tekton原创 2024-10-24 10:57:56 · 1608 阅读 · 0 评论 -
比特币生态常用库之bitcoinjs-lib
BitcoinJ是一个流行的Java库,它提供了比特币网络通信、地址生成、交易处理等功能。BitcoinJS和Bitcore是JavaScript库,提供了类似的功能。原创 2024-08-22 23:15:00 · 2433 阅读 · 0 评论 -
使用pm2管理你的 nodejs 后台项目
PM2 是一款非常优秀的 Node 进程管理工具,它有着丰富的特性:能够充分利用多核 CPU且能够负载均衡、能够帮助应用在崩溃后、指定时间(cluster model)和超出最大内存限制等情况下实现自动重启。原创 2024-08-15 21:52:26 · 876 阅读 · 0 评论 -
DAG(有向无环图)-入门基础
Merkle DAG的全称是 Merkle directed acyclic graph(默克有向无环图)。它是在Merkle tree基础上构建的,Merkle tree是由美国计算机学家merkle于1979年申请的专利。Merkle DAG跟Merkle tree很相似,但不完全一样,比如:Merkle DAG不需要进行树的平衡操作,非叶子节点允许包含数据等。原创 2024-06-16 23:28:11 · 8415 阅读 · 0 评论 -
drand- 随机数获取和验证
类似于ETH2.0实行的信标链(Beacon Chain),FIL目前采用Drand作为其Beacon源。原创 2024-06-03 21:50:48 · 1968 阅读 · 0 评论 -
gRPC超时重传机制
gRPC 是在 HTTP/2 之上实现的 RPC 框架,HTTP/2 是第 7 层(应用层)协议,它运行在 TCP(第 4 层 - 传输层)协议之上,相比于传统的 REST/JSON 机制有诸多的优点。原创 2024-04-08 13:06:53 · 2013 阅读 · 0 评论
分享