由于越来越多的系统基于 docker 部署,配置中心不仅可以简化系统的配置管理,也可简化系统的发布流程,目前较为流行的开源配置中心是 Apollo。另外也可以通过 zookeeper、Consul 等工具来实现统一配置管理。
Nacos 是阿里开源的一款集配置中心和注册中心于一体的系统,使用它来做配置中心也较为方便,服务端部署相比 Apollo 简化了许多。
微服务由于单体应用牵一发而动全身的特点,许多大型应用在开发时都会自觉拆分为多个子系统,这是在微服务概念提出前就被广泛采用的方式,而微服务概念的提出则更进一步,提出了一种全新的系统开发方式,使系统可以方便地拆分到更小的粒度,即微型服务,那么在服务数量越来越多的情况下,服务治理、熔断降级、链路追踪等问题也浮出水面,于是解决这些问题的 Spring Cloud 框架冉冉升起。
服务注册与发现主流的服务注册与发现组件有:Eureka、Consul、Nacos 等等,它们采用不同的 CAP 分布式一致性规则或多种都支持,但不管使用哪一种,其实还是存在服务失联的问题,比如在滚动更新的过程中,注册中心未能及时剔除掉服务,导致调用方仍在调用停止的服务,首先我们可以通过调整配置减少更新周期,必要时需要修改其源代码,使用长连接,只要连接中断即从注册中心剔除服务,具体的细节需要专门写一篇文章来讲解。
在可能的情况下,尽量使用消息机制来进行服务间通信,这是一个更好的选择,除了更好地进行解耦,在滚动更新这个部分也能更好地保持系统不间断运转。
熔断与降级服务间的调用过多,一定程度上增加了系统的耦合度,当其他微服务出问题或响应较慢时,整个系统都受影响,在必要时需要对出问题的服务进行熔断或降级。
Hystrix
Spring Cloud 框架默认集成的熔断组件。
Sentinel
Spring Cloud Alibaba 中集成的熔断组件,提供了一个外部控制台,可以实时调整系统的熔断降级配置,在这个部分强于 Hystrix 。
链路追踪 / APM服务间互相调用,使得调试变得比单体应用复杂不少,这个时候使用链路追踪工具能够简化调试,同时也能够对应用程序的性能有更直观的监控。
主流的链路追踪组件有:
zipkin
pinpoint
SkyWalking
jaeger
API 网关Spring Cloud 体系中常用的网关前有 Zuul,后有 Gateway,这一类跟 Spring Cloud 结合紧密,使用方便,但由于它们都是 Java 写成,在许多场景下还是比不上一些专门的网关产品。
Kong
Kong 是 OpenResty 的衍生开源网关产品,拥有优秀的性能和丰富的插件,可满足许多的扩展性需求。
Traefik
Traefik 是用 Go 语言编写的网关,定位是云原生的边界路由网关产品,它拥有丰富的特性、易用的控制面板,与云原生场景深度结合,提供了实时的流量指标可对接到 Prometheus 中。其企业版包含限流、高可用等特性,开源版在这一部分有所缺失。
服务网格从单体应用到微服务的演进,我们会发现服务治理、熔断、Tracing 这些几乎是必不可少的部分,即使是使用 Spring Cloud 框架,我们也需要关注大量的微服务技术细节,为了分离这一关注点并使这些技术成为基础设施一般的存在,服务网格应运而生。
什么是Service Mesh(服务网格)?
服务网格好比微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用 Service Mesh 也就无须关心服务之间的那些原本通过服务框架实现的事情,比如 Spring Cloud、Netflix OSS 和其他中间件,现在只要交给 Service Mesh 就可以了。
目前主流的服务网格有:
Istio
Linkerd
常用开源组件上文有提及的,这里不再累述。
数据访问MyBatis Plus
Mapper
jOOQ
JPA
dynamic-datasource-spring-boot-starter
sharding-jdbc
工具组件guava
commons-lang3
hutool
缓存redission
jetcache
caffeine
字节码修改asm
javassist
cglib
http客户端okhttp
Aache HttpClient
retrofit
openfeign
响应式编程RxJava
reactor-core
序列化protobuf
protostuff
hessian
分布式事务seata
事件驱动框架AxonFramework
规则引擎drools
测试junit
mockito
Spock
编程思想