0

轻量级微服务架构下总结

轻量级的微服务


2018-08-25-2

 

总结:整个微服务使用Spring boot + Docker 冰山上,ZooKeeper服务注册、Node.js服务网关、Jenkins等冰山下。

总体上可以分为:开发框架(上)、容器技术(上)、注册中心(下)、调用中心、部署中心、日志中心、监控中心、追踪中心、消息中心、配置中心。

注册中心:用于注册微服务相关配置信息的中心

调用中心:用于提供给前端调用的统一入口(我们选用Node.js实现)

部署中心:用于编译并打包微服务源码并将其部署到Docker引擎中(Jenkins)

日志中心:用于收集并管理微服务应用程序中产生的日志

监控中心:用于监控微服务的实时运行状况

追踪中心:用于最终微服务的调用轨迹

消息中心:用于解耦服务之间的调用关系

配置中心:用于管理微服务应用程序所需的配置参数

(我们认为,中心分为两类:一类是含有业务意义的中心,另一类是不含业务意义的中心-只是技术层面的中心)

 

2018-08-25-3

微服务日志


2018-08-25-4

总结:docker中查看日志路径 /var/lib/docker/containers/<container_id目录看到一个container_id-json.log文件,Docker默认使用docker logs查看的就是这些json文件,Docker默认使用Json-file格式,还有其他格式

none:容器不输出任何日志

json-file:容器默认输出的日志以json格式写入文件中(默认)

syslog:容器输出日志写入宿主机的Syslog中

journald:容器输出日志写入宿主机的Journald中

gelf:容器输出的日志以GELF(Graylog Extended log fromat)格式写入Graylog中

fluentd: 容器输出的日志写入宿主机的Fluentd中

awalogs:容器输出日志写入Ammazon CloudWatch Logs中

splunk:容器输出日志写入splunk中

etwlogs:容器输出日志写入ETW (event tracing for windows)中

gcplogs:容器输出日志写入GCP(Google Cloud Platform)中

nats:容器输出日志写入NATS服务器中

docker中 –log-driver参数配置日志驱动

–log-opt max-size –log-opt max-file 分别设置日志文件大小和日志文件数量

例如:docker run -p 80:80 –log-dirver json-file –log-opt max-size=10m –log-opt max-file=3 –name xxx 容器名称

docker日志驱动(https://docs.docker.com/engine/admin/logging/overview/

默认linux系统安装Syslog(名称Rsyslog),还有一个Syslog-ng(https://www.balabit.com/network-security/syslog-ng)更强大

通过 rsyslogd -v 检查rsyslog是否安装

Rsyslog官网http://www.rsyslog.com

2018-08-25-5

ELK 官网 https://www.elastic.co/

Kibana:用于数据可视化

Elasticsearch:用于数据搜索、分析与存储

Logstash:用于数据收集、将数据存入Elasticsearch中

Beats:用于数据传输,将数据从磁盘上传输到Logstash中

X-Pack:提供一些扩展功能,包括安全、预警、监控、报表、图形化等

Elastic Cloud:提供Elastic栈的云服务,提供公有云和私有云解决方案

 

微服务监控


2018-08-25-6

总结:Spring boot自带监控actuator,有些需要在application.properties中配置才能够访问

actuator包括info(应用基本信息)、health(应用是否健康)、metrics(相关运行指标、开可以扩展其他新指标)、env(可以访问的环境变量)、loggers(查看和修改日志级别配置)、dump(线程相关信息)、trace(请求调用轨迹信息)

Spring boot Admin开源 https://github.com/codecentric/spring-boot-admin

cAdvisor开源 https://github.com/google/cadvisor

InfluxDB开源https://github.com/influxdata/influxdb

Grafana官网https://grafana.com https://github.com/grafana/grafana

集成InfluxDB+cAdvisor+Grafana 必须先启动InfluxDB 随后才能其他cAvisor和Grafana

ZipKin开源 http://zipkin.io https://github.com/openzipkin/zipkin(google Dapper https://research.google.com/pubs/pub36356.html

Kafka 官网 http://kafka.apache.org

Scribe官网 https://github.com/facebookarchive/scribe

Zipkin java客户端 https://github.com/openzipkin/brave

微服务通信


2018-08-25-7

当服务间滴啊用较为频繁时,我们一般不会选择HTTP调用,而是选择基于TCP的RPC调用

RPC是通过Socket通信的 常用RPC框架 Google gRPC、Facebook Thrift、Twitter Finagle、Alibaba Dubbo、新浪微博Motan等

gRPC官网:http://www.grpc.io

Protocol Buffers 官网:https://developers.google.com/protocol-buffers/

搭建分布式RPC框架使用Netty + Zookeeper + protostuff

Protostuff官网:http://www.protostuff.io

Netty 官网:http://netty.io

2018-08-25-8

image-20180826003520433

2018-08-25-9

微服务解耦


2018-08-25-10

总结:RabbitMQ性能高于ActiveMQ

image-20180826004521077

image-20180826004553331

微服务测试


2018-08-25-11

总结:通过配置@FixMethodOrder(MethodSorters.NAME_ASCENDING)使所有待测试方法安装字母升序的方式被JUnit框架调用

AssertJ : https://joel-costigliola.github.io/assertj/index.html

Jayway JsonPath: https://github.com/json-path/JsonPath

Jayway JsonPath Evaluator http://jsonpath.herokuapp.com

JSONassert http://jsonassert.skyscreamer.org

Newman npm: https://www.npmjs.com/package/newman

Swagger 官网:http://swagger.io

apiDoc http://apidocjs.com

微服务配置


2018-08-25-12

总结:Ansible是一款开源的自动化运维工具,它基于Python开发,可用于配置系统与部署软件

通过SSH登录配置服务器

  1. 生成密钥 ssh-keygen -t rsa
  2. copy密钥到服务器 ssh-copy-id root@serverip

 

2018-08-25-12

 

天边的星星