pmp 提升绩效的工具

微服务是目前一个热门词汇。 它是真的是原创的还是建立在最佳实践的基础上的? 微服务的实现方式存在一些缺点,但是可以解决吗?

组件可测试性和一致性

一旦组装了一个大型系统,就很难甚至不可能确定最大延迟来自何处。 您可以分析平均延迟吞吐量 ,但是要获得一致的延迟,您需要分析系统的关键部分。 在这里,具有独立运行的简单组件并可以作为独立组件进行测试,可以帮助您实现系统端到端需求的一致性。

UNIX哲学

微服务的许多关键概念已经在分布式系统中使用了很多年。

微服务与Unix哲学有很多共同点

引用Mike Gancarz总结的这些原则如下:

  • 小就是美丽。
  • 使每个程序做好一件事。
  • 尽快建立原型。
  • 选择便携性而不是效率。
  • 将数据存储在纯文本文件中。
  • 利用软件优势发挥自己的优势。
  • 使用Shell脚本可提高杠杆作用和可移植性。
  • 避免限制用户界面。
  • 使每个程序成为过滤器。

微服务体系结构是应用于分布式系统的UNIX哲学。 微服务架构的哲学从本质上等同于Unix的哲学“做一件事情,做好一件事情”。 描述如下:

  • 这些服务很小-细粒度执行单个功能。
  • 组织文化应包含自动化的部署和测试。 这减轻了管理和运营的负担。
  • 文化和设计原则应包含失败和错误,类似于抗脆弱系统。
  • 每个服务都是弹性的,有弹性的,可组合的,最少的和完整的。

使用微服务架构存在一些缺点 ,例如:

  • 服务构成信息障碍
  • 该架构引入了额外的复杂性和要处理的新问题,例如网络延迟, 消息格式负载平衡容错能力 忽略其中之一属于“分布式计算的谬误”。
  • 测试和部署更加复杂。
  • 整体应用程序的复杂性仅转移到网络中,但仍然存在。
  • 细粒度的微服务已被批评为一种反模式。

我们能否获得整体和微服务的最佳功能? 一定要一个或另一个吗? 我们是否应该使用最适合我们问题的方法。 微服务的关键方面之一是应用程序的受控部署。 在这种情况下,我们不应该能够在最有意义的地方将组件部署为Monolith或微服务。

提议的纳米服务替代方案包括;

  • 将功能打包为而不是服务。
  • 将功能与其他功能结合在一起,可以提供更实质,更有用的服务。
  • 重构系统,将功能置于其他服务中或重新设计系统。

我们如何才能做到两全其美?

确保您的组件是可组合的。

如果您的组件是可组合的,则它们始终是正确的大小。 您可以根据需要将它们组合为一组服务,也可以将所有内容组合为一项服务。

这对于测试和调试尤其重要。 您需要知道一组业务组件可以一起工作,而不会妨碍基础结构(例如中间件)。 为了进行单元测试,您可能希望在一个线程中运行所有组件,而一个则直接调用另一个。 这不会比测试整体组件的复杂程度更高,在该组件中,您可以将代码从一个组件逐步转移到另一个组件,并准确查看正在发生的事情。

仅当组件在没有基础结构的情况下可以正常正常工作时,才需要测试它们在基础结构下的行为。

使基础架构与应用程序需求一样快。

低延迟交易系统是分布式系统,但是它们也有非常严格的延迟要求。 大多数交易系统旨在以比您看到的更快的速度处理延迟。 在Java领域中,看到一个交易系统的延迟必须低于100微秒,这是99%的时间,甚至是99.9%的时间,这种情况并不罕见。 这可以通过使用高级语言(如Java)中的商品硬件来实现。

实现低延迟的关键是;

  • 用于消息传递和日志记录的低延迟基础结构。 对于短消息,理想情况下约为1微秒,
  • 最少的网络跳数
  • 实际生产负荷的高可复制性,因此您可以研究99%tile(最差1%)或99.9%tile(最差0.1%)的延迟,
  • 将每个CPU内核视为具有特定任务/服务,以及其自己的CPU缓存数据和代码。 重点是在内核之间(而不是计算机之间)分配应用程序。

L2缓存一致性总线是高性能服务之间的消息传递层。

pmp 提升绩效的工具_微服务提升绩效

您可以在两个不同内核之间对相同数据执行CAS操作。 在这里,每个线程在Sandy Bridge处理器上以小于50纳秒的往返时间切换另一个线程设置的值,而在新一代处理器上则更少。

Java中低延迟结构的示例包括:

  • Aeron –可靠的UDP传输,
  • 编年史队列 –用于消息传递和日志记录的持久队列。

这些传输在处理负载平衡和故障转移方面具有不同的优势。

使消息格式成为配置注意事项。

消息格式中存在许多相互竞争的问题。 你要;

  • 具有人类可读性,因此您可以验证消息不仅行为正确,而且可以按照您期望的方式进行。 通过转储存储文件或消息日志,我经常感到惊讶,发现了多少个问题。
  • 机器友好的二进制格式,可提高速度。
  • 未来架构更改方面的灵活性。 灵活性意味着增加冗余,以便该软件可以应对将来添加/删除字段并更改其数据类型的需求。 如果您不需要此冗余,那将是浪费。

理想情况下,您可以在测试/部署时选择最佳选项。

序列化库的一些示例,您可以在其中更改实际的线路格式以适合您的需求:

  • Jackson Speaming API –支持JSON,XML,CSV,CBOR(二进制格式),
  • 编年史线 –支持对象序列化YAML,多种不同形式的Binary YAML,JSON,CSV和Raw数据。

我发现在YAML和 JSON中有用的是更清晰的语法,该语法设计为易于阅读,而不是另一种语言的子集,它自然支持数据类型,注释,二进制内容和消息分隔符。

结论

我认为关于如何使用微服务有很多好的想法,而且我认为围绕微服务的许多批评都基于微服务的实现方式,并且我认为它们可以解决。

翻译自: https://www.javacodegeeks.com/2017/02/micro-services-performance-2.html

pmp 提升绩效的工具

相关文章:

  • 2021-10-01
  • 2021-08-19
  • 2022-12-23
  • 2021-08-28
  • 2021-12-17
  • 2021-12-30
  • 2021-11-19
  • 2022-12-23
猜你喜欢
  • 2021-09-02
  • 2022-12-23
  • 2021-04-28
  • 2021-06-12
  • 2021-07-28
  • 2021-05-07
  • 2021-10-19
相关资源
相似解决方案