EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
从零开始搭建的意思,就是从需求分析,系统规划,设计分析和落地实践几个步骤,从无到有的过程。考虑左右,为了个人学习和提升,选型基于流行的springboot+springcloud,从零开始搭建一套自己用于学习的研发平台。 整体平台的流程,从管理、开发、测试、运维、生产几条线,实现整体平台的落地和管理,下面是整体研发平台架构。 ![]()
整个研发平台架构设计 整体研发平台使用的基线规划如下 平台所有基线及所有项目目录结构,整体从零开始进行平台基线搭建及规划,多个基线的规划,考虑更合适多个岗位角色的管理 序号 基线说明 基线地址 维护人员 状态 备注 5 D. X* L# {6 o$ b, d2 K8 k+ W
1平台整体文档目录alinesno-cloud-document 集成中 : B V" i) x! C s& C1 {- r3 b
2平台环境搭建文档记录文档基线alinesno-cloud-evn 集成中
* s+ I2 D# z4 J3 `3平台前端规划及页面基础页面设计基线alinesno-cloud-pages 集成中 / L. G# u: q5 g' P4 t' v$ K
4平台所有服务列表代码基线alinesno-cloud-service 集成中 , F% h9 w: D4 ], X' s
5平台前端应用和手机应用代码基线alinesno-cloud-application ! d1 x1 z& w4 L) W8 t% z# t8 X
6平台自动化测试基线alinesno-cloud-test 7 L# k( A! |$ @& D
7平台运维脚本过程产物基线alinesno-cloud-operation * ^, @; j2 u, c( r7 i
8平台搭建过程中常见问题基线alinesno-cloud-question
$ W) k" z# b1 O0 Y+ c4 C3 B9开发人员使用平台指引alinesno-cloud-guide 略) o+ y6 ^. J8 G, H1 F8 Q0 W
一、个人为什么要搭建一个统一研发平台1、为了有方向感,不迷茫,不浪费时间,有可行的学习计划 上大学的时候,就开始学习计算机,从基础的Java到Java web,再到框架,再到在学校接一些小项目,如企业网站,兼职网,报名网站等,这几步路大概走了2年左右,而在学完两年之后,人还是很迷茫,方向感还不是特别强,而在找方向和突破迷茫上面,走过了很多弯路,终于找到点方向。后来才发现,很多这个专业的同学,可能毕业几年之后,依然还找不到方向和定位,东学一点西学一点,很浪费时间,可能醒悟的时候,已经过了3~5年,很难再转回头。 2、为了在工作和学习过得中不断积累和提高学习效率 学习和工作的几年里,几乎每个项目,资料,文档,规范都是有共性的,而由于各个项目的不统一,在接收新项目的,几乎都从零开始,一些非功能性需求的建设已经占去了实际项目的很多时间,投入需求建设的时间其实没多少,最简单的,代码的CURD都是一样,自己在做的时候,针对每个项目都有改进,比如这个项目统一了CURD,那个项目梳理出了公共代码,但是项目是分开的,最终新的项目,也是从零开始或者复制,再加上人工,手工,人肉运维,不断的繁琐而简单的工作的学习中无法脱身,影响进入下一步学习。这类似于温水煮青蛙,没有感觉,可能慢慢拖死自己,特别是做项目的前两年,除了数据的添加删除,还是这些。重复开发,无法共用这些都消耗了很长的时间。比如一直想学大数据,但是由于没有好的平台依托,目前还是无法投入学习。 3、为了可以总结和反思,可以不断的打磨出一个平台,一个产品或者一个精品 这几年的工作和学习中,有很多都是在学习,在努力,也很上进,资料有不计其数,但是却在用的时候,没有深入或者精通某一个模块,最常见的,连自己精通的模块都无法界定,不自信,没有自己的深入心得,比较浮在表面上。自己近乎有两年的状态如此,一直在努力,但是却一直没有达到预期的,别人认可的效果,接触的面好像很多,但是却没有哪一样是完全吃透的。最终发现的原因是没有做好总结和复习,反思,一个知识点以为看过了就懂,但是没有结合实际进行提炼与打磨,没有吃透,就往下一个模块,最终导致好像不断的在捡东西,但最终这些东西都不是自己的。所以需要打磨自己的东西,能谈出自己心得,这就是自己的产品,就是自己的精品,或者自己就一个精品。 4、为了扩大自己的视野和学习心态,开放心态 学习中最怕和就是无沟通与交流,没有他人的指点和自己的固步自封,坐井观天等心态,在学得一些技术之后,开始自以为自,然后偏向于安逸。明显,这种心态自己曾经有过,而且持续很长一段时间。这间接造成不管是沟通、技术方面都慢慢出现问题。自己一直相信,心态有多开放,有多宽容,帮助的人越多,自己也才更好的成长,不管是技术还是管理,包括生活等。 二、个人需要搭建怎么样的研发平台来学习1、可以随时随地的学习,只要有网络和电脑,就可以学习 闲碎的时间常常存在,比如学校上机,看手机,还有一些无聊的聚会,甚至上厕所,这些都要能可以用来学习,网络现在无处不在,有个手机就可以上网,所以这些时间要能充分利用起来。 2、可以好的工具和学习环境 学习过程,工具的成熟度和熟练程度很多时间影响到自己的学习效率。比如vim的配置使用,熟练之后,不管在编辑和代码方面,速度都比一般的操作快得多。还有jenkins,在这个工具上不断的学习和积累,不管是配置和权限,发布,运维,分布式都能很大的帮助,同时节省很多时间。 3、可以不断的学习目标,最好从基础程序员到总监 学习有一个从零开始,到不断往上的过程,并且有目标,知道每个目标阶段需要什么样的技术,能力,成长时间等,做到心知肚明,不浪费多余时间 。可以不断的有学习积累,在积累上由量变到质变 5、可以不断的跟外界沟通交流,避免闭门造车,固步自封 需要不断的与外部学习,获取到外部的建议,看到自己的不足,同时也看到自己的优点。在自己不断学习的过程中,同时不断的成果,并让别人看到,给自己提建议,在自己把自己的思路成果对外贡献的同时,别人也一样帮自己提升。 三、研发平台怎么搭建,搭建到什么样的程度搭建的思路都是先有一稿,然后再后期慢慢在这一稿上面做好优化,同时参考当前社会主流技术,便于学习。 1、制定整体学习规划和学习路线,技术路线和成长规划 平台构建过程中,产生大量的技术产物和管理产物,而在大量的项目过程中,同时也会产生大量的问题导致过程中细节的不完善,人为的不完善及限制,导致平台无法正常管理和运维,开发平台的管理规划即针对整体平台的运维管理进行的建议,以达到管理统一有序,过程明确,产物明确,目标明确等 从需求->准备->组织->开发<->内部测试<->用户测试<->自动测试->生产(试运行)->生产->运维整个流程完善,每个流程中又包括多个工作,如需求管理,同时每个工具必然有一定的产物,如需求管理的产物是需求管理基线和需求文档。 序号 模块 功能 产物 备注 3 T5 c- _# C9 W; t+ G: g
1需求需求管理管理基线 # j. d [; y9 P! \" ?' E
2需求组织分工需求人员管理表
" {. N1 m! D, }; g( ?& ?* @3需求需求变更 . Q/ I$ B5 @2 d7 d+ w3 l
4需求需求确认需求文档 0 j Y) _: c D2 R9 C/ L
5需求需求分配
: y1 q9 S+ g# }% I. A6 p2 U1 k6准备工具准备工具管理文档 b/ R2 U/ \6 ]- c# a
7准备组织结构人员资源清单
6 y. Z7 P/ r; h2 B* d, j9 `3 P8准备环境准备开发基线/文档管理基线
/ X3 D; V& [( o0 ?8 ?, |9准备资源准备 & v+ w6 N% }: A: |
10准备基线准备 8 B/ r% m7 \+ K! H6 S' ~
11组织人员资源人员资源准备
9 L' K( C' Y$ F x8 M6 q12组织开发管理 ' }) u( m) I, ~5 {& j6 V. K& u# N
13组织沟通管理 * B3 B* d+ W3 u& B6 O$ W
14组织角色分工角色分工及联系沟通表 & Y* b4 g! z. W; x6 O4 F
15组织版本管理 5 f$ S0 _+ W5 g
16开发开发培训 . B) G' r. I2 ~7 m8 j
17开发开发管理 0 r& i6 ^' b* y7 {8 j5 u
18开发单元测试 5 {! s1 s6 x- T3 Z
19开发开发流程
6 t- }6 l- q' h" }. A" P' o20开发部署管理
0 x- C% N! R4 d+ L21开发问题处理
1 A3 U% [- T. B' C3 r! G8 U22测试(内部)内部测试 & T7 C- V/ j% j/ t# u
23测试(内部)组织机构 1 x: P/ }8 n$ h6 A6 b! A
24测试(内部)问题反馈
! u0 [+ z; ~" G25测试(内部)Bug管理
# o# Q) E) e* i9 A: @8 ?2 e+ @26测试(内部)接口测试 + t' l' ~& w0 f
27测试(内部)功能测试 9 L* {. f% _6 }% v9 c
28测试(内部)集成测试
* K5 ^2 s( r. m# {6 j! q29测试(用户)业务测试
. Y% n- S, w6 u! Z8 G: k30测试(用户)问题反馈
% T1 G8 V& }( ^7 C) R2 B P31测试(用户)Bug管理
3 p2 L x- ^) G3 \' x32测试(用户)问题反馈
3 `4 M. U0 t- Y7 W3 f& D& C33测试(用户)测试报告 ( ~! u. j* f# |0 u) m- V
34测试(用户)版本管理 ; X/ Z+ }3 a& W* h4 ~" l* s
35测试(自动)测试配置
) t) h) h' N. i% p+ y( j1 \36测试(自动)压力测试 ) g) l+ i) {& ?8 A5 b4 C
37测试(自动)安全扫描 / r" o4 s* `1 J# |' E
38测试(自动)功能测试测试报告 6 o2 w/ _; W8 G; T1 k" K- p
39测试(自动)安全测试安全报告 * z% e) D, S i4 @4 T1 U
40测试(自动)压力测试压力报告
' u( w* E. f6 D41生产(试运行)切换计划 6 o h H9 i! o: n* D
42生产(试运行)工单管理
/ R2 \7 I: Y# o: _( K% L43生产(试运行)账号管理 9 K1 @" g5 w& `
44生产(试运行)安全管理
0 W3 i3 S% |8 K1 u9 I7 M( y45生产(正式)运维监控
# D0 G5 B* M' `" Q3 E46生产(正式)工单管理 : `, z* I5 n7 C3 k9 W
47生产(正式)日志管理
4 i2 I" ^, C/ E7 P }: T& k为达到以上的要求,也为了过程有记录和沉淀,考虑一些必要性的管理工具,暂时考虑以下几个工具: 序号 说明 技术 版本 备注 0 d. H$ H2 a" n0 q- e! E, m( f
1文档管理GitBook 企业内部做好考虑,团队未必每个人都能接受markdown9 |5 ^3 T4 `6 |# ] W# @
2Wiki管理GitBook 企业内部做好考虑,团队未必每个人都能接受markdown2 S1 m$ f! p" n2 C `" q/ ^
3开发过程管理Jira / K9 P4 U: r; S/ p* k
4开发工具管理百度网盘 公司内部建议使用FTP或者内部文件系统/ P- Y+ N& I0 y+ |; c5 P7 I
5邮件通知163邮箱 建议使用企业内部邮箱
' L' F; [1 @1 E3 N: `; B. o7 R, z以下为文档管理基线示例 ![]()
2、制定持续集成环境,为学习提供基础的准备和提升效率 持续集成他一套比较成熟的自动化研发解决方案,使用也有几年时间,不同的人有不同的设计,有些可能只是发布工程,这里针对于需求、开发、测试、文档、运维几个维度,进行了整合,同时也制定和管理方案,以达到基础规范 – 组织结构 – 基础架构 – 业务开发 – 持续集成– 自动化部署 – 自动化测试 – 生产运维监控 – 在线升级 几个方向自动化,这里不得不提一下Jenkins+git,确实是整个自动化的核心。目前考虑了一下这些工具,针对于开发的: 序号 说明 技术 版本 备注
4 o, W! O1 E$ u2 Y- u/ V+ G1代码管理Git(gitee)2.17.1企业内部建议使用gitlab(更能满足需求)
" H4 N$ x; C9 |& H; X% Y! L5代码管理客户端SourceTree2.7.6 + E* N; I" M( v# p, ]: a4 m
2自动部署工具Jenkins2.107.1不建议使用太新版本
3 H6 {5 r; N) I6 L: e- N3私服库Nexus2.14.1不建议使用3.x版本" e T1 X3 n6 d0 G% r
3构建工具Maven3.6.0
& W0 x: E( c t6 W3 _4代码检测Sonar5.x不建议使用太新版本7 U3 R! E7 L' q' e$ p7 T' J4 b
5镜像管理Harbor1.5.2 3 h5 R( i4 T9 _7 l
6镜像容器Docker1.12.1 + |* A, A9 c8 J; S" Z+ R" ]1 ?
7容器管理Kubernetes1.10不建议使用太高版本,跟着社区走
9 Y3 s' L! U* t( T3 A自动化持续集成的效果如下: ![]()
文档持续集成效果如下: ![]()
3、下载和整理软件工具,整理软件工具版本 基础环境完善及配置,为整个开发平台做基础,以环境搭建为主,为本地开发环境。 使用的阿里云服务器规划如下: 序号 作用 服务器资源(系统/内存/硬盘) IP规划 备注 % C, A ^/ h, X1 w$ m
1开发服务器_masterCentOS7.4_x64_4G_40G192.168.1.110 % Q; x; \5 ?' I
2开发服务器_slaveCentOS7.4_x64_2G_40G192.168.1.111 0 i8 x7 p7 N3 r3 Z# _
3开发服务器_slaveCentOS7.4_x64_1G_40G192.168.1.112 + h5 k$ c3 T) B/ E/ ?$ N0 J6 k
规划的使用工具如下: 序号 说明 工具 IP 是否集群 文档完善进度 备注
) K! m4 \6 m" p8 L6 ]' t1基础环境JDK172.18.11.17单点已完善 & X& V4 {7 |5 a M, H. O. z: E
8反向代理Nginx172.18.11.17单点已完善 , J p: c8 m4 _; z- C4 s/ ~6 b
11自动部署工具Jenkins172.18.11.17单点完善中 0 N( Y) O* s- d" s) R
12私服库Nexus172.18.11.17单点已完善
) J: g a9 `: _/ L0 K I17链接跟踪skywalking172.18.11.17单点
6 m9 \( \& r3 T% I2 ]' x+ b; M13代码检测Sonar172.18.11.17单点
5 Z+ V; c* E# e: m+ `" W' j; M- ~0 q2缓存工具Redis172.18.11.17单点已完善
' M$ ?: U: h' m( A7 Z4消息列表Kafka172.18.11.17单点已完善
- V9 X5 Z# z$ e2 U1 c10分布式注册中心zeekeeper172.18.11.17单点完善中
6 G" J1 a! K. K1 D- w8 s6分布式注册中心Eurake172.18.11.139单点
1 b: X# W# c' q: n7 S; t0 j10分页式配置中心Apollo172.18.11.139单点
6 ^" T+ [3 F4 J9 {6数据库MySQL172.18.11.139单点已完善
" y8 W5 R0 I* \ e$ K' s0 ?2 t1开发过程管理Jira192.168.1.120集群 0 B2 g1 Q/ q7 ^% f( C
3Redis监控工具Redmon192.168.1.119单点
% B7 \) w, k9 Z; m5 g5消息管理工具Kafka-Manager192.168.1.119单点 $ j: h" d. ^/ h; N8 K
7数据库主从MyCAT192.168.1.111/112集群
; U# O7 P. E1 n) L; t7容器管理Kubernetes192.168.1.1110/111/112集群
2 g# Q) g% v" R( U% z0 L9高可用KeepAlived192.168.1.110/111/112集群
# V+ J% e+ Y/ D* M- L2 U5 d14镜像管理Harbor192.168.1.110单点 + o3 R" a" n5 ]7 w+ X' l& F
15自动部署Ansible192.168.1.119单点
$ j) k$ |; D. D+ l8 F) G4 Z16自动部署管理Ansible Tower192.168.1.119单点 ( p/ {8 l! u6 m% d( V
17链接跟踪pinpoint192.168.1.119单点
! }% `4 \ C/ f# d M18日志监控elk192.168.1.119集群
1 {" X0 l* s5 X19服务器监控Zabbix192.168.1.119单点
! y/ A6 E5 M( D( ~ d, E3 v工具的保存是放在百度云上面: ![]()
4、规划平台非功能性需求组件,包括基础组件等 功能重用,组件重用,目前最好的技术承载就是微服务了,这也是这几年才出现,这样规划研发平台构架,对我而言,微服务架构自然成为不二的选择(后面的中台业务也是在微服务上进行进程创建) 服务设计原则 服务单库设计,以减少迁移,服务之前影响等; ! p) S- w9 x4 z3 G+ d m& t$ w! U, c1 H
基础服务只为调用设计,位于服务的底层或者中间层,基础服务禁止调用业务服务;1 B) w/ ]7 M6 F2 M" H) C( W$ @, m
业务服务调用基础服务,或者其它服务,业务服务为服务的顶层,用于定制化业务;6 |% N' H! `! Q+ s3 u" ?
同一级服务之间可以互相调用,只能自下往下调用,平级调用,禁止自下往上调用,以避免服务混乱及维护混乱。4 H) [+ I, m' `/ u u
每种服务目录按999个服务规划 服务设计规划 类型 目录名称 说明 备注 * t: F$ E* L9 J$ v5 Y* o" g( ?. z# M
教程示例服务做示例工程,包含有所有服务调用示例
/ K C+ p1 u; }; I: H. J前端应用门户服务与中台服务同级,用于统一门户服务
5 Q- ~7 T6 U9 X9 w: K( T6 F前端应用应用服务前端应用或者手机应用
3 X* p# i; @7 E }网关应用网关服务对外网关服务,与平台组件同级,但仅做为网关部分 : ?9 T3 l3 L) l X% A5 I# K, P
中台服务中台服务服务于前端应用,处理业务,可以服务之间互相调用,或者调用基础服务
8 z, B0 _' r+ r: E" b基础服务基础服务公用基础组件,只能被调用或者调用公共或者组件包,不能主动调用其它服务
9 L+ \# _; |5 Y基础服务公共服务基础公共包,所有工程的基础,包括配置,页面,核心包等
$ J5 c/ n- Y: m5 e% b. G基础服务组件服务基础组件包,用于第三方等,组件包不能单独运行,只能被依赖
& Y$ n& z" E9 V7 \' \, X! b运维环境监控服务监控平台,用于运维平台,目前仅规划,有可能与平台服务合并一起 3 f2 m2 L3 J4 F2 Y) e- y% K5 y
运维环境平台服务包括注册中心,配置中心等* w& t! h% I! A
工程目录规划 关于命名方向,一直不知道用什么名字比较合适,所以使用自己网站的域名。 序号 目录名称 目录规划 端口规划 权限 备注
9 e7 A4 R5 F' H) c' l- a1公共服务alinesno-cloud-common 研发
3 k. o; P+ ]7 `7 n* d: L2组件服务alinesno-cloud-component 研发 5 j9 E% i ]0 s6 o
3平台服务alinesno-cloud-platform24000+研发 4 y* V7 z# H, b2 `5 q5 a
4基础服务alinesno-cloud-base25000+研发 9 \) ]- i8 L) A, n
5业务服务alinesno-cloud-business26000+开发 ' K( n$ z! C" @4 g T9 v; G
6门户服务alinesno-cloud-portal27000+研发
8 K- t; Y: ~7 P5 S( j# v4 F7 b7网关服务alinesno-cloud-gate28000+开发 ( L7 y _8 q1 M' Z) @
8应用服务alinesno-cloud-web34000+开发
9 l3 g* y. y) D$ d( ~& I2 w9监控服务alinesno-cloud-monitor35000+研发
. W6 d, d% H$ O9 c* Z, J5 \10示例服务alinesno-cloud-demo30000+研发置于guide基线
1 L9 Y) W6 W3 d' W7 T) B R5、提取出业务中台规划,并完善组件,打磨中台业务产品 上面也提到,业务中台也是在微服务上面构建,设计原则加上了几个点,分别如下: 按“重中台”+”轻应用”设计,业务应用逻辑思路放在前端应用,推荐是尽量减少或不拆分前端服务;$ t" _; y# X! b
重中台的建设,在于前端应用共性部分的抽取和后期的沉淀,形成中台业务服务;( k2 x: l2 b6 M/ F+ v/ H
中台服务调用基础服务,或者其它同级服务,中台服务为服务的中层,用于业务共性(共享)抽取; 整体中台的业务架构如下: ![]()
中台业务架构设计 中台业务建设目标如下 ![]()
中台业务建设目标 6、统一和通用的权限配置系统和界面设计 这个就是通用的,只需要在配置平台添加好菜单,分配好账号权限,本地开发只需要账户就可以进行本地开发,配置平台包括的一些功能规划如下: 应用管理:用于配置系统应用,添加和删除管理。
' h. d5 n* p1 m; l用户管理:用户是系统操作者,该功能主要完成系统用户配置。
; j$ l* P) Z9 i部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。% c% p) b3 v5 o6 R; O
岗位管理:配置系统用户所属担任职务。. S6 O4 K, I' m) B- S- k" ^
菜单管理:配置系统菜单,操作权限,按钮权限标识等。
; c" t, y1 J- I" j' P) m1 I5 L角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
3 E5 F+ u1 G9 L& Q9 e8 N字典管理:对系统中经常使用的一些较为固定的数据进行维护。8 \8 n0 @! I- t6 Z) U
参数管理:对系统动态配置常用参数。
" G3 j$ d0 q6 W! R通知公告:系统通知公告信息发布维护。 p' \- x- z |6 m0 s
操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
( _" X# z& x/ c! m! j4 N' b/ e, X登录日志:系统登录日志记录查询包含登录异常。& X8 P: ~- f, M2 j& f l
在线用户:当前系统中活跃用户状态监控。1 _" Q' k% R% V
定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。+ v- l$ W) `' c- } L {, v+ f
代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 然后大概的设计如下: ![]()
开发人员的开发流程如下: ![]()
7、完善软件组件辅助,包括测试、运维、环境管理 以上组件的搭建过程,如果一个人管理,会产生很多问题,同时延伸出其它方向的建设,其中包括最基础的服务器管理和服务预警方向,安全策略管理,平台整体入口和常用文档,功能,平台组件的质量保证,即运维、机房环境,测试这几块。在建设统一研发平台的同时,也自然包括建设这些内容,大概做了一些建设工作,以下为一些设计的示例。 机房服务器管理系统 ![]()
机房管理系统,针对云系统和服务部署的管理 平台统一门户管理 ![]()
( E3 u& B K/ l" F, X1 c
其它的建议,如包括人才培养,大数据,人工智能,项目管理,都是在研发平台中慢慢积累和培养的产物,而最终的结果是为了整理出一套完整的企业统一研发平台。 四、总结以上为目前搭建整体个人整体研发平台的思路和设计,一个优秀的研发人员的工作并非只是编制代码,更多的是自己能做什么,完成什么,有什么价值,能帮别人做什么。 D2 l% W* Q3 Y Q. O
|