第三章:技术栈选型与准备

好,咱们开始搭建合规监控系统了。这一章我带你搞定技术栈选型,还有基础环境的搭建。说白了,就是先把工具备齐。

我在多个合规项目里摸爬滚打过后,发现一个道理:选型选对了,后面省一半的坑。你想想看,如果数据库扛不住海量日志,或者消息队列丢数据,那合规审计的时候可就麻烦了。

3.1 编程语言:Java vs Python

合规监控系统,我建议用Java + Python双语言架构。为什么?

  • Java:负责核心引擎、数据处理、规则引擎。稳定,性能好,适合做"重活"。
  • Python:负责数据采集、脚本化任务、快速原型验证。灵活,生态好,适合做"快活"。

我个人习惯,把Java当作主力,Python当作辅助。举个例子,合规规则引擎用Java写,但数据清洗脚本用Python写,各取所长。

我的经验:别试图用Python写高性能的规则引擎。我曾经在一个项目里试过,结果并发一上来,GIL锁直接卡死。后来老老实实换成Java,问题就解决了。

3.1.1 Java环境搭建

Java 17 是目前的主流版本。别用Java 8了,太老了,很多新特性不支持。

# 下载JDK 17(以Linux为例)
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar -xzf jdk-17_linux-x64_bin.tar.gz
sudo mv jdk-17.0.x /usr/local/jdk17

# 配置环境变量
export JAVA_HOME=/usr/local/jdk17
export PATH=$JAVA_HOME/bin:$PATH

# 验证
java -version
# 输出:openjdk version "17.0.x" 2024-xx-xx

嗯,这里要注意:一定要配置JAVA_HOME。很多框架(比如Spring Boot)依赖这个环境变量。我见过有人没配,结果项目启动报错,排查了半天。

3.1.2 Python环境搭建

Python 3.10+ 就够用了。我推荐用pyenv管理多版本,避免版本冲突。

# 安装pyenv
curl https://pyenv.run | bash

# 安装Python 3.10
pyenv install 3.10.12
pyenv global 3.10.12

# 验证
python --version
# 输出:Python 3.10.12
避坑指南:我曾经在Windows上直接装Python,结果路径里有空格,导致pip安装包时各种报错。建议用虚拟环境(venv)隔离项目依赖。

3.2 数据库选型:MySQL / PostgreSQL / Elasticsearch

合规监控系统,数据存储是核心。我一般用三库协同的方案:

数据库 用途 特点
MySQL 业务数据、用户信息、规则配置 成熟稳定,事务支持好
PostgreSQL 复杂查询、JSON数据、审计日志 扩展性强,支持JSONB和全文检索
Elasticsearch 全文搜索、日志分析、实时聚合 倒排索引,适合海量数据搜索

你可能会问:为什么不用一个数据库搞定?我告诉你,单一数据库扛不住合规场景的多样性。比如,MySQL适合做OLTP,但做全文搜索就很吃力。Elasticsearch搜索快,但事务支持弱。各司其职才是正道。

3.2.1 MySQL安装与配置

# 安装MySQL 8.0(Ubuntu)
sudo apt update
sudo apt install mysql-server-8.0

# 启动服务
sudo systemctl start mysql
sudo systemctl enable mysql

# 安全配置
sudo mysql_secure_installation

# 创建数据库
mysql -u root -p
CREATE DATABASE compliance_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

记得把字符集设成utf8mb4。为什么?因为合规数据里可能有各种特殊字符,比如中文、日文、甚至emoji。用utf8会丢数据,我踩过这个坑。

3.2.2 PostgreSQL安装与配置

# 安装PostgreSQL 15
sudo apt install postgresql-15

# 启动服务
sudo systemctl start postgresql

# 创建用户和数据库
sudo -u postgres psql
CREATE USER compliance_user WITH PASSWORD 'your_password';
CREATE DATABASE compliance_audit OWNER compliance_user;

PostgreSQL的JSONB类型特别适合存合规规则。比如,一条规则可能有几十个字段,用JSONB存起来,查询时还能用GIN索引加速。

3.2.3 Elasticsearch安装与配置

# 安装Elasticsearch 8.x(需要Java环境)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.10.0-linux-x86_64.tar.gz
cd elasticsearch-8.10.0

# 启动(单节点模式)
./bin/elasticsearch -d

# 验证
curl http://localhost:9200
# 输出:{"name":"node-1","cluster_name":"elasticsearch",...}
重要提醒:Elasticsearch默认开启安全认证。生产环境一定要配置好X-Pack,不然数据裸奔。我见过有人把ES暴露在公网上,结果被删库了。

3.3 消息队列选型:Kafka vs RabbitMQ

合规监控系统里,消息队列是数据流转的血管。选错了,要么吞吐不够,要么丢数据。

特性 Kafka RabbitMQ
吞吐量 百万级/秒 万级/秒
消息持久化 强(磁盘顺序写) 中(内存+磁盘)
路由灵活性 弱(基于Topic) 强(多种Exchange)
适用场景 日志采集、事件流 任务调度、异步处理

我的建议是:Kafka做主通道,RabbitMQ做辅助。合规日志量大,用Kafka扛;规则触发后的通知、告警,用RabbitMQ做灵活路由。

3.3.1 Kafka安装与配置

# 下载Kafka 3.5(自带ZooKeeper)
wget https://downloads.apache.org/kafka/3.5.0/kafka_2.13-3.5.0.tgz
tar -xzf kafka_2.13-3.5.0.tgz
cd kafka_2.13-3.5.0

# 启动ZooKeeper
bin/zookeeper-server-start.sh config/zookeeper.properties &

# 启动Kafka
bin/kafka-server-start.sh config/server.properties &

# 创建主题
bin/kafka-topics.sh --create --topic compliance-events --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

分区数设多少?我一般按业务量预估来。比如每天100万条日志,设3个分区就够了。分区太多反而增加管理开销。

3.3.2 RabbitMQ安装与配置

# 安装RabbitMQ(Ubuntu)
sudo apt install rabbitmq-server

# 启动服务
sudo systemctl start rabbitmq-server

# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_management

# 创建用户和虚拟主机
sudo rabbitmqctl add_user compliance_user your_password
sudo rabbitmqctl add_vhost compliance_vhost
sudo rabbitmqctl set_permissions -p compliance_vhost compliance_user ".*" ".*" ".*"
我的经验:RabbitMQ的死信队列一定要配。合规消息如果处理失败,不能直接丢弃,要进死信队列留作审计。我曾经没配,结果一条关键告警丢了,被客户投诉。

3.4 整体架构图

下面这张图,展示了我们这套技术栈的协作关系。你看一眼,心里就有数了。

数据采集层 Python脚本 · 日志采集器 · API网关 消息队列层 Kafka(主通道) · RabbitMQ(辅助通道) 处理引擎层 Java规则引擎 · 实时计算 · 告警处理 数据存储层 MySQL(业务) · PostgreSQL(审计) · Elasticsearch(搜索) 数据流 事件流 存储

你看,数据从采集层进来,经过消息队列缓冲,再到处理引擎做规则判断,最后落库。每一层各司其职,互不干扰。这就是我推荐的分层架构

3.5 环境准备清单

最后,给你一个检查清单。照着做,环境就不会漏。

  1. Java 17:配置JAVA_HOME,验证java -version
  2. Python 3.10+:配置虚拟环境,安装pip
  3. MySQL 8.0:创建数据库,字符集utf8mb4
  4. PostgreSQL 15:创建用户,启用JSONB支持
  5. Elasticsearch 8.x:启动单节点,验证9200端口
  6. Kafka 3.5:启动ZooKeeper和Kafka,创建主题
  7. RabbitMQ 3.12:启动服务,创建虚拟主机和用户
最后提醒:所有密码不要用弱口令。合规系统最怕的就是安全漏洞。我曾经见过一个项目,数据库密码是"123456",结果被内部人员拖库了。嗯,这个教训很深刻。

好了,环境准备好了。下一章我们开始搭建合规规则引擎的核心代码。到时候你会看到,这些选型到底怎么落地。


公众号:蓝海资料掘金营,微信deep3321