第三章:技术栈选型与准备
好,咱们开始搭建合规监控系统了。这一章我带你搞定技术栈选型,还有基础环境的搭建。说白了,就是先把工具备齐。
我在多个合规项目里摸爬滚打过后,发现一个道理:选型选对了,后面省一半的坑。你想想看,如果数据库扛不住海量日志,或者消息队列丢数据,那合规审计的时候可就麻烦了。
3.1 编程语言:Java vs Python
合规监控系统,我建议用Java + Python双语言架构。为什么?
- Java:负责核心引擎、数据处理、规则引擎。稳定,性能好,适合做"重活"。
- Python:负责数据采集、脚本化任务、快速原型验证。灵活,生态好,适合做"快活"。
我个人习惯,把Java当作主力,Python当作辅助。举个例子,合规规则引擎用Java写,但数据清洗脚本用Python写,各取所长。
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
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",...}
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 ".*" ".*" ".*"
3.4 整体架构图
下面这张图,展示了我们这套技术栈的协作关系。你看一眼,心里就有数了。
你看,数据从采集层进来,经过消息队列缓冲,再到处理引擎做规则判断,最后落库。每一层各司其职,互不干扰。这就是我推荐的分层架构。
3.5 环境准备清单
最后,给你一个检查清单。照着做,环境就不会漏。
- Java 17:配置JAVA_HOME,验证
java -version - Python 3.10+:配置虚拟环境,安装pip
- MySQL 8.0:创建数据库,字符集utf8mb4
- PostgreSQL 15:创建用户,启用JSONB支持
- Elasticsearch 8.x:启动单节点,验证9200端口
- Kafka 3.5:启动ZooKeeper和Kafka,创建主题
- RabbitMQ 3.12:启动服务,创建虚拟主机和用户
好了,环境准备好了。下一章我们开始搭建合规规则引擎的核心代码。到时候你会看到,这些选型到底怎么落地。
公众号:蓝海资料掘金营,微信deep3321