轻量级的微服务

总结:整个微服务使用Spring boot + Docker 冰山上,ZooKeeper服务注册、Node.js服务网关、Jenkins等冰山下。
总体上可以分为:开发框架(上)、容器技术(上)、注册中心(下)、调用中心、部署中心、日志中心、监控中心、追踪中心、消息中心、配置中心。
注册中心:用于注册微服务相关配置信息的中心
调用中心:用于提供给前端调用的统一入口(我们选用Node.js实现)
部署中心:用于编译并打包微服务源码并将其部署到Docker引擎中(Jenkins)
日志中心:用于收集并管理微服务应用程序中产生的日志
监控中心:用于监控微服务的实时运行状况
追踪中心:用于最终微服务的调用轨迹
消息中心:用于解耦服务之间的调用关系
配置中心:用于管理微服务应用程序所需的配置参数
(我们认为,中心分为两类:一类是含有业务意义的中心,另一类是不含业务意义的中心-只是技术层面的中心)

微服务日志

总结: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

ELK 官网 https://www.elastic.co/
Kibana:用于数据可视化
Elasticsearch:用于数据搜索、分析与存储
Logstash:用于数据收集、将数据存入Elasticsearch中
Beats:用于数据传输,将数据从磁盘上传输到Logstash中
X-Pack:提供一些扩展功能,包括安全、预警、监控、报表、图形化等
Elastic Cloud:提供Elastic栈的云服务,提供公有云和私有云解决方案
微服务监控

总结: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
微服务通信

当服务间滴啊用较为频繁时,我们一般不会选择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



微服务解耦

总结:RabbitMQ性能高于ActiveMQ


微服务测试

总结:通过配置@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
微服务配置

总结:Ansible是一款开源的自动化运维工具,它基于Python开发,可用于配置系统与部署软件
通过SSH登录配置服务器
- 生成密钥 ssh-keygen -t rsa
- copy密钥到服务器 ssh-copy-id root@serverip

网友评论