引言:不去重新发明轮子总是更好的。本文探讨了14个已经可用并能提供使微服务的开发和部署更容易的平台、框架和功能。本文还补充了每个工具将如何有助于建立良好的微服务架构的简要概述。
本文选自《Java微服务》。
在《Java微服务》一书中,我们使用 Spring Cloud,它提供使微服务非常容易地开发所需的所有工具和平台。Spring Cloud使用 Netflix开放源码软件( OSS)。让我们探讨 Netflix OSS——一个完整的软件包。
Netflix开放源码软件(OSS)
Netflix开放源码软件中心是基于 Java的微服务开放源码项目最流行和最广泛使用的开放源码软件。世界上最成功的视频租赁服务依赖于它。Netflix已经有超过 4000万用户,他们在全球各地使用其服务。Netflix是一个纯粹的基于云平台的解决方案,在微服务架构的基础上开发。可以说,每当有人谈到微服务时,Netflix都是进入你脑海的第一个名字。让我们讨论它提供的各种工具。在开发示例 OTRS应用程序时,我们已经讨论了其中的很多工具。然而,有几个工具我们还未探讨过。在这里,我们将只对每个工具进行概述,而不是详细讲解。这将给你带来微服务架构的实际特点和它在云平台中使用的总体思路。
构建——Nebula
Netflix Nebula是一种使你更容易使用 Gradle(类似Maven的构建工具)来生成微服务的 Gradle插件集合。对于我们的示例项目,由于我们已使用了 Maven,因此我们没有机会在本书中详细探讨 Nebula。然而,研究它会很有趣。对于开发人员来说,最重要的 Nebula功能是消除 Gradle生成文件中的许多样板代码,这使得开发人员能够把重点放在编码上面。
有一个很好的构建环境,尤其是 CI/CD(持续集成和持续部署)是微服务开发和与敏捷开发保持一致必备的。Netflix Nebula使你的构建过程更轻松、更高效。
部署和交付——Spinnaker与 Aminator
一旦你生成的软件已准备就绪,你会想要将此软件移动到亚马逊网络服务( Amazon Web Services,AWS)EC2中。Aminator使用亚马逊机器映像( Amazon Machine Image, AMI)的形式来创建生成的软件并将其打包成映像文件。 Spinnaker然后将这些 AMI部署到 AWS。
Spinnaker是高速并高效地发布代码更改的持续交付平台。 Spinnaker还支持其他云服务,例如 Google Computer Engine和 Cloud Foundry。
你想要将最新的微服务软件部署于类似 EC2的云环境中, Spinnaker和Aminator可以帮助你自动地完成这件事。
服务注册和发现——Eureka
正如我们已在本书中探讨的,Eureka提供了负责微服务注册和发现的服务。最重要的是,Eureka也用于中间层(承载不同的微服务的进程)负载均衡。 Netflix也使用 Eureka以及其他工具,像 Cassandra或 memcached,以提高其整体可用性。
服务注册和发现是微服务架构所必备的。Eureka的用途就是这个。请参阅《Java微服务》第 4章获取有关 Eureka的详细信息。
服务沟通——Ribbon
如果没有进程间或服务间的通信,微服务架构就没有用。功能区应用程序提供该功能。 Ribbon与 Eureka结合实现负载均衡,与 Hystrix结合实现容错或电路断路器操作。
除HTTP之外,Ribbon还支持 TCP和 UDP协议。它对这些协议同时提供了异步和反应式模型的支持,它还提供缓存和批处理的功能。
因为你的项目中将会有很多微服务,你需要一种使用进程间或服务间通信的方法来处理信息。Netflix公司为此提供了 Ribbon工具。
电路断路器——Hystrix
Hystrix工具用来执行电路断路器操作,也就是,容忍延迟和容错。因此,Hystrix会停止连锁故障。Hystrix执行实时的服务监控和属性更改操作,并支持并发。
电路断路器或容错,是用于任何项目,包括微服务的一个重要概念。一个微服务的故障不应停止你的整个系统;Netflix Hystrix的任务是防止这一点,并在出故障时,向用户提供有意义的信息。
边缘(代理)服务器——Zuul
Zuul是边缘服务器或代理服务器,它用来为外部应用程序如 UI客户端、Android/iOS应用程序或任何产品或服务提供的第三方使用者的 API发出的请求提供服务。从概念上讲,它是一扇面向外部应用程序的门。
Zuul允许动态路由和监控请求。它还执行安全操作,如身份验证。可以确定每个资源的身份验证要求,并拒绝任何不能满足这些要求的请求。
你需要为微服务提供边缘服务器或 API网关。Netflix Zuul提供此功能,请参阅《Java微服务》第 5章获取详细信息。
业务监控——Atlas
Atlas是一个业务监控工具,它提供了接近实时的高维时间序列数据的信息。它捕获业务智能,提供目前在系统内发生的情况的概况。它提供内存中的数据存储,这使它能非常快地收集和报告大量的指标。目前,它为 Netflix处理 13亿个指标。
Atlas是一个可扩展的工具。这就是为什么它从几年前处理 100万个指标到现在可以处理 13亿个指标的原因。 Atlas系统不仅提供了读取数据方面的可扩展性,还将它作为一部分集成到图形请求中。
Atlas使用 Netflix Spectato库记录高维时间序列数据。
一旦你在云环境中部署微服务,你就需要有一个监控系统来跟踪和监控所有微服务。Netflix Atlas为你做这份工作。
可靠性监控服务——Simian Army
在云环境中,没有单个的组件可以保证 100%正常运行时间。因此,成功的微服务架构要求,使整个系统在单个云组件出现故障的情况下可用。 Netflix公司开发了一个叫 Simian Army(猿猴军队)的工具,以避免系统故障。 Simian Army保证云环境的安全、可靠和高可用性。为了实现高可用性和安全性,它使用各种服务(猴子)在云中产生各类故障,检测异常情况并测试云在这些挑战下的生存能力。它使用取自 Netflix博客的以下服务(猴子):
混沌猴子( Chaos Monkey)
混沌猴子是一种服务,它确定系统组并随机终止某个组中的一个系统。这个服务以受控制的时间和时间间隔运作。混沌猴子只在营业时间运行,它希望工程师将收到警报并能够做出反应。
看守猴子( Janitor Monkey)
看守猴子是一种在 AWS云中运行的服务,它寻找可以清理的未使用的资源,它可以扩展用于其他云提供商和云资源。服务的时间表是可配置的。看守猴子通过对某个资源应用一组规则,确定它是否应当成为被清理的候选者。如果任何规则确定某资源是被清理的候选者,看守猴子就对此资源做标记,并安排时间去清理它。特殊情况下,当你想要把未使用的资源保留更长的时间,在看守猴子删除资源前,资源的所有者将在清理时间前几天收到通知,天数是可配置的。
符合猴子( Conformity Monkey)
符合猴子是一种在 AWS云中运行的服务,它寻找不符合最佳做法的预定义规则的实例。它可以扩展来用于其他云提供商和云资源。这个服务的时间表是可配置的。如果确定该实例不符合任何一条规则,猴子就向实例的所有者发送电子邮件通知。可能在有的例外情况下,对于某些应用程序要忽略关于符合特定规则的警告。
安全猴子( Security Monkey)
安全猴子监控策略的更改并对某个 AWS账户上没有安全感的配置进行提醒。安全猴子的主要目的是保证安全性,但它也是用于跟踪潜在问题的有用工具,因为它本质上是一个更改跟踪系统。
成功的微服务架构可以确保你的系统始终是运行的,并且单个云组件失败不会停止整个系统。Simian Army使用许多服务来实现高可用性。
AWS资源监控——Edda
在云环境中,没有什么是静态的。例如,虚拟宿主机实例经常发生变化,通常情况下, IP地址可以由各种应用程序重复使用,防火墙或相关的变化也可能发生。
Edda是跟踪这些动态的 AWS资源的服务。 Netflix将其命名为 Edda(即北欧神话故事),它记录云管理和部署的故事。Edda使用 AWS API轮询 AWS资源并记录结果。这些记录允许搜索和查看云已经随着时间的推移发生了哪些变化。例如,如果任何 API服务器的主机正在造成任何问题,你需要找出此主机是什么,哪支团队要为它负责。
它提供了这些功能:
- 动态查询:Edda提供 REST API,并且它支持矩阵参数并提供让你仅检索所需的数据的字段选择器。
- 历史的变化:Edda维护所有
AWS资源的历史记录。此信息可帮助你分析资源中断的原因和影响。Edda还可以提供有关资源的当前和历史信息的不同视图。在撰写本文时,它在MongoDB中存储信息。 - 配置:Edda支持多个配置选项。一般情况下,可以从多个账户和多个区域轮询信息,还可以使用账户的组合和这些账户指向的区域。同样的,它提供AWS、Crawler、 Elector和 MongoDB的不同配置。
- 如果采用 AWS来承载基于微服务的产品,那么 Edda可用于对 AWS资源进行监控。
主机性能监控——Vector
Vector是一个静态的 web应用程序,在 web浏览器内运行。它可以用来监控安装了 Performance Co-Pilot(PCP)的主机的性能。Vector支持 PCP 3.10及以上版本。PCP收集各种指标并提供给 Vector。
它根据需要提供高分辨率的正确指标。这可以帮助工程师了解系统的行为和正确地解决性能问题。
可帮助你监控远程主机的性能监控工具。
分布式配置管理——Archaius
Archaius是一个分布式的配置管理工具,它允许你执行以下操作:
- 使用动态和类型化的属性。
- 执行线程安全的配置操作。
- 使用轮询框架检查属性更改。
- 在有序的层次结构的配置中使用回调机制。
- 使用 JConsole检查属性并对其执行操作,因为 Archaius提供了JMX MBean。
- 当你有一个基于微服务的产品时,需要有一个良好的配置管理工具。Archaius可以帮助在一个分布式的环境中配置不同类型的属性。
Apache Mesos调度器——Fenzo
Fenzo是用 Java编写的用于 Apache Mesos框架的一个调度程序库。 Apache Mesos框架查找匹配的资源,并将其配到挂起的任务上。其主要特点如下:
- 支持长时间运行的服务风格的任务和批处理。
- 可以基于资源需求自动缩放执行主机集群。
- 支持插件,可以基于需求创建它们。
- 可以监控资源分配的故障,允许调试故障根源。
成本和云利用率——Ice
Ice从成本和使用的角度提供云资源的全景图。它提供调配云资源分配到不同团队的最新信息,为云计算资源的最优利用增加价值。
Ice是一个圣杯项目。用户与 Ice UI组件交互,后者显示通过 Ice阅读器组件发送的信息。阅读器从 Ice处理器组件所生成的数据中提取信息。 Ice处理器组件从详细的云计费文件中读取数据信息,并将它转换成 Ice阅读器组件可读的数据。
其他安全工具——Scumblr和 FIDO
除了Security Monkey,Netflix开放源码软件也使用 Scumblr和完全集成的防御操作(Fully Integrated Defense Operation,FIDO)工具。
为了跟踪你的微服务,并保护它不受经常的威胁和攻击,你需要以自动化的方式来对你的微服务进行保护和监控。Netflix Scumblr和FIDO为你做这份工作。
Scumblr
Scumblr是一个基于 Ruby on Rails的 web应用程序,它允许你执行定期搜索并对识别的结果执行存储/采取行动。基本上,它会利用全互联网有针对性的搜索来收集情报,从而揭露特定安全问题用于调查。
Scumblr利用可以流程化的宝贵信息,允许对不同类型的结果设置灵活的工作流。 Scumblr利用称为 Search Providers(搜索提供程序)的插件进行搜索,它会检查类似以下的异常。因为它是可扩展的,可以根据需要添加任意多的检查项目:
- 泄露的凭据
- 黑客漏洞/讨论
- 攻击讨论
- 社交媒体上的安全相关讨论
完全集成的防御操作( FIDO)
FIDO是一种安全业务流程框架,用于分析事件和自动化事件响应。它通过评价、评估和应对恶意软件来使事件的响应过程变得自动化。FIDO的主要目的是处理评估来自当今安全栈的威胁和它们所生成的大量警报所需要的大量手动工作。
作为业务流程平台,FIDO通过大幅减少检测、通知和应对网络攻击所需要的手动工作,可以更高效、更准确地使用现有的安全工具。
本文选自《Java微服务》,点此链接可在博文视点官网查看。
想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。