俯瞰 Java 服务端开发 (4)

由于越来越多的系统基于 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

编程思想

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxsff.html