微服务发展趋势
随着Docker技术的普及和Kubernetes在互联网公司的大量部署与使用,微服务架构正在围绕应用如何易于开发交付、减少资源消耗、无侵入治理等方面进行变革和演进。
本篇我们将讲解云原生架构、Service Mesh技术、无服务器架构(Serverless)技术。
云原生应用架构
云原生应用架构的3个特征包括:容器化、微服务、DevOps。
通俗地讲,就是将现代应用基于微服务架构原则(云原生12因子)构建,使用DevOps开发运维一体化的动态管理机制,将微服务自动化部署在私有云或者公有云。
云原生应用架构进阶
Pivotal是云原生应用的提出者,推出了Pivotal Cloud Foundry云原生应用平台和Spring开源微服务框架。
近几年,随着云原生生态的不断发展壮大,Google主导成立的云原生计算基金会对云原生做了重新定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
CNCF对云原生的定义从Cloud和Native两个方面进一步阐述。
一方面,强调Cloud代表着应用的运行时,运行环境基于私有云、公有云或者混合云等,有别于传统的数据中心机房环境。
另一方面,Native应用是适合云环境的微服务程序,这些微服务程序更加适合运行在云端环境。
下面我们从应用、平台、组织流程等不同视角来看云原生应用架构的演进过程,以及云原生架构相比传统应用软件开发模式的组织特征和架构特性,示意图如下。
从云平台搭建开始
云平台相比传统的IT运维方式具备成本低、弹性、可靠性、便捷性等特性,而这些显而易见的优势都成为企业转型使用云平台的重要因素。
业务微服务化转型
企业进行云原生架构转型的核心动力是快速响应业务的需求和变化。传统的单体架构成为业务发展的羁绊,微服务给应用开发及部署带来了极大的灵活性和可扩展性。
持续的价值交付
持续交付需要基于DevOps方法论,结合持续集成和持续部署(CI/CD)过程完成应用持续的价值交付,从而使业务能从云原生技术架构中得到持续的价值收益。
Java的云原生应用优化
云原生应用围绕性能(Performance)、稳定性(Stability)、安全(Security)、扩展性(Scalability)等特性持续迭代演进。
在企业应用开发领域,使用Spring Boot为代表的开发框架作为云原生应用开发框架,依然处于主流地位,但是同样存在诸多劣势。
我们可以从以下几个方面考虑优化应用性能。
编译速度优化
Spring Boot在2.3.0.M1版本中对默认的编译工具进行了重大更改,使用Gradle而非Maven作为构建项目的主要代码管理工具。SpringBoot团队考虑切换到Gradle的主要原因是减少构建项目所需的时间,提升编译的效率。
相比Maven,Gradle在依赖管理、多模块构建、插件机制等多方面特性都有更加显著的优势。Gradle使用XML方式进行配置,把“约定大于配置”的设计理念进一步发扬光大,最重要的是并行化的编译速度有显著的提升。
镜像瘦身
交付物打包体积的大小直接影响镜像的分发和传输速度,通过对Docker镜像瘦身,可以显著提升构建交付物的效率。
分阶段构建则通过将构建环境和运行环境分离,减少上述构建产生的镜像冗余问题。下面列举了使用两阶段进行打包构建的方式。
从上述DockerFile可以看到,我们将镜像构建分成两个阶段。
构建(Build)阶段依然采用JDK作为基础镜像,并利用Maven进行应用构建。
发布镜像阶段,我们采用JRE作为基础镜像,并从“Build”镜像中直接复制出生成的打包文件。在发布镜像阶段,不包含任何编译时的依赖,减少了镜像体积。
提升启动速度
JVM 9引入了AOT编译方式,它会将JVM编译结果保存在SCC中,在后续JVM启动中可以直接重用。与启动时进行的JIT编译相比,从SCC加载预编译的实现要快得多,而且消耗的资源更少,启动时间也得到明显改善。使用方式就是在OpenJDK的启动参数中增加参数配置:
-Xshareclasses开启SCC,-Xquickstart开启AOT。从测试结果来看,使用OpenJDK的SCC和AOT特性启动速度提高了50%;而JVM资源占用也减少了400MB左右。
Java云原生框架探寻
Java云原生框架在社区中出现了一些技术框架的探索,其中比较典型的代表是Quarkus和Micronaut。二者都可以运行在GraalVM上。
GraalVM使AOT编译成为可能,将字节码转换为本地机器代码,从而产生可以本地执行的二进制文件。
本文给大家讲解的内容是微服务发展趋势,云原生应用架构
领取专属 10元无门槛券
私享最新 技术干货