在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

简介: 阿里云容器服务Spring Cloud应用开发系列文章

本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇。

一、在阿里云容器服务上开发Spring Cloud微服务应用(本文)

二、部署Spring Cloud应用示例

三、服务发现

四、服务间通信与集成

五、服务智能路由

六、集中配置管理

七、高可用和容错

八、监控和日志

九、服务的部署和发布策略

微服务概述

单体应用通常指在一个程序中满足多个业务或技术领域的需求,不同的需求领域内化为模块。假定我们要开发一个Web应用,通常的MVC模式可以满足要求。针对不同领域有不少代码生成工具可以快生成代码框架,从0到1创建一个应用非常容易。放在一个应用里处理所有的事情的好处是非常大的,比如程序的调试相对容易,执行效率高。

单体的应用在规模变大后其前述好处会很快衰减。随着业务的增长,需求的调整和变更,应用内部会以模块为基础进行重构,增加和删减、改变模块的能力。应用逐渐超越开发人员所能掌控的范围,代码死角开始出现,重构变得困难。变更经常是牵一发而动全身。针对任何一个模块的扩容或升级都是对整个应用的所有模块的扩容和升级。程序对外界的依赖越来越复杂,自动化测试的覆盖率低。

如何避免单体应用的问题引入了微服务的概念。每个服务只处理一件事情,应用由多个服务构成。服务之间通过Web协议进行通信,例如http/json。代码要易于抛弃:出问题的代码可以更容易地重写。运行的服务也要易于抛弃,升级时用一个新的服务实例替代旧的实例。

把单体应用分解为一些列微服务,开发团队也可以进行“重构”,每个小团队负责一个服务,维护和学习成本下降了。由于服务间通过接口进行连接,每个服务的内部实现机制可以根据领域选择更合适的技术,混合编程是很自然的事情,试错的成本降低、试错的频率加快,从而意味着创新的速度可以提高。

没有银弹

如此美好的微服务也不是“银弹”。它只是说了“微”是好的,但没有说出如何变“微”。如果对业务领域的理解不全,对需求的把控不准,服务可能只是小的单体应用而已。

另外的问题来源于分布式计算。单体服务中两个模块的调用是高效、可靠的,而两个服务之间的网络通信是低效且不可靠的。分布式计算中的很多经典问题无法绕开,比如服务的可用性、数据的一致性等。

服务实例数目的不断变化,数据流量的波动导致监控和日志分析的复杂度大大提升。现在开源的监控和日志方案很多,但如何搭建并定制一套自己的方案并不是一件容易的事。

当然我们不能因噎废食,如果有一个平台已经能够提供其中大部分非功能需求,比如高可用、监控和日志等,那么在其上构建和运营一个微服务应用很容易了。阿里云的容器服务就是这样一个平台。

Docker技术以及阿里云容器服务

微服务的实现需要有高度标准化的交付技术来支撑,容器技术很好地满足了这个需求。利用容器技术把应用及其依赖做成一个标准的镜像,从开发到测试到生产环境都用同样的镜像,DevOps把开发和运维中间的鸿沟弥补起来。容器技术正逐渐成为微服务和DevOps领域的最佳实践,成为这些领域创新的基石。

在本系列文章中,我们探讨在阿里云的容器服务上,如何利用Spring Cloud来构造一个微服务应用。

Spring Cloud和Netflix概述

Spring Cloud是Springframework里的一个项目,提供了开发分布式系统中比较常见的一些模式能力。其中配置管理(Config Server)、服务发现(Eureka)、服务熔断(Hystrix)、智能路由(Zuul)等是基于Netflix OSS的一个封装,利用Java注解(annotation)声明,可以在Spring Boot应用里便捷地使用Netflix的开源产品构建生产级可用的微服务应用。

代码示例

本系列文章的内容围绕着一个虚拟的场景构建了一个完整的微服务应用,可以在本地的Docker上运行,或部署到阿里云容器服务上。示例代码在此

服务化应用

示例模拟的场景是企业内部应用服务化,服务之间通过API相互访问。foo服务和bar服务是两类基本服务,允许内网其他服务通过API访问,但不对外网提供服务。foobar对外提供服务,在处理时需要调用foo服务和bar服务。

服务发现机制由discovery-server提供,基于Eureka实现。由于discovery-server的业务无关性,开发人员可以直接使用Docker镜像。

foobar服务通过注册到智能应用路由gateway服务上对外提供服务,gateway基于Zuul,其代码业务无关,开发人员可以直接使用其Docker镜像,但由于zuul是通过配置文件来描述不同的服务对应的URL访问模式,所以在实际使用中需要改变镜像中的配置文件,或者通过挂载Volume实现配置文件的共享和修改。

foo, bar和foobar的代码中都包含了Eureka和Ribbon Client,实现了向Eureka的自注册和查询Eureka的能力,Ribbon实现了客户端的负载均衡。本示例中没有引入Hystrix。

逻辑架构

服务间的逻辑架构如下图所示。

arch01

每个服务在运行时都可以根据负载水平弹性扩展,每个服务可能由多个运行中的实例构成。所有服务实例在启动时自动注册到Eureka Server,服务之间的发现也是通过Eureka Server获取实例信息,并由Ribbon Client自动判断,选取一个实例进行访问。在这个过程中没有用到集中式的负载均衡,而是通过客户端发现和负载均衡。

在下一篇文章中我们会讨论如何编译和部署这个应用。


转载自:https://yq.aliyun.com/articles/57265?spm=5176.100244.teamconlist.3.lGVR5V

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
11月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
936 115
|
10月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
870 52
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
10月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
982 6
|
10月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
914 6
|
10月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
810 2
|
10月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
1376 4

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版