运动基元
面向对象的基元(进程内基元)
作为Java开发人员,我非常熟悉面向对象的概念,例如类,对象,继承,封装,多态性等。除了面向对象的概念之外,我还非常熟悉Java运行时。它提供的功能,如何调整它,如何管理应用程序,对象和整个应用程序的生命周期等等。
十多年来,所有这些都是我使用开发人员创建应用程序的主要工具,原语和构建块。 在我的思维模型中,我将使用类作为组件,这将产生由JVM管理的对象。 但是这种模式最近已经开始改变。
Kubernetes基本体(分布式基本体)
去年,我开始在Kubernetes上运行Java应用程序,这引入了新的概念和工具供我使用。 使用Kubernetes,我不仅仅依赖于面向对象的概念和JVM原语来实现整个应用程序行为。 我仍然需要使用面向对象的构建块来创建应用程序的组件,但是我也可以将Kubernetes原语用于某些应用程序行为。
例如,现在我努力将应用程序行为的单位组织成独立的容器映像,这些映像成为主要的构建块。 这使我可以使用Kubernetes提供的一组新的丰富构造来实现应用程序行为。 例如,现在我不仅仅依赖ExecutorService的实现来定期运行某些服务,而且还可以使用Kubernetes CronJob原语定期运行我的容器。 Kubernetes CronJob将提供类似的时间行为,但使用更高级别的构造,并依赖调度程序进行动态放置,执行运行状况检查并在作业完成时关闭容器。 所有这些最终带来了更强的执行力和更好的资源利用率。 如果要执行一些应用程序初始化逻辑,则可以使用对象构造函数,但也可以在Kubernetes中使用init-container进行更高级别的初始化。
分布式心理模型
具有面向对象的概念和JVM功能形式的进程内原语,再加上Kubernetes提供的分布式进程外原语,为开发人员提供了更丰富的工具集,以创建更好的应用程序。 在构建分布式应用程序时,我的思维模式不再局限于JVM,而是分布在几个节点上,其中多个JVM协同运行。
进程内原语和分布式原语具有共同点,但不能直接比较和替换。 它们以不同的抽象级别运行,具有不同的前提条件和保证。 某些原语应该一起使用,例如,我们仍然必须使用类来创建对象并将它们放入容器图像中。 但是其他一些原语(例如Kubernetes中的CronJob)可以完全替代Java中的ExecutorService行为。 我在JVM和Kubernetes中找到了一些共同点,但这里不再赘述。
随着时间的流逝,新的原始方法催生了解决问题的新方法,其中一些重复的解决方案成为了模式。 查看我的进度
Kubernetes模式书就是这种思路。
翻译自: https://www.javacodegeeks.com/2017/04/new-distributed-primitives-developers.html
运动基元