TrainTicket 是复旦大学 CodeWisdom 团队按照工业界微服务实践所开发的一个开源微服务基准系统,是基于微服务架构的一个火车订票系统,包含了 41 种微服务。本项目使用开源函数计算框架 OpenFaaS、基于 Serverless 架构提取并改造开源微服务系统 TrainTicket 中高并发的订票业务,部署并运行在 Kubernetes 集群中。主要使用的开发技术框架如下:
- Java - OpenFaaS、OkHttp、*Spring Boot
- DB - MongoDB、MongoBD JDBC
本项目基于 Kubernetes 集群并使用开源函数计算框架 OpenFaaS 来部署我们的 Serverless TrainTicket 系统。
由于本项目选择Kubernetes 来构建 OpenFaaS 的 Serverless 平台,因此你需要至少两台服务器以构建 Kubernetes 集群。集群部署教程
- CPU和内存:双核,4GB以上。
- 操作系统:基于x86_64的各种Linux发行版,包括CentOS,Federa,Ubuntu等,但内核要求在3.10及以上。
- 容器运行时:一般情况下使用Docker作为容器运行时。
docker login -u <username> -p <password>
详细步骤参考该链接,本项目中master节点为nfs服务端、所有node节点为nfs客户端,挂载路径为/var/nfs/data/
。
详细步骤参考OpenFaaS官方文档。官方提供了三种安装OpenFaaS的方法,建议使用 helm(arkade不够成熟,yaml文件支持定制自定义安装方案但过于繁琐)。
git clone https://github.com/GitHubDiom/serverless-trainticket
cd serverless_trainticket/
# 新版OpenFaaS取消了对Java8的模板支持,这里手动下载旧版的Java8模板
wget https://github.com/openfaas/templates/archive/refs/tags/1.9.0.tar.gz
tar -zxvf 1.9.0.tar.gz
mv templates-1.9.0/template ./
rm -rf *1.9.0*
export MASTER_IP=<master_ip_addr> # master节点的IP地址
export DOCKER_USERNAME=<docker_username> # dockerhub的用户名
# 部署数据库
chmod u+x part01_DataBaseDeployment.sh
./part01_DataBaseDeployment.sh
运行 kubectl get pods
和kubectl get pods -n openfaas-fn
等待所有数据库初始化函数 Pods 都是 Ready 状态,再运行以下命令
# 数据内容初始化
chmod u+x part01_DataInitiation.sh
./part01_DataInitiation.sh
# BaaS服务部署
chmod u+x part02_BaaSServices.sh
./part02_BaaSServices.sh
# FaaS函数部署
chmod u+x part02_FaaSFunctions.sh
./part02_FaaSFunctions.sh
# 前端部署
chmod u+x part03_Frontend.sh
./part03_Frontend.sh