构建微服务时,我们用到的库

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 本文讲的是构建微服务时,我们用到的库【编者的话】构建微服务时,究竟该不该使用库,又有那些代码适合写作库?这里是作者的一些经验之谈。
本文讲的是构建微服务时,我们用到的库【编者的话】构建微服务时,究竟该不该使用库,又有那些代码适合写作库?这里是作者的一些经验之谈。

正如其他通用的解决方案一样,微服务架构也有自己的优劣;有些东西因它变的更简单,同时另一些东西却变的更复杂。当转换到微服务的时候,最常见的挑战就是在哪里使用共享代码的问题。

起初,把常见代码转换成独立库的这种做法听起来很不错。原因很简单,一般我们要在两个文件中用到相同代码的时候,就会把这段代码写成一个函数,而写成库则是在更高层次上达到相同的作用,何乐而不为呢?

但是并非我们想象中那么简单。共享库会造成微服务之间的强依赖,因此应该事先考虑清楚这些为服务在整个服务群中所扮演的角色后再做决定。我在加入Runnable之后亲身经历过这类问题。

举个例子,假设你把域模型抽象进了一个库中,一旦对该模型进行修改,你必须同时更新所有使用这个库的服务。这包括更新代码,通过review,测试,staging等等。这样一来,微服务构架就变成了一个死板的整体。

那么,是不是说微服务就不能和库共存了呢?并不是。Philipp Hauer在 他的文章 中曾解释过一些关于微服务和共享库的特例。

在技术问题(technical concerns)上,使用库是okay的(比如,日志和监控),因为业务需求往往对这些问题没什么影响。
这一点很重要。微服务一般可以分为两类代码:
  1. 域特定代码(Domain specific code)。这类代码针对服务需要处理的问题。比如,所有的业务逻辑和域模型都是这类代码。
  2. 支持代码(Support code),也就是Philipp Hauer所提到的技术问题。就我自己的经验来说,微服务代码中很大一部分都属于支持代码,所以我们应当花点时间来考虑如何更好的组织这些代码。

在Runnable,我们用到了一些库。其中一些是内部开发的,一些则是第三方代码。这些库是我们建立新的微服务的基石。

下面列出一些与我们的一些库相关的技术问题:
  • 监控(monitor dog)——以标准化方式向Datadog报告数据;例如,在每个时间前加上服务名作为前缀。
  • 错误处理(error cat)——提供错误层级结构,该结构由所有服务继承并向Rollbar报告错误。
  • 配置(loadenv)——保证每个微服务都以同种方式加载环境变量。
  • worker服务器(ponos)——包含标准监控和错误报告的常规worker服务器。
  • Docker/Swarm 客户端(loki)——包含标准监控的Docker/Swarm客户端库。
  • 正确性检查(joi)——针对邮箱地址、日期等的正确性检查库。

结论

要正确辨别你的代码中是否需要用到库,这很重要。

这里有几个一般性的经验法则:
  • 如果这段代码中包含业务逻辑或者域特定代码——那这段代码就不应转换为库。
  • 如果这段代码会因新的需求频繁变动——那它也不适合作为库。
  • 如果这段代码会造成消费者间的耦合——它也不适合作为库。

如果以上问题都没有,那就放心去做吧!将一般性的代码转换成独立的库可以加快新服务的开发,因为这样你可以将精力集中在服务需要解决的特定问题上。另外,使用库函数还可以让所有模块的监控、错误处理、和管理配置变得标准一致。

原文链接:Libraries We Use When Building Microservices(翻译:马远征)

原文发布时间为:2016-09-30

本文作者:马远征

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:构建微服务时,我们用到的库

相关文章
|
2月前
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
118 2
|
2月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
145 5
|
1月前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
46 2
|
1月前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
2月前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
57 3
|
2月前
|
消息中间件 监控 安全
构建高效微服务架构:最佳实践与挑战
在现代软件开发中,微服务架构因其高度的可扩展性、灵活性和敏捷性而受到青睐。本文深入探讨了构建高效微服务架构的关键策略,包括服务的划分、通信机制、数据管理、部署与监控等方面的最佳实践。同时,文章也分析了在实施过程中可能遇到的挑战,如服务间的依赖管理、数据一致性问题、安全考量及性能优化等,并提出了相应的解决方案。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们在构建微服务系统时能够有效规避风险,提升系统的健壮性和用户体验。
|
2月前
|
监控 持续交付 数据库
构建高效的后端服务:微服务架构的深度解析
在现代软件开发中,微服务架构已成为提升系统可扩展性、灵活性和维护性的关键。本文深入探讨了微服务架构的核心概念、设计原则和最佳实践,通过案例分析展示了如何在实际项目中有效地实施微服务策略,以及面临的挑战和解决方案。文章旨在为开发者提供一套完整的指导框架,帮助他们构建出更加高效、稳定的后端服务。
|
2月前
|
机器学习/深度学习 运维 监控
动态服务管理平台:构建高效、灵活的微服务架构基石
动态服务管理平台:构建高效、灵活的微服务架构基石
62 0
|
2月前
|
监控 测试技术 持续交付
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
79 0
下一篇
开通oss服务