本篇主要介绍基于Kubernetes、容器(Docker)、微服务技术等在机器学习中的实践应用的架构与部署。
1 系统介绍
1.1 核心功能
主要完成功能:
- 支持Docker镜像化发布,支持Kuberneetes云化部署;
- 微服务化设计支持服务自治,支持服务扩缩容;
- 支持负载均衡、系统资源监控、资源编排;
- 统一设计轻量级通信RESTful API 接口框架,支持JSON格式请求;
- 支持多种机器学习算法,支持JSON格式参数配置;
- 支持中文分词:RobinSeg(RS)、IKAnalyzer(IK)、JEAnalysis(JE)、MmSeg4j(MS)、PaoDing(PD)、SmallSeg4j(SS)等;
- 支持特征选择算法:Document Frequency(DF)、Information Gain(IG)、(χ2)Chi-Square Test(CHI)、Mutual Information(MI)、Matrix Projection(MP)等;
- 支持分类算法:k-Nearest Neighbor(kNN)、Naïve Bayes(NB)、Support Vector Machine(SVM)、Normalized Vector(NLV)等;
- 支持Web图形化UI机器学习性能评估、数据可视化;
2 系统架构
2.1 云化架构图
云化微服务机器学习系统架构架构如图所示:
2.2 架构说明
整个系统采用云计算的架构设计。系统支持部署在传统的虚拟化技术(如KVM)或云计算IaaS层服务上(如Openstack等)。PaaS层采用Kubernetes+Docker的应用方式。
整个系统的重点是SaaS层的设计开发,即微服务化的机器学习系统。图 2 所示红框蓝底部分为系统的核心部分。
系统主要功能模块包括:公共库Comm-lib、微服务核(中文分词、预处理、特征选择、分类器)、RESTful微服务框架(微服务核加载 、HTTP API)、应用服务+WEB、管理维护等。
公共库Comm-lib:包括基础功能,例如日志、配置、数学计算等;
RESTful微服务框架:主要统一微服务接口,解耦与业务的关系,统一RESTful API。
微服务核:按照微服务接口定义,关注自身的业务实现。实现中文分词、预处理、特征选择、分类器的独立功能。
管理维护:主要包括Docker镜像化制作、发布,Kubernetes、Docker、微服务资源监控,资源的编排功能。
应用WEB:如果把微服务看出深服务端,那么这里包含浅服务端应用和WEB客户端。服务端处理WEB分类任务的请求、调度和生命周期管理。WEB端显示任务运行的状态和机器学习的结果UI显示,还包括资源的监控显示。
3 云化部署
3.1 部署图
云化微服务机器学习系统架构架构如图所示:
3.2 部署说明
系统部署服务组件主要包括:ETCD、Docker 、Kubernetes Master、Kubernetes Node、Docker Private Registry、Glassfish Server、Flannel。
ETCD:一个开源的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现。ETCD为Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。ETCD为Flannel 存储网络配置、分配的子网以及任何辅助数据(如主机的公网 IP)。
Docker: 应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Kubernetes Master:集群的管理控制中心。
Kubernetes Node:提供Kubernetes运行时环境,以及维护Pod。
Docker Private Registry:Docker 镜像私仓,存放开发的微服务镜像。
Glassfish Server:Web 应用服务器,提供web应用的部署。也可以采用镜像化的方式部署。
Flannel:常用的网络配置工具,用于配置第三层(网络层)网络结构。
3.3 部署实例
如上图2所示,在一台服务器上部署实例。
服务器配置如下:
处理器:2颗Intel Xeon E5-2670 8核16线程
内存:32G = 8X4G PC3-106000R 1333
硬盘:240GB SSD + 4TB HDD
操作系统:Ubuntu 14.04.5 LTS
使用KVM启动6台虚拟机。
虚拟机配置:
处理器:4核
内存:4G
硬盘:80GB
操作系统:CentOS 7.5
虚拟机网络采用linux系统网桥管理工具配置网桥进行链接。Kubernetes Master和ETCD部署在一台虚拟机上。4台虚拟机作为Kubernetes Node节点,其上部署Docker、Flannel服务。一台作为Docker 私仓,部署Docker服务。
软件版本:
ETCD版本:3.0.0
Docker版本:1.12.6
Kubernetes 版本:1.6.7
Flannel版本:0.9.1
Docker镜像仓库版本: 2.5