请选择 进入手机版 | 继续访问电脑版

IT运维管理,ITIL,ITSS,ITSM,ISO20000-ITIL先锋论坛

 找回密码
 微信、QQ、手机号一键注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

艾拓先锋
搜索
查看: 367|回复: 0

一起看看-基于 DevOps 理念的私有 PaaS 平台实践

[复制链接]
来自- 巴西

参加活动:0

组织活动:0

发表于 2018-10-16 16:32:20 | 显示全部楼层 |阅读模式 来自- 巴西
本帖最后由 adminlily 于 2018-10-16 16:51 编辑 * m2 e" i( L9 L( q

/ E. D! z8 O& L3 k5 H前言
+ H( i8 u2 d3 \7 S% E5 {8 u% ?

7 A2 T1 r# _# K) g+ m( E

- P* p; p5 J9 G4 M; A$ Q
云计算从2006年 AWS 推出 EC2开始,至今已经10年,从最开始多数人不清楚云计算为何物,到如今,大到 BAT等互联网公司,传统金融、证券、制造业企业,小到初创企业,都在积极推进云计算战略,以此加快业务交付效率,降低成本、提升竞争力。云计算的首要目的是将底层硬件抽象化,向上提供计算资源,存储资源,网络资源。

+ f% l7 s/ a" s7 B4 H% d5 a. P6 H
/ y- Z, U$ i3 }# T
其关键核心是提高了IT业务交付效率,使企业花费更少的钱,办更多的事情,同时满足质量,安全的需求。在云计算大潮下,企业内IT部门,需结合自身的业务特点,思考提供怎样的云计算基础设施服务(IaaS),以及基于 IaaS又提供怎样的 PaaS ,才能满足企业对于质量,效率,成本,安全四元组合的最佳要求,是摆在每一个运维从业者面前的问题。

" j9 F' V3 F+ q4 n* U$ p, J; c9 {

: M' F- x, V3 \* R( B: U, N( F
YY 互娱基于 DevOps 理念,并结合 ITIL 最佳实践理念,从13年开始推出自己的IaaS,基于自身条件,推出一套符合企业内部要求的私有 PaaS 运维平台,并在实践中不断的改进完善IaaS,PaaS。本文将系统的从4个方面,分享YY互娱运维团队对于 PaaS 运维平台实践经验及未来展望,希望对大家有一些参考意义。

+ i# P4 c7 x7 f% L
2 X  K) @7 A3 @; ]- ~/ \

. P4 B+ o. C  }, j6 G: p
一、 运维价值体系

: U$ \- h- |; G3 F# a- s& j
% L! j, E, a0 A$ v" `% t8 \3 i1 j1 w2 Q
说到运维,还得从运维的价值体系说起。运维的价值体系,从四个维度来概括,即质量,效率,成本,安全。这体现的是一个经济问题,是运维部门总结工作时,公司高层能听得懂的语言。我们从事一切运维工作,大到公司运维平台体系构建,小到某项具体运维工作,最终将从这4个维度的数据来衡量,因此,运维工作应该以提高业务的质量,效率为出发点,在成本和安全中寻求最佳平衡点。在云计算的形式下,应当以自动化,服务化等技术手段为依托,数据化,可视化体现运维的价值输出。
1.png

* ], h3 R; o' b4 T4 |+ y+ t* u

* [+ r4 G0 V& }- h4 X* @, [$ B" o1 Q* K& P
9 d9 o2 ^0 }5 `  I. Y' A! L- x- i' _
二、 运维平台化方式
2 `. y/ j" {8 Y# b
8 ]" e& C/ Z2 R
纵观整个运维技术的发展历程,运维平台化体系建设,我们认为主要有以下3种形式。

! Q) D: C; z: u
3 ^, z/ w  N" z- E: ^
1. 面向流程" {* x- ^+ e: k' K

; D( {( U8 H4 u( T! m' j3 \5 ?: e4 e
- b" F- P# c, ]; X+ J8 s
提供独立的工具子系统,再将工具 API 化,向上提供整合能力。
1.png

* Z' N* Q" ?1 ?2 Q' q

3 C! ^, p$ f9 r: f
上面这种运维平台模式,是典型的以 ITIL 最佳实践为参考的运维体系建设。我们从一个常见的业务上线场景说起,来看看这种模式的特点。
, N# |$ T# U2 {3 D' C  {
. G9 O1 B/ `3 x% S. R! I3 c1 l
假如一个 Web 业务需要上线,需要服务器资源,需求人(开发或者业务运维)需要到 CMDB 查看是否有空闲资源,若有,则到“服务器申请”流程里面提一个工单,经过一个审批流程(至少3个审批节点),拿到服务器。

7 m! A! A  ~( ~/ A9 `9 I

- d/ E) d& N+ K4 A! F
同样,业务上线还需要数据库,需要缓存,需要 DNS 解析,需要开通权限,需要添加监控等等,需求人都必须到相应的系统提单,才能完成需求。这样的流程体系下,对于需求的管理方是比较好的,各类需求,资源都可以较好的记录以及控制。
& S* I+ m1 K+ L$ F" D  I& K
4 Q/ |  j8 z, Y5 ]/ ^/ ?' z5 p) w
但对于核心的业务上线,变更、即面向用户的价值交付,效率很低,业务上线周期长,人力成本高。
( H; P# _' r1 r) V, q% m7 E) q

, Z, M+ T( @% H( s' ?8 a( \# w* |
ITIL 最佳实践中总共包括六大操作流程五大服务支持流程,流程都包括五大要点:流程目标、基本概念、主要活动、好处与风险,以及关键绩效指标与报表。以流程为导向建设运维体系,在互联网时代本身变化极快,不断试错,追求敏捷高效的目标冲突越来越大。
2 B  z: ]' O5 V. a1 K
+ _3 ^* N5 t* G4 c  U' J3 \
ITIL 面向流程的运维体系亟需改进,而改进的方向,即面向业务的服务化方向改进。

1 e. V0 `9 |$ z# A. M5 @4 C1 v

3 r5 @! w4 a  E* G/ z: J
2. 面向服务  V- ^1 p' v2 a- G) V  d

. w+ x$ P# L$ |" U4 _) m  p' V; l1 a: ~3 v& d. Z7 e# ?  @5 Q% b
基础组件API 化(IaaS化),向上提供整合能力,再做面向运维的集中信息管理,配置管理,变更管理等。
1.png

/ K$ L" a  f/ q! ?+ m. h! i, g" N* N

) D9 F* E8 B0 w; a3 w' v' }
如上图所示,我们仍旧以一个 Web 业务上线的场景,来进行说明。

6 o8 F" P4 a0 j. x/ L6 t

1 L$ I3 H& q1 c, R
面向服务的运维平台,首先需要构建底层资源的 IaaS 化,API 化。有了 IaaS化,我们就具备了提供一个一站式的运维平台的基础能力。在这样的运维平台上,业务上线需要数据库资源,平台提供对应的实例配置套餐,一键创建并返回给用户。
. r1 M4 D$ G5 x7 H

: c* U) u% j% r4 u9 ~  l. q
同样,制定一套标准的发布规范,实现自动化部署,业务在发布的时候,从 IaaS 资源池自动分配服务器。其他的资源,如 CDN,域名解析等,同样可以在平台上自助完成。
. ?$ K0 _) q0 e, r- M0 _4 k) @; z- e

9 m  F; y+ V: r2 P
这样,业务上线的流程,全部以自动化,自助的方式完成。再往前,平台与持续集成,自动化测试平台进行对接,即可完成自动化测试,并根据自动化测试结果来决定是否进行发布。

  t( [- E* _: X5 \/ {9 s

8 m6 s) x% s' `" d0 u3 v, u
这里面主要是以 DevOps 的理念来构建运维平台,这个方式也是我们的实践方式,后续内容将详细描述。
* O3 G5 T+ D) H/ G( E+ @

8 ]! X' W6 _6 }
3. “拿来主义”
$ Y; C! k0 \7 t) c1 j& Z/ J1 S6 q% _6 [5 B( P1 m

' b$ O0 K' Y/ P- e! J0 B% v
1.公有云平台
9 [# ?! V% V3 q8 u
( Z9 h. n6 n) ]1 @
公有云平台提供了完备的基础资源和强大的功能特性,且具体完善的 API,一般创业公司完全可以基于公有云平台进行运维平台化管理,无需自己再去开发一套运维管理平台,也没有能力去开发。不过一旦公司做大,考虑到单一供应商的风险,势必考虑至少两家云平台的资源,甚至可能还存在自有数据中心,这样就面临着混合云管理需求。
  m+ e4 A- y! ?" h' a; I2 q( G

- w( G/ Q6 Z3 X6 k0 e8 }4 d4 C. w: t. a* v* H8 g7 [
2.ITSM 商业软件, d" H; a7 A' m( w+ Q$ a) p5 ]

# I  p/ j5 t# g
  q" o4 ?; [& w在云计算和 DevOps 驱动下,当前也有商业的ITSM 管理软件,提供一站式运维管理平台软件或者服务,而不是提供离散的 ITSM 管理套件。这类软件,在互联网+的时代,对于传统行业的 IT 部门转型升级会非常有帮助。
1 \" q9 _/ ^" {  d: ?
1.png

( n# Y" _. i) C5 h. S, N5 Y
0 o! |  w) l) d6 R' ^, q

  a* H% B4 W+ p  P% H; P! i; G
( I; G0 D5 U# n* H; R
+ y: E1 m& P7 g% V

! F( R4 g% g& X& Z% C& o. X2 N* e! Q3 ]三、 YY互娱 - PaaS 运维平台理念和实践
业务场景

* r  p% c3 ~# I* q7 u( K) K; {- Y, z8 }
+ O' s' f! I6 ?
YY 互娱在这几年处于高速发展的过程,即要稳固拓展 PC 端的市场,又需要在移动端寻求突破,业务场景:
1.png
   

' t) X  }! B3 i" m+ T* y9 Q7 W
1. 快速试错
0 L2 E, P& N6 _( r, h8 H+ a# l% n

3 c: O" g9 e9 s7 x9 u+ @0 L
互联网时代竞争激烈,特别是移动互联网时代,谁能快速推出产品,快速迭代,谁就能在市场上占得先机。快速试错是一种常见的竞争手段。PaaS 平台的业务交付运行模式,最大特点就是效率高,成本低,可以很好的满足快速试错的业务需求。
   
5 k6 F- p" s8 |! n: }2 g& Y" v& ?% `
2. 人力不足
( J  c# P# W7 f, w  }

- o) Z2 r8 u3 U
长期以来,互联网企业在运维方面的人力投入是不够的,很多时候是扮演的救火员的角色,PaaS 在平台层面提供一站式运维服务,高可用架构质量保障,减少业务上线对运维人员的依赖,在不需要运维人员介入,开发人员自己就可以上线业务,并持续迭代。
基于 IaaS 的 PaaS 平台,将硬件环境与软件环境进行了解耦,也降低了硬件故障对线上业务的影响,释放了运维自身的压力。
   
( T# x$ U( r2 C$ G( s( k1 j9 M
3. 成本压力

7 D1 o, B5 o( b) O! B+ w
' y1 P7 Y7 P- y/ j, @: W
业务上线需求多,如果按传统的方式提供物理资源,对资源的需求量极大,而业务的访问量,生命周期不可预测,造成硬件资源利用率低。很多时候通过混合部署业务,提高硬件资源利用率,造成后期维护成本非常高。
- |8 E$ C* {0 z2 @

' W3 w5 z  b( o+ T) z& e
平台理念

" g) q! C- ?* p+ v- p) d
' S& K* a# g+ a3 `% l8 ?6 j
基于上面的业务场景,以及云计算的大背景,YY 互娱技术团队基于 OpenStack ,推出自己的 IaaS平台,主要面向游戏业务的云计算平台。基于 IaaS能力,逐步构建自己的PaaS平台。

6 k9 l: `, B( J4 l; }
8 @$ w) I& ]# m
我们的平台理念是:运维技术服务化,转化为生产力。平台提供高可用高性能高质量的基础架构服务,满足业务的快速交付。平台提供一系列的工具,组件,来支撑开发人员自助式运维。
# {5 |: G" t# [8 P) e
; Y4 p0 M4 x2 R' Z$ f& ~
开发人员只要使用平台,无需找到运维人员,就能应用运维的能力,如高可用,弹性伸缩,配置管理,容灾备份等能力,达到 NoOps 的目的,减少开发、运维不必要的沟通成本,使开发人员专注于业务开发。

9 L4 M% y" \8 Y. F) A4 U: |* C6 j
5 O. `9 U5 ~$ E) ~/ t" t/ o) f
执行 DeoOps 理念,平台将开发、测试,运维流程自动化打通,将持续集成,自动化测试的能力以服务化的方式输出到平台。最终,将业务价值交付涉及的各种能力,通过平台输出到业务,达到技术服务转化为生产力的目标。
1.png

: j+ F8 ~5 d6 P1 Z" ?4 E! {. u- Y
9 {9 t% c% T0 a) h( L( N
' j3 ^. {9 R0 N* m8 y* y实践历程
9 w( T. L+ F. w; q2 q( L! {
& Y% |" g8 m/ T: h+ ?
; r; Q  l+ F2 f1 S6 P2 |
1. 整体架构

6 w* |) @2 ~" x0 x
# ^0 I- j2 `3 k8 F3 P. Y
PaaS运维平台的整体架构:
1.png

/ Y5 C. u1 h9 P) F5 d) V3 W  j

9 N2 ?' V6 M6 j  y
两种颜色代表两个视图,蓝色部分代表从业务维度的视图,即从PaaS平台用户的维度看到的架构。灰色部分代表从运维自身的视图,即运维全局的视图。
* v; u7 x) d) m5 @& y0 x8 K8 s

" e+ o+ k% Z0 J; M) ]* J5 I- E3 f
从业务维度的视图,大概分为4层,从下而上,面向服务,包括硬件层,IaaS,PaaS和业务层。
) Y5 V6 h8 K+ l* x  C
0 f2 U+ D2 U& L( P0 @" |/ V/ w
从运维自身的视图,包括全局资源中心,监控中心,数据源中心,报表中心,安全体系等。

- Z& t! J5 A  A6 W5 x
7 G) H8 Z7 p* j+ G3 H# W
接下来的篇幅,主要把面向业务的各个核心组件及实践做介绍。
7 Q& C2 Z1 a2 \" z2 j1 M- p

9 c9 g3 l% w3 D; p2 q$ g% ^* D
2. 标准化

" S' k6 k5 O' d9 b7 N, E
+ K# J  C3 H+ o& m$ l) R" Q6 d
标准化是运维自动化的基础,PaaS 平台的标准将以系统化,自动化的方式落地。
2 _/ i- V/ P& K, W3 W

$ e/ r" j% n' x) p0 V标准化主要包括这些规范:

# {) L1 @& E; H, Y; t3 @! G

$ t  H2 \0 S# f( L0 {3 T8 H# v
  • 基础应用软件规范(Nginx,Resin,Tomcat等)
    ( }  x" v3 T" W3 @2 o

: C5 ~1 [1 E2 R7 m; |0 ?3 n6 ^( F! q4 S$ X; x0 j
  • 应用程序打包规范(Java,PHP)
    8 v, r" G. @( G/ Q$ _) e7 Y1 x
: N! x0 M0 s8 O- T! [  c

: v, O2 ?# o/ d3 \
  • 应用程序部署规范
    3 s+ _3 s' _9 c7 d

    : C! q" I- [2 ]

% k: R: f: |- z; i1 j9 Z
  • 监控规范

    ! `5 f% y0 A3 V9 t" ~* n

, b0 k5 z& r! E% I) v* x; @3 S! L: q
  • 其他

    : Z  ?$ Y( n' k0 p& n
    . _1 l) ~! |0 B4 r
, k6 W2 \! P6 ^0 m) [- q) O
以上规范,全部落地到PaaS 平台的各个子系统,由子系统自动化完成。比如对VM 环境的标准化,通过 VM 镜像方式交付。

% G* L! w$ P7 g: i/ m+ y$ J

  M& r2 D2 M7 ?8 B
3. IaaS
- L% _% T/ o4 }$ x5 [( b

; C8 V" B& l, }% U2 E" z, i2 [" k, ~, a
我们的 IaaS 层提供了以下服务,来满足我们的应用上线。

1 R6 H% ?) C% a& {

" h& W$ x# K3 M# H. i) k2 C计算虚拟化7 R% i! j5 m1 ?) V( l

2 q- r3 N* B: ]' c* E
8 i) [- M/ o& [) ^* U计算虚拟化部分,我们这里使用 VM,将 VM 作为我们容器计算的最小单元。当前使用 OpenStack 开源实现方案,使用 KVM 做 hypervisor。提供各类 VM 套餐满足不同业务场景。计算能力扩展我们采取的 VM 的横向扩展,即 ScalingOut,后面章节会介绍。
% W% i4 U, x2 S4 a" G存储虚拟化
; t& z/ n" A/ D: w  }. \, n7 U/ Y8 U8 f3 Y
# B/ P* i' U: }+ D: C: S$ a, r
  • 考虑到性能问题,我们VM使用了本地存储。没有使用 Ceph分布式存储。; y! ]% [+ f8 h. Y" N

    4 c; ~! w. Q% j# V! [. L; F* ]

: Z( q& ?+ T, S  o  j$ v# O: ?0 d5 s
  • 对象存储上,对接了公司提供的基础服务。
    ) r1 V# G5 X! {! b! @# @! H+ ^
    6 a  }9 D9 [9 j* H5 m4 m5 @
( D. @+ l' l$ W
网络虚拟化6 H$ |0 X$ C* I/ X+ K/ V
. Q" k  A6 m- J
: j, [+ ?0 P! [3 n
  • 网络部分,采用了Neutron Provider Network,未实现 VPC 网络隔离。. @  M/ [0 h0 D6 Q; o! J4 @
    # _# e, e4 R: s6 q
4 \; J3 g1 F4 q  ?5 b; n5 D

! S/ E* T" Q" |$ `1 M7 p+ ?数据源
' f1 ]& C$ O* v9 _( {5 U
- G5 h% |/ j/ _5 ]% @# L" c! o& Z8 Q' q
数据源我们提供了3类数据源,Mysql,Redis,Memcached。这3类资源是平台上使用最频繁的组件。我们以单物理机多实例的方式运行,未主动采用 cgroup 进行资源隔离。这些插件在被创建的时候会自动添加监控,用户可以在平台查看相关监控状态信息。$ v1 f4 ]+ \+ J

. r% b! o9 T6 T4 Q4 ]. u1 s
; Q9 ]4 k1 W# R- B# j4 J插件平台。上述基础组件以插件方式与平台整合,类似于 Heroku 的 Addons服务。
' \( B1 t5 q' H1 l* d
& U- x( ~; u$ {6 B0 H# A& x
; M, d& j; I# o; m) \$ L
1.png
具体业务流程描述如下:

+ ^' y9 `2 L9 S1 _1 |+ p2 p+ h

) o9 c3 x" |' E# X. h2 u
  • 插件注册:插件开发者将自己开发的插件接入插件平台。
    1 U9 u; D4 x* z: D* h
    ! ~0 Y+ |; m3 v) ]: X4 m) s

3 C6 H3 w" u0 h1 R8 u$ z3 ^
  • 获取插件:PaaS 平台的项目用户请求插件平台,获取插件授权信息。

    ; q; {% a- {# ^' f) s
( n3 W9 B; C9 d; o
. C# c/ ]" q% _: n9 y* H) _
  • 返回授权:插件平台将来自 PaaS 平台的请求转发到具体的插件,获取具体插件的地址,授权等信息,并将信息存储在插件平台然后返回给PaaS 平台。比如 Mysql 实例,返回域名,端口,账号,密码。
    0 Q$ B/ @- E7 I; h  R
% x: L6 Z1 k* |# I) Y/ \8 a1 U
8 \$ V" w9 X' g) ^1 }0 S0 G- ?
  • 插件注入容器: 项目模块发布的时候,由CloudRouter 从 PaaS 平台上获取插件信息并将相关信息注册到业务容器环境变量。关于 CloudRouter 的功能,后续会详细描述。

    9 E% S& l+ y/ V/ N' c! I# K8 }6 C7 O* C6 }

    . I0 l5 {3 M: R8 Q; P' X

7 _) w9 e9 v6 g' ^0 C; k0 }9 W
容器访问插件:业务容器从环境变量中获取到的插件信息,直接请求具体的插件。
4 g7 d: p# M9 K3 F6 Z' Q& @& P5 o% i

2 K! S/ Y' D( |+ A+ p
插件平台的引入,增强了PaaS平台的开放性和灵活性,项目所需的所有基础组件,不需要 PaaS 平台自己提供,可以由公司其他开发同事提供。插件平台面向公司内部所有开发人员,设置了一定的运营策略,如贡献率,引用量,收获赞等,并与公司的绩效积分,技术职级评定做一定关联。

  Z5 a: r1 U/ U# c* J8 A4 k4 L
; f% u# i; O4 `0 F* {, w8 d5 V+ a4 a4 D) x3 U0 K4 K- X

& ~+ J, {& ]% t* e! v6 z' V
  • 1.png % M$ o! s) R; s. A1 U; b
3 w( C/ v6 r" Z2 l% [0 k) i0 ^
其他资源
" o+ |! h! a9 S+ b+ Y

! [* n, h" @& ]: J5 X& ^' E" Y5 P* g# J! A! h- G" `
其他基础服务,我们同时提供了 CDN,消息队列等。
# ]: i) j. F# @: Z3 r( I' Y8 G- M, A/ ^0 c

  o( m+ O3 k' KCDN 是使用第三方厂商基础服务,通过 API对接,实现一键创建 CDN 服务。消息队列服务底层采用了 RabbitMQ集群。2 x( U& X1 C  t, G$ ]1 r2 w

) b$ b) U8 l$ j7 t* \7 D# J9 Y2 Q( r9 `, e1 m' ~2 l
同样,这些资源也以插件方式整合到平台。
7 \; \6 J/ [1 L" _( d; V! M: e$ Q( R% Z' Z
  O3 A  L* v  u
4. 持续交付

7 J2 b# J8 F+ K( w/ z  [; h, Z( z
7 C1 ~3 ^( s8 s2 F, J
基于上面的 IaaS 层,我们有了构建 PaaS 的基础能力,来解决持续交付的问题。我们从以下几个方面来描述
1.png
  • 交付模型

    ' b) [9 J& r5 h7 p; R% R0 O
    2 _! X/ j4 v- r1 e$ W& v& T

; ^, d: b: ?$ c4 J! r: A- Q" O交付模型,指在我们的 PaaS 平台上的业务,构建一个业务的模型。这个模型也是基于我们的应用程序打包规范来做的。这里再简单描述下:

, e) P7 v. d$ B
& o7 [6 g: K. m2 r6 D

& _- ]& {2 f( X4 d, K" w/ d: @/ OPaaS 平台业务交付的对象包括:人, 项目,模块。
& k7 P( W' p/ Q4 }1 H! J
% e) Z3 ]$ c  M' J7 X& {3 E* G1 `7 @& y2 z; q
人即项目管理员,一个人可以管理多个项目,一个项目也可能是多个人管理。
" F  q! h3 g7 \' D6 _. ]6 g
8 T+ r1 y; `$ o5 T; q' J; a7 Z7 q0 `: v* n* i/ z$ l1 Y& s
项目对应的是一个业务,一个项目又分多个模块,每个模块就是一个独立的部署单元;模块一般是按功能进行划分,比如最常见,一个项目有 admin 模块,user 模块。我们的PaaS平台的部署操作最小单元是项目的模块。以 Java 应用为例,模块的类型有 War和Jar。不同类型对应不同的部署动作。; F- f$ H9 S1 I4 Z5 e! G3 Q

; |' ~* B1 E. j9 Y5 g" j8 p6 e* e/ x5 F. d
项目管理
% X6 M, D: K0 }. Z  x- B
' c; n; C+ _% u9 ~% z2 S2 e: n7 c/ i7 e( t4 i8 x
项目的管理包括项目的新建,以及用户权限管理,属性管理。需要的基础信息包括:项目 代码库地址,项目成员等等。

, B1 l. q* z) b! c; P

+ M/ `1 U" R# {4 ^4 s5 w& O5 j3 \项目管理中涉及的信息

2 i1 {8 s( g  ^. z) W
1.png

) b" m3 e8 G/ [

/ o3 K  |* K) S. b

0 M# X) ^2 T5 F2 @. d# h% B

6 Y8 K8 O$ a3 t3 P# p$ c( U1 s8 F持续集成

2 p1 z+ E  ?# s

4 ]) r/ F- A4 Z/ `, M/ u% E. G以Java 项目为列,我们约定在 pom.xml 根据模块名称打包成对应类型的包。并自动创建对应的项目模块,打好的程序包上传到分布式文件系统(DFS)。实现只要将代码提交到版本库,即可一键打包发布。在我们的现实情况中,并没有对每一个项目要求持续集成,而是选择性的,其中的: Y: t) n  i2 ]3 z+ h" ?6 a% r. u

% h3 |! z7 \4 ^- ], g

% ]- z/ a, @# q0 s9 ~" K2 y6 f$ O. ?7 M+ t9 ?, f- W5 Q
原因是:
! Q9 d9 B) j0 {1 r8 h2 t0 s+ F: j* M1 {& z

5 `, d% k: l& |/ K, D7 |大部分项目都是小型项目,不涉及多人协同开发,这样的场景下不涉及到复杂的持续集成场景。
2 j3 \8 {  I! E* E小步快跑。本身项目的迭代速度比较快,集成频率比较高,一般不会出现持续集成不通过导致需要花费大量精力解决集成失败的问题。/ I8 J4 ]$ y! [# J# g

; s! {# {  X$ T  N  Z. d( U+ G9 F# }/ y: w; l3 b9 r
持续测试
8 G" H; u# w" A. S8 W

' E- y' w" y/ C. H, s( t
  • PaaS 平台与自动化测试平台进行对接,在基础信息上同步共享,包括项目名称,项目成员,版本库地址等。持续测试的实践经验是:, r) K3 A% `; }4 f
    0 F0 Q) w2 M( V% v1 o& \/ G* s! ~
6 L: y! l1 t6 f# X0 q
业务分级。对核心项目进行严格的持续测试,包括单元测试,QA 自动化测试。对非核心项目,默认不进行测试。是否测试的权限交给项目管理员,项目管理员一般都是开发团队的 Leader。
5 ]8 a$ |8 E( ?3 Z* |  P, x
" C4 i5 s4 q5 d! R+ R/ C7 g, X
8 U* v( S" G) W" r* N: l' T风险控制。在实际的运作中,测试能发现的问题是有限的,需要考虑一旦出现问题的补救措施。因此,对于核心的业务系统,引入风险监控,降低 bug 的影响范围。9 D% S7 h9 a  Y2 T+ M7 G; a! T

3 p! g8 G4 O; J( U5 v7 T. }7 ]1 z
% Y# N% }5 p( d! S. K1 c& {
持续部署
# ]; S2 d9 T8 B! s1 j: k& b
0 f/ L2 E( C( D; E
  • 持续部署中,涉及到如下几个问题,我们的解决方案是:8 e9 N" c3 b/ X  y9 V
    ; p; L1 p2 v4 e2 u  @) u

) n; {& F  G" l4 w" ~# ^4 c& R7 e" r) t+ t
数据源。项目所需的数据源(Mysql,Redis)实例,用户在平台上一键创建,然后通过环境变量的方式注入到业务容器。具体流程见前面章节“插件平台”所描述。* Z( O( I9 u( ~; j0 E/ n2 N

; X4 p* f$ d7 c8 n) R. A" M' f; Q' P4 v/ q5 \
配置管理。包括运行环境的管理,JVM 参数定制,Nginx 参数定制,域名配置,证书配置等,这类配置全部在平台,由用户自助或系统自动化完成。
- q% {/ F, p. [5 \4 e+ L+ Z
. ?2 W& M, a# X( Y6 ^. u" U' Z. w4 x$ i* _" L6 H( m
发布。涉及“包版本”发布审批,服务器资源自动分配,“配置管理“中涉及的各项配置应用到相关组件。( s7 Q( p( h  K
7 Q" _. {9 w+ Q$ W# u' ~

6 }  F5 e; n) _# f& Y) b回滚。平台支持包版本快速回滚。  _4 m2 |+ M) O2 H) M

& o# n, Q4 X+ z6 f$ W; v. W7 H+ c% N% n! [8 x2 ?# M; d1 v
持续反馈

6 c: Y* e+ f3 n" [* ~0 `3 d# L4 b3 U/ ?* p( w1 i6 y
基础资源监控及监控数据展示8 o) q' C) @% }0 t6 C4 R

: r0 }" O  f7 X7 g! ~2 ~- H+ F( t9 h! V  F" w7 s; W: P
运行维护
% l1 X$ _# Q9 U0 }9 G, C
: G$ ^5 l! s; ]0 u& ^  Y4 c0 o
3 C& i' R( b' p* ~* `' Q
业务可用性监控和数据展示

2 M5 M5 T5 s5 ]" e8 e/ P1 r' N6 \5 x$ w/ v6 e, O- b. m- p
  • 上述三点在后面的章节详细说明
    % T3 J9 ?& q8 G! m4 u
    8 }' K" p6 w9 b

7 ^. c) R  ?& z  X7 P1 x
2 N" s& M! H4 I1 _/ ^5. 高可用架构2 ^, N/ @1 m2 C+ _

4 l$ ~+ n, ^( W4 q  k
6 s  b0 V1 b/ ]2 E- E% U平台架构高可用设计,从最上层的攻击防御,到数据持久化层,全部提供高可用方案。业务只要接入平台,就具备全部的能力。。
# g: D' P6 p$ `& t. |" i: w; y  W: x
1.png
+ r( e: G. l0 v( ?
云防DDOS,接入公司层安全中心的DDOS 防火墙,保障业务安全。4 p9 Z6 v* @! t: A1 ^# S/ w9 C

' I: k0 o+ _2 \8 K$ T% q
: x0 i% g, d9 p: r8 h5 g1 qGSLB,平台提供多机房,多链路接入的能力。项目域名自动解析到多个机房,提供就近接入的能力。5 J$ I7 j+ K+ V* ?% n, J1 p

: W+ O1 j  ]' e7 h; ]3 M" l
2 V& L: h0 j8 C7 F0 eOSPF-LVS,四层负载均衡采用OSPF-LVS 架构,具备平滑的水平扩展的能力。
9 `7 }+ z8 u3 C( E; }% s) s1 _* g4 D5 `. Z' i& ]" x" E) U* ~7 H: Q
1.png
3 @8 m" l4 j' d- w7 w

) }4 _. ]$ b/ \: x# ]  b
; p; `9 p' @- G: r- |3 ?: G9 A" O8 t6 d9 Y, p, ^& k
9 d6 F( X; [% _3 I" U- J4 E
AppRouter 应用路由层,Nginx提供七层的路由转发,同样具备平滑的水平扩展能力。
! u' h# r, ^' }% E" j' C8 a. O) W# @6 g" R

6 ^2 m  F6 J+ ]" Q: tContainer,应用逻辑层。这一层是项目级别的配置。提供 Nginx+容器(Tomcat,Resin,PHP-FPM)环境。这一层引入 Nginx,是考虑到部分七层业务逻辑控制,交由项目级别的控制,不至于每次项目级别的变更,而影响上一层AppRouter 全局层面的变更。这一层具备弹性伸缩的能力,后续章节具体讲解弹性能力实现方式。
* ?' k% D8 T& A4 P2 B) J& _# c9 T; H2 b) c8 D
2 n, |& W0 J2 o+ o2 i! S& y
Cache 层,提供纯 Cache 和数据型 Cache。这一层我们主要是使用的 Redis,以域名和端口的方式对外暴露,通过域名切换,具备故障切换的能力。* ]" l5 b5 b9 u4 t) u( e

. f1 P' r! {, R$ [# L6 \* V7 e6 V5 ?. n) j( w
  • DB数据持久化.这一层目前对于所有业务实例,默认提供带主从的实例对,业务发生故障时,需要根据业务场景对数据一致性要求情况,进行故障切换。这一层当前未引入开源类似 MHA,MMM 等架构,而是通过域名切换的方式来实现,这里面参考了 AWS 的实现方法。
    2 x9 H$ I/ A! h
    , |% e! m$ t  l$ _' W# [0 `

    ; C& I. _; y/ o/ M

  @9 \) Z; ]! e8 t% h

% _; q) k, u' W+ x) w; ~, N" X我们的架构一般都是 MM 架构,当主节点发生 Down 机后,域名切换到从实例,Master 恢复后,只要修复主从关系即可。对于高并发访问量的业务,需要一主多从,或者 Mysql 环形复制场景,这些需要根据业务特性做一些人工介入。1 x" o) b: Q3 x. ?
9 }$ x7 `0 O, n8 ^1 @  a$ _
! }3 I3 I6 M2 X! o
6. 弹性扩展
+ W3 g- L, |, i! Z3 G6 `' v
5 j, u( k, [" D( J* w2 s) I9 k- O" c7 C$ C* h) p' H" B
弹性$ f$ t0 W7 s9 v/ {- f7 B3 k

* A% h) I4 S4 D! h& y2 @9 O2 n* A0 R/ s) v- }
弹性是 PaaS 平台的基本能力,弹性技术的好处有:: A* ~8 d7 {; U
  f. w. W2 C4 s$ r
) Q  b: D4 f1 U0 G0 N
高性能:在业务访问规模上去时,服务器自动增加,保证性能
# m& z1 n- U6 N. q2 k0 Q- D
6 C6 i3 y: B9 m( i: H
; C3 _  f+ v9 M& U! t2 g经济性:在业务规模降低时,自动收缩服务器,节省成本
6 X8 e. w# C1 y( B
1 A& p% B% n3 D+ z' a' g: ?
3 E4 \% F4 i) @" Y0 a7 [9 D高可用:如果有服务器宕机,自动进行故障隔离
4 e+ f$ e4 ^4 q& Y; n6 [& d( X0 w) J+ B# p% [# a# M* x4 A
: q) |6 x' p% [5 n8 ?5 _8 q
平滑部署:实现热部署,不影响现有业务运行

2 |  Y& s% \$ @. o# g5 q6 c' U8 |. D  x0 l" c) R9 p- l# m
  • 弹性伸缩提供包括动态伸缩,热部署,故障隔离三层含义。弹性示意(图十四)
  • 1.png ; i8 H+ w  j4 M0 }$ t% z  {% x. U/ Z
    % \7 @2 ^! j$ b+ W- T
" r8 c  `8 E- C+ P: G# J
$ b1 w0 T: `  v3 t' a: u5 v1 r
我们的弹性技术是由CloudRouter 和 CloudMonitor,资源池3个部分组成。架构:

1 T5 t' f' u; y9 P+ a
% L' t; N! x# u6 V1 O
1.png
  • CloudRouter是核心组件,是弹性调度的大脑,在用户的任务,资源分配中间起核心的调度协调的作用。
    * t4 k3 C* y% ^% p# N* P5 \
      V% q! m+ v! I0 h& Q( Y" Y! w. Q

7 |% Y3 M( K6 B( \
  • CloudMonitor 负责项目服务器的状态数据收集,并提供接口供 CloudRouter 查询状态。

    3 J4 N8 Q& }2 K, [
    ) ^: Z' \: ~! T7 l

. N4 I0 k5 t3 @# d8 W
  • 资源池是基于预创建的可用资源缓冲池。这里主要是指 VM 资源。VM 资源又分为多种配置,对于每种配置的资源,可在后台配置预先创建一定的数量。一旦服务需要资源,可立刻从池里获取。

    * b0 I) |: u) _
    5 N  I( L1 V& m# g! o4 Y

, ?; J, h7 v0 X; R4 e7 V
  • 弹性的策略. 当前我们的弹性策略是模块的所有 VM 的负载平均值。当负载平均值大于我们们指定的弹性阀值,则进行扩展,可设置每次扩展的服务器数量。同样,当平均值小于我们指定的阀值,则进行缩减。
    * Q3 ?1 w: F. M

    " [  z% {: H6 E5 b
" J, Q- L+ x/ ]9 q
在实际的业务场景中,可能有些业务是内部小型项目,不需要进行弹性,是否弹性是一个可选项。另外,还有一些项目,可能无法满足无状态的设计要求,不希望每次部署都更换服务器,我们也提供了在部署的时候,选择“就地部署”,就地部署的意思就是每次部署都使用同样的服务器。弹性调度策略配置:
1.png
4 ~4 C, t& h2 A  i! y0 D* p) N+ F9 Z

" n/ O0 Y- C+ a5 v( h
7. NoOps
0 e: O. G2 z% W, f1 x. C7 c
7 Y% y) Z& I2 _8 ?; q% l8 w
自主运维
, w& H+ }7 E: L! Z8 ~
& p) m5 N; w7 s/ s
' k- H1 m8 w4 h7 X3 b8 `平台提供一系列日常运维管理工具,包括常见的服务器性能查询,日志查询,应用分析工具,数据源相关信息查询。大多数场景下,开发人员无需登录服务器。
( `8 t8 |7 @; ~; i- ]* h/ P4 i
8 A1 t4 r3 n9 F- G5 ?7 A) b
1.png
( D# `& Q7 l$ g8 E/ M) I* e" A% L
日志管理) D# V: m/ {: `: Y. S9 h

* _  p. _$ @' y( V  `- J1 _
. O8 L( s5 K# W1 C文本日志。我们在每台vm上通过 Rsyslog 进程收集业务进程日志发到集中日志服务器。在集中日志服务器端,我们按项目名称存储,一个项目一个日志目录。日志目录权限管理,我们使用Linux 用户组权限设置,只有具备PaaS 平台项目管理权限的用户,才能查看该项目下的日志。4 |+ K& S. t5 Z" F/ c

; ^3 S( q2 b& }* }8 ~/ c! A: t
' h$ v1 ?* q; eWeb 日志分析。PaaS 平台对接了公司级的 Web 日志分析系统,能够实时展示项目域名的日志访问量,带宽流量,请求状态等情况。- _' D! x$ r0 V' W5 R$ J, B
6 B6 ~- C& E! q. o/ c1 k& i

0 r. e$ `7 a5 F" f" V1 l: p日志管理方面,我们提供了两种方式
0 p/ z0 q- g1 x% F' [/ s3 g& Z4 r+ }: L7 D  e' I$ E8 c! g
) R( y: ]# K) d2 \7 O  h
监控
& A" C+ p5 {# T* T2 r4 f4 W# J8 Y7 }# P0 `# Q4 T" A

6 p1 T* W7 P" z. @( u9 R3 g平台监控主要是基于 zabbix 做了一些 API 层面的定制开发,我们内部称之的为“CloudMonitor“。主要包括以下三个方面功能:
$ o3 b/ u1 A) _8 I2 V, S" A4 t基础监控
. ]  u, o3 R, f4 d
* i8 Y3 l% w% s" `3 X- a( ~% b5 L6 @, D/ s
VM:基础监控包括 CPU,内存,磁盘 IOUtils,磁盘空间使用率,网络流量,TCP链接数,进程数等。监控信息如图:
7 P! D, G2 q; Q7 o5 C
1.png

, q! {7 F- X7 Y8 s* o) e0 ^$ H% t6 t
数据源:对 Mysql,Redis,Memcached 常规指标做了监控。
! H& l) n' s6 E. m+ f% [7 k  i( ~- U/ y/ B; T% B/ q

7 k' K& |. Q) R自定义监控。支持 TCP,DNS,PING,HTTP,支持自定义告警条件和策略。如图:9 z& x8 f, h2 H: i$ Y( ?8 b/ D$ Q
1.png

# z) ?4 _6 ~7 e* I1 k! M  ^+ n* W' R+ d9 p
- v+ a) \1 Q1 a9 P2 z( z, ^

$ z3 w- z: U) f/ |5 }( p% o
% H: |9 Z9 l) U( z告警。平台告警由 CloudMonitor 组件负责,支持多种方式告警。CloudMonitor 组件是在Zabbix 的事件接口上,定期获取事件,按业务维度进行汇总分析发送给业务开发负责人和运维负责人。
; x1 e3 s+ R1 e& ?
* @/ [. _3 T6 K" o# I$ s, k& V! d+ t
做了一定程度的事件聚合,比如宿主机 Down 机,宿主机上的 vm 相关信息关联起来,从业务开发负责人看:某 vm Down 机是由于某宿主机引起;从运维层面看,某宿主机 Down,影响了这些 vm,这些 vm 运行了这些业务。
; b/ f8 o2 t0 H  I) k: Y6 E: L" ^% L
9 k& J+ Q# o9 [
$ y0 X5 M# k* @0 x) p工具组件
( k, w$ w. Q& ^! [% f, C9 F3 b. J/ P. h6 n

- J( A/ J0 M8 Q' |! I: ]' A在自助运维场景中,开发人员需要对项目 ,域名,IP 信息进行查询,平台提供相应的工具。
9 P' G4 n6 `9 t: a6 c( Q) H
( [+ {5 ^) k: d$ ?4 u1 C
0 a5 O) C3 i$ R5 ]# c6 d可用性反馈
/ n" q. |/ D$ R8 l1 O/ f1 ]9 q- A
8 u# R: f$ U5 ?% M+ `% i
平台的可用性反馈,主要是对平台各个层面的服务可用性,进行系统化,自动化评估。这里主要介绍下我们的业务的可用性度量实践方法。
" q) H. i" ]2 D# H
/ W' {6 G0 U$ h! B; f  u  d) b
: w8 \3 z$ `0 o* B, b我们称为“Monitor.X监控规范”具体描述如下:
7 D- _/ b" K  i; a% n
7 k; c4 F# j  g4 q2 D0 z: S
5 h* W3 G& a, Q& C6 L2 j, AX代表语言。(注:若是 PHP 项目,文件后缀为 monitor.php;若为 node.js,则文件名为,monitor.js)。% M" i( U0 ^; ~& c3 f# D

/ l; O& G& P4 S" U2 s8 ]/ G7 S/ z' \
5 e: I  |; @$ f! Z) ?& y' H6 Y路径要求:url规则为http://项目域名/monitor/monitor.X)项目域名取配置管理里面,设置域名框中,去掉 包括 test 字符串后的第一个域名。8 u9 I0 |3 _5 i) g; F0 g* E
. Z9 @9 v4 V/ o4 s5 j" E/ O
0 K0 O2 W- \( X
输入参数:接口不用输入参数。
: J, e0 h- x4 m0 V. R7 Q
  ~5 p+ s4 y/ X) f8 ~/ ~2 L& [" M( \# f
输出说明:接口输出只分为两种,正常和不正常。; T* x1 a6 d, [- j# L: Z( \$ |6 M
6 ^0 b, W( w9 c
( p& O5 B8 H6 W) ?) @6 e+ Q
正常:状态码为200,且输出包括字符串“200”
2 k. F& J1 g4 }, E  R. {, ]! ~- `& t3 B# B  G% s7 T

  R* }/ W2 @/ O( S: f2 B非正常:状态码200或者非200,且输出字符串不包括200。 (可以用作错误提示内容)。
# D' j4 l! k4 C+ L* k9 n  ^
1 k- |# b) Y+ P/ X0 }. ?- Q' v( l, ^0 N1 s9 m) w* B
对于状态码200,同时信息也包括200字符串,但是实际是服务不可用的情况,需要程序员特殊处理返回信息。
0 ~$ T& U( X$ M5 F3 N2 `& Y
+ i0 a# i3 R2 p" X0 n% J3 |, U2 t, f' R$ Q& d1 A0 t! s# D5 Z  R9 e
接口内部实现要求:要覆盖系统的核心业务逻辑(业务自身把握);有多个业务逻辑时,也是统一在一个接口返回(调用顺序由业务控制)。1 J' d+ ]0 g: o  ?* t" W$ [

; g8 E7 L2 J. w: D
# Q: X' Y& j# B& `  q业务在PaaS 平台发布,平台将自动加上项目的 Monitor.X 监控,根据 Monitor.X 的状态,来衡量业务是否可用。可用性反馈如图:
4 b' i% n7 _7 d- K% a+ F9 u
1.png

1 ~5 O% J* Z4 q# }0 a- \
3 J) W+ N  g# T$ Y, s" I
# L1 ]/ |3 ?( b. `+ V- I: ?
8. 安全审计
7 I' L9 t, |1 T. V% v

$ H/ l7 r9 [- ?( A; M0 E. K
所有操作包括打包,配置,部署,日常运维等操作全部收拢在PaaS平台上,每一个用户在平台的的所有操作都有记录,可追踪。
对于核心项目的数据变更类的操作,引入运维审批。
* @, _# f7 G% ~2 `5 p. e) T

3 c& i& i  M  H5 _
9. 平台运营

- Q2 t' r" ], v5 _; ?+ V! V" q" R( @

  G# h3 M# f, e) D, D* v
双向反馈
+ @  E  v! p$ O: c2 V

7 V# A% F0 a8 f- m& ^构建平台用户反馈沟通群组,第一时间接受响应用户的需求,重视“客户满意度”,并将客户反馈的问题,由专人进行收集汇总,每周发出平台质量问题周报,并组织开发运维力量,集中有效解决用户反馈的问题。这些问题,有技术性的,流程性的和体验性的,用户每一个问题的交互过程,通过沟通群传达给平台每一个用户。

9 ~' ]% m8 h! Y4 d, c  j6 K0 z
- o- b# V. W9 ~
体验优化

% x9 F3 H9 }; ?8 c

+ X/ `5 B) y/ A7 l! a  F3 S长期以来,在面向技术人员的系统 UI设计,用户体验是不好的,内部技术平台首要解决的是可用性问题。PaaS 平台需重视用户的体验,体验好也才能实现我们的 NoOps 的理念。试想一下,如果我们做了一个自己觉得很厉害的功能,而用户觉得不好用而弃用,那做的可能就是无用功。

- _( y5 C1 Y4 h/ ]+ |9 \$ q( {
9 b* m8 v4 P0 _) P$ N8 A; j
也许有种担心,我们已经把所有的用户放在一个群里面,任何一个细节问题,体验问题,都会让所有用户知晓,平台维护者比较被动。我们的经验是,在 DevOps 文化下,平台的建设者(运维团队),平台的使用者(开发团队),都有面向业务最终用户价值交付的共同目标,都将以合作,包容的心态,共同推动平台的进步。
- E8 b  w4 h$ K& t

5 l8 ]4 Y5 C+ D( @! }5 F
平台收益8 W$ K" `2 G) x8 I& _' M
; T3 ~$ V* O* [/ i

7 U- D7 g& g, G; G6 W
平台收益情况,从四个方面表述,如图所示
1.png
质量) F. r# l( @3 W' ~/ ?

, `7 C9 i* T  R1 I7 x  Y
4 M. Z7 V, y6 V6 ]) q7 c0 b: `基础组件平台保障高可用,故障自动隔离。应用容器弹性伸缩,确保在业务变化中得到稳定的服务质量。平台提供自动化可用性管理方案,对业务质量形成有效反馈。
7 E0 q( Q" @- f
, I* m% E6 y2 `9 X
) f- ~# g' h' F+ ^/ }! K8 o4 f效率
& T* H* u! Y3 I' [7 \  M4 \6 J5 ^% J* Z: R) Z* F/ d

$ I/ R5 v  I& P$ t% }" W+ s2 O执行 DevOps 理念,将研发,测试,运维全流程以自动化的方式整合,实现业务的快速交付。提供丰富的自助运维工具,系统,满足开发自助式运维需求,提高日常维护的效率。
; m- K9 w+ c& l6 W/ p' L4 }3 f  U0 F/ y1 d

( u& n) m6 j5 p0 Z5 V7 P. x4 W安全/ E& ?9 L4 t$ p* q( h

  W" s; d1 ^% P8 z* v! q, X) D" m; |) y/ u. a
在网络安全和系统安全上,接入公司级安全体系,包括云防 DDOS,主机基线安全,主机漏洞检测,应用层引入公司的 WAF模块。在数据安全和 D/O 权限分离上,平台隔离开发人员登陆生产环境和生产数据库的权限,所有权限全部收拢在平台上,变更类操作自动引入工单,由运维介入审批。所有操作记录可跟踪。
6 j' W% Z3 L* O6 ^% F
( A% w* ~/ C% \3 A. W) w1 H3 Q" G" s; p0 U3 |! {" V- G
成本
, n+ r- B! @$ \1 `( x2 u8 t3 n5 M7 P+ f

/ m: l/ ]1 d0 M$ d' U通过 IaaS 层的计算虚拟化,资源池,弹性伸缩等技术手段,提高系统资源利用率,减少硬件资源采购。通过自动化的技术手段,减少人力资源的投入一站式的运维管理服务平台,大大减少人员流动导致项目的交接成本,降低人力成本。
9 m! K$ Z' Y) z+ l) _4 J* _4 N2 o* j5 O6 X. i! o
& f9 Z7 [! `5 Y, X9 A; H
平台风险
- O% N+ @# z9 i9 V" P- q$ _$ V7 x
1 h- t9 E" t( k- H
# _' U' `4 v1 c2 g4 v. b8 h! |
PaaS 平台的风险,如图所示
1.png
    1. 容量管理
3 Q$ F3 y" a( X

0 [5 m" U$ p0 V6 J' e, i5 c1 K
PaaS 平台的资源交付是完全自助的,不需要运维人员介入审批,IaaS 层的资源容量是有限的,因此,从接入层,应用层,IaaS 层,构建全面的自动化容量评估系统,显得尤为重要。需要关注几个点:

; {! D# D" [! P( ~3 S
7 n3 \  O! j" \8 \& _# ?
资源调度: m( v9 U0 ~" \! r3 I
" q: X. n7 p2 E. S' d( N% u- j

7 }, {& j9 c$ V$ T8 |IaaS 层的资源调度器,一般都是静态的调度策略,是基于资源创建时间点来选取一台最优的节点进行资源新增。一般来说,我们的调度策略都会有一定的超额比例。但随着业务的发展,某些节点的负载会比较高,甚至出现资源不足导致系统宕机。9 R5 d# G) }- B; `. A# M
: u6 A4 r: u) n+ A7 d6 p
4 {1 |- T3 _' h- T9 O% ?
  •   对于计算节点,我们有弹性扩展来保证业务可用性。但对于数据库如 Mysql,如果出现宕机,对业务影响非常大,一个 Mysql 宿主机,可能运行10个以上的实例,一次宕机影响几十个业务。
    3 Y5 E3 R$ c. N, {5 v- e+ p

    6 |3 O8 t* q9 B7 ]
: b% g6 U+ }1 `2 i% l9 f
$ O" T8 t1 C7 \1 E1 E. H5 x
容量预警
" W" B1 I$ w% x  U% ^3 o  f2 C* I* n$ t8 W

+ O+ ]& B4 t. r# A' n1 L
  • 对各类资源设置一个预警阀值是非常重要的。比如对于 Mysql 数据源,我们主要关注的是内存的分配,那么预警阀值=(已经分配内存)/总的可分配内存*100%,这个阀值随着资源池越大,可以调得越大。
    " V- [6 s  U$ v: I5 `, y

    3 w, p3 u/ S; G1 D$ j1 L3 Q

: x5 h7 I% ?9 S" |3 o6 A3 j# m$ a: q# x& w
  • 容量预测
    & U/ D% K: u) O+ c/ A  o6 J

1 h) ~" U1 I* }) |
: M0 v6 X+ M% C% S1 R
  • 定期发布容量预测报告。如对计算资源来说,定期自动预测不同类型的套餐可创建的数量。同时,还需构建基于一段时间的趋势预测,以便及时发现平台资源容量突变情况。+ p# M" ]6 @; r0 T* W3 z

    " w! d6 }6 }; A4 r5 |
8 j0 z8 Q% N$ {* ~

/ H# l8 f  i- b' ~$ A. ^. ]    2. 隔离性6 g7 t, h$ h5 T) z' x( X! {

1 B0 b2 e* J/ w. L4 @+ `
. W8 I0 D# d8 ]# F7 y) s+ W  u" C+ r5 x% {" `. k
资源隔离( `  Z" m% N) E
5 |3 S$ J2 B+ A2 q! Z
3 p6 t- }0 H+ ]2 M4 g9 d/ Q
  • 私有 PaaS平台,对 IaaS层资源,一般都是没有做资源隔离的。比如,像 Mysql 这种多线程的应用,单机跑多个实例,可能一个业务异常 SQL,就会耗尽宿主机的所有CPU资源而影响其他业务。因此,对于业务实例的质量分析,主动发现实例的质量变化,并及早介入优化,显得尤为中重要。. K$ |  B& h) X9 k- h
    ; O3 J/ B/ u' m. k! R4 J

( @2 n/ z1 I& I  p
" b  X7 I4 b2 B9 w% F7 F/ y5 ~0 k# W+ ?6 P从我们的经验看,大部分的 SQL,只需简单的索引即可得到明显优化。而这些 SQL 优化,只要能及时让开发人员知道,他们就有能力去优化,或者更近一步,质量分析平台能自动生成优化的 SQL,自动推送给开发人员进行优化,或者再近一步,把优化的 SQL 应用到数据实例,并通知用户执行结果。
" c0 d0 P# u( |: C; s, G7 c5 Z( I6 v1 s' W

/ R, ^$ w, O' G* }5 ]% m
  • 网络隔离; E& n: B1 N, r7 O5 R+ W
7 [( d' s; Q/ O2 U& w; D8 p5 R+ B
, x! L- h) N  D; f$ T
  • 当前我们的IaaS 层未实现 VPC 网络,网络上不具备隔离性。这是我们当前正在改进的方面。
    9 ~& Q/ B& i4 m* S$ ~  B( _0 Q$ D

    ! w1 `0 m3 y" r. m9 U+ |
) q. q- {+ P6 j2 Z/ M# o1 @
  • YY互娱- PaaS 运维平台未来规化
    : M. m9 X; L- J, b: }+ N, P. O
    8 o4 e/ V. S& h. p; e& V
8 x& x8 D% k0 S; J; ?8 p: `  D
9 C! ~4 t+ J9 Y4 @

; V5 b* o4 Q, Y( F2 [5 Q3 r# ~5 @
    1. 面向业务/运维的一站式平台
9 L: R2 I$ k' [- k: I( W- b: q
0 U) G+ G3 X9 `' e0 X. H4 x
增强平台的一站式运维管理的能力,包括容量评估,管理,预测,质量分析,成本分析,容灾切换等。如图所示
1.png
   

1 v% L6 Q( T- [+ H6 c
2. 多语言支持

- j% F" C+ X4 d7 O9 x

- k4 T6 I) ]9 x支持 Task,Node.JS,Python等语言。
  l/ F$ e6 ^- [; b8 ~

$ U3 f9 `& Z& P* i+ z' D支持资源编排。

: T( U% L& z$ e5 R+ e' _2 p# b
3 p5 p, n. k; ?% f8 A& R: V% d
    3. 自动化、数据化、可视化、产品化

' Y: |6 z( P1 P$ `
0 G0 l6 G9 M8 [# f
进一步提升自动化,包括IT运营分析,容量评估预测,容灾备份切换等。
0 D& r2 `* ^$ @0 s; }( w
! |+ y# b) x3 V+ n9 R" f8 E
将运维的各项能力数据化,并进一步可视化出来。

" j; _* W4 }2 A
4 b( S0 ~- J4 n7 k$ Q
产品化,提升用户体验。

1 _. A5 N$ Q; ]( s2 q* d& o; w6 a' f
0 p4 l/ M" L* J% T0 ]9 T. X# h/ L: u
如图所示:
1.png
    4. 业务运行于VDC
$ N5 |5 S8 S: t+ h+ Q4 b3 n

6 Q+ d+ L. p8 `7 I. ]; r0 g/ B" d7 ~
YY 互娱技术团队当前推出自主研发实现 SDN,SDC,SDS 的云计算平台, 初步具备了SDDC 的能力,我们把 SDDC,称之为 VDC(Vistual Data Center)。
6 T  e$ A) l" _6 F! D

. b5 C4 K0 |- I! E5 ~# ~6 s+ b* J  n
在 SDN上采取软硬结合的方案,在硬件交换机上实现了基于 VxLAN技术的VPC网络数据包的封装和解封。下一步,我们将构建基于VPC的 PaaS 运维平台。
6 I- q3 q6 r7 Q9 n4 V4 z0 z
( \3 o3 }; M  {8 x  Q" V
原创:刘亚丹
& w7 P  g2 P* l" |  |
! G$ I1 q$ G2 K% |( k

4 P- G+ E7 c; t2 B7 S2 f

本版积分规则

选择云运维时代的王牌讲师-长河老师,助你轻松入门ITIL Foundation培训课程

QQ|小黑屋|手机版|Archiver|艾拓先锋网 ( 粤ICP备11099876号-1|网站地图

Baidu

GMT+8, 2019-4-25 00:50 , Processed in 0.260452 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表