写点什么

一个实例解析 PaaS 平台 LAIN 的 9 大杀手级功能

  • 2020-02-11
  • 本文字数:3036 字

    阅读完需:约 10 分钟

一个实例解析PaaS平台LAIN的9大杀手级功能

一、基于 Docker 的 PaaS 平台 LAIN

在金融的场景下,LAIN 是为解放各个团队和业务线的生产力而设计的一个云平台。LAIN 正式上线已经大约两年,基本已经成熟,为宜信大数据创新中心各个团队提供了统一的测试和生产环境,简化了服务的部署与上线流程,也降低了运维人员对系统管理的复杂度。


LAIN 规范了一个应用的开发、测试、上线工作流,提供了为应用做的容器编排、权限控制、SDN、流量管理、监控报警、备份、日志等 devops 问题的整体解决方案。(扩展阅读:宜信开源|详解PaaS平台LAIN的功能和架构


在 LAIN 上,应用是一个基本的概念,某个应用的开发者只需要定义一个 lain.yaml 即可定义应用的编译和运行方式,对应用代码侵入性很低。LAIN 基于容器技术,面向多样化的技术栈,并且天然隔离系统和应用的依赖。


当 LAIN 用户创建一个应用(服务)时,可以到 LAIN 上注册该应用,当前的用户自动成为了该应用的维护者,拥有了进一步操作该应用的权限。构建应用的环境需要 docker 和 lain 命令行工具,为了方便,我们创建了一个 vagrant box 即 lain-box. 在构建应用时,除了工程代码外,还需要一个 Docker 镜像作为基础镜像,即编译的环境。如果是二进制的工程,如 golang,则可以在运行时换掉一个底,否则会使用 build 镜像为 release 镜像。准备好镜像和编译/运行的脚本后,就可以编辑 lain.yaml 了。


具体来说,lain.yaml 主要做了如下四件事:


1、应用名称的确定,体现一个应用的边界


2、应用的基础技术栈,即编译和运行的镜像


3、构建过程(如何编译)


4、微服务拆分及服务内部配置(如何运行、运维)


关于第 4 点,LAIN 上有一个 Proc 的概念,即每个应用都有一个或多个 Proc,Proc 在应用内有唯一的名字和类型,Proc 在底层对应于一组容器,一个应用之间的各个 Proc 的各个容器的网络是互通的,所以应用就是可以互相信任的几个 Proc,对外表现为现实中的某项功能。Proc 的类型是 LAIN 内置的,worker 类型是最简单的类型,LAIN 处理其它的 Proc 类型会做一些额外的事情。


在应用的层面上,LAIN 除了用 lain.yaml 将一个应用的依赖和行为固化外,还有以下几大亮点:


1、SDN 网络安全隔离


  • 使用 calico 项目构建 SDN 网络

  • 高效率的应用内网络互通

  • 应用间网络默认隔离

  • 显式声明应用间的服务互访


2、应用权限的控制


  • sso 单点登录,统一认证

  • 利用 sso 的组管理,console 进行应用维护者的权限管理,包括 registry 的镜像的权限和应用维护的权限


接下来,我们以一个最简单的 web 服务为例,来说明 LAIN 的工作原理。

二、通过实例看 LAIN 的 9 大功能

首先,用 go 写一个简单的 web 服务,hello.go


1558336463014000125.png


下一步,编辑 lain.yaml 文件:


1558336476586082813.png


可以看出,lain.yaml 定义了如何编译,发布,测试一个应用。注意到 hello 应用只有一个 Proc,web 是 web.web 的简写形式,即 Proc 类型和名字都是 web. 对于每一个 Proc,LAIN 提供了几个杀手级功能:


1、动态扩容缩容


可以在 lain.yaml 中定义一个 Proc 的实例数量,即 num_instances,可以定义每个实例所用的内存,也可以在命令行或 console 的 UI 上动态对实例个数以及所用内存大小进行调整。动态扩容缩容会自动注入一些 swarm 的 filters,保证同一个 Proc 的实例调度到不同的节点上。


2、volumes


即 docker 的 volume,如果配置了该字段,每一个实例都对应拥有一个节点上的文件目录。虽然大部分情况下,加入 volume 意味着加入了状态,不利于 HA,但有些特殊情况比如数据库容器化时,volume 还是必须的。LAIN 的 volume 的精彩之处是可以配置一个备份策略,lain 有一个组件可以支持自定义备份,在备份过程前后还可以自定义脚本,这些自定义脚本何时运行的配置类同 crontab 的调度策略,相当于可以在容器里定义一些 cron job。


3、cloud_volumes


由于某些数据需要高可用,另外 Proc 中不同的实例可能需要共享一个 volume,LAIN 集成了分布式文件系统,比方说 ceph 和 MooseFS,cloud_volume 比普通的 volume 多一种使用方式,即所有的 instance 共享同一个分布式文件系统目录。


4、logs


本质上还是 docker volume,但是定义在 logs 字段下目录包含的文件会被 lain 的日志收集系统收集,效果等同于输出到标准输入输出。这样我们可以统一管理、查询所有应用的日志。


5、secret_files


考虑到一次编译要在不同集群(如测试、生产集群)上运行,那必然会导致一个问题,就是如何加载某些配置,如数据库用户名和密码,将这些配置写入代码仓库会带来明显的安全问题,也不方便自动集成和不同集群上的部署,LAIN 通过内置的 lvault 组件实现了代码与配置的分离,每一个 LAIN 集群都有一个自带的配置中心 lvault,加密存储着所有该集群应用的配置文件。只有应用管理者有权限管理应用的配置文件。这样,用户将不同集群的配置分别写到对应的 lvault 中,即可用将同一个镜像推送到不同的集群中并部署运行。


6、web 类型的 Proc


  • 相关 nginx 配置的自动化:web 类型的 Proc 的流量会由一个基于 nginx 的组件 webrouter 做负载均衡,对于不同的 Proc,集群有默认的 mount point,也可以自定义新的 mount point,即 servername 或 baseurl; 也可以定义 health check 等诸多实践上必须的功能。

  • watcher 会自动刷新 nginx 配置

  • 日志系统会自动收集 nginx 日志


7、虚 IP


虚 IP 是为了保证某个 Proc 的高可用而设计的一套机制。


  • Proc 可以注册一个或多个虚 IP,应用可以通过虚 IP 对外服务,比如 webrouter 可以用虚 IP 机制去除 nginx 的单点

  • networkd 动态维护虚 IP:在 etcd 配置虚 ip 后,各个节点的 networkd 会得到通知,如果对应的 Proc 的实例调度到本节点上,则 networkd 会激活该节点配置 vip 和 iptables 规则,保证流量可以到达实例容器。如果一个 Proc 注册了多个虚 IP,networkd 会尽量将不同的虚 IP 分配到不同的节点上,由于容器是默认分散到不同的节点上的,所以这样可以保证很严格的高可用。


8、Filters


LAIN 支持 swarm 的 constraint 和 affinity 等容器调度的参数,使得容器的调度更加合理,比方说默认同一个 Proc 的容器尽量调度到不同的节点上,最新的 LAIN 还支持用户自定义 Proc 的 label 以及 Filters。


9、容器的监控和报警


利用自己开发的 collectd 插件,监控容器的基本运行时数据,集成了 Carbon,Whisper,Graphite-Web,Grafana,icinga2 等开源组件,团队开发了 hedwig,hagrid 两个组件,提供了一整套监控报警系统。


对集群而言,一个应用的部署大致经过这么几个阶段:


1、console 通过 lain-sdk 对 lain.yaml 进行解析,为应用创建 network,创建 calico profile, 创建 sso 的应用维护者组.


2、console 调用 deployd 的接口,deployd 完成容器的编排,也提供了应用在线扩容缩容等 API,进行自动维持和灾难恢复,并将一些重要的数据写入 etcd 中


3、lainlet 监听 etcd,networkd 和 webrouter 里的 watcher 通过 lainlet 拿到集群的最新配置,来完成虚 IP 的自动漂移和 nginx 配置的自动更新等。


总之,LAIN 在最开始的设计中较多地考虑了安全性,包括了 SDN 网络和应用权限的管理,秘密文件配置系统;在实现中,考虑到了多种技术栈的支持和容器化带来的优势,提供了包括备份、日志、监控报警等一揽子解决方案,能够让应用使用者方便地开发各种特性的应用,提高了生产力;最后,对于 LAIN 集群维护者,LAIN 提供了很多运维工具,包括 LAIN 节点的加入删除,应用容器的手动迁移,节点的维护模式等等,基本上满足了从日常运维到灾难恢复的方方面面。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/248


2020-02-11 17:46997

评论

发布
暂无评论
发现更多内容

Base64编码对照表

入门小站

工具

陌陌和它的解药,聊聊出海社交产品的思路

拍乐云Pano

社交APP出海 社交APP 泛娱乐出海

喜讯 | 拍乐云创始人赵加雨荣获「2021企业数智化转型升级先锋人物」奖

拍乐云Pano

音视频 数智化

时间转换不在变bug

卢卡多多

时间戳 时间转换 9月日更

模塊九 畢業設計

孫影

架构实战营 #架构实战营

阿里IM技术分享(四):闲鱼亿级IM消息系统的可靠投递优化实践

JackJiang

架构设计 即时通讯 IM

架构实战营-模块四作业

南山先生

「架构实战营」

千万级学生管理系统的考试试卷存储方案

毛先生

考试试卷redis存储详细设计

小智

架构训练营

MyBatis Plus 批量数据插入功能,yyds!

王磊

mybatis springboot

java 虚拟机 GC 学习笔记三

风翱

GC 9月日更

网络攻防学习笔记 Day148

穿过生命散发芬芳

等级保护 9月日更

被阿里奉为神册!2021公认最权威的分布式微服务指导手册

Java 架构 面试 程序人生 编程语言

硬件Scrum指南

AmyGuo

Scrum 敏捷开发 硬件架构 硬件开发‘ 硬件敏捷

读懂Redis源码,我总结了这7点心得

Java redis 架构 面试 后端

从浏览器地址栏输入url到显示页面的步骤

Augus

浏览器 9月日更

人工智能、机器学习和数据工程 InfoQ 趋势报告 - 2021 年 8 月

Regan Yue

人工智能 9月日更 数据工程 趋势报告

成为一名月薪2万的web安全工程师需要掌握哪些技能??

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

消息队列:Kafka Consumer源码解读

正向成长

kafka

架构实战营 设计千万级学生管理系统的考试试卷存储方案

💤 ZZzz💤

架构实战营

2021年金九银十必问的1000道Java面试题及答案整理

Java 架构 面试 程序人生 编程语言

阿里藏经阁天花板:高性能Java架构核心原理手册,一定要偷偷看

Java 编程 架构 面试 程序人生

深耕与构建:华为数字能源的立体版图

脑极体

连锁便利店:夕阳产业还是明日之星

石头IT视角

J2PaaS低代码开源版,10月1号即将上线,企业数字化转型优选!

J2PaaS低代码平台

低代码 零代码 开发工具

阿里资深架构师整理分享全套Java核心技术面试题及答案

Java 编程 架构 面试 程序人生

linux之软连接和硬连接的区别

入门小站

Linux

力扣前400题解答笔记,全被字节大神整理到了这份文档里

Java 编程 架构 面试 程序人生

写给“后浪”们的职业生涯规划建议

轻口味

android 生涯规划 音视频 9月日更

2021西部云安全峰会召开:“云安全优才计划”发布,腾讯云安全攻防矩阵亮相

腾讯安全云鼎实验室

云安全 峰会

阿里大牛再写传奇:并发原理JDK源码手册GitHub下载量已破百万

Java 编程 架构 面试 程序人生

一个实例解析PaaS平台LAIN的9大杀手级功能_技术管理_王超一_InfoQ精选文章