随着大家越来越多地转向构建云原生应用程序,挑战开始逐渐显现,给Java和Cassandra结合使用带来了困难。
DataStax与VMware合作改善了Cassandra在Spring Boot和Spring Data中的集成,并与红帽(RedHat)合作开发了Quarkus Cassandra Extension。
这些集成的目的都是为了帮你节省精力,使通向云原生的现代化进程更加轻松简单。
随着时间的推移,Apache Cassandra已被证明是解决关系型数据库可能无法处理的挑战的最为强大的数据库。与此类似,Java已经脱颖而出,成为最流行的构建后端应用程序的编程语言。
然而,随着大家越来越多地转向构建云原生应用程序,挑战开始逐渐显现,给Java和Cassandra结合使用带来了困难。
作为一个后端Java程序员,将Cassandra直接连接到你所有的应用程序一直是件痛苦的事。你必须在整个基础架构中集成各种驱动程序并且管理不同环境的配置。
Cassandra还有开放9042端口的要求,这会招来你的安全团队的盘查监控,还会在防火墙设置有误时较难针对错误溯源跟踪。
除此之外,你对把Cassandra部署到裸机或虚拟机(VM)也感到很头痛,因为这会迫使应用程序变成重量级的,因其包含了所有Java虚拟机(JVM)的元素、类路径(classpath)和操作系统依赖项(dependencies)。
避免或减轻这种痛苦的现代途径是采用云原生应用程序的开发方式。
正如VMware所定义的那样:“云原生是一种有效利用云计算交付模型的优势来构建和运行应用程序的方式。”这种方式包括了开发运维一体化(DevOps)、持续交付、微服务和容器等概念。
对于基于Java的应用程序来说,向云原生转变的第一步就是将Java服务部署到容器中。在单个Docker镜像中创建可靠的程序代码,这彻底改变了我们部署应用程序的方式。面对云原生应用程序,为了使Java依然能是可用的执行语言,一些充分利用容器运作原理的新架构开始出现了。
DataStax与VMware合作改善了Cassandra在Spring Boot和Spring Data中的集成,并与红帽(RedHat)合作开发了Quarkus Cassandra Extension。这些集成的目的都是为了帮你节省精力,使通向云原生的现代化进程更加轻松简单。
轻松上手
Spring和Quarkus都提供了初始化工具(initializer),你只需方便地点击几下鼠标就可以立即启动一个新的应用程序或微服务。正是这种开发效率的迅速提升让Netflix决定根据Spring框架标准化其应用程序。
利用这些初始化工具,我们可以很容易找到“刚刚好”满足要求且健康的扩展生态系统,并管理构建容器化后端服务所需的样板代码。
比如,你只需把Spring Cloud Kubernetes或Quarkus Kubernetes Config的依赖项包含在你的应用程序中,就可以直接让Kubernetes ConfigMaps和Secrets为你所用了。
Cassandra在Spring Boot、Spring Data和Quarkus中的集成通过管理本需人工编写的常规任务,大大节约了开发周期的时间。下面的表格总结了将这些架构与Cassandra集成后可以为开发者省却的工作。
更轻更快
将单体应用程序分解为微服务是一种进步。对企业来说,很重要的是要仔细考量应用程序的哪些部分提供最大的商业价值,以及这些部分的更快迭代和现代化是否会对业务带来改善。
迁移到微服务能够带来很多好处,比如团队可以自主地增强机能,并且程序性能可以从较小范围的应用程序单元中获得。
由于JVM没有考虑到其可处置性(快速启停),现在存在着对Java是否适合运行在容器或无服务器环境中的云原生应用程序的质疑。
但是,Java的生产效率来自其上千万经验丰富的开发人员,而新的替代语言则无法避免经历学习曲线。就像我们面临的许多技术选择一样,我们需要在Java与其它替代语言中做一个权衡取舍。
幸运的是,为了保持Java在瞬息万变的云世界中的相关性,诸如Spring、Quarkus、Micronaut之类的Java社区正在进行新的创新。
关于优化Spring应用程序的启动过程,已有记录的策略包括了在构建docker镜像时,将应用程序的类移动到单独的文件系统层。另外特别的是,有记录显示,与典型的云原生堆栈相比,Quarkus可以减少75%的启动时间和50%的内存消耗(那还是在没有启用GraalVM原生模式的情况下做到的)。
这些新的架构使得将Java服务封装成轻量级的数据微服务变得非常容易,并且除了可以提供Cassandra的可伸缩性、韧性和弹性外,还允许HTTP API访问应用程序的其余部分。这样,你的微服务架构中的每个部分都能访问你创建的数据服务中的数据。
你可以封装GET、PUT、POST和DELETE数据操作,而非让所有的应用程序代码直接连接到Cassandra集群。使用这些服务的开发者将不再需要了解底层的数据库和Cassandra的数据建模过程,从而缩短了交付应用程序所需的时间。
对Java开发人员来说,这些都是应用程序构建中令人兴奋的新方向。仅仅因为一门语言已有25年的历史,并不意味着它必须被时间所淘汰。
把应用程序迁移到云原生的环境中并不意味着你必须学习一门新的语言。创建响应式的、可伸缩的微服务不仅是小菜一碟,而且你正可以利用这个机会配置合适的数据库。容器化的Java与Cassandra相结合,再加上Kubernetes,你就拥有了构建数据服务的完美组合。