认识微服务设计:您应该关心什么?
如果您想知道为什么微服务风格如此流行,您应该考虑一下最近的 IT 趋势。对敏捷和 DevOps 实践的需求导致了微服务的流行。如今,Uber、Airbnb、Netflix 等优秀企业都使用微服务来解决他们的业务问题。
解释微服务设计含义的最佳方法是将其与常见的整体应用程序进行比较。单片系统使用一个处理器来处理所有逻辑。同时,微服务包括一些独立的处理器。他们通常是:
用户界面
数据库
服务器
系统中的任何更改都会导致系统服务器部分的新版本的部署。让我们详细考虑一下这个概念。
微服务设计细节
微服务设计意味着一组服务,但定义很模糊。我可以挑出微服务器通常具有的 4 个功能:
语言和数据的分散控制。
负责特定业务需求。
使用自动部署。
端点的存在。
在下图中,您可以看到微服务设计与整体应用程序的比较。
微服务的可扩展性
微服务设计的主要好处之一是它的可扩展性。您可以扩展多项服务,而无需更改整个系统。因此,您可以节省资源并降低应用程序的复杂性。证明这一事实的最著名的案例之一就是Netflix的用户群。该公司必须应对不断增长的订户数据库。微服务设计是扩展它的一个很好的解决方案。
每个微服务都需要自己的数据库。否则,您将无法利用模块化模式的所有优势。数据库的多样性给报告过程带来了挑战。我们稍后再讨论这个问题。
微服务设计加快了应用程序的开发速度,使我们能够更早地推出产品。每个部分都可以单独推出,使得微服务的部署更加快捷、轻松。
微服务的优点
方便水平系统扩展的可能性。
提高了开发团队成员的生产力。
简化调试和维护流程。
能够在较小的团队中工作并使用敏捷方法。
持续集成和部署的灵活性。
微服务的缺点
尽管有所有这些优点,微服务架构也有其自身的缺点。我的意思是在分布式环境中运行许多系统并完成各种任务的必要性。因此,主要的微服务陷阱是:
微服务设计的复杂性使得开发人员的计划和行动更加谨慎。
微服务架构中的外部API通信导致更显着的攻击风险。
有时在开发和部署过程中很难在它们之间切换。
微服务系统中的报告
我们参与了一个传统的教育科技项目。该系统非常复杂,包含许多微服务。其主要部分是:
复杂的财务和计费系统。
大型集团实体的多组织结构。
用于业务流程的工作流管理工具。
集成批量电子邮件、短信和实时聊天。
用于调查、测验、考试的在线系统。
灵活的评估和学习管理系统。
FreshCode 在迁移到新界面的阶段致力于该项目。该产品正在为全球发布做准备。微服务系统应该处理大量数据。至于应用程序的目标受众,它的开发目的是:
管理着数百个校园的大型教育网络。
拥有多达 20 万所学校、学院和大学的政府。
同时,EdTech 应用程序设计对于大型教育网络和大约 100 名学生的小型学校都很方便。
因此,FreshCode开发团队面临着管理和提高复杂微服务架构性能的问题。值得一提的是,客户想要构建 SaaS 和自托管系统。我们选择技术解决方案时考虑到了这一事实。
提高微服务的性能
生成报告的过程需要参与不同的服务。因此,它导致了性能问题。这就是 Freshcode 团队决定通过创建单独的报告微服务来优化应用程序架构的原因。它从所有数据库接收数据。然后,它保存它们并转换为自定义报告。
下图中您可以看到报告微服务系统的方案及其实现技术。
黄色标记系统中的所有微服务。他们每个人都有自己的数据库。报告模块借助消息传递系统跟踪其中的所有更改。然后,它将新数据存储在自己的报告数据库中。
微服务实施的 6 个步骤
让我们看看报告系统的 6 个主要部分、可以使用的技术以及最佳解决方案。
变更数据捕获 (CDC)
CDC 跟踪每一个更改(插入、更新、删除)并对其执行一些逻辑。实施微服务报告系统的第一步有 3 种可能的工具。
1.阿帕奇NiFi
它允许创建简单的 CDC,根本不需要编码。Apache NiFi 有很多内置处理器,支持数据路由、转换和系统中介逻辑。
优点:
支持集群模式,轻松扩展。
内置 PutToKafka 和 PutToKinesis 活动。
在任何 JVM 语言上实现自定义活动。
用户友好的用户界面。
缺点:
活动之间的消息传递没有预定义的数据格式。
仅支持 JVM 语言。
默认活动的质量并不完美。
没有 Oracle CDC 活动。
2.StreamSets数据收集器
一种流行的开源解决方案,用于在微服务报告系统中持续摄取大数据。其主要优点是数据管道的创建简单以及对许多广泛技术的支持。
优点:
内置 AWS S3、Kinesis、Kafka、Oracle、Postgres 处理器。
开源软件可以根据您的需求进行调整。
简单方便的用户界面。
支持大多数流行的工具。
缺点:
这是一个仍在积极开发的新解决方案。
开始使用 StreamSets Data Collector 有点困难。
3.马蒂利恩
创新的 ELT 架构具有易于使用的界面。它专为 Amazon Redshift、Google BigQuery 和 Snowflake 构建。
优点:
专有工具。
开发团队的支持。
经过充分测试的解决方案。
缺点:
此工具只能使用几个数据库。
ELT 架构并不适合所有项目。
Oracle 是我们微服务报告系统的主要数据库。因此,我们选择 StreamSets Data Collector,因为 Oracle CDC 支持开箱即用。
消息系统
它允许在计算机系统之间发送消息,并为其设置发布标准。
1.Apache Kafka
最著名的实时分析工具之一。Apache Kafka 具有高吞吐量和可靠性的特点。
优点:
高吞吐量、容错性、耐用。
扩展性好,并发高。
批处理模式,流上的本机计算。
本地微服务报告系统的绝佳选择。
缺点:
需要 DevOps 知识才能正确设置。
没有内置监控工具。