顶象全景式业务安全风控体系基于新一代风控体系构建,并采用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的算法和容器是分离的,两者通过迭代器链接.算法的实 ...
随机推荐
- win10 uwp 访问解决方案文件
本文讲如何访问解决方案的资源. 我们经常会把一些图片资源放在我们的解决方案,那么从这里拿出来很简单. 我在 Assets 放了图片 1.jpg 那么我要把他拿出来可以 <Image Source ...
- java统计英文字母、空格、数字和其它字符的数目
package tes; import java.util.Scanner; //java统计英文字母,空格,数字和其它字符的数目 public class ZiFuTongJi { public s ...
- 谷歌Chrome浏览器提示adobe flash player已过期完美解决办法
最近使用谷歌Chrome浏览器提示adobe flash player已过期,浏览网页时一些flash元素的东西都无法正常显示,在网上尝试寻找很多方法,都不能解决,最后,经测试有效方法如下:一:下载最 ...
- ViewPager使用记录2——展示动态数据
ViewPager是v4支持库中的一个控件,相信几乎所有接触Android开发的人都对它不陌生.之所以还要在这里翻旧账,是因为我在最近的项目中有多个需求用到了它,觉得自己对它的认识不够深刻.我计划从最 ...
- phalcon——调度控制器
将侦听者绑定到组件上: use Phalcon\Mvc\Dispatcher as MvcDispatcher, Phalcon\Events\Manager as EventsManager; $d ...
- 写了一个bug,最后却变成了feature,要不要修呢?
事情是这样子的,前不久接到一个需求,为一个游戏开发礼包码功能 通常一款游戏运营期间会搞各种各样的活动吸引玩家,其中最常见的就是发放礼包, 玩家可以通过礼包码兑换礼包. 用礼包码兑换礼包有个一限制,游 ...
- CTS/GTS 常见问题解答
1.android.security.cts.PackageSignatureTest测试fail(MTK平台) 原因:由于用的是google default key而导致的fail,需要自己定义re ...
- SQL注入技术
TalkTalk的信息泄漏事件导致约15万人的敏感信息被暴露,涉嫌造成这一事件的其中一名黑客使用的并不是很新的技术.事实上,该技术的「年纪」比这名15岁黑客还要大两岁. [译注:TalkTalk是英国 ...
- Golang源码探索(一) 编译和调试源码
GO可以说是近几年最热门的新型语言之一了, 一般人看到分布式和大数据就会想到GO, 这个系列的文章会通过研究golang的源代码来分析内部的实现原理, 和CoreCLR不同的是, golang的源代码 ...
- 每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...