輕量級(jí)的微服務(wù)
總結(jié):整個(gè)微服務(wù)使用Spring boot + Docker 冰山上轻抱,ZooKeeper服務(wù)注冊(cè)飞涂、Node.js服務(wù)網(wǎng)關(guān)、Jenkins等冰山下祈搜。
總體上可以分為:開(kāi)發(fā)框架(上)较店、容器技術(shù)(上)、注冊(cè)中心(下)容燕、調(diào)用中心梁呈、部署中心、日志中心蘸秘、監(jiān)控中心官卡、追蹤中心、消息中心秘血、配置中心味抖。
注冊(cè)中心:用于注冊(cè)微服務(wù)相關(guān)配置信息的中心
調(diào)用中心:用于提供給前端調(diào)用的統(tǒng)一入口(我們選用Node.js實(shí)現(xiàn))
部署中心:用于編譯并打包微服務(wù)源碼并將其部署到Docker引擎中(Jenkins)
日志中心:用于收集并管理微服務(wù)應(yīng)用程序中產(chǎn)生的日志
監(jiān)控中心:用于監(jiān)控微服務(wù)的實(shí)時(shí)運(yùn)行狀況
追蹤中心:用于最終微服務(wù)的調(diào)用軌跡
消息中心:用于解耦服務(wù)之間的調(diào)用關(guān)系
配置中心:用于管理微服務(wù)應(yīng)用程序所需的配置參數(shù)
(我們認(rèn)為,中心分為兩類:一類是含有業(yè)務(wù)意義的中心灰粮,另一類是不含業(yè)務(wù)意義的中心-只是技術(shù)層面的中心)
微服務(wù)日志
總結(jié):docker中查看日志路徑 /var/lib/docker/containers/<container_id目錄看到一個(gè)container_id-json.log文件仔涩,Docker默認(rèn)使用docker logs查看的就是這些json文件,Docker默認(rèn)使用Json-file格式粘舟,還有其他格式
none:容器不輸出任何日志
json-file:容器默認(rèn)輸出的日志以json格式寫入文件中(默認(rèn))
syslog:容器輸出日志寫入宿主機(jī)的Syslog中
journald:容器輸出日志寫入宿主機(jī)的Journald中
gelf:容器輸出的日志以GELF(Graylog Extended log fromat)格式寫入Graylog中
fluentd: 容器輸出的日志寫入宿主機(jī)的Fluentd中
awalogs:容器輸出日志寫入Ammazon CloudWatch Logs中
splunk:容器輸出日志寫入splunk中
etwlogs:容器輸出日志寫入ETW (event tracing for windows)中
gcplogs:容器輸出日志寫入GCP(Google Cloud Platform)中
nats:容器輸出日志寫入NATS服務(wù)器中
docker中 --log-driver參數(shù)配置日志驅(qū)動(dòng)
--log-opt max-size --log-opt max-file 分別設(shè)置日志文件大小和日志文件數(shù)量
例如:docker run -p 80:80 --log-dirver json-file --log-opt max-size=10m --log-opt max-file=3 --name xxx 容器名稱
docker日志驅(qū)動(dòng)(https://docs.docker.com/engine/admin/logging/overview/)
默認(rèn)linux系統(tǒng)安裝Syslog(名稱Rsyslog)熔脂,還有一個(gè)Syslog-ng(https://www.balabit.com/network-security/syslog-ng)更強(qiáng)大
通過(guò) rsyslogd -v 檢查rsyslog是否安裝
Rsyslog官網(wǎng)http://www.rsyslog.com
ELK 官網(wǎng) https://www.elastic.co/
Kibana:用于數(shù)據(jù)可視化
Elasticsearch:用于數(shù)據(jù)搜索佩研、分析與存儲(chǔ)
Logstash:用于數(shù)據(jù)收集、將數(shù)據(jù)存入Elasticsearch中
Beats:用于數(shù)據(jù)傳輸霞揉,將數(shù)據(jù)從磁盤上傳輸?shù)絃ogstash中
X-Pack:提供一些擴(kuò)展功能旬薯,包括安全、預(yù)警适秩、監(jiān)控绊序、報(bào)表、圖形化等
Elastic Cloud:提供Elastic棧的云服務(wù)秽荞,提供公有云和私有云解決方案
微服務(wù)監(jiān)控
總結(jié):Spring boot自帶監(jiān)控actuator骤公,有些需要在application.properties中配置才能夠訪問(wèn)
actuator包括info(應(yīng)用基本信息)、health(應(yīng)用是否健康)扬跋、metrics(相關(guān)運(yùn)行指標(biāo)阶捆、開(kāi)可以擴(kuò)展其他新指標(biāo))、env(可以訪問(wèn)的環(huán)境變量)钦听、loggers(查看和修改日志級(jí)別配置)洒试、dump(線程相關(guān)信息)、trace(請(qǐng)求調(diào)用軌跡信息)
Spring boot Admin開(kāi)源 https://github.com/codecentric/spring-boot-admin
cAdvisor開(kāi)源 https://github.com/google/cadvisor
InfluxDB開(kāi)源https://github.com/influxdata/influxdb
Grafana官網(wǎng)https://grafana.com https://github.com/grafana/grafana
集成InfluxDB+cAdvisor+Grafana 必須先啟動(dòng)InfluxDB 隨后才能其他cAvisor和Grafana
ZipKin開(kāi)源 http://zipkin.io https://github.com/openzipkin/zipkin(google Dapper https://research.google.com/pubs/pub36356.html)
Kafka 官網(wǎng) http://kafka.apache.org
Scribe官網(wǎng) https://github.com/facebookarchive/scribe
Zipkin java客戶端 https://github.com/openzipkin/brave
微服務(wù)通信
當(dāng)服務(wù)間滴啊用較為頻繁時(shí)朴上,我們一般不會(huì)選擇HTTP調(diào)用垒棋,而是選擇基于TCP的RPC調(diào)用
RPC是通過(guò)Socket通信的 常用RPC框架 Google gRPC、Facebook Thrift痪宰、Twitter Finagle捕犬、Alibaba Dubbo、新浪微博Motan等
gRPC官網(wǎng):http://www.grpc.io
Protocol Buffers 官網(wǎng):https://developers.google.com/protocol-buffers/
搭建分布式RPC框架使用Netty + Zookeeper + protostuff
Protostuff官網(wǎng):http://www.protostuff.io
Netty 官網(wǎng):http://netty.io
微服務(wù)解耦
總結(jié):RabbitMQ性能高于ActiveMQ
微服務(wù)測(cè)試
總結(jié):通過(guò)配置@FixMethodOrder(MethodSorters.NAME_ASCENDING)使所有待測(cè)試方法安裝字母升序的方式被JUnit框架調(diào)用
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 官網(wǎng):http://swagger.io
apiDoc http://apidocjs.com
微服務(wù)配置
總結(jié):Ansible是一款開(kāi)源的自動(dòng)化運(yùn)維工具酵镜,它基于Python開(kāi)發(fā),可用于配置系統(tǒng)與部署軟件
通過(guò)SSH登錄配置服務(wù)器
- 生成密鑰 ssh-keygen -t rsa
- copy密鑰到服務(wù)器 ssh-copy-id root@serverip