下面画了一张技术栈图谱,对于刚工作的同学,可能有些帮助。
云原生应用也就是面向“云”而设计的应用,在使用云原生技术后,开发者无需考虑底层的技术实现,可以充分发挥云平台的弹性和分布式优势,实现快速部署、按需伸缩、不停机交付等。
落实到技术上来说,云原生是基于分布部署和统一运管的分布式云,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。
1.微服务
微服务的解决方案侧重于开发层面,我们还是以Spring Cloud 体系为主,多种 Spring Cloud 实现组件配合使用。Spring Cloud 作为一套规范,前些年比较主流的实现有 Spring Cloud Netflix
,像 Eureka、Zuul、Ribbon、Feign、Hystrix 等,就属于Netflix的组件。但最近几年 Spring Cloud Alibaba 逐渐成熟了起来,甚至将 Dubbo 也纳入了体系内。我们建议优先选用 Spring Cloud Alibaba
体系组件,应该该系列组件国内社区活跃,也更符合国人使用习惯。
- 微服务网关:推荐学习
Spring Cloud Gateway
,作为微服务网关,可实现统一鉴权、服务监控、负载、服务限流、日志记录等等功能。 - 限流降级:推荐搭配
Sentinel + Sentinel Dashboard
,Sentinel 是 Spring Cloud Alibaba的组件,可实现服务熔断、限流、降级以及热点防护等功能,Sentinel Dashboard 为 Sentinel 提供可视化Web控制台。Sentinel 的同类产品还有Hystrix、Resilience 4J,但不建议使用Hystrix,因为已经停止维护了。 - 服务调用:推荐学习
Dubbo Spring Cloud
,因为Dubbo的传输性能,对比只基于http的 OpenFeign 要高的多。 - 分布式事务:推荐学习Alibaba的
Seata
框架,它提供了AT、TCC、SAGA 和 XA 事务模式,基本能应付大多数的应用场景。 - 健康监控:如果条件允许,推荐搭配
Spring Boot Actuator + Prometheus + Grafana
。Spring Boot Actuator 帮我们实现了对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等;Prometheus是一套开源的系统监控和报警框架;Grafana 可以通过将采集的数据查询然后可视化地展示,并及时通知。Actuator 提供端点将数据暴露出来, Prometheus 定时去拉取数据并保存和提供搜索和展示, Grafana 提供更加精美的图像化展示。如果想简单监控,可以搭配Spring Boot Actuator + Spring Boot Admin
,Admin提供可视化展示页面。 - 注册中心:推荐学习Alibaba的
Nacos
。同类产品还有Eureka、Zookeeper、Consul等,Eureka在分布式事务上支持AP的,后两者支持CP,而Nacos可自动切换是AP还是CP。 - 配置中心:推荐学习Alibaba的
Nacos
。同类产品还有 Spring Cloud Config、Apollo(携程),但它们在功能完善度和使用简单性上,不如Nacos。 - 链路追踪:推荐搭配
Spring Cloud Sleuth + Zipkin
,Zipkin的同类产品还有Cat、Pinpoint、SkyWalking等。选择 Zipkin 的原因是因为简单好上手,如果有条件,可以尝试其他产品。 - Java诊断工具:推荐学习Alibaba的
Arthas
,以往排除线上Java问题时需要用到 jps、jmap、jstack 等jdk工具,Arthas可以完美替代这些。 - 消息中间件:消息中间件推荐
RabbitMQ
,同类产品还有Kafka、RocketMQ,实际上RabbitMQ在三者中并发吞吐量是最差的,但它的优点在于对数据的一致性、稳定性和可靠性有更好的保障。在to B的业务开发中,RabbitMQ更适合。 - 缓存数据库:分布式缓存推荐使用
Redis
,本地缓存可以试试 EhCache框架。 - 分布式协调:推荐学习
ZooKeeper
,它的选举、监听等机制,为分布式协调提供了很好的支持,例如分布式锁。 - 定时调度:推荐使用
xxl-job
,同类型产品还有quartz、elastic-job等。综合考虑架构设计、学习成本等因素,xxl-job更为适合。 - 搜索引擎:推荐学习
Elastic Search
,这没得说,Elastic Search是当前最流行的搜索引擎。 - MySQL增量同步:推荐学习Alibaba的
Canal
,它可以实现以MySQL为数据源的增量同步。
2.容器化
- Docker:是一个开源的应用容器引擎,虽然Docker未来将被Kubernetes抛弃,可能到时候更多的转向 Containerd 或 CRI-O 之类的容器运行时。但还没那么快,同时也不影响我们学习Docker的思想和基本操作。
- Kubernetes:是一个开源的,用于管理云平台中多个主机上的容器化的应用。如果还是以Docker作为容器引擎的版本,可以理解为 Kubernetes 用来编排管理部署在上面的 Docker容器。
- Rancher:Rancher 为运行容器化的应用实现了一层灵活的基础设施服务。可以成,Rancher 为 Kubernetes的服务编排,以及 Kubernetes集群本身的管理提供可视化服务。
3.DevOps
核心关注的是 CI/CD,除了自动部署以外,还包括代码提交后的自动测试,代码质量审核,版本管理等流水线处理。
- GitLab:是一个自托管的Git项目仓库,同类产品还有GitHub、码云等。企业私有化推荐用GitLab,是因为它免费,GitHub收费。
- Nexus:Nexus 是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。企业的网络环境通常不支持直接从公网仓库拉取Maven依赖,Nexus在此时就发挥了很大的作用。
- Harbor:和Nexus类似,Harbor是Docker镜像仓库管理器,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。
- Jenkins:Jenkins是一个开源的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。DevOps各阶段的流水线配置,通常都通过 Jenkins 来执行。
- Sonar:Sonar(SonarQube)是一个用于管理源代码质量的开源平台。Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。