在New Relic,我们一直在寻找给我们的产品添加新的功能。亚博最新版直播为了做好这一点,我们通过一个标准化的过程来评估新工具和技术,以找到合适的工具和技术。
在这篇博文中,我们将探讨如何选择部署一个现有的应用程序框架来支持我们的新警报功能——而不是构建我们自己的框架。我们希望这篇文章能为我们如何选择使用什么工具提供一些见解,并对面临类似技术决策的人们有所帮助。
关于新遗迹的环境
像许多现代软件商店一样,New Relic采用了微服务架构通过将小型的可组合服务打包在可重用的容器中,并彼此独立部署。这些服务是围绕业务功能构建的,它们组合在一起表示单个应用程序。它们使用轻量级的通信机制,如HTTP,并提供范围明确的api。因为它们太多了,所以必须以自动化的方式部署它们,以减少整个应用程序的风险。尽管微服务体系结构使团队能够独立使用不同的语言,但我们的许多团队已经为他们的服务使用基于jvm的语言进行了标准化。
我们环境的一个关键方面是我们对集装箱化的依赖。每个服务都包装在一个容器中,在容器中隔离运行时环境,以便可以在最少的先决条件下将其部署到任何主机上。这一点很重要,因为每个团队都要对他们所编写的代码的审查、合并、构建和部署承担责任。集装箱化允许这些工程师控制从操作系统到应用程序如何打包和执行的所有事情,而只需要知道容器部署在哪里。同时,我们的站点工程团队不需要知道很多关于容器内的内容。
考虑到微服务和容器,我们正在寻找几个关键的框架特征:
- 易于构建应用程序
- 应用程序代码的自包含绑定
- 简单的应用程序执行
- 应用程序的可支持性
最后,还有人的考虑——我们寻找与我们的工程团队的技能和经验相匹配的工具和方法。
使用开源框架
在构建New Relic的警报我们的第一个决定是使用现有的web应用程序框架,还是基于支持微服务理念的组件创建我们自己的框架。
由于微服务的日益普及,当涉及到针对JVM的现有微服务框架时,选择比以往任何时候都多。这些包括:
我们的选择:弹簧靴
我们的团队选择了其中一个现有的框架Spring Boot,主要有两个原因:我们的工程师以前有过Spring框架我们认为它最符合我们的要求。具体来说,Spring Boot给了我们五个关键特征:
- 可扩展性:Spring Boot使用约定而不是配置,但是定制非常简单。(例如,我们在默认Tomcat容器上使用Jetty。)
- 减少摩擦:该框架处理模板配置和设置,如日志记录、配置、安全等。这有助于团队专注于业务逻辑,而不是管道。
- 实用主义:核心产品关注的是当前采用的集成技术,而不是预测未来几年可能出现的需求。它把最前沿的扩展留给了社区。
- 熟悉底层技术:Spring Boot构建在Spring框架和Java之上,这两者都是我们团队的强项。
- 支持:Spring Boot有一个活跃的开源开发者社区支持的关键改善和扩大该框架符合美国的既得利益。
Spring Boot也符合我们上述集装箱化的标准:
- 简单的构建:对于应用程序构建,它提供了一流的服务Gradle开箱即用构建支持。
- 独立的分布:它产生一个可执行的JAR文件包含所有依赖项,所以只需要部署一个可执行JAR。
- 简单的应用程序执行:可执行JAR不需要额外的命令或权限来运行。
- 可支持:为了提供支持,它提供了一个“致动器"公开环境/配置信息、运行状况、运行时状态和其他数据的HTTP端点。
的外卖
虽然对其他团队来说几乎肯定还有其他更重要的项目,但我所在的团队认为,这一组标准导致了我们满意的选择——并且支持我们运行时环境的现实。
当然,这种选择不是没有权衡的。但是我们在控制和灵活性上失去了什么,因为我们被绑定到Spring框架而不是其他的DI /国际奥委会在实施方面,我们在框架的策划方面获得了稳定和务实。