顶象全景式业务安全风控体系基于新一代风控体系构建,并采用Docker技术进行私有云和公有云部署。本文主要和大家分享下Docker容器技术和顶象风控系统私有化部署的优势以及Docker容器技术在顶象内部的应用实践。

Docker容器技术概述
Docker是一个开源的容器引擎,Docke是以Docker容器为资源分割和调度的基本单位,封装软件的运行时环境,用于快速构建、发布、运行分布式应用的平台。
Docker容器本质上是宿主机上的进程,通过namespace实现资源隔离,通过cgroups实现资源限制,通过写时复制(copy-on-write)实现高效的文件操作。容器是应用程序层的一个抽象,将代码和依赖关系打包在一起。 多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为孤立进程运行。

Docker引擎包含Docker守护进程(Docker daemon,dockerd 命令)、REST API和Docker客户端(docker 命令)。Docker采用 C/S架构,Docker客户端与Docker守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。 Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程的Docker守护进程。 Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。Docker容器基于开放标准,可运行在所有主要Linux发行版,Microsoft Windows以及包括虚拟机,裸机和云上的任何基础架构上。
技术优势
Docker能够将应用程序与基础架构分离,从而可以快速交付软件。使用Docker,可以像管理应用程序一样管理基础架构。宿主机不需要去关心某一个容器运行所需要的依赖,只要它可以运行Docker,那么它就可以运行所有的Docker容器,容器将软件与其周围环境隔离开来,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。
Docker容器实现了应用环境的标准化,我们可以为不同应用、及其不同的版本制作各自的镜像,实现持续集成、应用的快速交付、应用快速更新与回滚。Docker的镜像存储采用分层的形式,不同的 Docker 容器共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率,通过合理的镜像构建方式,镜像所需的存储空间并不会随着镜像的数量而线性增长。在Docker的官方镜像仓库Docker Hub上,我们能找到100,000+的镜像,经镜像仓库的统一管理,我们只需要pull其镜像,然后通过run命令就可以快速搭建起所需的环境、部署应用。而基于Docker提供的Dockerfile,我们可以在基础镜像上自由地构建自己所需的镜像。
相较于以往的基于虚拟机部署,Docker容器更加轻量化并具备可移植性,并且不需要考虑外部的依赖问题,就像Java “Write once,run anywhere”的特性一样,JVM屏蔽了不同平台的差异性,而Docker所提出的 “Build once,Run anywhere,Configure once,Run anything”体现了其更加便捷、部署成本更低的特性,不仅能够有效屏蔽操作系统之间的差异,对于混合部署又能够屏蔽其他应用可能出现的影响,间接保证了应用的高可用,提高了资源的利用率。
Docker容器编排与集群管理
当Docker容器逐渐增多,应用的依赖关系变得复杂,依赖需要多个组件时,就可以使用Docker容器的编排。编排是一个广义的概念,它是指容器调度、集群管理和可能其他主机供应配置。为此,Docker提供了容器集群快速编排的Compose与Swarm工具。Compose是定义、运行多容器、多服务和Swarm集群配置的应用编排程序(Define application stacks built using multiple containers, services, and swarm configurations.),使用YAML文件来配置应用程序的服务,然后通过命令创建并启动配置中所有服务,实现快速部署。
当应用被扩展到多台宿主机,管理每个宿主系统和抽象化底层平台的复杂性变得更有挑战。Swarm作为容器集群的管理工具,可以很容易地部署跨主机的容器集群服务,Compose本身不支持跨主机管理容器,因为它的实现中只能连接一个docker client。Swarm把多个主机的docker engine集群抽象成一个虚拟的Docker主机。在集群中一个应用或者组件发现其运行环境以及其它应用或组件的信息通过服务发现实现,通常是key/value存储,例如Consul、Etcd、ZooKeeper等。Docker1.12及之后的版本已内置SwarmKit,这是一个Swarm的升级项目,在SwarmKit中内置key/value存储,通过构建Swarm集群,在上面就可以把任务负载到不同的机器上。Swarm集群中,节点有两种角色,manager和worker。manager节点通过实现Raft一致性算法来管理全局的集群状态,再配合Compose YML V3的语法可以方便对所有应用的配置管理,高效实现跨主机的容器编排与集群管理。
顶象风控系统的私有部署,除了考虑业务和用户数据的安全问题,还考虑了基础设施的依赖和隔离、快速部署交付、更新等,保证所有组件和服务都可快速的弹性扩容,既满足小范围的测试与业务起步阶段,也可以动态扩容适应业务发展,实现高QPS的支撑。
Docker容器技术在顶象内部的应用
目前Docker容器技术已在顶象内部大规模推行,所有应用均通过Docker容器实现部署、交付与更新。在此列举几个简单的实践例子:
1. 在一个Docker容器中,通常我们只运行一个应用,当使用容器编排时,不同应用的启动时间不同,同时耗费的时间又会与机器的性能有关,在docker-compose的YML文件中, depends_on, links等参数可以控制服务的启动顺序,但是实际上并不知道容器内的应用是否完成启动,当一个服务必须要依赖另一个服务时就需要控制它们之间容器启动的时间间隔,或者在启动应用的命令中预留等待的时间,也可以对两个服务分别编排启动。
2. Compose在镜像的制作上也很方便,YML中提供了build参数用于指定Dockerfile的路径,image参数指定镜像的名称,docker-compose提供了build、push、images等命令可以为所有的应用批量制作镜像,或指定service名称,为单个服务制作镜像。同时YML支持环境变量,通过Linux export命令设置环境变量可以动态地调整参数,而docker-compose config命令则可以检查YML文件的正确性、预览最终的文件内容。
3. Docker容器日志输出的是控制台的日志,保存在/var/lib/docker/containers下以容器ID命名的目录中,在大多数情况下,我们只需要将必要的日志内容输出到文件中,再挂载到宿主机,对此可以屏蔽一些输出到控制台的日志以减小磁盘空间的占用,同时docker run提供了参数 --log-opt 可以用于控制日志大小,在Compose中则有logging max-size相关参数。
4. Docker提供了bridge、host、overlay、container等网络模式,在实际的使用中经常会有跨主机容器访问通信的场景,选择不同的网络模式、合理分配应用的部署可以提高应用的性能。
5. 通过Jenkins搭建持续集成环境,自动构建代码,可以快速把应用打包成镜像并自动部署,将构建结果发送到Sonar, 展示单测覆盖率,代码基本bug检测,并把失败的构建以邮件方式通知相关的开发人员,对需要发布的镜像推送到镜像仓库。基于Docker私有仓库,应用的发布更新从仓库中获取镜像分发,对不同版本的容器区别命名,保留旧版本容器方便及时回滚。
- .net中对象序列化技术浅谈
.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...
- [技术]浅谈OI中矩阵快速幂的用法
前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...
- 开发技术--浅谈Python函数
开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...
- 开发技术--浅谈python数据类型
开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文 ...
- 开发技术--浅谈python基础知识
开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...
- Node.JS + MongoDB技术浅谈
看到一个Node.JS + MongoDB的小样例,分享给大家.魔乐科技软件学院(www.mldnjava.cn)的讲座 Node.JS + MongoDB技术讲座 云计算 +大数据 ...
- Docker镜像浅谈
先抛出几个我在学习过程中产生的几个问题. 1. 容器镜像是什么, 和装系统时的镜像有什么关系? 2. 容器镜像的作用是什么? 3. 不同版本的ubuntu镜像有什么区别, 比如说 ubuntu:18. ...
- 消息中间件技术 - 浅谈mqtt协议及其实现
作者:carter(佘虎),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 1.1概念 MQTT(MQ Telemetry ...
- C++ traits技术浅谈
前言 traits,又被叫做特性萃取技术,说得简单点就是提取"被传进的对象"对应的返回类型,让同一个接口实现对应的功能.因为STL的算法和容器是分离的,两者通过迭代器链接.算法的实 ...
随机推荐
- 九大排序算法Demo
1. 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...
- win10 uwp 修改CalendarDatePicker图标颜色
CalendarDatePicker 是一个好用的东西,但是我发现想要修改他右边的那个图标,显示日历的图标颜色,没有这个选项. 如果不知道我说的是哪个,请看下面的图. 左边颜色变化的就是我们要修改的图 ...
- asp.net core2.0网站的环境搭建和网站部署
使用到的软件和硬件 1. centos7.3服务器一台 2. xshell.xftp 3. vs2017 4. .NET Core 1. 安装 li ...
- 阿里云负载均衡SLB的文件上传下载问题解决
Nfs同步文件夹配置 问题描述 : javaweb应用部署到云服务器上时,当服务器配置了SLB负载均衡的时候,多台服务器就会造成文件上传下载获取不到文件的错误, 解决办法有:1.hdfs 2.搭建f ...
- OSW 快速安装部署
关于在运行Oracle的环境下部署OSW具体好处不再多说,只需要知晓,在日常Oracle定位各类故障,osw的数据可以协助诊断问题.MOS很多文档也多处提到需要osw的监控数据. 一.前期资料准备 1 ...
- label联动checkbox
label联动checkbox时,若label包含在checkbox外层时label不需for属性,设置label的display属性为block时可以使整个div联动.
- wsimport 命令不是内部命令
问题: 1. webservice在输入命令的时候wsimport的时候会出现如下错误: wsimport不是内部或者外部命令. 2. javac不是内部或者外部命令 3 java 就可以显示配置成功 ...
- 初学者Web介绍一些前端开发中的基本概念用到的技术
Web开发是比较费神的,需要掌握很多很多的东西,特别是从事前端开发的朋友,需要通十行才行.今天,本文向初学者介绍一些Web开发中的基本概念和用到的技术,从A到Z总共26项,每项对应一个概念或者技术. ...
- 如何清楚微信页面的缓存(静态资源(图片,js,页面))
就不说啥子原因了,反正就是微信的缓存问题,照着下面的做法做,一定ok了. 不过就是有些麻烦,但是微信的缓存是为了提高自身的性能,我们这些开发要用人家的平台,只有自己去填坑了. 直接贴代码好了,加上去就 ...
- 异常详细信息: Abp.AbpException: No language defined!
程序运行后,出现错误:No language defined! 解决方法: 1.检查是否已创建数据库,若未创建则在程序包管理控制台执行命令:Update-Database 2.检查表AbpLangua ...