Lily

先讲讲咩叫微服务 - Microservice.这里不是一个项目,而是项目集群,每个项目各司其职。

API 项目

  • API 项目是核心关键,对于business 的所有操作都应该放在这里。
  • 只有这个项目是能够接触到数据库的,其他4个项目都不能够接触到数据库。
  • 它最大的特点,是提供 REST service.什么是 REST service呢,这里是个题外话,简单来说就是对数据库一些表的CRUD操作。当然,REST 是有它的规则的,例如 web path 应该怎么写,http method 应该怎么写,都有相对应的规范在里面。其他的项目向要接触这个项目的数据库,或者业务,必须,是必须要通过WEB HTTP request 去调用这个API 项目
  • 如果要起步去 implement REST service, 基础最低门槛是 Spring MVC, 当然,GLTC 有 GLTC 果套

 

APP项目

  • APP 项目,可以是自己这个集群的project 特定的 APP 项目,也可以是外面的项目,也就是说,同时可以有多个APP 项目
  • 如上面所说,所有的APP 项目如果要调用这个集群的核心 business, 或者去操作该项目集群的数据库,必须要去调用 API 项目的 REST service.
  • 什么是APP项目呢?一个APP项目就是一个business function point, 例如,我要去每天晚上查询一次每一个学生是不是提交了作业。于是,我首先要查询有多少个学生(call API REST service),然后发现没有提交作业,我就要更新数据库(call API REST service)

 

ADMIN 项目

  • ADMIN 项目是对于数据库的配置,或者个业务的配置。我举个例子,例如,我要具体对每个学生进行配置,修改学分等等。或者说,我要修改让学生每个星期只提交3次作业。这样下次APP 调用 API项目的时候就可以根据Admin 项目的配置进行修改
  • 还是那句,Admin 项目只能调用API REST service,不能直接修改数据库

 

CD 项目

  • 这就是传说中的 testing 项目。写在这个项目的代码,首先是 BDD 框架。BDD框架,外界一般用 JBehave 和 Cucumber 去做。对应你的问题,JBehave 和 Cucumber 都可以去调用 Selenium 的。
  • 一般专业的 CD testing project, 是不会有录制这么个动作的,不专业。而且不稳定。
  • CD project ,一般是来说会由Bamboo 框架去调用。你可以去set 每天晚上几点行,或者一个星期什么时候行,这些要看具体的项目需要,Bamboo 很灵活的。
  • 我之前跟你通电话也说过了,我之前的那个项目有1000+个 testing case, 每天晚上行 6 - 9 个小时。这些很正常。也应该这样,越详细越具体,出到 Production 出错的机会就越低。
  • 每当 Bamboo 调用 BDD 框架行完,都会generate 一份report.

 

Sensu 项目

  • Sensu 项目是对应具体的 DevOps 服务的,这里不做介绍。我会下一张图片跟你说清楚

 

关于Jenkins 

  • Jenkins 有几点你是要知道的,首先 Jenkins 是不会做任何操作的,它不懂,什么都不懂,只会按照写好的Properties 文件去工作。
  • "只会按照写好的Properties 文件去工作", 这里指的是 JenkinsFile, 这个文件就是Jenkins 的属性文件。这个文件会有专门的格式,支持 Groovy 语言。
  • Jenkins 什么都不懂,这个意思是说它不会懂得怎么去 checkout 代码,不懂的怎么去 compile 代码。它,永远只会利用别的工具去做操作。下面一一介绍(看着上面的图片)
  • Git checkout 代码。这里,Jenkins 首先是利用配置好的 Git programe 去checkout 代码,直接调用 git 命令(你暂时这样理解住先,因为真正做到项目开发的时候并不是,有封装的,但这个知识点已经扯远了)
  • Version. 这里,Jenkins 会调用Gradle 命令去为 Jar 包generate 一个新的version.
  • Compile. Jenkins 调用 Javac 命令去 compile 类
  • Unit testing, Jenkins 在这里调用 Java 命令对项目调用 unit testing
  • Docker:不好意思,我绘图的时候忘记写docker 这个步骤了。这里是说把该项目的代码造成一个docker image.记得, CD project 是不需要写docker 的,因为它只会为
  • Marthon: 写好的docker 文件,如果是web 项目,就要放到Marathon 平台
  • Chronsos: 写好的docker 文件,如果是application 项目,例如每天晚上trigger 一次的,行完就关闭的,会放到Chronos 平台
  • 上面从Git checkout 到 Chronos,不是每一步都必须要经过的。例如,如果你git checkout 到 develop branch, 就不需要行version 那个步骤,或者你不想去调用unit testing, 那就不在Jenkins file 去写。

 

 

 

 

 

 

 

 

上面的这个图是告诉你整个devops 的流程。上面提及到的什么API项目啊, Admin 项目啊等等其实就没有必要说了,因为上面已经说到。我现在具体说说图片的右边。

 

  • Devops 项目的开头是 log 文件,以及 Metrics. 什么是 log 文件呢?这个已经不需要去说了。什么是Metrics 呢?那,这里有个陷阱的。我一开始以为 Metrics 是一个产品,或者 Metrics 就是 JMX, 后来我发现其实不是,Metrics 就是一个普通的 Map<String, String>,或者一个 int, 一个 string, 只不过它是有特定的格式,必须被 downstream 去识别和理解罢了。当然了,现在市面有个比较专业成熟的产品,就叫Metrics, 非常专业去记录 Metrics
  • 对于log 文件,我们会用传输文件的工具去运送这些log 文件,比较专业的有 filebeat, 或者有 logstash.我个人更加喜欢用logstash, 因为一来它能读的方式更加多,不局限于 log 文件,而且能自动帮你写好的log 制造成特定的格式让downstream 去识别。
  • 对于Metrics 。像我之前说过,你可以直接去使用 down stream 的 API 去传送Metrics. 我在这里写的是 influx API,它就是利用 HTTP post 的方式把这些对应的 data 发送到 down stream.那什么是Metrics 呢?那,例如,就过去的每一秒,都有瞬间的CPU使用率,例如80%, 那么 80 就是一个metrics 点
  • 对于上面的 filebeat, logstash, influxAPI 这些传送工具,你要记得,千万不要局限于就这个工具,你要明白理念是什么,为什么他们存在,能不能用更多的工具进行横向比较。
  • 然后是两个时序数据库。那,时序数据库是什么呢,你现在不需要理解,你只要知道它是数据库的一种就可以了,不要搞深。你只要知道这个世界上有不同的数据库,我们传统开发的是关系型数据库,有表的。数序数据库,没有表。因为不是关系型
  • Elasticsearch 是比较出名的接纳 log 文件格式的数据库。只要有一行log ,数据库就有一行记录。它仅仅是数据库,没有表现层
  • InfluxDB 是比较出名的接纳 Metrics 的数据库。有一个 data(例如一个string, 一个int)就有一行记录。他仅仅是数据库,没有表现层
  • Kibana,这个就是一个dashboard, 它具体的原理如下:首先,配置好让Kibana 和 Elasticsearch 连接在一起。做到elasticsearch 有多少记录,Kibana 就有多少记录。然后,Kibana 有自己专门的 filter, 例如,我要 filter log level 为 error, 我要filter project name(这里就要记得了,不同的项目都可以写入同一个elasticsearch, 所以可以filter productname),可以 filter 时间等等,所以你自然就可以很快定位哪里出错了。记得,记得,一路走来,从 log 的格式,到logstash ,到 Elasticsearch, 到Kibana ,你都要统一log 的格式。
  • Grafana 这个dashboard, 具体的原理就和elasticsearch 差不多的了。只不过它配置的是 InfluxDB, 然后去显示成图片啊,记录仪啊等等,记录CPU 使用度啊, Memory 使用度啊等等。你也可以按照具体的 business 去记录具体的关于business 的 Metrics
  • Kibana 和 InfluxDB 只不过是dashboard, 他们可以有不同的数据源的,就是说,elasticsearch 不应就只有一种dashboard 和它搭配,Kibana 也不会只有elasticsearch 一个数据源。甚至可以多个数据源统一显示
  • Sensu 是一种传送方式。写在Sensu project 里面。例如,它会主动地去查询 influxDB,一旦我发现配置好的,对sensu 有兴趣的代码,sensu 就会自动写mail ,自动发短信。
  • Sensu 不一定只会去查询 influxDB, 它的数据源太多太多了,有居多无比的插件,你要访问这个github 就知道的了 https://github.com/sensu

 

我写的这些,是告诉你什么是 devops, 只不过我还没一个devops 的步骤,用到什么工具,怎么 inplement 我去告诉你而已,千万千万不要死守,例如,"Vincent 告诉我Metrics 只会写 InfluxDB" 这个概念是错的。应该怎么去理解呢? Metrics 会发送到 Metrics 专用的数据库,只不过这里 vincent 写的是 influxDB 罢了,我可以有很多其他的数据库去代替的。我并且要用这些代替品去进行横向比较。这种理解就无比正确了

 

Good luck

posted @ 2018-04-12 06:31  Vincent Zhang  阅读(165)  评论(0编辑  收藏  举报