您的当前位置:首页 --> CentOS入门 |
利用Docker轻松实现云原生应用 |
浏览次数:1688 关键词 ( 轻松 Docker ) |
导读
前文谈到了云原生应用在部署架构中需要考虑的重要问题。文本将介绍一个常见的应用架构模式来提升应用的可用性和可伸缩性 - 分布式会话管理。并利用Docker和阿里云容器服务在本地和云端进行了示例应用的部署和验证。
前文谈到了云原生应用在部署架构中需要考虑的重要问题。文本将介绍一个常见的应用架构模式来提升应用的可用性和可伸缩性 - 分布式会话管理。 随着业务增长,Web应用也从单节点部署演变为集群部署。这时候除了需要为应用服务器增加负载均衡之外,也要解决会话(session)管理的问题。Session在应用中常被用于存储用户相关的数据。在高可用系统中,如果一台应用服务宕机,其他服务器需要能够接管当前活跃的会话,继续为用户提供服务。所以我们必须提供分布式的会话管理能力。 Spring/Spring Boot应用中利用Spring Session配合Redis是一个流行的分布式的会话管理方案,它有如下几个优点:
关于 Spring Session 的信息可以从官方文档获得 利用Docker来本地测试Spring Boot + Redis会话存储首先从Github获得示例代码 class="hljs stata" data-language="">git clone https://github.com/denverdino/docker-spring-boot-sample-session-redis cd docker-spring-boot-sample-session-redis 本工程基于Spring Boot使用Redis会话存储的官方示例,并做简单调整如下: 其中 /src/main/resources/application.properties 内容: class="hljs stylus" data-language="">spring.session.store-type=redis server.session.timeout=5 spring.redis.host=redis spring.redis.port=6379 它会配置基于Redis的分布式会话存储支持,会话超时时间为“5”秒,Redis服务域名为“redis”,端口 “6379”。 我们再查看项目的Maven配置文件pom.xml class="hljs dust" data-language=""><?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <!-- Your own application should inherit from spring-boot-starter-parent --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> </parent> <artifactId>spring-boot-sample-session-redis</artifactId> <name>Spring Boot Session Redis Sample</name> <description>Spring Boot Session Redis Sample</description> <url>http://projects.spring.io/spring-boot/</url> <organization> <name>Pivotal Software, Inc.</name> <url>http://www.spring.io</url> </organization> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>registry.cn-hangzhou.aliyuncs.com/denverdino/spring-boot-session-redis</imageName> <baseImage>openjdk:8-jre</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> </project> 其中它除了声明了对Spring Boot框架的支持,还添加了来自Spotify的 docker-maven-plugin构建应用的Docker镜像 我们可以来用maven命令来构建Spring Boot示例应用(参数是为了跳过单元测试) class="hljs stylus" data-language="">mvn package -Dmaven.test.skip=true 也可以利用maven命令构建示例应用的Docker镜像 class="hljs armasm" data-language="">mvn package docker:build -Dmaven.test.skip=true 注:关于“docker-maven-plugin”插件的更多信息,可以参考容器化Spring Boot应用一文 构建镜像完成,可以使用如下docker-compose.yml模板来在本地部署和测试应用。其中web服务会启动Spring Boot测试应用,并利用容器链接通过“redis”别名来访问redis服务中的Redis容器 class="hljs vim" data-language="">web: image: registry.cn-hangzhou.aliyuncs.com/denverdino/spring-boot-session-redis ports: - 8080:8080 links: - redis:redis redis: image: redis:3 执行docker-compose up 命令之后,我们就会看到“redis”容器和“web”应用容器相继启动 我们可以通过浏览器来访问http://localhost:8080/测试应用。如果会话不存在或会话超时(5秒钟),应用会生成一个UUID保存在会话中并返回;如果会话存在,则会直接返回会话中保存的UUID。 利用容器服务来部署分布式会话管理应用阿里云容器服务提供了对分布式的Docker应用的部署和管理能力。我们可以简单地扩展之前的Docker Compose模板来在云端部署应用。 class="hljs vim" data-language="">web: image: registry.cn-hangzhou.aliyuncs.com/denverdino/spring-boot-session-redis labels: aliyun.scale: "3" aliyun.routing.port_8080: spring-boot links: - redis:redis redis: image: redis:3 注:
总结 在云原生应用中,分布式会话管理是一个重要的应用模式。本文利用Docker和阿里云容器服务在本地和云端进行了示例应用的部署和验证。 如果大家有兴趣,还可以将容器模板中的Redis镜像替换成阿里云提供的Redis服务,这样可以在生产系统中提供更好的可用性和和可伸缩性。可以参考在阿里云容器服务中使用RDS
|
下一条 centos系统中网络配置相关 上一条 高效能远程会话管理工具-screen |
数千企业与站长的选择,7*24小时稳定运行
了解更多套餐详细