微服务
微服务
microservice & serverless
small, self-contained
代价:性能下降
构建微服务的原因:容错,并行开发, 容易gateway集成等
服务发现(service discovery), 负载均衡(load-balancing),circuit-breaking, distributed tracing, monitoring
服务发现:由spring 来维护service的ip,port等(位置),由于重启等会动态变化。其他服务或代码通过api gateway通过服务名称得到服务
架构是怎么演变的: 微服务架构是什么? - 老刘的回答 - 知乎 https://www.zhihu.com/question/65502802/answer/802678798
这文章写得很好,多看
No silver bullet:
- 微服务架构整个应用分散成多个服务,定位故障点非常困难
- 在微服务架构中,一个服务故障可能会产生雪崩效用,导致整个系统故障。
在微服务架构下,一个用户的请求往往涉及多个内部服务调用。为了方便定位问题,需要能够记录每个用户请求时,微服务内部产生了多少服务调用,及其调用关系。这个叫做链路跟踪。
实现链路追踪, 在http的header之中添加相关数据, 如traceId, spanId, parentId, reqTime/resTime
日志分析ELK: Elasticsearch, Logstash, Kibana
部署的服务器数量越多,可靠性越低:
- 减少错误:事前监控(指标采集、存储) + 事后分析(日志收集,日志分析器,链路跟踪,UI呈现)
- 降低影响:容错 + 服务降级
注册发现
注册中心 Eureka(Spring 默认) ,Zookeeper, Consul、Etcd......
gateway的route规则和转发
从硬编码的ip port到形如 lb://BOOK-SERVICE